X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fadd_route_dialog.cc;h=d3632114020f88d7211d656ae931c2a87084061e;hb=95a61717faa4b427be0e7821ee91f7df81065815;hp=4ae7e8110ae5dece0be0fe1151ad9667955478fb;hpb=62fc4621e576a9d6ffdc26ce97f2a6e2fb83fa92;p=ardour.git diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index 4ae7e8110a..d363211402 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -58,7 +58,7 @@ using namespace ARDOUR; using namespace ARDOUR_UI_UTILS; std::vector AddRouteDialog::channel_combo_strings; -std::vector AddRouteDialog::builtin_types; +std::vector > AddRouteDialog::builtin_types; AddRouteDialog::AddRouteDialog () : ArdourDialog (_("Add Track/Bus/VCA")) @@ -88,12 +88,100 @@ AddRouteDialog::AddRouteDialog () refill_track_modes (); if (builtin_types.empty()) { - builtin_types.push_back (_("Audio Tracks")); - builtin_types.push_back (_("MIDI Tracks")); - builtin_types.push_back (_("Audio+MIDI Tracks")); - builtin_types.push_back (_("Audio Busses")); - builtin_types.push_back (_("MIDI Busses")); - builtin_types.push_back (_("VCA Masters")); + builtin_types.push_back ( + std::pair(_("Audio Tracks"), _(" \ +Use the settings, below, to create 1 or more new Audio tracks.\n \ +\n\n \ +You may select:\n \ +* The number of tracks to add.\n \ +* A Name for the new track(s).\n \ +* Mono, Stereo, or Multichannel operation for the new track(s).\n \ +* A Group which the track will be assigned to.\n \ +* The Pin Connections mode. (see tooltip for details).\n \ +* Normal (non-destructive) or Tape (destructive) recording mode.\n \ +\n \ +The track will be added in the location specified by \"Position\".\n \ +") + )); + builtin_types.push_back ( + std::pair(_("MIDI Tracks"), _(" \ +Use the settings, below, to create 1 or more new MIDI tracks.\n \ +\n\n \ +You may select:\n \ +* The number of tracks to add.\n \ +* A Name for the track(s).\n \ +* An Instrument plugin (or select \"None\" to drive an external device)\n \ +* A Group which the track will be assigned to.\n \ +* The Pin Connections mode. (see tooltip for details)\n \ +\n \ +The track will be added in the location specified by \"Position\".\n \ +") + )); + builtin_types.push_back ( + std::pair(_("Audio+MIDI Tracks"), _(" \ +Use the settings, below, to create 1 or more new Audio+MIDI tracks.\n \ +\n\n \ +You may select:\n \ +* The number of tracks to add.\n \ +* A Name for the track(s).\n \ +* An Instrument plugin (or select \"None\" to drive an external device)\n \ +* A Group which will be assigned to the track(s).\n \ +* Pin Connections mode. (see tooltip for details).\n \ +* Normal (non-destructive) or Tape (destructive) recording mode.\n \ +\n \ +The track will be added in the location specified by \"Position\".\n \ +") + )); + builtin_types.push_back ( + std::pair(_("Audio Busses"), _(" \ +Use the settings, below, to create new Audio Busses.\n \ +\n\n \ +You may select:\n \ +* The number of busses to add.\n \ +* A Name for the busses.\n \ +* A Group which will be assigned to the Busses.\n \ +* Pin Connections mode. (see tooltip for details).\n \ +\n \ +The Busses will be added in the location specified by \"Position\".\n \ +") + )); + builtin_types.push_back ( + std::pair(_("MIDI Busses"), _(" \ +Use the settings, below, to create new MIDI Busses.\n \ +\n \ +MIDI Busses can combine the output of multiple tracks. \n \ +MIDI Busses are sometimes used to host a single \"heavy\" instrument plugin which is fed from multiple MIDI tracks. \ +\n\n \ +You may select:\n \ +* The number of busses to add.\n \ +* A Name for the busses.\n \ +* An Instrument plugin (or select \"None\" to drive an external device)\n \ +* A Group which will be assigned to the busses.\n \ +* Pin Connections mode. (see tooltip for details).\n \ +\n \ +The busses will be added in the location specified by \"Position\".\n \ +") + )); + builtin_types.push_back ( + std::pair(_("VCA Masters"), _(" \ +Use the settings, below, to create 1 or more VCA Master(s).\n \ +\n\n \ +You may select:\n \ +* The number of VCAs to add.\n \ +* A name for the new VCAs. \"%n\" will be replaced by an index number for each VCA.\n \ +") + )); + builtin_types.push_back ( + std::pair(_("Foldback Busses"), _(" \ +Use the settings, below, to create new Foldback Busses.\n \ +Foldback Busses are used as master outputs for monitor channels which are fed by\n \ +hidden monitor sends.\n \ +\n\n \ +You may select:\n \ +* The number of Foldback Busses to add.\n \ +* A name for the new Foldback Busses.\n \ +") + )); } insert_at_combo.append_text (_("First")); @@ -106,17 +194,17 @@ AddRouteDialog::AddRouteDialog () strict_io_combo.append_text (_("Strict-I/O")); strict_io_combo.set_active (Config->get_strict_io () ? 1 : 0); - //top-level VBox + /* top-level VBox */ VBox* vbox = manage (new VBox); get_vbox()->set_spacing (4); vbox->set_spacing (18); vbox->set_border_width (5); - //this box contains the template chooser, and the template details + /* this box contains the template chooser, and the template details */ HBox* template_hbox = manage (new HBox); template_hbox->set_spacing (8); - //scrollbars for the template chooser and template descriptions.... + /* scrollbars for the template chooser and template descriptions.... */ Gtk::ScrolledWindow *template_scroller = manage (new Gtk::ScrolledWindow()); template_scroller->set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); template_scroller->add (trk_template_chooser); @@ -125,10 +213,10 @@ AddRouteDialog::AddRouteDialog () desc_scroller->set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); desc_scroller->add (trk_template_desc); - //this is the outer frame that surrounds the description and the settings-table + /* this is the outer sample that surrounds the description and the settings-table */ trk_template_outer_frame.set_name (X_("TextHighlightFrame")); - //this is the "inner frame" that surrounds the description text + /* this is the "inner frame" that surrounds the description text */ trk_template_desc_frame.set_name (X_("TextHighlightFrame")); trk_template_desc_frame.add (*desc_scroller); @@ -137,7 +225,7 @@ AddRouteDialog::AddRouteDialog () trk_template_chooser.set_model (trk_template_model); trk_template_chooser.append_column (_("Template/Type"), track_template_columns.name); #ifdef MIXBUS - trk_template_chooser.append_column (_("Created With"), track_template_columns.created_with); + trk_template_chooser.append_column (_("Modified With"), track_template_columns.modified_with); #endif trk_template_chooser.set_headers_visible (true); trk_template_chooser.get_selection()->set_mode (SELECTION_SINGLE); @@ -171,7 +259,7 @@ AddRouteDialog::AddRouteDialog () vbox->pack_start (*template_hbox, true, true); - //Now pack the "settings table" with manual controls (these controls are sensitized by the left-side selection) + /* Now pack the "settings table" with manual controls (these controls are sensitized by the left-side selection) */ int n = 0; @@ -183,7 +271,7 @@ AddRouteDialog::AddRouteDialog () ++n; - // Number + /* Number */ add_label.set_alignment (Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER); settings_table->attach (add_label, 0, 1, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); Gtk::Alignment *align = manage (new Alignment (0, .5, 0, 0)); @@ -192,31 +280,31 @@ AddRouteDialog::AddRouteDialog () ++n; - // Name + /* Name */ name_label.set_alignment (Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER); settings_table->attach (name_label, 0, 1, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); settings_table->attach (name_template_entry, 1, 3, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); - // Route configuration + /* Route configuration */ configuration_label.set_alignment (Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER); settings_table->attach (configuration_label, 4, 5, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); settings_table->attach (channel_combo, 5, 6, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); ++n; - // instrument choice (for MIDI) + /* instrument choice (for MIDI) */ instrument_label.set_alignment (Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER); settings_table->attach (instrument_label, 0, 1, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); settings_table->attach (instrument_combo, 1, 3, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); - // Group choice + /* Group choice */ group_label.set_alignment (Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER); settings_table->attach (group_label, 4, 5, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); settings_table->attach (route_group_combo, 5, 6, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); ++n; - // New Route's I/O is.. {strict/flexible} + /* New Route's I/O is.. {strict/flexible} */ if (Profile->get_mixbus ()) { strict_io_combo.set_active (1); } else { @@ -227,7 +315,7 @@ AddRouteDialog::AddRouteDialog () ArdourWidgets::set_tooltip (strict_io_combo, _("With strict-i/o enabled, Effect Processors will not modify the number of channels on a track. The number of output channels will always match the number of input channels.")); - // recording mode + /* recording mode */ mode_label.set_alignment (Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER); settings_table->attach (mode_label, 4, 5, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); settings_table->attach (mode_combo, 5, 6, n, n + 1, Gtk::FILL, Gtk::SHRINK, 0, 0); @@ -238,12 +326,12 @@ AddRouteDialog::AddRouteDialog () HBox* outer_box = manage (new HBox); outer_box->set_spacing (4); - // New route will be inserted at.. + /* New route will be inserted at.. */ insert_label.set_alignment (Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER); outer_box->pack_start (insert_label, false, false); outer_box->pack_start (insert_at_combo, false, false); - //quick-add button (add item but don't close dialog) + /* quick-add button (add item but don't close dialog) */ Gtk::Button* addnoclose_button = manage (new Gtk::Button(_("Add selected items (and leave dialog open)"))); addnoclose_button->set_can_default (); addnoclose_button->signal_clicked ().connect (sigc::bind (sigc::mem_fun (*this, &Gtk::Dialog::response), Add)); @@ -343,6 +431,8 @@ AddRouteDialog::trk_template_row_selected () if ((it = rs.find ("name")) != rs.end()) { name_template_entry.set_text (it->second); + } else { + name_template_entry.set_text (""); } if ((it = rs.find ("how_many")) != rs.end()) { @@ -452,13 +542,13 @@ std::string AddRouteDialog::get_template_path () { string p; - + if (trk_template_chooser.get_selection()->count_selected_rows() > 0) { TreeIter iter = trk_template_chooser.get_selection()->get_selected(); if (iter) { string n = (*iter)[track_template_columns.name]; - if ( n != _("Manual Configuration") ) { + if (n != _("Manual Configuration")) { p = (*iter)[track_template_columns.path]; } } @@ -490,6 +580,8 @@ AddRouteDialog::type_wanted() return AudioTrack; } else if (str == _("VCA Masters")) { return VCAMaster; + } else if (str == _("Foldback Busses")) { + return FoldbackBus; } else { assert (0); return AudioTrack; @@ -517,6 +609,9 @@ AddRouteDialog::maybe_update_name_template_entry () case MidiBus: name_template_entry.set_text (_("Bus")); break; + case FoldbackBus: + name_template_entry.set_text (_("Foldback")); + break; case VCAMaster: name_template_entry.set_text (VCA::default_name_template()); break; @@ -530,26 +625,46 @@ AddRouteDialog::track_type_chosen () { switch (type_wanted()) { case AudioTrack: - mode_combo.set_sensitive (true); - channel_combo.set_sensitive (true); - instrument_combo.set_sensitive (false); + configuration_label.set_sensitive (true); + channel_combo.set_sensitive (true); + mode_label.set_sensitive (true); + mode_combo.set_sensitive (true); + instrument_label.set_sensitive (false); + instrument_combo.set_sensitive (false); + + group_label.set_sensitive (true); route_group_combo.set_sensitive (true); + + strict_io_label.set_sensitive (true); strict_io_combo.set_sensitive (true); + + insert_label.set_sensitive (true); insert_at_combo.set_sensitive (true); + break; case MidiTrack: - channel_combo.set_sensitive (false); - mode_combo.set_sensitive (false); - instrument_combo.set_sensitive (true); + configuration_label.set_sensitive (false); + channel_combo.set_sensitive (false); + mode_label.set_sensitive (false); + mode_combo.set_sensitive (false); + instrument_label.set_sensitive (true); + instrument_combo.set_sensitive (true); + + group_label.set_sensitive (true); route_group_combo.set_sensitive (true); + + strict_io_label.set_sensitive (true); strict_io_combo.set_sensitive (true); + + insert_label.set_sensitive (true); insert_at_combo.set_sensitive (true); + break; case MixedTrack: { @@ -559,47 +674,109 @@ AddRouteDialog::track_type_chosen () msg.set_position (WIN_POS_MOUSE); msg.run (); } - channel_combo.set_sensitive (true); - mode_combo.set_sensitive (true); - instrument_combo.set_sensitive (true); + configuration_label.set_sensitive (true); + channel_combo.set_sensitive (true); + mode_label.set_sensitive (true); + mode_combo.set_sensitive (true); + instrument_label.set_sensitive (true); + instrument_combo.set_sensitive (true); + + group_label.set_sensitive (true); route_group_combo.set_sensitive (true); + + strict_io_label.set_sensitive (true); strict_io_combo.set_sensitive (true); + + insert_label.set_sensitive (true); insert_at_combo.set_sensitive (true); + break; case AudioBus: - mode_combo.set_sensitive (false); - channel_combo.set_sensitive (true); - instrument_combo.set_sensitive (false); + configuration_label.set_sensitive (true); - mode_label.set_sensitive (true); + channel_combo.set_sensitive (true); + + mode_label.set_sensitive (false); + mode_combo.set_sensitive (false); + instrument_label.set_sensitive (false); + instrument_combo.set_sensitive (false); + + group_label.set_sensitive (true); route_group_combo.set_sensitive (true); + + strict_io_label.set_sensitive (true); strict_io_combo.set_sensitive (true); + + insert_label.set_sensitive (true); insert_at_combo.set_sensitive (true); + break; case VCAMaster: - mode_combo.set_sensitive (false); - channel_combo.set_sensitive (false); - instrument_combo.set_sensitive (false); + configuration_label.set_sensitive (false); + channel_combo.set_sensitive (false); + mode_label.set_sensitive (false); + mode_combo.set_sensitive (false); + instrument_label.set_sensitive (false); + instrument_combo.set_sensitive (false); + + group_label.set_sensitive (false); route_group_combo.set_sensitive (false); + + strict_io_label.set_sensitive (false); strict_io_combo.set_sensitive (false); + + insert_label.set_sensitive (false); insert_at_combo.set_sensitive (false); + break; case MidiBus: - mode_combo.set_sensitive (false); - channel_combo.set_sensitive (false); - instrument_combo.set_sensitive (true); + configuration_label.set_sensitive (false); - mode_label.set_sensitive (true); + channel_combo.set_sensitive (false); + + mode_label.set_sensitive (false); + mode_combo.set_sensitive (false); + instrument_label.set_sensitive (true); + instrument_combo.set_sensitive (true); + + group_label.set_sensitive (true); + route_group_combo.set_sensitive (true); + + strict_io_label.set_sensitive (true); strict_io_combo.set_sensitive (true); + + insert_label.set_sensitive (true); insert_at_combo.set_sensitive (true); + + break; + case FoldbackBus: + + configuration_label.set_sensitive (false); + channel_combo.set_sensitive (false); + + mode_label.set_sensitive (false); + mode_combo.set_sensitive (false); + + instrument_label.set_sensitive (false); + instrument_combo.set_sensitive (false); + + group_label.set_sensitive (false); + route_group_combo.set_sensitive (false); + + strict_io_label.set_sensitive (false); + strict_io_combo.set_sensitive (false); + + insert_label.set_sensitive (false); + insert_at_combo.set_sensitive (false); + break; } @@ -700,6 +877,12 @@ AddRouteDialog::channels () ret.set (DataType::AUDIO, channel_count ()); ret.set (DataType::MIDI, 1); break; + + case FoldbackBus: + ret.set (DataType::AUDIO, 2); + ret.set (DataType::MIDI, 0); + break; + default: break; } @@ -714,6 +897,7 @@ AddRouteDialog::on_show () reset_name_edited (); refill_route_groups (); + refill_channel_setups (); Dialog::on_show (); } @@ -777,12 +961,12 @@ AddRouteDialog::refill_channel_setups () trk_template_model->clear(); bool selected_default = false; - for (std::vector::const_iterator i = builtin_types.begin(); i != builtin_types.end(); ++i) { + for (std::vector >::const_iterator i = builtin_types.begin(); i != builtin_types.end(); ++i) { TreeModel::Row row = *(trk_template_model->append ()); - row[track_template_columns.name] = (*i); + row[track_template_columns.name] = (*i).first; row[track_template_columns.path] = ""; - row[track_template_columns.description] = _("Use the controls below"); - row[track_template_columns.created_with] = ""; + row[track_template_columns.description] = (*i).second; + row[track_template_columns.modified_with] = ""; if (!selected_default && !Profile->get_mixbus ()) { trk_template_chooser.get_selection()->select(row); @@ -797,8 +981,8 @@ AddRouteDialog::refill_channel_setups () continue; } TreeModel::Row row; - if ( (*s)->name == "Create Audio Tracks Interactively" && Profile->get_mixbus ()) { - // somewhat-special, Ben says: "most-used template" + if ((*s)->name == "Create Audio Tracks Interactively" && Profile->get_mixbus ()) { + /* somewhat-special, Ben says: "most-used template" */ row = *(trk_template_model->prepend ()); } else { row = *(trk_template_model->append ()); @@ -806,7 +990,7 @@ AddRouteDialog::refill_channel_setups () row[track_template_columns.name] = (*s)->name; row[track_template_columns.path] = "urn:ardour:" + (*s)->path; row[track_template_columns.description] = (*s)->description; - row[track_template_columns.created_with] = _("{Factory Template}"); + row[track_template_columns.modified_with] = _("{Factory Template}"); if ((*s)->name == "Create Audio Tracks Interactively" && Profile->get_mixbus ()) { trk_template_chooser.get_selection()->select(row); @@ -814,6 +998,11 @@ AddRouteDialog::refill_channel_setups () } } + if (!selected_default && !trk_template_model->children().empty()) { + TreeModel::Children rows = trk_template_model->children(); + trk_template_chooser.get_selection()->select(rows[0]); + } + std::vector route_templates; ARDOUR::find_route_templates (route_templates); @@ -823,7 +1012,7 @@ AddRouteDialog::refill_channel_setups () row[track_template_columns.name] = x->name; row[track_template_columns.path] = x->path; row[track_template_columns.description] = x->description; - row[track_template_columns.created_with] = x->created_with; + row[track_template_columns.modified_with] = x->modified_with; } set_popdown_strings (channel_combo, channel_combo_strings);