summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-11-19 04:25:46 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-11-19 04:25:46 +0000
commitb99b507be9cb290ff9fc2d6197af045964eb68a2 (patch)
tree4cacb127abbb64bce55fbf06f7184441691d851e /gtk2_ardour
parent2feede2e8ce393b8684638c526006dfb46ef4908 (diff)
add track/bus now allows specifying aux or direct bus role; processor box menus sort of kindof allow New Aux -> Aux Bus
git-svn-id: svn://localhost/ardour2/branches/3.0@6128 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/actions.cc1
-rw-r--r--gtk2_ardour/add_route_dialog.cc48
-rw-r--r--gtk2_ardour/add_route_dialog.h10
-rw-r--r--gtk2_ardour/ardour.menus.in24
-rw-r--r--gtk2_ardour/ardour_ui.cc7
-rw-r--r--gtk2_ardour/ardour_ui.h8
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc2
-rw-r--r--gtk2_ardour/processor_box.cc66
-rw-r--r--gtk2_ardour/processor_box.h3
9 files changed, 122 insertions, 47 deletions
diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc
index 1d70725163..f38a484b04 100644
--- a/gtk2_ardour/actions.cc
+++ b/gtk2_ardour/actions.cc
@@ -83,6 +83,7 @@ ActionManager::init ()
try {
ui_manager->add_ui_from_file (ui_file.to_string());
+ info << string_compose (_("Loading menus from %1"), ui_file.to_string()) << endmsg;
loaded = true;
} catch (Glib::MarkupError& err) {
error << string_compose (_("badly formatted UI definition file: %1"), err.what()) << endmsg;
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc
index 4c8c832044..42300f918b 100644
--- a/gtk2_ardour/add_route_dialog.cc
+++ b/gtk2_ardour/add_route_dialog.cc
@@ -52,12 +52,22 @@ static const char* track_mode_names[] = {
0
};
+static const char* bus_mode_names[] = {
+ N_("Aux"),
+ N_("Direct"),
+ 0
+};
+
+std::vector<std::string> AddRouteDialog::channel_combo_strings;
+std::vector<std::string> AddRouteDialog::track_mode_strings;
+std::vector<std::string> AddRouteDialog::bus_mode_strings;
+
AddRouteDialog::AddRouteDialog (Session & s)
: ArdourDialog (X_("add route dialog"))
, _session (s)
, routes_adjustment (1, 1, 128, 1, 4)
, routes_spinner (routes_adjustment)
- , track_mode_label (_("Track mode:"))
+ , mode_label (_("Track mode:"))
{
if (track_mode_strings.empty()) {
track_mode_strings = I18N (track_mode_names);
@@ -71,6 +81,10 @@ AddRouteDialog::AddRouteDialog (Session & s)
}
}
+ if (bus_mode_strings.empty()) {
+ bus_mode_strings = I18N (bus_mode_names);
+ }
+
set_name ("AddRouteDialog");
set_position (Gtk::WIN_POS_MOUSE);
set_modal (true);
@@ -82,14 +96,14 @@ AddRouteDialog::AddRouteDialog (Session & s)
name_template_entry.set_name (X_("AddRouteDialogNameTemplateEntry"));
routes_spinner.set_name (X_("AddRouteDialogSpinner"));
channel_combo.set_name (X_("ChannelCountSelector"));
- track_mode_combo.set_name (X_("ChannelCountSelector"));
+ mode_combo.set_name (X_("ChannelCountSelector"));
refill_channel_setups ();
refill_route_groups ();
- set_popdown_strings (track_mode_combo, track_mode_strings, true);
+ set_popdown_strings (mode_combo, track_mode_strings, true);
channel_combo.set_active_text (channel_combo_strings.front());
- track_mode_combo.set_active_text (track_mode_strings.front());
+ mode_combo.set_active_text (track_mode_strings.front());
track_bus_combo.append_text (_("tracks"));
track_bus_combo.append_text (_("busses"));
@@ -139,9 +153,9 @@ AddRouteDialog::AddRouteDialog (Session & s)
/* Track mode */
- track_mode_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
- table2->attach (track_mode_label, 1, 2, 1, 2, Gtk::FILL, Gtk::EXPAND, 0, 0);
- table2->attach (track_mode_combo, 2, 3, 1, 2, Gtk::FILL, Gtk::EXPAND & Gtk::FILL, 0, 0);
+ mode_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
+ table2->attach (mode_label, 1, 2, 1, 2, Gtk::FILL, Gtk::EXPAND, 0, 0);
+ table2->attach (mode_combo, 2, 3, 1, 2, Gtk::FILL, Gtk::EXPAND & Gtk::FILL, 0, 0);
}
@@ -180,8 +194,16 @@ AddRouteDialog::~AddRouteDialog ()
void
AddRouteDialog::track_type_chosen ()
{
- track_mode_label.set_sensitive (track ());
- track_mode_combo.set_sensitive (track ());
+ if (track()) {
+ mode_label.set_text (_("Track mode:"));
+ set_popdown_strings (mode_combo, track_mode_strings);
+ mode_combo.set_active_text (track_mode_strings.front());
+ } else {
+ mode_label.set_text (_("Bus type:"));
+ set_popdown_strings (mode_combo, bus_mode_strings);
+ mode_combo.set_active_text (bus_mode_strings.front());
+ }
+
}
bool
@@ -190,6 +212,12 @@ AddRouteDialog::track ()
return track_bus_combo.get_active_row_number () == 0;
}
+bool
+AddRouteDialog::aux ()
+{
+ return !track() && mode_combo.get_active_row_number () == 0;
+}
+
ARDOUR::DataType
AddRouteDialog::type ()
{
@@ -217,7 +245,7 @@ AddRouteDialog::mode ()
return ARDOUR::Normal;
}
- Glib::ustring str = track_mode_combo.get_active_text();
+ Glib::ustring str = mode_combo.get_active_text();
if (str == _("Normal")) {
return ARDOUR::Normal;
} else if (str == _("Non Layered")){
diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h
index 691a1c549d..7af8b47d8d 100644
--- a/gtk2_ardour/add_route_dialog.h
+++ b/gtk2_ardour/add_route_dialog.h
@@ -48,6 +48,7 @@ class AddRouteDialog : public ArdourDialog
bool track ();
int channels ();
int count ();
+ bool aux ();
std::string name_template ();
std::string track_template ();
@@ -63,8 +64,8 @@ class AddRouteDialog : public ArdourDialog
Gtk::Adjustment routes_adjustment;
Gtk::SpinButton routes_spinner;
Gtk::ComboBoxText channel_combo;
- Gtk::Label track_mode_label;
- Gtk::ComboBoxText track_mode_combo;
+ Gtk::Label mode_label;
+ Gtk::ComboBoxText mode_combo;
Gtk::ComboBoxText route_group_combo;
std::vector<ARDOUR::TemplateInfo> route_templates;
@@ -90,8 +91,9 @@ class AddRouteDialog : public ArdourDialog
typedef std::vector<ChannelSetup> ChannelSetups;
ChannelSetups channel_setups;
- std::vector<std::string> channel_combo_strings;
- std::vector<std::string> track_mode_strings;
+ static std::vector<std::string> channel_combo_strings;
+ static std::vector<std::string> track_mode_strings;
+ static std::vector<std::string> bus_mode_strings;
};
#endif /* __gtk_ardour_add_route_dialog_h__ */
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index bd2c4dda62..4efc3fac15 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -457,6 +457,7 @@
<menuitem action='newplugin'/>
<menuitem action='newinsert'/>
<menuitem action='newsend'/>
+ <menuitem action='newaux'/>
<menuitem action='newreturn'/>
<separator/>
<menuitem action='clear'/>
@@ -512,27 +513,4 @@
<separator/>
<menuitem action='addExternalAudioToRegionList'/>
</popup>
- <popup name='processormenu'>
- <menuitem action='newplugin'/>
- <menuitem action='newinsert'/>
- <menuitem action='newsend'/>
- <menuitem action='newreturn'/>
- <separator/>
- <menuitem action='clear'/>
- <separator/>
- <menuitem action='cut'/>
- <menuitem action='copy'/>
- <menuitem action='paste'/>
- <menuitem action='delete'/>
- <separator/>
- <menuitem action='rename'/>
- <separator/>
- <menuitem action='selectall'/>
- <menuitem action='deselectall'/>
- <separator/>
- <menuitem action='activate_all'/>
- <menuitem action='deactivate_all'/>
- <separator/>
- <menuitem action='edit'/>
- </popup>
</ui>
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index f7c28b49f1..c05e826ada 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -1295,7 +1295,7 @@ restart JACK with more ports."));
void
-ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, RouteGroup* route_group, uint32_t how_many)
+ARDOUR_UI::session_add_audio_route (bool track, bool aux, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, RouteGroup* route_group, uint32_t how_many)
{
list<boost::shared_ptr<AudioTrack> > tracks;
RouteList routes;
@@ -1320,7 +1320,7 @@ ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t
} else {
- routes = session->new_audio_route (input_channels, output_channels, route_group, how_many);
+ routes = session->new_audio_route (aux, input_channels, output_channels, route_group, how_many);
if (routes.size() != how_many) {
if (how_many == 1) {
@@ -2977,6 +2977,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
uint32_t output_chan;
string name_template = add_route_dialog->name_template ();
bool track = add_route_dialog->track ();
+ bool aux = !track && add_route_dialog->aux();
RouteGroup* route_group = add_route_dialog->route_group ();
AutoConnectOption oac = Config->get_output_auto_connect();
@@ -3002,7 +3003,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
if (track) {
session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), route_group, count);
} else {
- session_add_audio_bus (input_chan, output_chan, route_group, count);
+ session_add_audio_bus (aux, input_chan, output_chan, route_group, count);
}
}
}
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 4d8d057460..a05cca96bd 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -202,11 +202,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void add_route (Gtk::Window* float_window);
void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode, ARDOUR::RouteGroup* route_group, uint32_t how_many) {
- session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many);
+ session_add_audio_route (true, false, input_channels, output_channels, mode, route_group, how_many);
}
- void session_add_audio_bus (int input_channels, int32_t output_channels, ARDOUR::RouteGroup* route_group, uint32_t how_many) {
- session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many);
+ void session_add_audio_bus (bool aux, int input_channels, int32_t output_channels, ARDOUR::RouteGroup* route_group, uint32_t how_many) {
+ session_add_audio_route (false, aux, input_channels, output_channels, ARDOUR::Normal, route_group, how_many);
}
void session_add_midi_track (ARDOUR::RouteGroup* route_group, uint32_t how_many) {
@@ -528,7 +528,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void edit_metadata ();
void import_metadata ();
- void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, ARDOUR::RouteGroup *, uint32_t how_many);
+ void session_add_audio_route (bool disk, bool aux, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, ARDOUR::RouteGroup *, uint32_t how_many);
void session_add_midi_route (bool disk, ARDOUR::RouteGroup *, uint32_t how_many);
void set_transport_sensitivity (bool);
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index ee93919ece..63838f4f06 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -220,6 +220,7 @@ ARDOUR_UI::install_actions ()
ActionManager::register_toggle_action (common_actions, X_("ToggleKeyEditor"), _("Key Bindings"), mem_fun(*this, &ARDOUR_UI::toggle_key_editor));
ActionManager::register_toggle_action (common_actions, X_("ToggleBundleManager"), _("Bundle Manager"), mem_fun(*this, &ARDOUR_UI::toggle_bundle_manager));
+#if 0
act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("Add Audio Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal, (ARDOUR::RouteGroup *) 0, 1));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1, (ARDOUR::RouteGroup *) 0, 1));
@@ -228,6 +229,7 @@ ARDOUR_UI::install_actions ()
ActionManager::session_sensitive_actions.push_back (act);
//act = ActionManager::register_action (common_actions, X_("AddMidiBus"), _("Add Midi Bus"), mem_fun(*this, &ARDOUR_UI::session_add_midi_bus));
//ActionManager::session_sensitive_actions.push_back (act);
+#endif
act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::write_sensitive_actions.push_back (act);
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index 043395a0f1..e9d52016ec 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -289,6 +289,28 @@ ProcessorBox::build_send_action_menu ()
items.push_back (MenuElem (_("Show send controls"), mem_fun(*this, &ProcessorBox::show_send_controls)));
}
+Gtk::Menu*
+ProcessorBox::build_possible_aux_menu ()
+{
+ boost::shared_ptr<RouteList> rl = _session.get_routes_with_internal_returns();
+ if (rl->empty()) {
+ return 0;
+ }
+
+ using namespace Menu_Helpers;
+ Menu* menu = manage (new Menu);
+ MenuList& items = menu->items();
+
+
+ for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) {
+ if (!(*r)->internal_send_for (*r)) {
+ items.push_back (MenuElem ((*r)->name(), bind (sigc::ptr_fun (ProcessorBox::rb_choose_aux), boost::weak_ptr<Route>(*r))));
+ }
+ }
+
+ return menu;
+}
+
void
ProcessorBox::show_send_controls ()
{
@@ -312,6 +334,17 @@ ProcessorBox::show_processor_menu (gint arg)
plugin_menu_item->set_submenu (*_get_plugin_selector()->plugin_menu());
}
+ Gtk::MenuItem* aux_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/processormenu/newaux"));
+
+ if (aux_menu_item) {
+ Menu* m = build_possible_aux_menu();
+ if (m) {
+ aux_menu_item->set_submenu (*m);
+ } else {
+ /* XXX WHAT?*/
+ }
+ }
+
paste_action->set_sensitive (!_rr_selection.processors.empty());
processor_menu->popup (1, arg);
@@ -780,6 +813,22 @@ ProcessorBox::return_io_finished (IOSelector::Result r, boost::weak_ptr<Processo
}
void
+ProcessorBox::choose_aux (boost::weak_ptr<Route> wr)
+{
+ if (!_route) {
+ return;
+ }
+
+ boost::shared_ptr<Route> target = wr.lock();
+
+ if (!target) {
+ return;
+ }
+
+ _route->listen_via (target, PreFader, true, true);
+}
+
+void
ProcessorBox::redisplay_processors ()
{
ENSURE_GUI_THREAD (mem_fun(*this, &ProcessorBox::redisplay_processors));
@@ -1485,9 +1534,10 @@ ProcessorBox::register_actions ()
act = ActionManager::register_action (popup_act_grp, X_("newsend"), _("New Send ..."),
sigc::ptr_fun (ProcessorBox::rb_choose_send));
ActionManager::jack_sensitive_actions.push_back (act);
- act = ActionManager::register_action (popup_act_grp, X_("newreturn"), _("New Return ..."),
- sigc::ptr_fun (ProcessorBox::rb_choose_return));
- ActionManager::jack_sensitive_actions.push_back (act);
+
+ ActionManager::register_action (popup_act_grp, X_("newaux"), _("New Aux Send ..."));
+ ActionManager::register_action (popup_act_grp, X_("newreturn"), _("New Return ..."),
+ sigc::ptr_fun (ProcessorBox::rb_choose_return));
ActionManager::register_action (popup_act_grp, X_("clear"), _("Clear (all)"),
sigc::ptr_fun (ProcessorBox::rb_clear));
@@ -1575,6 +1625,16 @@ ProcessorBox::rb_choose_return ()
}
void
+ProcessorBox::rb_choose_aux (boost::weak_ptr<Route> wr)
+{
+ if (_current_processor_box == 0) {
+ return;
+ }
+
+ _current_processor_box->choose_aux (wr);
+}
+
+void
ProcessorBox::rb_clear ()
{
if (_current_processor_box == 0) {
diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h
index f175448377..cf56299524 100644
--- a/gtk2_ardour/processor_box.h
+++ b/gtk2_ardour/processor_box.h
@@ -148,7 +148,9 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
Gtk::Menu * build_processor_menu ();
void build_processor_tooltip (Gtk::EventBox&, std::string);
void show_processor_menu (gint arg);
+ Gtk::Menu* build_possible_aux_menu();
+ void choose_aux (boost::weak_ptr<ARDOUR::Route>);
void choose_send ();
void send_io_finished (IOSelector::Result, boost::weak_ptr<ARDOUR::Processor>, IOSelectorWindow*);
void choose_return ();
@@ -221,6 +223,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
static ProcessorBox* _current_processor_box;
+ static void rb_choose_aux (boost::weak_ptr<ARDOUR::Route>);
static void rb_choose_plugin ();
static void rb_choose_insert ();
static void rb_choose_send ();