git-svn-id: svn://localhost/trunk/ardour2@41 d708f5d6-7413-0410-9779-e7cbd77b26cf
339 lines
10 KiB
C++
339 lines
10 KiB
C++
/*
|
|
Copyright (C) 1999-2002 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 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.
|
|
|
|
$Id$
|
|
*/
|
|
|
|
#include <list>
|
|
#include <string>
|
|
#include <ardour/session.h>
|
|
#include <ardour/audioengine.h>
|
|
|
|
#include "prompter.h"
|
|
#include "new_session_dialog.h"
|
|
|
|
using namespace Gtkmm2ext;
|
|
using namespace Gtk;
|
|
using namespace ARDOUR;
|
|
|
|
#include "i18n.h"
|
|
|
|
extern std::vector<string> channel_combo_strings;
|
|
|
|
NewSessionDialog::NewSessionDialog (ARDOUR::AudioEngine& engine, bool startup, string given_path)
|
|
: ArdourDialog ("new session dialog"),
|
|
file_selector (_("Session name:"), _("Create")),
|
|
use_control_button (_("use control outs")),
|
|
use_master_button (_("use master outs")),
|
|
connect_to_physical_inputs_button (_("automatically connect track inputs to physical ports")),
|
|
connect_to_master_button (_("automatically connect track outputs to master outs")),
|
|
connect_to_physical_outputs_button (_("automatically connect track outputs to physical ports")),
|
|
manual_connect_outputs_button (_("manually connect track outputs")),
|
|
in_count_adjustment (2, 1, 1000, 1, 2),
|
|
out_count_adjustment (2, 1, 1000, 1, 2),
|
|
output_label (_("Output Connections")),
|
|
input_label (_("Input Connections")),
|
|
expansion_button (_("Advanced...")),
|
|
out_table (2, 2),
|
|
show_again (_("show again")),
|
|
in_count_spinner (in_count_adjustment),
|
|
out_count_spinner (out_count_adjustment),
|
|
in_count_label (_("Hardware Inputs: use")),
|
|
out_count_label (_("Hardware Outputs: use"))
|
|
|
|
{
|
|
using namespace Notebook_Helpers;
|
|
|
|
set_name ("NewSessionDialog");
|
|
set_title (_("new session setup"));
|
|
set_wmclass (_("ardour_new_session"), "Ardour");
|
|
set_position (Gtk::WIN_POS_MOUSE);
|
|
set_keyboard_input (true);
|
|
set_policy (false, true, false);
|
|
set_modal (true);
|
|
|
|
/* sample rate */
|
|
|
|
sr_label1.set_text (compose
|
|
(_("This session will playback and record at %1 Hz"),
|
|
engine.frame_rate()));
|
|
sr_label2.set_text (_("This rate is set by JACK and cannot be changed.\n"
|
|
"If you want to use a different sample rate\n"
|
|
"please exit and restart JACK"));
|
|
sr_box.set_spacing (12);
|
|
sr_box.set_border_width (12);
|
|
sr_box.pack_start (sr_label1, false, false);
|
|
sr_box.pack_start (sr_label2, false, false);
|
|
sr_frame.add (sr_box);
|
|
|
|
/* input */
|
|
|
|
connect_to_physical_inputs_button.set_active (true);
|
|
connect_to_physical_inputs_button.set_name ("NewSessionDialogButton");
|
|
|
|
HBox* input_limit_box = manage (new HBox);
|
|
input_limit_box->set_spacing (7);
|
|
input_limit_box->pack_start (in_count_label, false, false);
|
|
input_limit_box->pack_start (in_count_spinner, false, false);
|
|
|
|
input_label.set_alignment (0.1, 0.5);
|
|
input_vbox.pack_start (input_label, false, false, 7);
|
|
input_vbox.pack_start (connect_to_physical_inputs_button, false, false);
|
|
|
|
if (engine.n_physical_inputs() > 2) {
|
|
input_vbox.pack_start (*input_limit_box, false, false);
|
|
}
|
|
|
|
/* output */
|
|
|
|
use_master_button.set_active (true);
|
|
use_master_button.set_name ("NewSessionDialogButton");
|
|
|
|
connect_to_physical_outputs_button.set_group (connect_to_master_button.get_group());
|
|
manual_connect_outputs_button.set_group (connect_to_master_button.get_group());
|
|
connect_to_master_button.set_active (true);
|
|
|
|
connect_to_physical_outputs_button.set_name ("NewSessionDialogButton");
|
|
manual_connect_outputs_button.set_name ("NewSessionDialogButton");
|
|
connect_to_master_button.set_name ("NewSessionDialogButton");
|
|
use_control_button.set_name ("NewSessionDialogButton");
|
|
|
|
out_count_adjustment.set_value (engine.n_physical_outputs());
|
|
in_count_adjustment.set_value (engine.n_physical_inputs());
|
|
|
|
set_popdown_strings (control_out_channel_combo, channel_combo_strings);
|
|
control_out_channel_combo.set_name (X_("NewSessionChannelCombo"));
|
|
// use stereo as default
|
|
control_out_channel_combo.set_active_text (channel_combo_strings.front());
|
|
|
|
set_popdown_strings (master_out_channel_combo, channel_combo_strings);
|
|
master_out_channel_combo.set_name (X_("NewSessionChannelCombo"));
|
|
// use stereo as default
|
|
master_out_channel_combo.set_active_text (channel_combo_strings.front());
|
|
|
|
|
|
out_table.set_col_spacings (7);
|
|
out_table.set_row_spacings (7);
|
|
if (engine.n_physical_outputs() > 2) {
|
|
out_table.attach (out_count_label, 0, 1, 0, 1, 0, 0);
|
|
out_table.attach (out_count_spinner, 1, 2, 0, 1, 0, 0);
|
|
}
|
|
out_table.attach (use_control_button, 0, 1, 1, 2, 0, 0);
|
|
out_table.attach (control_out_channel_combo, 1, 2, 1, 2, 0, 0);
|
|
out_table.attach (use_master_button, 0, 1, 2, 3, 0, 0);
|
|
out_table.attach (master_out_channel_combo, 1, 2, 2, 3, 0, 0);
|
|
|
|
output_label.set_alignment (0.1, 0.5);
|
|
output_vbox.pack_start (output_label, true, true, 7);
|
|
output_vbox.pack_start (out_table, false, false, 5);
|
|
output_vbox.pack_start (connect_to_master_button, false);
|
|
output_vbox.pack_start (connect_to_physical_outputs_button, false);
|
|
output_vbox.pack_start (manual_connect_outputs_button, false);
|
|
|
|
input_hbox.pack_start (input_vbox, false, false);
|
|
output_hbox.pack_start (output_vbox, false, false);
|
|
|
|
VBox* template_vbox = manage (new VBox);
|
|
Label* template_label = manage (new Label (_("Session template")));
|
|
|
|
template_label->set_alignment (0.1, 0.5);
|
|
template_vbox->pack_start (*template_label, true, true, 7);
|
|
template_vbox->pack_start (template_combo, false, false);
|
|
|
|
io_box.set_border_width (12);
|
|
io_box.set_spacing (7);
|
|
io_box.pack_start (*template_vbox);
|
|
|
|
io_box.pack_start (input_hbox);
|
|
io_box.pack_start (output_hbox);
|
|
|
|
reset_templates();
|
|
|
|
option_hbox.set_spacing (7);
|
|
option_hbox.pack_start (io_box);
|
|
|
|
fsbox.set_border_width (12);
|
|
fsbox.set_spacing (7);
|
|
fsbox.pack_start (file_selector.table, false, false);
|
|
|
|
notebook.pages().push_back (TabElem (fsbox, _("Location")));
|
|
notebook.pages().push_back (TabElem (option_hbox, _("Configuration")));
|
|
|
|
if (startup) {
|
|
show_again.set_active(true);
|
|
show_again.toggled.connect (mem_fun(*this, &NewSessionDialog::show_again_toggled));
|
|
file_selector.button_box.pack_end(show_again, false, false);
|
|
}
|
|
|
|
main_vbox.set_border_width (12);
|
|
main_vbox.set_border_width (12);
|
|
main_vbox.set_spacing (7);
|
|
main_vbox.pack_start (sr_frame, false, false);
|
|
main_vbox.pack_start (notebook, false, false);
|
|
main_vbox.pack_start (file_selector.button_box, false, false);
|
|
|
|
add (main_vbox);
|
|
|
|
// template_selector.shift_made.connect (
|
|
// mem_fun(*this, &NewSessionDialog::mix_template_shift));
|
|
// template_selector.control_made.connect (
|
|
// mem_fun(*this, &NewSessionDialog::mix_template_control));
|
|
|
|
file_selector.cancel_button.signal_clicked().connect (bind (mem_fun(*this, &ArdourDialog::stop), -1));
|
|
file_selector.op_button.signal_clicked().connect (bind (mem_fun(*this, &ArdourDialog::stop), 0));
|
|
file_selector.Expanded.connect (mem_fun(*this, &NewSessionDialog::file_selector_expansion));
|
|
|
|
delete_event.connect (mem_fun(*this, &ArdourDialog::wm_close_event));
|
|
show.connect (mem_fun(*this, &NewSessionDialog::fixup_at_show));
|
|
|
|
file_selector.entry_label.set_name ("NewSessionMainLabel");
|
|
file_selector.where_label.set_name ("NewSessionMainLabel");
|
|
template_label->set_name ("NewSessionIOLabel");
|
|
input_label.set_name ("NewSessionIOLabel");
|
|
output_label.set_name ("NewSessionIOLabel");
|
|
sr_label1.set_name ("NewSessionSR1Label");
|
|
sr_label2.set_name ("NewSessionSR2Label");
|
|
|
|
if (given_path.empty()) {
|
|
Session::FavoriteDirs favs;
|
|
Session::read_favorite_dirs (favs);
|
|
file_selector.set_favorites (favs);
|
|
} else {
|
|
file_selector.set_path (given_path, true);
|
|
notebook.set_page (-1);
|
|
notebook.show.connect (bind (mem_fun (notebook, &Notebook::set_page), -1));
|
|
}
|
|
|
|
set_default_size(531, 358);
|
|
}
|
|
|
|
void
|
|
NewSessionDialog::file_selector_expansion (bool expanded)
|
|
{
|
|
if (expanded) {
|
|
fsbox.pack_start (file_selector.expansion_vbox);
|
|
fsbox.reorder_child (file_selector.expansion_vbox, 2);
|
|
} else {
|
|
fsbox.remove (file_selector.expansion_vbox);
|
|
}
|
|
}
|
|
|
|
void
|
|
NewSessionDialog::fixup_at_show ()
|
|
{
|
|
// if (template_selector.clist().rows().size() == 0) {
|
|
// use_template_button.set_sensitive (false);
|
|
// }
|
|
|
|
Session::FavoriteDirs favs;
|
|
Session::read_favorite_dirs (favs);
|
|
file_selector.set_favorites (favs);
|
|
|
|
file_selector.entry.grab_focus ();
|
|
}
|
|
|
|
void
|
|
NewSessionDialog::_mix_template_refiller (CList &clist, void *arg)
|
|
|
|
{
|
|
((NewSessionDialog*) arg)->mix_template_refiller (clist);
|
|
}
|
|
|
|
void
|
|
NewSessionDialog::mix_template_refiller (CList &clist)
|
|
{
|
|
const gchar *rowdata[2];
|
|
list<string> templates;
|
|
list<string>::iterator i;
|
|
|
|
Session::get_template_list(templates);
|
|
|
|
rowdata[0] = _("blank");
|
|
clist.insert_row (0, rowdata);
|
|
|
|
guint row;
|
|
for (row=1, i=templates.begin(); i != templates.end(); ++row, ++i) {
|
|
rowdata[0] = (*i).c_str();
|
|
clist.insert_row (row, rowdata);
|
|
}
|
|
}
|
|
|
|
void
|
|
NewSessionDialog::mix_template_shift (Gtkmm2ext::Selector* selector, Gtkmm2ext::SelectionResult* res)
|
|
{
|
|
if (res && res->text){
|
|
Session::delete_template(*res->text);
|
|
// template_selector.rescan();
|
|
}
|
|
}
|
|
|
|
void
|
|
NewSessionDialog::mix_template_control (Gtkmm2ext::Selector* selector, Gtkmm2ext::SelectionResult* res)
|
|
{
|
|
#if 0
|
|
if (res && res->text) {
|
|
ArdourPrompter prompter (true);
|
|
prompter.set_prompt(_("Name for mix template:"));
|
|
|
|
string old_name = *(res->text);
|
|
prompter.set_initial_text (old_name);
|
|
prompter.done.connect (Gtk::Main::quit.slot());
|
|
prompter.show_all();
|
|
|
|
Gtk::Main::run();
|
|
|
|
if (prompter.status == Gtkmm2ext::Prompter::entered) {
|
|
string name;
|
|
|
|
prompter.get_result (name);
|
|
|
|
if (name.length() && name != old_name) {
|
|
Session::rename_template(old_name, name);
|
|
template_selector.rescan();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void
|
|
NewSessionDialog::show_again_toggled ()
|
|
{
|
|
Config->set_no_new_session_dialog(!show_again.get_active());
|
|
Config->save_state();
|
|
}
|
|
|
|
void
|
|
NewSessionDialog::reset_templates ()
|
|
{
|
|
templates.clear ();
|
|
templates.push_back (_("No template - create tracks/busses manually"));
|
|
Session::get_template_list (templates);
|
|
set_popdown_strings (template_combo, templates);
|
|
}
|
|
|
|
string
|
|
NewSessionDialog::get_template_name()
|
|
{
|
|
string str = template_combo.get_entry()->get_text();
|
|
if (str.substr (0, 11) == _("No template")) {
|
|
return "";
|
|
} else {
|
|
return str;
|
|
}
|
|
}
|