summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/mixer_strip.cc61
-rw-r--r--gtk2_ardour/mixer_strip.h10
-rw-r--r--gtk2_ardour/route_group_menu.cc71
-rw-r--r--gtk2_ardour/route_group_menu.h21
-rw-r--r--gtk2_ardour/route_time_axis.cc57
-rw-r--r--gtk2_ardour/route_time_axis.h6
-rw-r--r--gtk2_ardour/wscript1
7 files changed, 112 insertions, 115 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 646d55ff6b..00c7503efa 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -58,7 +58,7 @@
#include "io_selector.h"
#include "utils.h"
#include "gui_thread.h"
-#include "route_group_dialog.h"
+#include "route_group_menu.h"
#include "i18n.h"
@@ -1060,50 +1060,19 @@ MixerStrip::set_route_group (RouteGroup *rg)
_route->set_route_group (rg, this);
}
-void
-MixerStrip::add_route_group_to_menu (RouteGroup *rg, RadioMenuItem::Group* group)
-{
- using namespace Menu_Helpers;
-
- MenuList& items = group_menu->items();
-
- items.push_back (RadioMenuElem (*group, rg->name(), bind (mem_fun(*this, &MixerStrip::set_route_group), rg)));
-
- if (_route->route_group() == rg) {
- static_cast<RadioMenuItem*>(&items.back())->set_active ();
- }
-}
-
bool
MixerStrip::select_route_group (GdkEventButton *ev)
{
using namespace Menu_Helpers;
- if (group_menu == 0) {
- group_menu = new Menu;
- }
- group_menu->set_name ("ArdourContextMenu");
- MenuList& items = group_menu->items();
- RadioMenuItem::Group group;
-
- switch (ev->button) {
- case 1:
+ if (ev->button == 1) {
- items.clear ();
-
- items.push_back (MenuElem (_("New group..."), mem_fun (*this, &MixerStrip::set_route_group_to_new)));
-
- items.push_back (SeparatorElem ());
-
- items.push_back (RadioMenuElem (group, _("No group"), bind (mem_fun(*this, &MixerStrip::set_route_group), (RouteGroup *) 0)));
-
- _session.foreach_route_group (bind (mem_fun (*this, &MixerStrip::add_route_group_to_menu), &group));
+ if (group_menu == 0) {
+ group_menu = new RouteGroupMenu (_session);
+ group_menu->GroupSelected.connect (mem_fun (*this, &MixerStrip::set_route_group));
+ }
group_menu->popup (1, ev->time);
- break;
-
- default:
- break;
}
return true;
@@ -1516,21 +1485,3 @@ MixerStrip::set_button_names ()
}
}
-
-void
-MixerStrip::set_route_group_to_new ()
-{
- RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active);
- g->set_active (true, this);
-
- RouteGroupDialog d (g, Gtk::Stock::NEW);
- int const r = d.do_run ();
-
- if (r == Gtk::RESPONSE_OK) {
- _session.add_route_group (g);
- _route->set_route_group (g, this);
- } else {
- delete g;
- }
-}
-
diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h
index 46cc572200..30557b115e 100644
--- a/gtk2_ardour/mixer_strip.h
+++ b/gtk2_ardour/mixer_strip.h
@@ -53,9 +53,6 @@
#include "processor_box.h"
#include "ardour_dialog.h"
-class MotionController;
-
-
namespace Gtkmm2ext {
class SliderController;
}
@@ -76,6 +73,8 @@ namespace Gtk {
class Mixer_UI;
class IOSelectorWindow;
+class MotionController;
+class RouteGroupMenu;
class MixerStrip : public RouteUI, public Gtk::EventBox
{
@@ -176,7 +175,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
Gtk::Button group_button;
Gtk::Label group_label;
- Gtk::Menu *group_menu;
+ RouteGroupMenu *group_menu;
gint input_press (GdkEventButton *);
gint output_press (GdkEventButton *);
@@ -226,7 +225,6 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
bool ignore_comment_edit;
void set_route_group (ARDOUR::RouteGroup *);
- void add_route_group_to_menu (ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*);
bool select_route_group (GdkEventButton *);
void route_group_changed (void *);
@@ -256,8 +254,6 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
boost::shared_ptr<ARDOUR::Delivery> _current_delivery;
void revert_to_default_display ();
- void set_route_group_to_new ();
-
static int scrollbar_height;
};
diff --git a/gtk2_ardour/route_group_menu.cc b/gtk2_ardour/route_group_menu.cc
new file mode 100644
index 0000000000..e42cdedfac
--- /dev/null
+++ b/gtk2_ardour/route_group_menu.cc
@@ -0,0 +1,71 @@
+#include <gtkmm/menu.h>
+#include <gtkmm/stock.h>
+#include "ardour/session.h"
+#include "ardour/route_group.h"
+#include "route_group_menu.h"
+#include "route_group_dialog.h"
+#include "i18n.h"
+
+using namespace Gtk;
+using namespace ARDOUR;
+
+RouteGroupMenu::RouteGroupMenu (Session& s)
+ : _session (s)
+{
+ rebuild (0);
+}
+
+void
+RouteGroupMenu::rebuild (RouteGroup* curr)
+{
+ using namespace Menu_Helpers;
+
+ items().clear ();
+
+ items().push_back (MenuElem (_("New group..."), mem_fun (*this, &RouteGroupMenu::new_group)));
+ items().push_back (SeparatorElem ());
+
+ RadioMenuItem::Group group;
+ items().push_back (RadioMenuElem (group, _("No group"), bind (mem_fun (*this, &RouteGroupMenu::set_group), (RouteGroup *) 0)));
+
+ if (curr == 0) {
+ static_cast<RadioMenuItem*> (&items().back())->set_active ();
+ }
+
+ _session.foreach_route_group (bind (mem_fun (*this, &RouteGroupMenu::add_item), curr, &group));
+}
+
+void
+RouteGroupMenu::add_item (RouteGroup* rg, RouteGroup* curr, RadioMenuItem::Group* group)
+{
+ using namespace Menu_Helpers;
+
+ items().push_back (RadioMenuElem (*group, rg->name(), bind (mem_fun(*this, &RouteGroupMenu::set_group), rg)));
+
+ if (rg == curr) {
+ static_cast<RadioMenuItem*> (&items().back())->set_active ();
+ }
+}
+
+void
+RouteGroupMenu::set_group (RouteGroup* g)
+{
+ GroupSelected (g);
+}
+
+
+void
+RouteGroupMenu::new_group ()
+{
+ RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active);
+
+ RouteGroupDialog d (g, Gtk::Stock::NEW);
+ int const r = d.do_run ();
+
+ if (r == Gtk::RESPONSE_OK) {
+ _session.add_route_group (g);
+ set_group (g);
+ } else {
+ delete g;
+ }
+}
diff --git a/gtk2_ardour/route_group_menu.h b/gtk2_ardour/route_group_menu.h
new file mode 100644
index 0000000000..09a31e60ed
--- /dev/null
+++ b/gtk2_ardour/route_group_menu.h
@@ -0,0 +1,21 @@
+namespace ARDOUR {
+ class Session;
+ class RouteGroup;
+}
+
+class RouteGroupMenu : public Gtk::Menu
+{
+public:
+ RouteGroupMenu (ARDOUR::Session &);
+
+ void rebuild (ARDOUR::RouteGroup *);
+
+ sigc::signal<void, ARDOUR::RouteGroup*> GroupSelected;
+
+private:
+ void add_item (ARDOUR::RouteGroup *, ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*);
+ void new_group ();
+ void set_group (ARDOUR::RouteGroup *);
+
+ ARDOUR::Session& _session;
+};
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index a31c84dba3..f0a0857030 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -75,7 +75,7 @@
#include "simplerect.h"
#include "streamview.h"
#include "utils.h"
-#include "route_group_dialog.h"
+#include "route_group_menu.h"
#include "ardour/track.h"
@@ -253,6 +253,9 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
_editor.ZoomChanged.connect (mem_fun(*this, &RouteTimeAxisView::reset_samples_per_unit));
ColorsChanged.connect (mem_fun (*this, &RouteTimeAxisView::color_handler));
+ route_group_menu = new RouteGroupMenu (_session);
+ route_group_menu->GroupSelected.connect (mem_fun (*this, &RouteTimeAxisView::set_route_group_from_menu));
+
gm.get_gain_slider().signal_scroll_event().connect(mem_fun(*this, &RouteTimeAxisView::controls_ebox_scroll), false);
gm.get_gain_slider().set_name ("TrackGainFader");
}
@@ -279,6 +282,8 @@ RouteTimeAxisView::~RouteTimeAxisView ()
}
_automation_tracks.clear ();
+
+ delete route_group_menu;
}
void
@@ -315,46 +320,15 @@ RouteTimeAxisView::edit_click (GdkEventButton *ev)
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
_route->set_route_group (0, this);
return FALSE;
- }
-
- using namespace Menu_Helpers;
-
- MenuList& items = route_group_menu.items ();
- RadioMenuItem::Group group;
-
- items.clear ();
-
- items.push_back (MenuElem (_("New group..."), mem_fun (*this, &RouteTimeAxisView::set_route_group_to_new)));
-
- items.push_back (SeparatorElem ());
-
- items.push_back (RadioMenuElem (group, _("No group"),
- bind (mem_fun(*this, &RouteTimeAxisView::set_route_group_from_menu), (RouteGroup *) 0)));
-
- if (_route->route_group() == 0) {
- static_cast<RadioMenuItem*>(&items.back())->set_active ();
}
- _session.foreach_route_group (bind (mem_fun (*this, &RouteTimeAxisView::add_route_group_menu_item), &group));
- route_group_menu.popup (ev->button, ev->time);
+ route_group_menu->rebuild (_route->route_group ());
+ route_group_menu->popup (ev->button, ev->time);
return FALSE;
}
void
-RouteTimeAxisView::add_route_group_menu_item (RouteGroup *eg, RadioMenuItem::Group* group)
-{
- using namespace Menu_Helpers;
-
- MenuList &items = route_group_menu.items();
-
- items.push_back (RadioMenuElem (*group, eg->name(), bind (mem_fun(*this, &RouteTimeAxisView::set_route_group_from_menu), eg)));
- if (_route->route_group() == eg) {
- static_cast<RadioMenuItem*>(&items.back())->set_active ();
- }
-}
-
-void
RouteTimeAxisView::set_route_group_from_menu (RouteGroup *eg)
{
_route->set_route_group (eg, this);
@@ -2422,18 +2396,3 @@ RouteTimeAxisView::set_button_names ()
mute_button_label.set_text (_("m"));
}
-void
-RouteTimeAxisView::set_route_group_to_new ()
-{
- RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active);
-
- RouteGroupDialog d (g, Gtk::Stock::NEW);
- int const r = d.do_run ();
-
- if (r == Gtk::RESPONSE_OK) {
- _session.add_route_group (g);
- _route->set_route_group (g, this);
- } else {
- delete g;
- }
-}
diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h
index 34896e4639..45e961c69e 100644
--- a/gtk2_ardour/route_time_axis.h
+++ b/gtk2_ardour/route_time_axis.h
@@ -45,7 +45,6 @@
#include "canvas.h"
#include "gain_meter.h"
-
namespace ARDOUR {
class Session;
class Region;
@@ -67,6 +66,7 @@ class AutomationTimeAxisView;
class AutomationLine;
class ProcessorAutomationLine;
class TimeSelection;
+class RouteGroupMenu;
class RouteTimeAxisView : public RouteUI, public TimeAxisView
{
@@ -223,9 +223,7 @@ protected:
virtual void label_view ();
- void add_route_group_menu_item (ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*);
void set_route_group_from_menu (ARDOUR::RouteGroup *);
- void set_route_group_to_new ();
void reset_samples_per_unit ();
@@ -281,7 +279,7 @@ protected:
Gtk::Menu subplugin_menu;
Gtk::Menu* automation_action_menu;
- Gtk::Menu route_group_menu;
+ RouteGroupMenu* route_group_menu;
Gtk::RadioMenuItem* align_existing_item;
Gtk::RadioMenuItem* align_capture_item;
Gtk::RadioMenuItem* normal_track_mode_item;
diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript
index 9c27e92f6c..accc7cdd72 100644
--- a/gtk2_ardour/wscript
+++ b/gtk2_ardour/wscript
@@ -192,6 +192,7 @@ def build(bld):
return_ui.cc
rhythm_ferret.cc
route_group_dialog.cc
+ route_group_menu.cc
route_params_ui.cc
route_processor_selection.cc
route_time_axis.cc