Factor route group menu out into its own class.
git-svn-id: svn://localhost/ardour2/branches/3.0@5292 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
1a5de76f7e
commit
7a4f1b9cf6
|
@ -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;
|
||||
if (ev->button == 1) {
|
||||
|
||||
switch (ev->button) {
|
||||
case 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
};
|
|
@ -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,45 +320,14 @@ 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)
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue