summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-08-16 01:13:00 +0200
committerRobin Gareus <robin@gareus.org>2017-08-16 01:17:35 +0200
commitbd40b9132cbac2d2b79ba0ef480bd41d837f8f71 (patch)
tree7e420e0eb68d52019c774b04adccd5f3b9ae239d /gtk2_ardour
parent26c88b2a3ea2dba06197c8f353dfa3af25b342e0 (diff)
Revert ongoing SessionDialog changes for 5.11 release.5.11
To be reverted again after the release. This temporarily reverts 26c88b2, c67d1d4, 5e41293, 8b7df13, ff61435, 1039894, 8717c0d and GUI parts of 47d86cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc12
-rw-r--r--gtk2_ardour/clearlooks.rc.in14
-rw-r--r--gtk2_ardour/session_dialog.cc612
-rw-r--r--gtk2_ardour/session_dialog.h101
4 files changed, 529 insertions, 210 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 90c9b9cf29..3425ab1bb1 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -3287,12 +3287,18 @@ ARDOUR_UI::build_session_from_dialog (SessionDialog& sd, const std::string& sess
if (nsm) {
bus_profile.master_out_channels = 2;
} else {
+
/* get settings from advanced section of NSD */
- bus_profile.master_out_channels = (uint32_t) sd.master_channel_count();
+
+ if (sd.create_master_bus()) {
+ bus_profile.master_out_channels = (uint32_t) sd.master_channel_count();
+ } else {
+ bus_profile.master_out_channels = 0;
+ }
+
}
- // NULL profile: no master, no monitor
- if (build_session (session_path, session_name, bus_profile.master_out_channels > 0 ? &bus_profile : NULL)) {
+ if (build_session (session_path, session_name, &bus_profile)) {
return -1;
}
diff --git a/gtk2_ardour/clearlooks.rc.in b/gtk2_ardour/clearlooks.rc.in
index 13ff89a6e9..11f39ca67c 100644
--- a/gtk2_ardour/clearlooks.rc.in
+++ b/gtk2_ardour/clearlooks.rc.in
@@ -375,11 +375,6 @@ style "marker_text" = "small text"
{
}
-style "text_on_bg" = "medium_text"
-{
- base[NORMAL] = @background
-}
-
style "midi_tracer_textview" = "medium_monospace_text"
{
@@ -413,12 +408,6 @@ style "base_frame"
bg[NORMAL] = @background
}
-style "text_highlight_frame"
-{
- fg[NORMAL] = @texts
- bg[NORMAL] = @texts
-}
-
style "transport_frame"
{
}
@@ -1107,7 +1096,6 @@ widget "*zoomrange clock" style:highest "medium_text"
widget "*timecodeoffset clock" style:highest "medium_text"
widget "*BaseFrame" style:highest "base_frame"
-widget "*TextHighlightFrame" style:highest "text_highlight_frame"
widget "*TransportFrame" style:highest "transport_frame"
widget "*TransportFrame*" style:highest "transport_frame"
widget "*EditorWindow*" style:highest "editor_window"
@@ -1240,4 +1228,4 @@ widget "*ooltip*" style:highest "tooltip"
widget "*Pane" style:highest "pane"
widget "*Pane.Divider" style:highest "pane"
widget "*VCALabelBar*" style:highest "vca_label_bar"
-widget "*TextOnBackground" style:highest "text_on_bg"
+
diff --git a/gtk2_ardour/session_dialog.cc b/gtk2_ardour/session_dialog.cc
index dadc803596..08f7b15c16 100644
--- a/gtk2_ardour/session_dialog.cc
+++ b/gtk2_ardour/session_dialog.cc
@@ -1,19 +1,19 @@
/*
- Copyright (C) 2013 Paul Davis
+ Copyright (C) 2013 Paul Davis
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
@@ -55,8 +55,6 @@
#include "ardour/template_utils.h"
#include "ardour/filename_extensions.h"
-#include "LuaBridge/LuaBridge.h"
-
#include "ardour_ui.h"
#include "session_dialog.h"
#include "opts.h"
@@ -80,6 +78,10 @@ SessionDialog::SessionDialog (bool require_new, const std::string& session_name,
, _provided_session_name (session_name)
, _provided_session_path (session_path)
, new_folder_chooser (FILE_CHOOSER_ACTION_SELECT_FOLDER)
+ , more_new_session_options_button (_("Advanced options ..."))
+ , _output_limit_count_adj (1, 0, 100, 1, 10, 0)
+ , _input_limit_count_adj (1, 0, 100, 1, 10, 0)
+ , _master_bus_channel_count_adj (2, 0, 100, 1, 10, 0)
, _existing_session_chooser_used (false)
{
set_position (WIN_POS_CENTER);
@@ -114,6 +116,7 @@ SessionDialog::SessionDialog (bool require_new, const std::string& session_name,
}
if (!template_name.empty()) {
+ use_template_button.set_active (false);
load_template_override = template_name;
}
@@ -123,6 +126,14 @@ SessionDialog::SessionDialog (bool require_new, const std::string& session_name,
populate_session_templates ();
+ if (!template_model->children().empty()) {
+ use_template_button.show();
+ template_chooser.show ();
+ } else {
+ use_template_button.hide();
+ template_chooser.hide ();
+ }
+
if (recent_session_model) {
int cnt = redisplay_recent_sessions ();
if (cnt > 0) {
@@ -146,7 +157,7 @@ SessionDialog::SessionDialog (bool require_new, const std::string& session_name,
pass then require it for a second pass (e.g. when there
is an error with session loading and we have to ask the user
what to do next).
- */
+ */
if (!session_name.empty() && !require_new) {
response (RESPONSE_OK);
@@ -159,6 +170,10 @@ SessionDialog::SessionDialog ()
, new_only (false)
, _provided_session_name ("")
, _provided_session_path ("")
+ // the following are unused , but have no default ctor
+ , _output_limit_count_adj (1, 0, 100, 1, 10, 0)
+ , _input_limit_count_adj (1, 0, 100, 1, 10, 0)
+ , _master_bus_channel_count_adj (2, 0, 100, 1, 10, 0)
, _existing_session_chooser_used (false) // caller must check should_be_new
{
get_vbox()->set_spacing (6);
@@ -196,77 +211,14 @@ SessionDialog::clear_given ()
_provided_session_name = "";
}
-uint32_t
-SessionDialog::meta_master_bus_profile (std::string script_path) const
-{
- if (!Glib::file_test (script_path, Glib::FILE_TEST_EXISTS | Glib::FILE_TEST_IS_REGULAR)) {
- return UINT32_MAX;
- }
-
- LuaState lua;
- lua.sandbox (true);
- lua_State* L = lua.getState();
-
- lua.do_command (
- "ardourluainfo = {}"
- "function ardour (entry)"
- " ardourluainfo['type'] = assert(entry['type'])"
- " ardourluainfo['master_bus'] = entry['master_bus'] or 2"
- " end"
- );
-
- int err = -1;
-
- try {
- err = lua.do_file (script_path);
- } catch (luabridge::LuaException const& e) {
- err = -1;
- }
-
- if (err) {
- return UINT32_MAX;
- }
-
- luabridge::LuaRef nfo = luabridge::getGlobal (L, "ardourluainfo");
- if (nfo.type() != LUA_TTABLE) {
- return UINT32_MAX;
- }
-
- if (nfo["master_bus"].type() != LUA_TNUMBER || nfo["type"].type() != LUA_TSTRING) {
- return UINT32_MAX;
- }
-
- LuaScriptInfo::ScriptType type = LuaScriptInfo::str2type (nfo["type"].cast<std::string>());
- if (type != LuaScriptInfo::SessionSetup) {
- return UINT32_MAX;
- }
-
- return nfo["master_bus"].cast<uint32_t>();
-}
-
-uint32_t
-SessionDialog::master_channel_count ()
-{
- if (use_session_template ()) {
- std::string tn = session_template_name();
- if (tn.substr (0, 11) == "urn:ardour:") {
- uint32_t mc = meta_master_bus_profile (tn.substr (11));
- if (mc != UINT32_MAX) {
- return mc;
- }
- }
- }
- return 2;
-}
-
bool
-SessionDialog::use_session_template () const
+SessionDialog::use_session_template ()
{
if (!load_template_override.empty()) {
return true;
}
- if (template_chooser.get_selection()->count_selected_rows() > 0) {
+ if (use_template_button.get_active()) {
return true;
}
@@ -281,14 +233,11 @@ SessionDialog::session_template_name ()
return Glib::build_filename (the_path, load_template_override + ARDOUR::template_suffix);
}
- if (template_chooser.get_selection()->count_selected_rows() > 0) {
-
- TreeIter const iter = template_chooser.get_selection()->get_selected();
-
- if (iter) {
- string s = (*iter)[session_template_columns.path];
- return s;
- }
+ if (use_template_button.get_active()) {
+ TreeModel::iterator iter = template_chooser.get_active ();
+ TreeModel::Row row = (*iter);
+ string s = row[session_template_columns.path];
+ return s;
}
return string();
@@ -557,23 +506,10 @@ SessionDialog::populate_session_templates ()
{
vector<TemplateInfo> templates;
- find_session_templates (templates, true);
+ find_session_templates (templates);
template_model->clear ();
- //Add any Lua scripts (factory templates) found in the scripts folder
- LuaScriptList& ms (LuaScripting::instance ().scripts (LuaScriptInfo::SessionSetup));
- for (LuaScriptList::const_iterator s = ms.begin(); s != ms.end(); ++s) {
- TreeModel::Row row;
- row = *(template_model->append ());
- row[session_template_columns.name] = "Meta: " + (*s)->name;
- row[session_template_columns.path] = "urn:ardour:" + (*s)->path;
- row[session_template_columns.description] = (*s)->description;
- row[session_template_columns.created_with] = _("{Factory Template}");
- }
-
-
- //Add any "template sessions" found in the user's preferences folder
for (vector<TemplateInfo>::iterator x = templates.begin(); x != templates.end(); ++x) {
TreeModel::Row row;
@@ -581,56 +517,64 @@ SessionDialog::populate_session_templates ()
row[session_template_columns.name] = (*x).name;
row[session_template_columns.path] = (*x).path;
- row[session_template_columns.description] = (*x).description;
- row[session_template_columns.created_with] = (*x).created_with;
+ row[session_template_columns.desc] = (*x).description;
}
- //Add an explicit 'Empty Template' item
- TreeModel::Row row = *template_model->prepend ();
- row[session_template_columns.name] = (_("Empty Template"));
- row[session_template_columns.path] = string();
- row[session_template_columns.description] = _("An empty session with factory default settings.");
- row[session_template_columns.created_with] = _("{Factory Template}");
+ LuaScriptList& ms (LuaScripting::instance ().scripts (LuaScriptInfo::SessionSetup));
+ for (LuaScriptList::const_iterator s = ms.begin(); s != ms.end(); ++s) {
+ TreeModel::Row row;
+ row = *(template_model->append ());
+ row[session_template_columns.name] = "Meta: " + (*s)->name;
+ row[session_template_columns.path] = "urn:ardour:" + (*s)->path;
+ row[session_template_columns.desc] = "urn:ardour:" + (*s)->description;
+ }
- //auto-select the first item in the list
- Gtk::TreeModel::Row first = template_model->children()[0];
- if(first) {
- template_chooser.get_selection()->select(first);
+ if (!templates.empty()) {
+ /* select first row */
+ template_chooser.set_active (0);
}
}
void
SessionDialog::setup_new_session_page ()
{
- session_new_vbox.set_border_width (8);
- session_new_vbox.set_spacing (8);
+ session_new_vbox.set_border_width (12);
+ session_new_vbox.set_spacing (18);
+
+ VBox *vbox1 = manage (new VBox);
+ HBox* hbox1 = manage (new HBox);
+ Label* label1 = manage (new Label);
+
+ vbox1->set_spacing (6);
- Label* name_label = manage (new Label);
- name_label->set_text (_("Session name:"));
+ hbox1->set_spacing (6);
+ hbox1->pack_start (*label1, false, false);
+ hbox1->pack_start (new_name_entry, true, true);
- HBox* name_hbox = manage (new HBox);
- name_hbox->set_spacing (8);
- name_hbox->pack_start (*name_label, false, true);
- name_hbox->pack_start (new_name_entry, true, true);
+ label1->set_text (_("Session name:"));
- //check to see if a session name was provided on command line
if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
new_name_entry.set_text (Glib::path_get_basename (ARDOUR_COMMAND_LINE::session_name));
+ /* name provided - they can move right along */
open_button->set_sensitive (true);
}
new_name_entry.signal_changed().connect (sigc::mem_fun (*this, &SessionDialog::new_name_changed));
new_name_entry.signal_activate().connect (sigc::mem_fun (*this, &SessionDialog::new_name_activated));
- //Folder location for the new session
- Label* new_folder_label = manage (new Label);
- new_folder_label->set_text (_("Create session folder in:"));
- HBox* folder_box = manage (new HBox);
- folder_box->set_spacing (8);
- folder_box->pack_start (*new_folder_label, false, false);
- folder_box->pack_start (new_folder_chooser, true, true);
+ vbox1->pack_start (*hbox1, true, true);
+
+ /* --- */
+
+ HBox* hbox2 = manage (new HBox);
+ Label* label2 = manage (new Label);
+
+ hbox2->set_spacing (6);
+ hbox2->pack_start (*label2, false, false);
+ hbox2->pack_start (new_folder_chooser, true, true);
+
+ label2->set_text (_("Create session folder in:"));
- //determine the text in the new folder selector
if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
new_folder_chooser.set_current_folder (poor_mans_glob (Glib::path_get_dirname (ARDOUR_COMMAND_LINE::session_name)));
} else if (ARDOUR_UI::instance()->session_loaded) {
@@ -651,45 +595,80 @@ SessionDialog::setup_new_session_page ()
}
new_folder_chooser.show ();
new_folder_chooser.set_title (_("Select folder for session"));
+
Gtkmm2ext::add_volume_shortcuts (new_folder_chooser);
- //Template & Template Description area
- HBox* template_hbox = manage (new HBox);
+ vbox1->pack_start (*hbox2, false, false);
- //if the "template override" is provided, don't give the user any template selections (?)
- if ( load_template_override.empty() ) {
- template_hbox->set_spacing (8);
- template_hbox->pack_start (template_chooser, true, true);
- template_hbox->pack_start (template_desc_frame, true, true);
- }
+ session_new_vbox.pack_start (*vbox1, false, false);
+
+ /* --- */
- //template_desc is the textview that displays the currently selected template's description
- template_desc.set_editable (false);
- template_desc.set_wrap_mode (Gtk::WRAP_WORD);
- template_desc.set_size_request(300,400);
- template_desc.set_name (X_("TextOnBackground"));
- template_desc.set_border_width (6);
+ VBox *vbox2 = manage (new VBox);
+ HBox* hbox3 = manage (new HBox);
+ template_model = ListStore::create (session_template_columns);
+
+ vbox2->set_spacing (6);
+
+ VBox *vbox3 = manage (new VBox);
+
+ vbox3->set_spacing (6);
+
+ /* we may want to hide this and show it at various
+ times depending on the existence of templates.
+ */
+ template_chooser.set_no_show_all (true);
+ use_template_button.set_no_show_all (true);
- template_desc_frame.set_name (X_("TextHighlightFrame"));
- template_desc_frame.add (template_desc);
+ HBox* hbox4a = manage (new HBox);
+ use_template_button.set_label (_("Use this template"));
+ use_template_button.signal_toggled().connect(sigc::mem_fun (*this, &SessionDialog::template_checkbox_toggled));
+
+ TreeModel::Row row = *template_model->prepend ();
+ row[session_template_columns.name] = (_("no template"));
+ row[session_template_columns.path] = string();
+
+ hbox4a->set_spacing (6);
+ hbox4a->pack_start (use_template_button, false, false);
+ hbox4a->pack_start (template_chooser, true, true);
- //template_chooser is the treeview showing available templates
- template_model = TreeStore::create (session_template_columns);
template_chooser.set_model (template_model);
- template_chooser.set_size_request(300,400);
- template_chooser.append_column (_("Template"), session_template_columns.name);
- template_chooser.append_column (_("Created With"), session_template_columns.created_with);
- template_chooser.set_headers_visible (true);
- template_chooser.get_selection()->set_mode (SELECTION_SINGLE);
- template_chooser.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &SessionDialog::template_row_selected));
- template_chooser.set_sensitive (true);
+
+ Gtk::CellRendererText* text_renderer = Gtk::manage (new Gtk::CellRendererText);
+ text_renderer->property_editable() = false;
+
+ template_chooser.pack_start (*text_renderer);
+ template_chooser.add_attribute (text_renderer->property_text(), session_template_columns.name);
+ template_chooser.set_active (0);
+
+ vbox3->pack_start (*hbox4a, false, false);
+
+ /* --- */
+
+ HBox* hbox5 = manage (new HBox);
+
+ hbox5->set_spacing (6);
+ hbox5->pack_start (more_new_session_options_button, false, false);
+
+ setup_more_options_box ();
+ more_new_session_options_button.add (more_options_vbox);
+
+ vbox3->pack_start (*hbox5, false, false);
+ hbox3->pack_start (*vbox3, true, true, 8);
+ vbox2->pack_start (*hbox3, false, false);
/* --- */
- session_new_vbox.pack_start (*template_hbox, false, true);
- session_new_vbox.pack_start (*folder_box, false, true);
- session_new_vbox.pack_start (*name_hbox, false, true);
+ session_new_vbox.pack_start (*vbox2, false, false);
session_new_vbox.show_all ();
+
+ template_checkbox_toggled ();
+}
+
+void
+SessionDialog::template_checkbox_toggled ()
+{
+ template_chooser.set_sensitive (use_template_button.get_active());
}
void
@@ -862,15 +841,15 @@ SessionDialog::redisplay_recent_sessions ()
#if 0
child_row[recent_session_columns.sample_rate] = rate_as_string (sr);
switch (sf) {
- case FormatFloat:
- child_row[recent_session_columns.disk_format] = _("32-bit float");
- break;
- case FormatInt24:
- child_row[recent_session_columns.disk_format] = _("24-bit");
- break;
- case FormatInt16:
- child_row[recent_session_columns.disk_format] = _("16-bit");
- break;
+ case FormatFloat:
+ child_row[recent_session_columns.disk_format] = _("32-bit float");
+ break;
+ case FormatInt24:
+ child_row[recent_session_columns.disk_format] = _("24-bit");
+ break;
+ case FormatInt16:
+ child_row[recent_session_columns.disk_format] = _("16-bit");
+ break;
}
#else
child_row[recent_session_columns.sample_rate] = "";
@@ -950,19 +929,301 @@ SessionDialog::recent_session_row_selected ()
}
void
-SessionDialog::template_row_selected ()
+SessionDialog::setup_more_options_box ()
+{
+ more_options_vbox.set_border_width (24);
+
+ _output_limit_count.set_adjustment (_output_limit_count_adj);
+ _input_limit_count.set_adjustment (_input_limit_count_adj);
+ _master_bus_channel_count.set_adjustment (_master_bus_channel_count_adj);
+
+ chan_count_label_1.set_text (_("channels"));
+ chan_count_label_3.set_text (_("channels"));
+ chan_count_label_4.set_text (_("channels"));
+
+ chan_count_label_1.set_alignment(0,0.5);
+ chan_count_label_1.set_padding(0,0);
+ chan_count_label_1.set_line_wrap(false);
+
+ chan_count_label_3.set_alignment(0,0.5);
+ chan_count_label_3.set_padding(0,0);
+ chan_count_label_3.set_line_wrap(false);
+
+ chan_count_label_4.set_alignment(0,0.5);
+ chan_count_label_4.set_padding(0,0);
+ chan_count_label_4.set_line_wrap(false);
+
+ bus_label.set_markup (_("<b>Busses</b>"));
+ input_label.set_markup (_("<b>Inputs</b>"));
+ output_label.set_markup (_("<b>Outputs</b>"));
+
+ _master_bus_channel_count.set_flags(Gtk::CAN_FOCUS);
+ _master_bus_channel_count.set_update_policy(Gtk::UPDATE_ALWAYS);
+ _master_bus_channel_count.set_numeric(true);
+ _master_bus_channel_count.set_digits(0);
+ _master_bus_channel_count.set_wrap(false);
+
+ _create_master_bus.set_label (_("Create master bus"));
+ _create_master_bus.set_flags(Gtk::CAN_FOCUS);
+ _create_master_bus.set_relief(Gtk::RELIEF_NORMAL);
+ _create_master_bus.set_mode(true);
+ _create_master_bus.set_active(true);
+ _create_master_bus.set_border_width(0);
+
+ advanced_table.set_row_spacings(0);
+ advanced_table.set_col_spacings(0);
+
+ _connect_inputs.set_label (_("Automatically connect to physical inputs"));
+ _connect_inputs.set_flags(Gtk::CAN_FOCUS);
+ _connect_inputs.set_relief(Gtk::RELIEF_NORMAL);
+ _connect_inputs.set_mode(true);
+ _connect_inputs.set_active(Config->get_input_auto_connect() != ManualConnect);
+ _connect_inputs.set_border_width(0);
+
+ _limit_input_ports.set_label (_("Use only"));
+ _limit_input_ports.set_flags(Gtk::CAN_FOCUS);
+ _limit_input_ports.set_relief(Gtk::RELIEF_NORMAL);
+ _limit_input_ports.set_mode(true);
+ _limit_input_ports.set_sensitive(true);
+ _limit_input_ports.set_border_width(0);
+
+ _input_limit_count.set_flags(Gtk::CAN_FOCUS);
+ _input_limit_count.set_update_policy(Gtk::UPDATE_ALWAYS);
+ _input_limit_count.set_numeric(true);
+ _input_limit_count.set_digits(0);
+ _input_limit_count.set_wrap(false);
+ _input_limit_count.set_sensitive(false);
+
+ bus_hbox.pack_start (bus_table, Gtk::PACK_SHRINK, 18);
+
+ bus_label.set_alignment(0, 0.5);
+ bus_label.set_padding(0,0);
+ bus_label.set_line_wrap(false);
+ bus_label.set_selectable(false);
+ bus_label.set_use_markup(true);
+ bus_frame.set_shadow_type(Gtk::SHADOW_NONE);
+ bus_frame.set_label_align(0,0.5);
+ bus_frame.add(bus_hbox);
+ bus_frame.set_label_widget(bus_label);
+
+ bus_table.set_row_spacings (0);
+ bus_table.set_col_spacings (0);
+ bus_table.attach (_create_master_bus, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+ bus_table.attach (_master_bus_channel_count, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+ bus_table.attach (chan_count_label_1, 2, 3, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 0);
+
+ input_port_limit_hbox.pack_start(_limit_input_ports, Gtk::PACK_SHRINK, 6);
+ input_port_limit_hbox.pack_start(_input_limit_count, Gtk::PACK_SHRINK, 0);
+ input_port_limit_hbox.pack_start(chan_count_label_3, Gtk::PACK_SHRINK, 6);
+ input_port_vbox.pack_start(_connect_inputs, Gtk::PACK_SHRINK, 0);
+ input_port_vbox.pack_start(input_port_limit_hbox, Gtk::PACK_EXPAND_PADDING, 0);
+ input_table.set_row_spacings(0);
+ input_table.set_col_spacings(0);
+ input_table.attach(input_port_vbox, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 6);
+
+ input_hbox.pack_start (input_table, Gtk::PACK_SHRINK, 18);
+
+ input_label.set_alignment(0, 0.5);
+ input_label.set_padding(0,0);
+ input_label.set_line_wrap(false);
+ input_label.set_selectable(false);
+ input_label.set_use_markup(true);
+ input_frame.set_shadow_type(Gtk::SHADOW_NONE);
+ input_frame.set_label_align(0,0.5);
+ input_frame.add(input_hbox);
+ input_frame.set_label_widget(input_label);
+
+ _connect_outputs.set_label (_("Automatically connect outputs"));
+ _connect_outputs.set_flags(Gtk::CAN_FOCUS);
+ _connect_outputs.set_relief(Gtk::RELIEF_NORMAL);
+ _connect_outputs.set_mode(true);
+ _connect_outputs.set_active(Config->get_output_auto_connect() != ManualConnect);
+ _connect_outputs.set_border_width(0);
+ _limit_output_ports.set_label (_("Use only"));
+ _limit_output_ports.set_flags(Gtk::CAN_FOCUS);
+ _limit_output_ports.set_relief(Gtk::RELIEF_NORMAL);
+ _limit_output_ports.set_mode(true);
+ _limit_output_ports.set_sensitive(true);
+ _limit_output_ports.set_border_width(0);
+ _output_limit_count.set_flags(Gtk::CAN_FOCUS);
+ _output_limit_count.set_update_policy(Gtk::UPDATE_ALWAYS);
+ _output_limit_count.set_numeric(false);
+ _output_limit_count.set_digits(0);
+ _output_limit_count.set_wrap(false);
+ _output_limit_count.set_sensitive(false);
+ output_port_limit_hbox.pack_start(_limit_output_ports, Gtk::PACK_SHRINK, 6);
+ output_port_limit_hbox.pack_start(_output_limit_count, Gtk::PACK_SHRINK, 0);
+ output_port_limit_hbox.pack_start(chan_count_label_4, Gtk::PACK_SHRINK, 6);
+
+ _connect_outputs_to_master.set_label (_("... to master bus"));
+ _connect_outputs_to_master.set_flags(Gtk::CAN_FOCUS);
+ _connect_outputs_to_master.set_relief(Gtk::RELIEF_NORMAL);
+ _connect_outputs_to_master.set_mode(true);
+ _connect_outputs_to_master.set_active(Config->get_output_auto_connect() == AutoConnectMaster);
+ _connect_outputs_to_master.set_border_width(0);
+
+ _connect_outputs_to_master.set_group (connect_outputs_group);
+ _connect_outputs_to_physical.set_group (connect_outputs_group);
+
+ _connect_outputs_to_physical.set_label (_("... to physical outputs"));
+ _connect_outputs_to_physical.set_flags(Gtk::CAN_FOCUS);
+ _connect_outputs_to_physical.set_relief(Gtk::RELIEF_NORMAL);
+ _connect_outputs_to_physical.set_mode(true);
+ _connect_outputs_to_physical.set_active(Config->get_output_auto_connect() == AutoConnectPhysical);
+ _connect_outputs_to_physical.set_border_width(0);
+
+ output_conn_vbox.pack_start(_connect_outputs, Gtk::PACK_SHRINK, 0);
+ output_conn_vbox.pack_start(_connect_outputs_to_master, Gtk::PACK_SHRINK, 0);
+ output_conn_vbox.pack_start(_connect_outputs_to_physical, Gtk::PACK_SHRINK, 0);
+ output_vbox.set_border_width(6);
+
+ output_port_vbox.pack_start(output_port_limit_hbox, Gtk::PACK_SHRINK, 0);
+
+ output_vbox.pack_start(output_conn_vbox);
+ output_vbox.pack_start(output_port_vbox);
+
+ output_label.set_alignment(0, 0.5);
+ output_label.set_padding(0,0);
+ output_label.set_line_wrap(false);
+ output_label.set_selectable(false);
+ output_label.set_use_markup(true);
+ output_frame.set_shadow_type(Gtk::SHADOW_NONE);
+ output_frame.set_label_align(0,0.5);
+
+ output_hbox.pack_start (output_vbox, Gtk::PACK_SHRINK, 18);
+
+ output_frame.add(output_hbox);
+ output_frame.set_label_widget(output_label);
+
+ more_options_vbox.pack_start(advanced_table, Gtk::PACK_SHRINK, 0);
+ more_options_vbox.pack_start(bus_frame, Gtk::PACK_SHRINK, 6);
+ more_options_vbox.pack_start(input_frame, Gtk::PACK_SHRINK, 6);
+ more_options_vbox.pack_start(output_frame, Gtk::PACK_SHRINK, 0);
+
+ /* signals */
+
+ _connect_inputs.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::connect_inputs_clicked));
+ _connect_outputs.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::connect_outputs_clicked));
+ _limit_input_ports.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::limit_inputs_clicked));
+ _limit_output_ports.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::limit_outputs_clicked));
+ _create_master_bus.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::master_bus_button_clicked));
+
+ /* note that more_options_vbox is "visible" by default even
+ * though it may not be displayed to the user, this is so the dialog
+ * doesn't resize.
+ */
+ more_options_vbox.show_all ();
+}
+
+bool
+SessionDialog::create_master_bus() const
+{
+ return _create_master_bus.get_active();
+}
+
+int
+SessionDialog::master_channel_count() const
{
- if (template_chooser.get_selection()->count_selected_rows() > 0) {
- TreeIter iter = template_chooser.get_selection()->get_selected();
+ return _master_bus_channel_count.get_value_as_int();
+}
- if (iter) {
- string s = (*iter)[session_template_columns.description];
- template_desc.get_buffer()->set_text (s);
- }
+bool
+SessionDialog::connect_inputs() const
+{
+ return _connect_inputs.get_active();
+}
+
+bool
+SessionDialog::limit_inputs_used_for_connection() const
+{
+ return _limit_input_ports.get_active();
+}
+
+int
+SessionDialog::input_limit_count() const
+{
+ return _input_limit_count.get_value_as_int();
+}
+
+bool
+SessionDialog::connect_outputs() const
+{
+ return _connect_outputs.get_active();
+}
+
+bool
+SessionDialog::limit_outputs_used_for_connection() const
+{
+ return _limit_output_ports.get_active();
+}
+
+int
+SessionDialog::output_limit_count() const
+{
+ return _output_limit_count.get_value_as_int();
+}
+
+bool
+SessionDialog::connect_outs_to_master() const
+{
+ return _connect_outputs_to_master.get_active();
+}
+
+bool
+SessionDialog::connect_outs_to_physical() const
+{
+ return _connect_outputs_to_physical.get_active();
+}
+
+void
+SessionDialog::connect_inputs_clicked ()
+{
+ _limit_input_ports.set_sensitive(_connect_inputs.get_active());
+
+ if (_connect_inputs.get_active() && _limit_input_ports.get_active()) {
+ _input_limit_count.set_sensitive(true);
+ } else {
+ _input_limit_count.set_sensitive(false);
+ }
+}
+
+void
+SessionDialog::connect_outputs_clicked ()
+{
+ bool const co = _connect_outputs.get_active ();
+ _limit_output_ports.set_sensitive(co);
+ _connect_outputs_to_master.set_sensitive(co);
+ _connect_outputs_to_physical.set_sensitive(co);
+
+ if (co && _limit_output_ports.get_active()) {
+ _output_limit_count.set_sensitive(true);
+ } else {
+ _output_limit_count.set_sensitive(false);
}
}
void
+SessionDialog::limit_inputs_clicked ()
+{
+ _input_limit_count.set_sensitive(_limit_input_ports.get_active());
+}
+
+void
+SessionDialog::limit_outputs_clicked ()
+{
+ _output_limit_count.set_sensitive(_limit_output_ports.get_active());
+}
+
+void
+SessionDialog::master_bus_button_clicked ()
+{
+ bool const yn = _create_master_bus.get_active();
+
+ _master_bus_channel_count.set_sensitive(yn);
+ _connect_outputs_to_master.set_sensitive(yn);
+}
+
+void
SessionDialog::recent_row_activated (const Gtk::TreePath&, Gtk::TreeViewColumn*)
{
response (RESPONSE_ACCEPT);
@@ -1081,3 +1342,4 @@ SessionDialog::on_delete_event (GdkEventAny* ev)
response (RESPONSE_CANCEL);
return ArdourDialog::on_delete_event (ev);
}
+
diff --git a/gtk2_ardour/session_dialog.h b/gtk2_ardour/session_dialog.h
index 8aced6c90d..5f4062fc1b 100644
--- a/gtk2_ardour/session_dialog.h
+++ b/gtk2_ardour/session_dialog.h
@@ -30,7 +30,6 @@
#include <gtkmm/radiobutton.h>
#include <gtkmm/filechooserbutton.h>
#include <gtkmm/scrolledwindow.h>
-#include <gtkmm/textview.h>
#include <gtkmm/treeview.h>
#include <gtkmm/treestore.h>
#include <gtkmm/checkbutton.h>
@@ -59,10 +58,24 @@ public:
std::string session_name (bool& should_be_new);
std::string session_folder ();
- bool use_session_template() const;
+ bool use_session_template();
std::string session_template_name();
- uint32_t master_channel_count();
+ // advanced session options
+
+ bool create_master_bus() const;
+ int master_channel_count() const;
+
+ bool connect_inputs() const;
+ bool limit_inputs_used_for_connection() const;
+ int input_limit_count() const;
+
+ bool connect_outputs() const;
+ bool limit_outputs_used_for_connection() const;
+ int output_limit_count() const;
+
+ bool connect_outs_to_master() const;
+ bool connect_outs_to_physical() const;
void set_provided_session(const std::string& session_name, const std::string& session_path) {
_provided_session_name = session_name;
@@ -152,42 +165,92 @@ private:
SessionTemplateColumns () {
add (name);
add (path);
- add (description);
- add (created_with);
+ add (desc);
}
Gtk::TreeModelColumn<std::string> name;
Gtk::TreeModelColumn<std::string> path;
- Gtk::TreeModelColumn<std::string> description;
- Gtk::TreeModelColumn<std::string> created_with;
+ Gtk::TreeModelColumn<std::string> desc;
};
SessionTemplateColumns session_template_columns;
-
- Glib::RefPtr<Gtk::TreeStore> template_model;
- Gtk::TreeView template_chooser;
- Gtk::ScrolledWindow template_scroller;
-
- void template_row_selected ();
-
- Gtk::TextView template_desc;
- Gtk::Frame template_desc_frame;
+ Glib::RefPtr<Gtk::ListStore> template_model;
+ Gtk::ComboBox template_chooser;
Gtk::VBox session_new_vbox;
Gtk::VBox session_existing_vbox;
+ Gtk::Expander more_new_session_options_button;
+ Gtk::CheckButton use_template_button;
std::string load_template_override;
+ void template_checkbox_toggled ();
+
+ void more_new_session_options_button_clicked();
void new_name_changed ();
void new_name_activated ();
void populate_session_templates ();
+ /* more options for new sessions */
+
+ Gtk::VBox more_options_vbox;
+
+ Gtk::Label chan_count_label_1;
+ Gtk::Label chan_count_label_3;
+ Gtk::Label chan_count_label_4;
+ Gtk::Table advanced_table;
+ Gtk::HBox input_port_limit_hbox;
+ Gtk::VBox input_port_vbox;
+ Gtk::Table input_table;
+ Gtk::HBox input_hbox;
+
+ Gtk::Label bus_label;
+ Gtk::Frame bus_frame;
+ Gtk::Table bus_table;
+ Gtk::HBox bus_hbox;
+
+ Gtk::Label input_label;
+ Gtk::Frame input_frame;
+ Gtk::HBox output_port_limit_hbox;
+ Gtk::VBox output_port_vbox;
+ Gtk::VBox output_conn_vbox;
+ Gtk::VBox output_vbox;
+ Gtk::HBox output_hbox;
+
+ Gtk::Label output_label;
+ Gtk::Frame output_frame;
+ Gtk::VBox advanced_vbox;
+ Gtk::Label advanced_label;
+
+ Gtk::CheckButton _create_master_bus;
+ Gtk::SpinButton _master_bus_channel_count;
+
+ Gtk::CheckButton _connect_inputs;
+ Gtk::CheckButton _limit_input_ports;
+ Gtk::SpinButton _input_limit_count;
+
+ Gtk::CheckButton _connect_outputs;
+ Gtk::CheckButton _limit_output_ports;
+ Gtk::SpinButton _output_limit_count;
+
+ Gtk::RadioButtonGroup connect_outputs_group;
+ Gtk::RadioButton _connect_outputs_to_master;
+ Gtk::RadioButton _connect_outputs_to_physical;
+
+ Gtk::Adjustment _output_limit_count_adj;
+ Gtk::Adjustment _input_limit_count_adj;
+ Gtk::Adjustment _master_bus_channel_count_adj;
+
+ void connect_inputs_clicked ();
+ void connect_outputs_clicked ();
+ void limit_inputs_clicked ();
+ void limit_outputs_clicked ();
+ void master_bus_button_clicked ();
+ void setup_more_options_box ();
+
/* --disable plugins UI */
Gtk::CheckButton _disable_plugins;
void disable_plugins_clicked ();
- /* meta-template */
- uint32_t meta_master_bus_profile (std::string script) const;
-
/* always there */
Glib::RefPtr<Pango::Layout> layout;