summaryrefslogtreecommitdiffstats
path: root/src/progs/ingenuity/WindowFactory.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-12-13 04:25:46 +0000
committerDavid Robillard <d@drobilla.net>2006-12-13 04:25:46 +0000
commitd80bbb83b77d3e1dcdc9bfd60f795c4c2cbb1ac9 (patch)
treec56fea6691161077a266a0a97cad21e2c1c36897 /src/progs/ingenuity/WindowFactory.cpp
parent443530680da9d6f909088ceb6a5c86178225b84f (diff)
downloadingen-d80bbb83b77d3e1dcdc9bfd60f795c4c2cbb1ac9.tar.gz
ingen-d80bbb83b77d3e1dcdc9bfd60f795c4c2cbb1ac9.tar.bz2
ingen-d80bbb83b77d3e1dcdc9bfd60f795c4c2cbb1ac9.zip
Repeated attaching/reattaching/etc/etc with Ingenuity.
Fixed behaviour on closing last window (quit). git-svn-id: http://svn.drobilla.net/lad/ingen@221 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/progs/ingenuity/WindowFactory.cpp')
-rw-r--r--src/progs/ingenuity/WindowFactory.cpp34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/progs/ingenuity/WindowFactory.cpp b/src/progs/ingenuity/WindowFactory.cpp
index 33d545ca..c9ec9040 100644
--- a/src/progs/ingenuity/WindowFactory.cpp
+++ b/src/progs/ingenuity/WindowFactory.cpp
@@ -61,6 +61,36 @@ WindowFactory::~WindowFactory()
}
+void
+WindowFactory::clear()
+{
+ for (PatchWindowMap::iterator i = _patch_windows.begin(); i != _patch_windows.end(); ++i)
+ delete i->second;
+
+ _patch_windows.clear();
+
+ for (ControlWindowMap::iterator i = _control_windows.begin(); i != _control_windows.end(); ++i)
+ delete i->second;
+
+ _control_windows.clear();
+}
+
+
+/** Returns the number of Patch windows currently visible.
+ */
+size_t
+WindowFactory::num_open_patch_windows()
+{
+ size_t ret = 0;
+ for (PatchWindowMap::iterator i = _patch_windows.begin(); i != _patch_windows.end(); ++i)
+ if (i->second->is_visible())
+ ++ret;
+
+ return ret;
+}
+
+
+
PatchWindow*
WindowFactory::patch_window(SharedPtr<PatchModel> patch)
{
@@ -145,7 +175,7 @@ WindowFactory::remove_patch_window(PatchWindow* win, GdkEventAny* ignored)
if (ret == Gtk::RESPONSE_CLOSE)
App::instance().quit();
else
- return false;
+ return true;
}
PatchWindowMap::iterator w = _patch_windows.find(win->patch()->path());
@@ -155,7 +185,7 @@ WindowFactory::remove_patch_window(PatchWindow* win, GdkEventAny* ignored)
delete win;
- return true;
+ return false;
}