From f0bf3a0c190ced488d1520435df8234ef50971d6 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 20 Jun 2009 15:40:26 +0000 Subject: Allow edit group creation from the route UI's menu. Allow new tracks to be put in particular edit groups. git-svn-id: svn://localhost/ardour2/branches/3.0@5226 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/add_route_dialog.cc | 95 +++++++++++++++++++++++--------------- gtk2_ardour/add_route_dialog.h | 6 ++- gtk2_ardour/ardour_ui.cc | 19 ++++---- gtk2_ardour/ardour_ui.h | 16 +++---- gtk2_ardour/ardour_ui_ed.cc | 6 +-- gtk2_ardour/editor_audio_import.cc | 4 +- gtk2_ardour/editor_edit_groups.cc | 2 +- gtk2_ardour/mixer_ui.cc | 2 +- gtk2_ardour/route_group_dialog.cc | 42 +++++++++++++++++ gtk2_ardour/route_group_dialog.h | 22 +++++++++ gtk2_ardour/route_time_axis.cc | 24 +++++++++- gtk2_ardour/route_time_axis.h | 1 + gtk2_ardour/wscript | 1 + 13 files changed, 176 insertions(+), 64 deletions(-) create mode 100644 gtk2_ardour/route_group_dialog.cc create mode 100644 gtk2_ardour/route_group_dialog.h (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index 6b7b5edc97..c08120dd85 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -23,12 +23,14 @@ #include #include #include +#include #include "pbd/error.h" #include "pbd/convert.h" #include "gtkmm2ext/utils.h" #include "ardour/profile.h" #include "ardour/template_utils.h" +#include "ardour/route_group.h" #include "ardour/session.h" #include "utils.h" @@ -49,8 +51,9 @@ static const char* track_mode_names[] = { 0 }; -AddRouteDialog::AddRouteDialog () +AddRouteDialog::AddRouteDialog (Session & s) : Dialog (_("ardour: add track/bus")), + _session (s), track_button (_("Tracks")), bus_button (_("Busses")), routes_adjustment (1, 1, 128, 1, 4), @@ -77,65 +80,65 @@ AddRouteDialog::AddRouteDialog () track_button.set_name ("AddRouteDialogRadioButton"); bus_button.set_name ("AddRouteDialogRadioButton"); routes_spinner.set_name ("AddRouteDialogSpinner"); + + refill_channel_setups (); + set_popdown_strings (track_mode_combo, track_mode_strings, true); + + edit_group_combo.append_text (_("No group")); + _session.foreach_edit_group (mem_fun (*this, &AddRouteDialog::add_edit_group)); + channel_combo.set_active_text (channel_combo_strings.front()); + track_mode_combo.set_active_text (track_mode_strings.front()); + edit_group_combo.set_active (0); + RadioButton::Group g = track_button.get_group(); bus_button.set_group (g); track_button.set_active (true); - /* add */ + Table* table = manage (new Table (5, 2)); + table->set_spacings (4); - HBox* hbox1 = manage (new HBox); - hbox1->set_spacing (6); - Label* label1 = manage (new Label (_("Add this many:"))); - hbox1->pack_start (*label1, PACK_SHRINK); - hbox1->pack_start (routes_spinner, PACK_SHRINK); + /* add */ - HBox* hbox2 = manage (new HBox); - hbox2->set_spacing (6); - hbox2->set_border_width (6); - hbox2->pack_start (*hbox1, PACK_EXPAND_WIDGET); + Label* l = manage (new Label (_("Add this many:"))); + l->set_alignment (1, 0.5); + table->attach (*l, 0, 1, 0, 1); + table->attach (routes_spinner, 1, 2, 0, 1, FILL | EXPAND); /* track/bus choice & modes */ - HBox* hbox5 = manage (new HBox); - hbox5->set_spacing (6); - hbox5->pack_start (track_button, PACK_EXPAND_PADDING); - hbox5->pack_start (bus_button, PACK_EXPAND_PADDING); + HBox* hbox = manage (new HBox); + hbox->set_spacing (6); + hbox->pack_start (track_button, PACK_EXPAND_PADDING); + hbox->pack_start (bus_button, PACK_EXPAND_PADDING); + table->attach (*hbox, 0, 2, 1, 2); channel_combo.set_name (X_("ChannelCountSelector")); track_mode_combo.set_name (X_("ChannelCountSelector")); - refill_channel_setups (); - set_popdown_strings (track_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()); - track_button.signal_clicked().connect (mem_fun (*this, &AddRouteDialog::track_type_chosen)); bus_button.signal_clicked().connect (mem_fun (*this, &AddRouteDialog::track_type_chosen)); - - VBox* vbox1 = manage (new VBox); - vbox1->set_spacing (6); - vbox1->set_border_width (6); - - Frame* frame1 = manage (new Frame (_("Channel Configuration"))); - frame1->add (channel_combo); - Frame* frame2 = manage (new Frame (_("Track Mode"))); - frame2->add (track_mode_combo); - vbox1->pack_start (*hbox5, PACK_SHRINK); - vbox1->pack_start (*frame1, PACK_SHRINK); + l = manage (new Label (_("Channel configuration:"))); + l->set_alignment (1, 0.5); + table->attach (*l, 0, 1, 2, 3); + table->attach (channel_combo, 1, 2, 2, 3, FILL | EXPAND); - if (!ARDOUR::Profile->get_sae()) { - vbox1->pack_start (*frame2, PACK_SHRINK); + if (!ARDOUR::Profile->get_sae ()) { + l = manage (new Label (_("Track mode:"))); + l->set_alignment (1, 0.5); + table->attach (*l, 0, 1, 3, 4); + table->attach (track_mode_combo, 1, 2, 3, 4, FILL | EXPAND); } + + l = manage (new Label (_("Add to edit group:"))); + l->set_alignment (1, 0.5); + table->attach (*l, 0, 1, 4, 5); + table->attach (edit_group_combo, 1, 2, 4, 5, FILL | EXPAND); + get_vbox()->pack_start (*table); get_vbox()->set_spacing (6); get_vbox()->set_border_width (6); - - get_vbox()->pack_start (*hbox2, PACK_SHRINK); - get_vbox()->pack_start (*vbox1, PACK_SHRINK); - get_vbox()->show_all (); /* track template info will be managed whenever @@ -320,3 +323,19 @@ AddRouteDialog::refill_channel_setups () set_popdown_strings (channel_combo, channel_combo_strings, true); channel_combo.set_active_text (channel_combo_strings.front()); } + +void +AddRouteDialog::add_edit_group (RouteGroup* g) +{ + edit_group_combo.append_text (g->name ()); +} + +RouteGroup* +AddRouteDialog::edit_group () +{ + if (edit_group_combo.get_active_row_number () == 0) { + return 0; + } + + return _session.edit_group_by_name (edit_group_combo.get_active_text()); +} diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h index f99f4829e2..984f98735f 100644 --- a/gtk2_ardour/add_route_dialog.h +++ b/gtk2_ardour/add_route_dialog.h @@ -38,7 +38,7 @@ class AddRouteDialog : public Gtk::Dialog { public: - AddRouteDialog (); + AddRouteDialog (ARDOUR::Session &); ~AddRouteDialog (); bool track (); @@ -50,8 +50,10 @@ class AddRouteDialog : public Gtk::Dialog ARDOUR::DataType type(); ARDOUR::TrackMode mode(); + ARDOUR::RouteGroup* edit_group (); private: + ARDOUR::Session& _session; Gtk::Entry name_template_entry; Gtk::RadioButton track_button; Gtk::RadioButton bus_button; @@ -59,11 +61,13 @@ class AddRouteDialog : public Gtk::Dialog Gtk::SpinButton routes_spinner; Gtk::ComboBoxText channel_combo; Gtk::ComboBoxText track_mode_combo; + Gtk::ComboBoxText edit_group_combo; std::vector route_templates; void track_type_chosen (); void refill_channel_setups (); + void add_edit_group (ARDOUR::RouteGroup *); void reset_template_option_visibility (); diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 129d28f507..24e566eecb 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1242,7 +1242,7 @@ ARDOUR_UI::open_session () void -ARDOUR_UI::session_add_midi_route (bool disk, uint32_t how_many) +ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* edit_group, uint32_t how_many) { list > tracks; @@ -1254,7 +1254,7 @@ ARDOUR_UI::session_add_midi_route (bool disk, uint32_t how_many) try { if (disk) { - tracks = session->new_midi_track (ARDOUR::Normal, how_many); + tracks = session->new_midi_track (ARDOUR::Normal, edit_group, how_many); if (tracks.size() != how_many) { if (how_many == 1) { @@ -1282,7 +1282,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, uint32_t how_many) +ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, RouteGroup* edit_group, uint32_t how_many) { list > tracks; RouteList routes; @@ -1294,7 +1294,7 @@ ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t try { if (track) { - tracks = session->new_audio_track (input_channels, output_channels, mode, how_many); + tracks = session->new_audio_track (input_channels, output_channels, mode, edit_group, how_many); if (tracks.size() != how_many) { if (how_many == 1) { @@ -1307,7 +1307,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, how_many); + routes = session->new_audio_route (input_channels, output_channels, edit_group, how_many); if (routes.size() != how_many) { if (how_many == 1) { @@ -2764,7 +2764,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) } if (add_route_dialog == 0) { - add_route_dialog = new AddRouteDialog; + add_route_dialog = new AddRouteDialog (*session); if (float_window) { add_route_dialog->set_transient_for (*float_window); } @@ -2802,6 +2802,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 (); + RouteGroup* edit_group = add_route_dialog->edit_group (); AutoConnectOption oac = Config->get_output_auto_connect(); @@ -2815,7 +2816,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) if (add_route_dialog->type() == ARDOUR::DataType::MIDI) { if (track) { - session_add_midi_track(count); + session_add_midi_track(edit_group, count); } else { MessageDialog msg (*editor, _("Sorry, MIDI Busses are not supported at this time.")); @@ -2824,9 +2825,9 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) } } else { if (track) { - session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), count); + session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), edit_group, count); } else { - session_add_audio_bus (input_chan, output_chan, count); + session_add_audio_bus (input_chan, output_chan, edit_group, count); } } } diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index aae644dbec..343b940781 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -198,16 +198,16 @@ 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, uint32_t how_many) { - session_add_audio_route (true, input_channels, output_channels, mode, how_many); + void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode, ARDOUR::RouteGroup* edit_group, uint32_t how_many) { + session_add_audio_route (true, input_channels, output_channels, mode, edit_group, how_many); } - void session_add_audio_bus (int input_channels, int32_t output_channels, uint32_t how_many) { - session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, how_many); + void session_add_audio_bus (int input_channels, int32_t output_channels, ARDOUR::RouteGroup* edit_group, uint32_t how_many) { + session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, edit_group, how_many); } - void session_add_midi_track (uint32_t how_many) { - session_add_midi_route (true, how_many); + void session_add_midi_track (ARDOUR::RouteGroup* edit_group, uint32_t how_many) { + session_add_midi_route (true, edit_group, how_many); } /*void session_add_midi_bus () { @@ -524,8 +524,8 @@ 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, uint32_t how_many); - void session_add_midi_route (bool disk, uint32_t how_many); + 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_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 8d70f725f2..ac74f36391 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -215,11 +215,11 @@ ARDOUR_UI::install_actions () ActionManager::register_toggle_action (common_actions, X_("ToggleKeyEditor"), _("Keybindings"), 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)); - 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, 1)); + 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, 1)); + 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)); ActionManager::session_sensitive_actions.push_back (act); - act = ActionManager::register_action (common_actions, X_("AddMIDITrack"), _("Add MIDI Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_midi_track), 1)); + act = ActionManager::register_action (common_actions, X_("AddMIDITrack"), _("Add MIDI Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_midi_track), (ARDOUR::RouteGroup *) 0, 1)); 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); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 4301e1ac34..1c23fdf217 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -835,7 +835,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr region, uint32_t { if (!existing_track) { if (ar) { - list > at (session->new_audio_track (in_chans, out_chans, Normal, 1)); + list > at (session->new_audio_track (in_chans, out_chans, Normal, 0, 1)); if (at.empty()) { return -1; @@ -843,7 +843,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr region, uint32_t existing_track = at.front(); } else if (mr) { - list > mt (session->new_midi_track (Normal, 1)); + list > mt (session->new_midi_track (Normal, 0, 1)); if (mt.empty()) { return -1; diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc index 9dbdbfad38..d311295706 100644 --- a/gtk2_ardour/editor_edit_groups.cc +++ b/gtk2_ardour/editor_edit_groups.cc @@ -79,7 +79,7 @@ Editor::disable_all_edit_groups () void Editor::new_edit_group () { - session->add_edit_group (""); + session->add_edit_group (new RouteGroup (*session, "")); } void diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 9c9e76d5df..1f3cab2340 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -1125,7 +1125,7 @@ Mixer_UI::mix_groups_changed () void Mixer_UI::new_mix_group () { - session->add_mix_group (""); + session->add_mix_group (new RouteGroup (*session, "")); } void diff --git a/gtk2_ardour/route_group_dialog.cc b/gtk2_ardour/route_group_dialog.cc new file mode 100644 index 0000000000..0e1b549f97 --- /dev/null +++ b/gtk2_ardour/route_group_dialog.cc @@ -0,0 +1,42 @@ +#include +#include "ardour/route_group.h" +#include "route_group_dialog.h" +#include "i18n.h" + +using namespace Gtk; +using namespace ARDOUR; + +RouteGroupDialog::RouteGroupDialog (RouteGroup* g) + : Dialog (_("Route group")), + _group (g), + _active (_("Active")) +{ + _name.set_text (_group->name ()); + _active.set_active (_group->is_active ()); + + HBox* h = manage (new HBox); + h->pack_start (*manage (new Label (_("Name:")))); + h->pack_start (_name); + + get_vbox()->pack_start (*h); + get_vbox()->pack_start (_active); + + add_button (Stock::CANCEL, RESPONSE_CANCEL); + /* XXX: change this depending on context */ + add_button (Stock::OK, RESPONSE_OK); + + show_all (); +} + +int +RouteGroupDialog::do_run () +{ + int const r = run (); + + if (r == Gtk::RESPONSE_OK) { + _group->set_name (_name.get_text ()); + _group->set_active (_active.get_active (), this); + } + + return r; +} diff --git a/gtk2_ardour/route_group_dialog.h b/gtk2_ardour/route_group_dialog.h new file mode 100644 index 0000000000..279d4b90ae --- /dev/null +++ b/gtk2_ardour/route_group_dialog.h @@ -0,0 +1,22 @@ +#ifndef __gtk_ardour_route_group_dialog_h__ +#define __gtk_ardour_route_group_dialog_h__ + +#include +#include +#include + +class RouteGroupDialog : public Gtk::Dialog +{ +public: + RouteGroupDialog (ARDOUR::RouteGroup *); + + int do_run (); + +private: + ARDOUR::RouteGroup* _group; + Gtk::Entry _name; + Gtk::CheckButton _active; +}; + + +#endif diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 35c5ba6963..3a75ea5b19 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -75,6 +75,7 @@ #include "simplerect.h" #include "streamview.h" #include "utils.h" +#include "route_group_dialog.h" #include "ardour/track.h" @@ -320,13 +321,18 @@ RouteTimeAxisView::edit_click (GdkEventButton *ev) RadioMenuItem::Group group; items.clear (); + + items.push_back (MenuElem (_("New group..."), mem_fun (*this, &RouteTimeAxisView::set_edit_group_to_new))); + + items.push_back (SeparatorElem ()); + items.push_back (RadioMenuElem (group, _("No group"), bind (mem_fun(*this, &RouteTimeAxisView::set_edit_group_from_menu), (RouteGroup *) 0))); if (_route->edit_group() == 0) { static_cast(&items.back())->set_active (); } - + _session.foreach_edit_group (bind (mem_fun (*this, &RouteTimeAxisView::add_edit_group_menu_item), &group)); edit_group_menu.popup (ev->button, ev->time); @@ -2401,3 +2407,19 @@ RouteTimeAxisView::remove_underlay(StreamView* v) } } +void +RouteTimeAxisView::set_edit_group_to_new () +{ + RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active); + g->set_active (true, this); + + RouteGroupDialog d (g); + int const r = d.do_run (); + + if (r == Gtk::RESPONSE_OK) { + _session.add_edit_group (g); + _route->set_edit_group (g, this); + } else { + delete g; + } +} diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index cc0e46548e..7ed3b08efc 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -224,6 +224,7 @@ protected: void add_edit_group_menu_item (ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*); void set_edit_group_from_menu (ARDOUR::RouteGroup *); + void set_edit_group_to_new (); void reset_samples_per_unit (); diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index da2f2edadd..7c8cf241a5 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -189,6 +189,7 @@ def build(bld): region_view.cc return_ui.cc rhythm_ferret.cc + route_group_dialog.cc route_params_ui.cc route_processor_selection.cc route_time_axis.cc -- cgit v1.2.3