summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_drag.cc2
-rw-r--r--gtk2_ardour/editor_group_tabs.cc6
-rw-r--r--gtk2_ardour/editor_group_tabs.h2
-rw-r--r--gtk2_ardour/editor_ops.cc3
-rw-r--r--gtk2_ardour/editor_routes.cc36
-rw-r--r--gtk2_ardour/editor_routes.h2
-rw-r--r--gtk2_ardour/editor_selection.cc8
-rw-r--r--gtk2_ardour/group_tabs.cc9
-rw-r--r--gtk2_ardour/group_tabs.h2
-rw-r--r--gtk2_ardour/mixer_group_tabs.cc6
-rw-r--r--gtk2_ardour/mixer_group_tabs.h2
-rw-r--r--gtk2_ardour/mixer_ui.cc63
-rw-r--r--gtk2_ardour/mixer_ui.h3
-rw-r--r--gtk2_ardour/port_group.cc2
-rw-r--r--gtk2_ardour/route_ui.cc42
15 files changed, 105 insertions, 83 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index ae3795f7fa..8ae618b37f 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -420,7 +420,7 @@ struct EditorOrderTimeAxisViewSorter {
RouteTimeAxisView* ra = dynamic_cast<RouteTimeAxisView*> (a);
RouteTimeAxisView* rb = dynamic_cast<RouteTimeAxisView*> (b);
assert (ra && rb);
- return ra->route()->order_key (N_ ("editor")) < rb->route()->order_key (N_ ("editor"));
+ return ra->route()->order_key (EditorSort) < rb->route()->order_key (EditorSort);
}
};
diff --git a/gtk2_ardour/editor_group_tabs.cc b/gtk2_ardour/editor_group_tabs.cc
index 352eec88cc..5a1e9c8aaa 100644
--- a/gtk2_ardour/editor_group_tabs.cc
+++ b/gtk2_ardour/editor_group_tabs.cc
@@ -177,10 +177,10 @@ EditorGroupTabs::default_properties () const
return plist;
}
-string
+RouteSortOrderKey
EditorGroupTabs::order_key () const
{
- return X_("editor");
+ return EditorSort;
}
RouteList
@@ -201,5 +201,5 @@ EditorGroupTabs::selected_routes () const
void
EditorGroupTabs::sync_order_keys ()
{
- _editor->_routes->sync_order_keys ("");
+ _editor->_routes->sync_order_keys (UndefinedSort);
}
diff --git a/gtk2_ardour/editor_group_tabs.h b/gtk2_ardour/editor_group_tabs.h
index e2ed6055aa..a0021e4833 100644
--- a/gtk2_ardour/editor_group_tabs.h
+++ b/gtk2_ardour/editor_group_tabs.h
@@ -37,7 +37,7 @@ private:
}
void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *);
PBD::PropertyList default_properties () const;
- std::string order_key () const;
+ ARDOUR::RouteSortOrderKey order_key () const;
ARDOUR::RouteList selected_routes () const;
void sync_order_keys ();
};
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 46a69ce6af..d891db6651 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -5411,8 +5411,7 @@ Editor::split_region ()
struct EditorOrderRouteSorter {
bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
- /* use of ">" forces the correct sort order */
- return a->order_key ("editor") < b->order_key ("editor");
+ return a->order_key (EditorSort) < b->order_key (EditorSort);
}
};
diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc
index c4443cbed0..3faeba183f 100644
--- a/gtk2_ardour/editor_routes.cc
+++ b/gtk2_ardour/editor_routes.cc
@@ -520,7 +520,14 @@ EditorRoutes::redisplay ()
/* this reorder is caused by user action, so reassign sort order keys
to tracks.
*/
- route->set_order_key (N_ ("editor"), order_key);
+
+ if (route->is_master()) {
+ route->set_order_key (EditorSort, Route::MasterBusRemoteControlID);
+ } else if (route->is_monitor()) {
+ route->set_order_key (EditorSort, Route::MonitorBusRemoteControlID);
+ } else {
+ route->set_order_key (EditorSort, order_key++);
+ }
}
bool visible = tv->marked_for_display ();
@@ -534,7 +541,6 @@ EditorRoutes::redisplay ()
}
n++;
- order_key++;
}
/* whenever we go idle, update the track view list to reflect the new order.
@@ -557,7 +563,7 @@ EditorRoutes::redisplay ()
}
if (!_redisplay_does_not_reset_order_keys && !_redisplay_does_not_sync_order_keys) {
- _session->sync_order_keys (N_ ("editor"));
+ _session->sync_order_keys (EditorSort);
}
}
@@ -569,7 +575,6 @@ EditorRoutes::route_deleted (Gtk::TreeModel::Path const &)
}
/* this could require an order reset & sync */
- _session->set_remote_control_ids();
_ignore_reorder = true;
redisplay ();
_ignore_reorder = false;
@@ -591,7 +596,6 @@ EditorRoutes::visible_changed (std::string const & path)
if (tv->set_marked_for_display (!visible)) {
_redisplay_does_not_reset_order_keys = true;
- _session->set_remote_control_ids();
update_visibility ();
redisplay ();
_redisplay_does_not_reset_order_keys = false;
@@ -649,15 +653,6 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes)
row[_columns.solo_safe_state] = (*x)->route()->solo_safe();
row[_columns.name_editable] = true;
- _ignore_reorder = true;
-
- /* added a new fresh one at the end */
- if ((*x)->route()->order_key (N_ ("editor")) == -1) {
- (*x)->route()->set_order_key (N_ ("editor"), _model->children().size()-1);
- }
-
- _ignore_reorder = false;
-
boost::weak_ptr<Route> wr ((*x)->route());
(*x)->route()->gui_changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::handle_gui_changes, this, _1, _2), gui_context());
@@ -833,13 +828,13 @@ EditorRoutes::reordered (TreeModel::Path const &, TreeModel::iterator const &, i
* route list so that the visual arrangement of routes matches the order keys from the routes.
*/
void
-EditorRoutes::sync_order_keys (string const & src)
+EditorRoutes::sync_order_keys (RouteSortOrderKey src)
{
map<int, int> new_order;
TreeModel::Children rows = _model->children();
TreeModel::Children::iterator ri;
- if (src == N_ ("editor") || !_session || (_session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) {
+ if (src == EditorSort || !_session || (_session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) {
return;
}
@@ -850,7 +845,7 @@ EditorRoutes::sync_order_keys (string const & src)
boost::shared_ptr<Route> route = (*ri)[_columns.route];
int const old_key = order;
- int const new_key = route->order_key (N_ ("editor"));
+ int const new_key = route->order_key (EditorSort);
new_order[new_key] = old_key;
@@ -1193,7 +1188,7 @@ EditorRoutes::selection_filter (Glib::RefPtr<TreeModel> const &, TreeModel::Path
struct EditorOrderRouteSorter {
bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
/* use of ">" forces the correct sort order */
- return a->order_key (N_ ("editor")) < b->order_key (N_ ("editor"));
+ return a->order_key (EditorSort) < b->order_key (EditorSort);
}
};
@@ -1247,7 +1242,6 @@ void
EditorRoutes::track_list_reorder (Gtk::TreeModel::Path const &, Gtk::TreeModel::iterator const &, int* /*new_order*/)
{
_redisplay_does_not_sync_order_keys = true;
- _session->set_remote_control_ids();
redisplay ();
_redisplay_does_not_sync_order_keys = false;
}
@@ -1370,7 +1364,7 @@ EditorRoutes::move_selected_tracks (bool up)
}
for (leading = view_routes.begin(); leading != view_routes.end(); ++leading) {
- neworder.push_back (leading->second->order_key (N_ ("editor")));
+ neworder.push_back (leading->second->order_key (EditorSort));
}
#ifndef NDEBUG
@@ -1381,7 +1375,7 @@ EditorRoutes::move_selected_tracks (bool up)
_model->reorder (neworder);
- _session->sync_order_keys (N_ ("editor"));
+ _session->sync_order_keys (EditorSort);
}
void
diff --git a/gtk2_ardour/editor_routes.h b/gtk2_ardour/editor_routes.h
index 5fad890faf..00631d914a 100644
--- a/gtk2_ardour/editor_routes.h
+++ b/gtk2_ardour/editor_routes.h
@@ -55,7 +55,7 @@ public:
std::list<TimeAxisView*> views () const;
void hide_all_tracks (bool);
void clear ();
- void sync_order_keys (std::string const &);
+ void sync_order_keys (ARDOUR::RouteSortOrderKey);
private:
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index eb9ea5c721..7b08eaeaa6 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -779,7 +779,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
RouteTimeAxisView* closest = 0;
int distance = INT_MAX;
- int key = rtv->route()->order_key ("editor");
+ int key = rtv->route()->order_key (EditorSort);
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
@@ -794,7 +794,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
if (result.second) {
/* newly added to already_in_selection */
- int d = artv->route()->order_key ("editor");
+ int d = artv->route()->order_key (EditorSort);
d -= key;
@@ -810,7 +810,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
/* now add all tracks between that one and this one */
- int okey = closest->route()->order_key ("editor");
+ int okey = closest->route()->order_key (EditorSort);
if (okey > key) {
swap (okey, key);
@@ -820,7 +820,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
RouteTimeAxisView* artv = dynamic_cast<RouteTimeAxisView*>(*x);
if (artv && artv != rtv) {
- int k = artv->route()->order_key ("editor");
+ int k = artv->route()->order_key (EditorSort);
if (k >= okey && k <= key) {
diff --git a/gtk2_ardour/group_tabs.cc b/gtk2_ardour/group_tabs.cc
index 9ce3b15046..d53b905846 100644
--- a/gtk2_ardour/group_tabs.cc
+++ b/gtk2_ardour/group_tabs.cc
@@ -435,24 +435,23 @@ GroupTabs::subgroup (RouteGroup* g, bool aux, Placement placement)
}
struct CollectSorter {
- CollectSorter (string const & key) : _key (key) {}
+ CollectSorter (RouteSortOrderKey key) : _key (key) {}
bool operator () (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
return a->order_key (_key) < b->order_key (_key);
}
- string _key;
+ RouteSortOrderKey _key;
};
struct OrderSorter {
- OrderSorter (string const & key) : _key (key) {}
+ OrderSorter (RouteSortOrderKey key) : _key (key) {}
bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
- /* use of ">" forces the correct sort order */
return a->order_key (_key) < b->order_key (_key);
}
- string _key;
+ RouteSortOrderKey _key;
};
/** Collect all members of a RouteGroup so that they are together in the Editor or Mixer.
diff --git a/gtk2_ardour/group_tabs.h b/gtk2_ardour/group_tabs.h
index d8c488c70f..fa6a7bac53 100644
--- a/gtk2_ardour/group_tabs.h
+++ b/gtk2_ardour/group_tabs.h
@@ -92,7 +92,7 @@ private:
virtual void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *) {}
virtual PBD::PropertyList default_properties () const = 0;
- virtual std::string order_key () const = 0;
+ virtual ARDOUR::RouteSortOrderKey order_key () const = 0;
virtual ARDOUR::RouteList selected_routes () const = 0;
virtual void sync_order_keys () = 0;
diff --git a/gtk2_ardour/mixer_group_tabs.cc b/gtk2_ardour/mixer_group_tabs.cc
index db586eed7e..60a625c96d 100644
--- a/gtk2_ardour/mixer_group_tabs.cc
+++ b/gtk2_ardour/mixer_group_tabs.cc
@@ -170,10 +170,10 @@ MixerGroupTabs::default_properties () const
return plist;
}
-string
+RouteSortOrderKey
MixerGroupTabs::order_key () const
{
- return X_("signal");
+ return MixerSort;
}
RouteList
@@ -192,5 +192,5 @@ MixerGroupTabs::selected_routes () const
void
MixerGroupTabs::sync_order_keys ()
{
- _mixer->sync_order_keys ("");
+ _mixer->sync_order_keys (UndefinedSort);
}
diff --git a/gtk2_ardour/mixer_group_tabs.h b/gtk2_ardour/mixer_group_tabs.h
index d8dd062280..0999dd9808 100644
--- a/gtk2_ardour/mixer_group_tabs.h
+++ b/gtk2_ardour/mixer_group_tabs.h
@@ -36,7 +36,7 @@ private:
}
PBD::PropertyList default_properties () const;
- std::string order_key () const;
+ ARDOUR::RouteSortOrderKey order_key () const;
ARDOUR::RouteList selected_routes () const;
void sync_order_keys ();
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 8dd83ad771..a29717211e 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -307,13 +307,11 @@ Mixer_UI::hide_window (GdkEventAny *ev)
void
Mixer_UI::add_strip (RouteList& routes)
{
- ENSURE_GUI_THREAD (*this, &Mixer_UI::add_strip, routes)
-
MixerStrip* strip;
no_track_list_redisplay = true;
strip_redisplay_does_not_sync_order_keys = true;
-
+
for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
boost::shared_ptr<Route> route = (*x);
@@ -360,10 +358,6 @@ Mixer_UI::add_strip (RouteList& routes)
row[track_columns.route] = route;
row[track_columns.strip] = strip;
- if (route->order_key (N_("signal")) == -1) {
- route->set_order_key (N_("signal"), track_model->children().size()-1);
- }
-
route->PropertyChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::strip_property_changed, this, _1, strip), gui_context());
strip->WidthChanged.connect (sigc::mem_fun(*this, &Mixer_UI::strip_width_changed));
@@ -406,12 +400,12 @@ Mixer_UI::remove_strip (MixerStrip* strip)
}
void
-Mixer_UI::sync_order_keys (string const & src)
+Mixer_UI::sync_order_keys (RouteSortOrderKey src)
{
TreeModel::Children rows = track_model->children();
TreeModel::Children::iterator ri;
- if (src == N_("signal") || !_session || (_session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) {
+ if (src == MixerSort || !_session || (_session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) {
return;
}
@@ -423,7 +417,7 @@ Mixer_UI::sync_order_keys (string const & src)
for (ri = rows.begin(); ri != rows.end(); ++ri, ++order) {
boost::shared_ptr<Route> route = (*ri)[track_columns.route];
unsigned int old_key = order;
- unsigned int new_key = route->order_key (N_("signal"));
+ unsigned int new_key = route->order_key (MixerSort);
keys[new_key] = old_key;
@@ -802,7 +796,6 @@ void
Mixer_UI::track_list_reorder (const TreeModel::Path&, const TreeModel::iterator&, int* /*new_order*/)
{
strip_redisplay_does_not_sync_order_keys = true;
- _session->set_remote_control_ids();
redisplay_track_list ();
strip_redisplay_does_not_sync_order_keys = false;
}
@@ -812,7 +805,6 @@ Mixer_UI::track_list_change (const Gtk::TreeModel::Path&, const Gtk::TreeModel::
{
// never reset order keys because of a property change
strip_redisplay_does_not_reset_order_keys = true;
- _session->set_remote_control_ids();
redisplay_track_list ();
strip_redisplay_does_not_reset_order_keys = false;
}
@@ -822,7 +814,6 @@ Mixer_UI::track_list_delete (const Gtk::TreeModel::Path&)
{
/* this could require an order sync */
if (_session && !_session->deletion_in_progress()) {
- _session->set_remote_control_ids();
redisplay_track_list ();
}
}
@@ -832,13 +823,15 @@ Mixer_UI::redisplay_track_list ()
{
TreeModel::Children rows = track_model->children();
TreeModel::Children::iterator i;
- long order;
-
+ long regular_order = 0;
+ long hidden_order = 999999; // arbitary high number
+
if (no_track_list_redisplay) {
return;
}
- for (order = 0, i = rows.begin(); i != rows.end(); ++i, ++order) {
+ for (i = rows.begin(); i != rows.end(); ++i) {
+
MixerStrip* strip = (*i)[track_columns.strip];
if (strip == 0) {
@@ -846,10 +839,6 @@ Mixer_UI::redisplay_track_list ()
continue;
}
- if (!strip_redisplay_does_not_reset_order_keys) {
- strip->route()->set_order_key (N_("signal"), order);
- }
-
bool const visible = (*i)[track_columns.visible];
if (visible) {
@@ -859,16 +848,41 @@ Mixer_UI::redisplay_track_list ()
if (strip->route()->is_master() || strip->route()->is_monitor()) {
out_packer.reorder_child (*strip, -1);
+
+ if (!strip_redisplay_does_not_reset_order_keys) {
+ if (strip->route()->is_master()) {
+ strip->route()->set_order_key (MixerSort, Route::MasterBusRemoteControlID);
+ } else {
+ strip->route()->set_order_key (MixerSort, Route::MonitorBusRemoteControlID);
+ }
+ }
+
} else {
strip_packer.reorder_child (*strip, -1); /* put at end */
+
+ if (!strip_redisplay_does_not_reset_order_keys) {
+ strip->route()->set_order_key (MixerSort, regular_order++);
+ }
+
}
} else {
if (strip->route()->is_master() || strip->route()->is_monitor()) {
out_packer.pack_start (*strip, false, false);
+ if (!strip_redisplay_does_not_reset_order_keys) {
+ if (strip->route()->is_master()) {
+ strip->route()->set_order_key (MixerSort, Route::MasterBusRemoteControlID);
+ } else {
+ strip->route()->set_order_key (MixerSort, Route::MonitorBusRemoteControlID);
+ }
+ }
} else {
strip_packer.pack_start (*strip, false, false);
+
+ if (!strip_redisplay_does_not_reset_order_keys) {
+ strip->route()->set_order_key (MixerSort, regular_order++);
+ }
}
strip->set_packed (true);
}
@@ -884,12 +898,16 @@ Mixer_UI::redisplay_track_list ()
strip_packer.remove (*strip);
strip->set_packed (false);
}
+
+ if (!strip_redisplay_does_not_reset_order_keys) {
+ strip->route()->set_order_key (MixerSort, hidden_order++);
+ }
}
}
}
if (!strip_redisplay_does_not_reset_order_keys && !strip_redisplay_does_not_sync_order_keys) {
- _session->sync_order_keys (N_("signal"));
+ _session->sync_order_keys (MixerSort);
}
_group_tabs->set_dirty ();
@@ -924,8 +942,7 @@ Mixer_UI::strip_width_changed ()
struct SignalOrderRouteSorter {
bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
- /* use of ">" forces the correct sort order */
- return a->order_key (N_("signal")) < b->order_key (N_("signal"));
+ return a->order_key (MixerSort) < b->order_key (MixerSort);
}
};
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index 08d7b6e487..f3d7845461 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -37,6 +37,7 @@
#include "pbd/signals.h"
#include "ardour/ardour.h"
+#include "ardour/types.h"
#include "ardour/session_handle.h"
#include "enums.h"
@@ -244,7 +245,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
Width _strip_width;
- void sync_order_keys (std::string const &);
+ void sync_order_keys (ARDOUR::RouteSortOrderKey);
bool strip_redisplay_does_not_reset_order_keys;
bool strip_redisplay_does_not_sync_order_keys;
bool ignore_sync;
diff --git a/gtk2_ardour/port_group.cc b/gtk2_ardour/port_group.cc
index 36b9ea1187..f313b2973f 100644
--- a/gtk2_ardour/port_group.cc
+++ b/gtk2_ardour/port_group.cc
@@ -312,7 +312,7 @@ struct RouteIOs {
class RouteIOsComparator {
public:
bool operator() (RouteIOs const & a, RouteIOs const & b) {
- return a.route->order_key (X_("editor")) < b.route->order_key (X_("editor"));
+ return a.route->order_key (EditorSort) < b.route->order_key (EditorSort);
}
};
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 0da6bde4f0..b6c81717a2 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -1716,27 +1716,39 @@ void
RouteUI::open_remote_control_id_dialog ()
{
ArdourDialog dialog (_("Remote Control ID"));
+ SpinButton* spin = 0;
- uint32_t const limit = _session->ntracks() + _session->nbusses () + 4;
+ dialog.get_vbox()->set_border_width (18);
- HBox* hbox = manage (new HBox);
- hbox->set_spacing (6);
- hbox->pack_start (*manage (new Label (_("Remote control ID:"))));
- SpinButton* spin = manage (new SpinButton);
- spin->set_digits (0);
- spin->set_increments (1, 10);
- spin->set_range (0, limit);
- spin->set_value (_route->remote_control_id());
- hbox->pack_start (*spin);
- dialog.get_vbox()->pack_start (*hbox);
-
- dialog.add_button (Stock::CANCEL, RESPONSE_CANCEL);
- dialog.add_button (Stock::APPLY, RESPONSE_ACCEPT);
+ if (Config->get_remote_model() == UserOrdered) {
+ uint32_t const limit = _session->ntracks() + _session->nbusses () + 4;
+
+ HBox* hbox = manage (new HBox);
+ hbox->set_spacing (6);
+ hbox->pack_start (*manage (new Label (_("Remote control ID:"))));
+ spin = manage (new SpinButton);
+ spin->set_digits (0);
+ spin->set_increments (1, 10);
+ spin->set_range (0, limit);
+ spin->set_value (_route->remote_control_id());
+ hbox->pack_start (*spin);
+ dialog.get_vbox()->pack_start (*hbox);
+
+ dialog.add_button (Stock::CANCEL, RESPONSE_CANCEL);
+ dialog.add_button (Stock::APPLY, RESPONSE_ACCEPT);
+ } else {
+ Label* l = manage (new Label());
+ l->set_markup (string_compose (_("Remote Control IDs are currently determined by track/bus ordering in %1\n\n\n"
+ "<span size=\"small\" style=\"italic\">Use the User Interaction tab of the Preferences window if you want to change this</span>"),
+ (Config->get_remote_model() == MixerOrdered ? _("the mixer") : ("the editor"))));
+ dialog.get_vbox()->pack_start (*l);
+ dialog.add_button (Stock::OK, RESPONSE_CANCEL);
+ }
dialog.show_all ();
int const r = dialog.run ();
- if (r == RESPONSE_ACCEPT) {
+ if (r == RESPONSE_ACCEPT && spin) {
_route->set_remote_control_id (spin->get_value_as_int ());
}
}