+void
+AddRouteDialog::on_response (int r)
+{
+ reset_name_edited ();
+ /* Don't call ArdourDialog::on_response() because that will
+ automatically hide the dialog.
+ */
+ Gtk::Dialog::on_response (r);
+}
+
+void
+AddRouteDialog::trk_template_row_selected ()
+{
+ if (trk_template_chooser.get_selection()->count_selected_rows() != 1) {
+ return;
+ }
+
+ TreeIter iter = trk_template_chooser.get_selection ()->get_selected ();
+ assert (iter);
+
+ string d = (*iter)[track_template_columns.description];
+ trk_template_desc.get_buffer ()->set_text (d);
+
+ const string n = (*iter)[track_template_columns.name];
+ const string p = (*iter)[track_template_columns.path];
+
+ if (p.substr (0, 11) == "urn:ardour:") {
+ /* lua script - meta-template */
+ const std::map<std::string, std::string> rs (ARDOUR_UI::instance()->route_setup_info (p.substr (11)));
+
+ trk_template_desc.set_sensitive (true);
+
+ add_label.set_sensitive (rs.find ("how_many") != rs.end ());
+ name_label.set_sensitive (rs.find ("name") != rs.end());
+ group_label.set_sensitive (rs.find ("group") != rs.end());
+ configuration_label.set_sensitive (rs.find ("channels") != rs.end ());
+ mode_label.set_sensitive (rs.find ("track_mode") != rs.end ());
+ instrument_label.set_sensitive (rs.find ("instrument") != rs.end ());
+ strict_io_label.set_sensitive (rs.find ("strict_io") != rs.end());
+
+ routes_spinner.set_sensitive (rs.find ("how_many") != rs.end ());
+ name_template_entry.set_sensitive (rs.find ("name") != rs.end ());
+ route_group_combo.set_sensitive (rs.find ("group") != rs.end());
+ channel_combo.set_sensitive (rs.find ("channels") != rs.end ());
+ mode_combo.set_sensitive (rs.find ("track_mode") != rs.end ());
+ instrument_combo.set_sensitive (rs.find ("instrument") != rs.end ());
+ strict_io_combo.set_sensitive (rs.find ("strict_io") != rs.end());
+
+ bool any_enabled = rs.find ("how_many") != rs.end ()
+ || rs.find ("name") != rs.end ()
+ || rs.find ("group") != rs.end()
+ || rs.find ("channels") != rs.end ()
+ || rs.find ("track_mode") != rs.end ()
+ || rs.find ("instrument") != rs.end ()
+ || rs.find ("strict_io") != rs.end();
+
+ manual_label.set_sensitive (any_enabled);
+
+ std::map<string,string>::const_iterator it;
+
+ 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()) {
+ if (atoi (it->second.c_str()) > 0) {
+ routes_adjustment.set_value (atoi (it->second.c_str()));
+ }
+ }
+
+ if ((it = rs.find ("track_mode")) != rs.end()) {
+ switch ((ARDOUR::TrackMode) atoi (it->second.c_str())) {
+ case ARDOUR::Normal:
+ mode_combo.set_active_text (_("Normal"));
+ break;
+ case ARDOUR::Destructive:
+ if (!ARDOUR::Profile->get_mixbus ()) {
+ mode_combo.set_active_text (_("Tape"));
+ }
+ break;
+ default: // "NonLayered" enum is still present for session-format compat
+ break;
+ }
+ }
+
+ if ((it = rs.find ("strict_io")) != rs.end()) {
+ if (it->second == X_("true")) {
+ strict_io_combo.set_active (1);
+ } else if (it->second == X_("false")) {
+ strict_io_combo.set_active (0);
+ }
+ }
+
+ if ((it = rs.find ("channels")) != rs.end()) {
+ uint32_t channels = atoi (it->second.c_str());
+ for (ChannelSetups::iterator i = channel_setups.begin(); i != channel_setups.end(); ++i) {
+ if ((*i).channels == channels) {
+ channel_combo.set_active_text ((*i).name);
+ break;
+ }
+ }
+ }
+
+ } else if (!p.empty ()) {
+ /* user-template */
+ trk_template_desc.set_sensitive (true);
+
+ manual_label.set_sensitive (true);
+ add_label.set_sensitive (true);
+ name_label.set_sensitive (true);
+ group_label.set_sensitive (false);
+ strict_io_label.set_sensitive (false);
+ configuration_label.set_sensitive (false);
+ mode_label.set_sensitive (false);
+ instrument_label.set_sensitive (false);
+
+ routes_spinner.set_sensitive (true);
+ name_template_entry.set_sensitive (true);
+ channel_combo.set_sensitive (false);
+ mode_combo.set_sensitive (false);
+ instrument_combo.set_sensitive (false);
+ strict_io_combo.set_sensitive (false);
+ route_group_combo.set_sensitive (false);
+
+ } else {
+ /* all manual mode */
+ trk_template_desc.set_sensitive (false);
+
+ manual_label.set_sensitive (true);
+ add_label.set_sensitive (true);
+ name_label.set_sensitive (true);
+ group_label.set_sensitive (true);
+ strict_io_label.set_sensitive (true);
+
+ routes_spinner.set_sensitive (true);
+ name_template_entry.set_sensitive (true);
+ track_type_chosen ();
+ }
+}
+
+
+void
+AddRouteDialog::name_template_entry_insertion (Glib::ustring const &,int*)
+{
+ if (name_template ().empty ()) {
+ name_edited_by_user = false;
+ } else {
+ name_edited_by_user = true;
+ }
+}
+
+void
+AddRouteDialog::name_template_entry_deletion (int, int)
+{
+ if (name_template ().empty ()) {
+ name_edited_by_user = false;
+ } else {
+ name_edited_by_user = true;
+ }
+}
+