remove RouteGroupDialog::do_run() and replace its use with code that doesn't rely...
authorPaul Davis <paul@linuxaudiosystems.com>
Sun, 12 Jun 2016 18:33:18 +0000 (14:33 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Sun, 12 Jun 2016 18:54:01 +0000 (14:54 -0400)
gtk2_ardour/add_route_dialog.cc
gtk2_ardour/add_route_dialog.h
gtk2_ardour/group_tabs.cc
gtk2_ardour/route_group_dialog.cc
gtk2_ardour/route_group_dialog.h
gtk2_ardour/route_group_menu.cc
gtk2_ardour/route_group_menu.h

index aecff1c84526d32cb084a5cc6bdb773d27a0d546..5619e97b8d8a9988fbaa934deb9f686596b138c7 100644 (file)
@@ -30,6 +30,7 @@
 #include "pbd/convert.h"
 
 #include "gtkmm2ext/utils.h"
+#include "gtkmm2ext/doi.h"
 
 #include "ardour/plugin_manager.h"
 #include "ardour/profile.h"
@@ -585,19 +586,34 @@ AddRouteDialog::group_changed ()
 {
        if (_session && route_group_combo.get_active_text () == _("New Group...")) {
                RouteGroup* g = new RouteGroup (*_session, "");
-               RouteGroupDialog d (g, true);
-
-               if (d.do_run ()) {
-                       delete g;
-                       route_group_combo.set_active (2);
-               } else {
-                       if (_session) {
-                               _session->add_route_group (g);
-                       }
-                       add_route_group (g);
-                       route_group_combo.set_active (3);
+               RouteGroupDialog* d = new RouteGroupDialog (g, true);
+
+               d->signal_response().connect (sigc::bind (sigc::mem_fun (*this, &AddRouteDialog::new_group_dialog_finished), d));
+               d->present();
+       }
+}
+
+void
+AddRouteDialog::new_group_dialog_finished (int r, RouteGroupDialog* d)
+{
+       if (r == RESPONSE_OK) {
+
+               if (!d->name_check()) {
+                       return;
+               }
+
+               if (_session) {
+                       _session->add_route_group (d->group());
                }
+
+               add_route_group (d->group());
+               route_group_combo.set_active (3);
+       } else {
+               delete d->group ();
+               route_group_combo.set_active (2);
        }
+
+       delete_when_idle (d);
 }
 
 AddRouteDialog::InsertAt
index f10fc11292cd45d07d76304f2d571fa1e432a456..685622029516d3c8e6763f1e8f89509d5613c9a8 100644 (file)
@@ -42,6 +42,7 @@
 #include "instrument_selector.h"
 
 class Editor;
+class RouteGroupDialog;
 
 class AddRouteDialog : public ArdourDialog
 {
@@ -107,7 +108,7 @@ class AddRouteDialog : public ArdourDialog
        void maybe_update_name_template_entry ();
 
        void reset_template_option_visibility ();
-
+       void new_group_dialog_finished (int, RouteGroupDialog*);
        void on_show ();
 
        struct ChannelSetup {
index 057f55163660753f652a46ff98f131cd7d16505c..cf2a6050894187b30721c30e6befe049bd744237 100644 (file)
@@ -603,6 +603,10 @@ GroupTabs::new_group_dialog_finished (int r, RouteGroupDialog* d, RouteList cons
 {
        if (r == RESPONSE_OK) {
 
+               if (!d->name_check()) {
+                       return;
+               }
+
                _session->add_route_group (d->group());
 
                if (rl) {
index 51db0adcb1056760b1eb71c44d7aaa9993c7dc3e..b1a75794ce00328d98f7be8f0f4e6c53ff54459b 100644 (file)
@@ -126,12 +126,12 @@ RouteGroupDialog::RouteGroupDialog (RouteGroup* g, bool creating_new)
        _active.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
        _color.signal_color_set().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
        _gain.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
-       _relative.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
-       _mute.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
-       _solo.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
-       _rec_enable.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
-       _select.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
-       _route_active.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
+       _relative.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
+       _mute.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
+       _solo.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
+       _rec_enable.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
+       _select.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
+       _route_active.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
        _share_color.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
        _share_monitoring.signal_toggled().connect (sigc::mem_fun (*this, &RouteGroupDialog::update));
 
@@ -178,35 +178,27 @@ RouteGroupDialog::RouteGroupDialog (RouteGroup* g, bool creating_new)
        show_all_children ();
 }
 
-/** @return true if the route group edit was cancelled, otherwise false */
 bool
-RouteGroupDialog::do_run ()
+RouteGroupDialog::name_check () const
 {
-       while (1) {
-               int const r = run ();
+       if (unique_name (_name.get_text())) {
+               /* not cancelled and the name is ok, so all is well */
+               return true;
+       }
 
-               if (r != Gtk::RESPONSE_OK) {
-                       return true;
-               }
+       _group->set_name (_initial_name);
 
-               if (unique_name (_name.get_text())) {
-                       /* not cancelled and the name is ok, so all is well */
-                       return false;
-               }
+       MessageDialog msg (
+               _("The group name is not unique. Please use a different name."),
+               false,
+               Gtk::MESSAGE_ERROR,
+               Gtk::BUTTONS_OK,
+               true
+               );
 
-               _group->set_name (_initial_name);
-               MessageDialog msg (
-                       _("The group name is not unique. Please use a different name."),
-                       false,
-                       Gtk::MESSAGE_ERROR,
-                       Gtk::BUTTONS_OK,
-                       true
-                       );
-
-               msg.run ();
-       }
+       msg.set_position (WIN_POS_MOUSE);
+       msg.run ();
 
-       abort(); /* NOTREACHED */
        return false;
 }
 
index e43ccba79fde156dd6e9728fda8d68a4b5dbfc7c..5489cd2653a9dc78747cb0f9221b79f7d54aabec 100644 (file)
@@ -32,8 +32,8 @@ class RouteGroupDialog : public ArdourDialog
 public:
        RouteGroupDialog (ARDOUR::RouteGroup *, bool);
 
-       bool do_run ();
        ARDOUR::RouteGroup* group() const { return _group; }
+       bool name_check () const;
 
 private:
        ARDOUR::RouteGroup* _group;
index f4c7611ae76ff6fc31407746086aaf07bf9a7235..4793588cee2842e476b908d069fa40978572a492 100644 (file)
 
 #include <gtkmm/menu.h>
 #include <gtkmm/stock.h>
+
 #include "gtkmm2ext/utils.h"
+#include "gtkmm2ext/doi.h"
+
 #include "ardour/session.h"
 #include "ardour/route_group.h"
 #include "ardour/route.h"
 #include "route_group_menu.h"
 #include "route_group_dialog.h"
+
 #include "i18n.h"
 
 using namespace Gtk;
@@ -158,14 +162,22 @@ RouteGroupMenu::new_group ()
        }
 
        RouteGroup* g = new RouteGroup (*_session, "");
-       RouteGroupDialog d (g, true);
+       RouteGroupDialog* d = new RouteGroupDialog (g, true);
+
+       d->signal_response().connect (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::new_group_dialog_finished), d));
+}
 
-       if (d.do_run ()) {
-               delete g;
+void
+RouteGroupMenu::new_group_dialog_finished (int r, RouteGroupDialog* d)
+{
+       if (r == RESPONSE_OK) {
+               _session->add_route_group (d->group());
+               set_group (d->group());
        } else {
-               _session->add_route_group (g);
-               set_group (g);
+               delete d->group ();
        }
+
+       delete_when_idle (d);
 }
 
 Gtk::Menu *
index 5d711ff66f4c911ff5e4949b77d927cbfa2727d9..51f222af2f3e3ee032b55f4be52469bf430b0517 100644 (file)
@@ -23,6 +23,8 @@
 #include "ardour/route_group.h"
 #include "ardour/session_handle.h"
 
+class RouteGroupDialog;
+
 class RouteGroupMenu : public ARDOUR::SessionHandlePtr
 {
 public:
@@ -37,8 +39,9 @@ public:
        void add_item (ARDOUR::RouteGroup *, std::set<ARDOUR::RouteGroup*> const &, Gtk::RadioMenuItem::Group*);
        void new_group ();
        void set_group (ARDOUR::RouteGroup *);
-
+       void new_group_dialog_finished (int, RouteGroupDialog*);
        Gtk::Menu* _menu;
+
        PBD::PropertyList* _default_properties;
        bool _inhibit_group_selected;
        ARDOUR::WeakRouteList _subject;