#include "pbd/convert.h"
#include "gtkmm2ext/utils.h"
+#include "gtkmm2ext/doi.h"
#include "ardour/plugin_manager.h"
#include "ardour/profile.h"
{
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
#include "instrument_selector.h"
class Editor;
+class RouteGroupDialog;
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 {
{
if (r == RESPONSE_OK) {
+ if (!d->name_check()) {
+ return;
+ }
+
_session->add_route_group (d->group());
if (rl) {
_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));
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;
}
public:
RouteGroupDialog (ARDOUR::RouteGroup *, bool);
- bool do_run ();
ARDOUR::RouteGroup* group() const { return _group; }
+ bool name_check () const;
private:
ARDOUR::RouteGroup* _group;
#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;
}
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 *
#include "ardour/route_group.h"
#include "ardour/session_handle.h"
+class RouteGroupDialog;
+
class RouteGroupMenu : public ARDOUR::SessionHandlePtr
{
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;