summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-06-25 20:46:39 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-06-25 20:46:39 +0000
commit8e7a5d77414a40550a28d61abf6eeb1e89a1ec25 (patch)
tree76d5851fe7221066ccadbc032a9a1fbcd1b6091b /gtk2_ardour
parent94880f7cd1417031387b485e279c32eea885cf6d (diff)
startup assistant patch from tinman; cleanup fix backported from 2.X ; easy(ier) ways to create aux sends ; facility to subgroup (route via bus) for a route group ; fix up internal send/return operation ; fix internal send naming since it doesn't need to be unique - no JACK ports involved
git-svn-id: svn://localhost/ardour2/branches/3.0@5272 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_audio_import.cc7
-rw-r--r--gtk2_ardour/editor_edit_groups.cc13
-rw-r--r--gtk2_ardour/mixer_group_tabs.cc14
-rw-r--r--gtk2_ardour/mixer_group_tabs.h4
-rw-r--r--gtk2_ardour/route_ui.cc8
-rw-r--r--gtk2_ardour/route_ui.h1
-rw-r--r--gtk2_ardour/startup.cc151
8 files changed, 130 insertions, 70 deletions
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 10895dc5a6..a174a21ca4 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -1863,6 +1863,8 @@ public:
void build_route_group_menu (ARDOUR::RouteGroup *);
void activate_all_route_groups ();
void disable_all_route_groups ();
+ void subgroup_route_group (ARDOUR::RouteGroup*);
+ void unsubgroup_route_group (ARDOUR::RouteGroup*);
bool in_route_group_row_change;
void route_group_row_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 1c23fdf217..7762a42322 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -559,6 +559,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
string linked_path;
SoundFileInfo finfo;
int ret = 0;
+ Glib::ustring path_to_use;
track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
gdk_flush ();
@@ -571,6 +572,8 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
sys::path tmp = session->session_directory().sound_path() / Glib::path_get_basename(path);
linked_path = tmp.to_string();
+
+ path_to_use = linked_path;
if (link (path.c_str(), linked_path.c_str()) == 0) {
@@ -581,6 +584,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
*/
path = linked_path;
+ path_to_use = Glib::path_get_basename (path);
} else {
@@ -592,6 +596,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
if (stat (linked_path.c_str(), &sb) == 0) {
if (sb.st_nlink > 1) { // its a hard link, assume its the one we want
path = linked_path;
+ path_to_use = Glib::path_get_basename (path);
}
}
}
@@ -673,7 +678,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
source = boost::dynamic_pointer_cast<AudioFileSource> (
SourceFactory::createReadable (DataType::AUDIO, *session,
- path, false, n,
+ path_to_use, false, n,
(mode == ImportAsTapeTrack
? Source::Destructive
: Source::Flag (0)),
diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc
index d0d450f120..54547b5a0d 100644
--- a/gtk2_ardour/editor_edit_groups.cc
+++ b/gtk2_ardour/editor_edit_groups.cc
@@ -66,6 +66,7 @@ Editor::build_route_group_menu (RouteGroup* g)
if (g) {
items.push_back (MenuElem (_("Edit..."), bind (mem_fun (*this, &Editor::edit_route_group), g)));
items.push_back (MenuElem (_("Fit to Window"), bind (mem_fun (*this, &Editor::fit_route_group), g)));
+ items.push_back (MenuElem (_("Subgroup"), bind (mem_fun (*this, &Editor::subgroup_route_group), g)));
}
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Activate All"), mem_fun(*this, &Editor::activate_all_route_groups)));
@@ -73,6 +74,18 @@ Editor::build_route_group_menu (RouteGroup* g)
}
void
+Editor::subgroup_route_group (RouteGroup* g)
+{
+ g->make_subgroup ();
+}
+
+void
+Editor::unsubgroup_route_group (RouteGroup* g)
+{
+ g->destroy_subgroup ();
+}
+
+void
Editor::activate_all_route_groups ()
{
session->foreach_route_group (bind (mem_fun (*this, &Editor::set_route_group_activation), true));
diff --git a/gtk2_ardour/mixer_group_tabs.cc b/gtk2_ardour/mixer_group_tabs.cc
index a261fc8ec9..566671f027 100644
--- a/gtk2_ardour/mixer_group_tabs.cc
+++ b/gtk2_ardour/mixer_group_tabs.cc
@@ -173,6 +173,8 @@ MixerGroupTabs::get_menu (RouteGroup* g)
MenuList& items = _menu->items ();
items.push_back (MenuElem (_("Edit..."), bind (mem_fun (*this, &MixerGroupTabs::edit_group), g)));
+ items.push_back (MenuElem (_("Subgroup"), bind (mem_fun (*this, &MixerGroupTabs::make_subgroup), g)));
+ items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Remove"), bind (mem_fun (*this, &MixerGroupTabs::remove_group), g)));
return _menu;
@@ -190,3 +192,15 @@ MixerGroupTabs::remove_group (RouteGroup *g)
{
_session->remove_route_group (*g);
}
+
+void
+MixerGroupTabs::make_subgroup (RouteGroup* g)
+{
+ g->make_subgroup ();
+}
+
+void
+MixerGroupTabs::destroy_subgroup (RouteGroup* g)
+{
+ g->destroy_subgroup ();
+}
diff --git a/gtk2_ardour/mixer_group_tabs.h b/gtk2_ardour/mixer_group_tabs.h
index 7caf981944..6f92c834e8 100644
--- a/gtk2_ardour/mixer_group_tabs.h
+++ b/gtk2_ardour/mixer_group_tabs.h
@@ -38,7 +38,9 @@ private:
void edit_group (ARDOUR::RouteGroup *);
void remove_group (ARDOUR::RouteGroup *);
-
+ void make_subgroup (ARDOUR::RouteGroup *);
+ void destroy_subgroup (ARDOUR::RouteGroup *);
+
Mixer_UI* _mixer;
Gtk::Menu* _menu;
};
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index ee7f1102b5..8877a5a823 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -517,9 +517,17 @@ RouteUI::build_sends_menu ()
sends_menu->set_name ("ArdourContextMenu");
MenuList& items = sends_menu->items();
+ items.push_back (MenuElem(_("Assign all tracks"), mem_fun (*this, &RouteUI::create_sends)));
items.push_back (MenuElem(_("Copy track gains to sends"), mem_fun (*this, &RouteUI::set_sends_gain_from_track)));
items.push_back (MenuElem(_("Set sends gain to -inf"), mem_fun (*this, &RouteUI::set_sends_gain_to_zero)));
items.push_back (MenuElem(_("Set sends gain to 0dB"), mem_fun (*this, &RouteUI::set_sends_gain_to_unity)));
+
+}
+
+void
+RouteUI::create_sends ()
+{
+ _session.globally_add_internal_sends (_route);
}
void
diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h
index 05eabab1f7..b44bf235b5 100644
--- a/gtk2_ardour/route_ui.h
+++ b/gtk2_ardour/route_ui.h
@@ -118,6 +118,7 @@ class RouteUI : public virtual AxisView
void set_sends_gain_from_track ();
void set_sends_gain_to_zero ();
void set_sends_gain_to_unity ();
+ void create_sends ();
void solo_changed(void*);
void solo_changed_so_update_mute ();
diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc
index 89bddf9869..bbfa173b41 100644
--- a/gtk2_ardour/startup.cc
+++ b/gtk2_ardour/startup.cc
@@ -70,6 +70,7 @@ Ardour will play NO role in monitoring"))
use_session_as_template_button.set_group (session_template_group);
set_keep_above (true);
+ set_resizable (false);
set_position (WIN_POS_CENTER);
set_border_width (12);
@@ -206,6 +207,8 @@ ArdourStartup::setup_audio_page ()
{
engine_dialog = manage (new EngineControl);
+ engine_dialog->set_border_width (12);
+
engine_dialog->show_all ();
audio_page_index = append_page (*engine_dialog);
@@ -235,11 +238,10 @@ using the program.</span>\
HBox* hbox = manage (new HBox);
HBox* vbox = manage (new HBox);
- hbox->set_border_width (12);
- vbox->set_border_width (12);
+ vbox->set_border_width (24);
- hbox->pack_start (*foomatic, false, true);
- vbox->pack_start (*hbox, false, true);
+ hbox->pack_start (*foomatic, true, true);
+ vbox->pack_start (*hbox, true, true);
foomatic->show ();
hbox->show ();
@@ -265,30 +267,29 @@ ArdourStartup::setup_first_time_config_page ()
default_dir_chooser = manage (new FileChooserButton (_("Default folder for Ardour sessions"),
FILE_CHOOSER_ACTION_SELECT_FOLDER));
Gtk::Label* txt = manage (new Label);
- HBox* hbox1 = manage (new HBox);
+ HBox* hbox = manage (new HBox);
VBox* vbox = manage (new VBox);
txt->set_markup (_("\
Each project that you work on with Ardour has its own folder.\n\
These can require a lot of disk space if you are recording audio.\n\
\n\
-Where would you like new Ardour sessions to be stored by default?\n\
-<i>(You can put new sessions anywhere - this is just a default)</i>"));
+Where would you like new Ardour sessions to be stored by default?\n\n\
+<i>(You can put new sessions anywhere, this is just a default)</i>"));
+ txt->set_alignment (0.0, 0.0);
- hbox1->set_border_width (6);
- vbox->set_border_width (6);
+ vbox->set_spacing (18);
+ vbox->set_border_width (24);
- hbox1->pack_start (*default_dir_chooser, false, true);
- vbox->pack_start (*txt, false, true);
- vbox->pack_start (*hbox1, false, true);
+ hbox->pack_start (*default_dir_chooser, false, true, 8);
+ vbox->pack_start (*txt, false, false);
+ vbox->pack_start (*hbox, false, true);
default_dir_chooser->set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
default_dir_chooser->signal_current_folder_changed().connect (mem_fun (*this, &ArdourStartup::default_dir_changed));
default_dir_chooser->show ();
- txt->show ();
- hbox1->show ();
- vbox->show ();
+ vbox->show_all ();
default_folder_page_index = append_page (*vbox);
set_page_title (*vbox, _("Default folder for new sessions"));
@@ -303,9 +304,11 @@ Where would you like new Ardour sessions to be stored by default?\n\
void
ArdourStartup::setup_monitoring_choice_page ()
{
- mon_vbox.set_spacing (6);
- mon_vbox.set_border_width (6);
+ mon_vbox.set_spacing (18);
+ mon_vbox.set_border_width (24);
+ HBox* hbox = manage (new HBox);
+ VBox* vbox = manage (new VBox);
RadioButton::Group g (monitor_via_hardware_button.get_group());
monitor_via_ardour_button.set_group (g);
@@ -315,16 +318,18 @@ signal as well as record it. This is called \"monitoring\". There are\n\
different ways to do this depending on the equipment you have and the\n\
configuration of that equipment. The two most common are presented here.\n\
Please choose whichever one is right for your setup.\n\n\
-<i>You can change this preference at any time, via the Options menu</i>");
+<i>(You can change this preference at any time, via the Options menu)</i>");
+ monitor_label.set_alignment (0.0, 0.0);
+
+ vbox->set_spacing (6);
+ vbox->pack_start (monitor_via_hardware_button, false, true);
+ vbox->pack_start (monitor_via_ardour_button, false, true);
+ hbox->pack_start (*vbox, true, true, 8);
mon_vbox.pack_start (monitor_label, false, false);
- mon_vbox.pack_start (monitor_via_hardware_button, false, false);
- mon_vbox.pack_start (monitor_via_ardour_button, false, false);
+ mon_vbox.pack_start (*hbox, false, false);
- mon_vbox.show ();
- monitor_label.show ();
- monitor_via_ardour_button.show ();
- monitor_via_hardware_button.show ();
+ mon_vbox.show_all ();
monitoring_page_index = append_page (mon_vbox);
set_page_title (mon_vbox, _("Monitoring Choices"));
@@ -341,7 +346,7 @@ void
ArdourStartup::setup_initial_choice_page ()
{
ic_vbox.set_spacing (6);
- ic_vbox.set_border_width (6);
+ ic_vbox.set_border_width (24);
RadioButton::Group g (ic_new_session_button.get_group());
ic_existing_session_button.set_group (g);
@@ -349,21 +354,19 @@ ArdourStartup::setup_initial_choice_page ()
HBox* centering_hbox = manage (new HBox);
VBox* centering_vbox = manage (new VBox);
+ centering_vbox->set_spacing (6);
+
centering_vbox->pack_start (ic_new_session_button, false, true);
centering_vbox->pack_start (ic_existing_session_button, false, true);
- centering_vbox->show ();
centering_hbox->pack_start (*centering_vbox, true, true);
- centering_hbox->show ();
ic_vbox.pack_start (*centering_hbox, true, true);
- ic_new_session_button.show ();
- ic_existing_session_button.show ();
- ic_vbox.show ();
+ ic_vbox.show_all ();
initial_choice_index = append_page (ic_vbox);
- set_page_title (ic_vbox, _("What would you like to do?"));
+ set_page_title (ic_vbox, _("What would you like to do ?"));
set_page_header_image (ic_vbox, icon_pixbuf);
/* user could just click on "Forward" if default
@@ -376,12 +379,10 @@ ArdourStartup::setup_initial_choice_page ()
void
ArdourStartup::setup_session_page ()
{
- session_hbox.set_border_width (12);
- session_vbox.set_border_width (12);
+ session_vbox.set_border_width (24);
session_vbox.pack_start (session_hbox, true, true);
- session_vbox.show ();
- session_hbox.show ();
+ session_vbox.show_all ();
session_page_index = append_page (session_vbox);
/* initial setting */
@@ -483,22 +484,21 @@ ArdourStartup::setup_new_session_page ()
session_hbox.remove (**session_hbox.get_children().begin());
}
- if (session_new_vbox.get_children().empty()) {
-
- session_new_vbox.set_spacing (12);
+ session_new_vbox.set_spacing (18);
+ if (session_new_vbox.get_children().empty()) {
+ VBox *vbox1 = manage (new VBox);
HBox* hbox1 = manage (new HBox);
Label* label1 = manage (new Label);
+ vbox1->set_spacing (6);
+
hbox1->set_spacing (6);
hbox1->pack_start (*label1, false, false);
hbox1->pack_start (new_name_entry, true, true);
label1->set_text (_("Session name:"));
- hbox1->show();
- label1->show();
- new_name_entry.show ();
if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
new_name_entry.set_text (Glib::path_get_basename (ARDOUR_COMMAND_LINE::session_name));
@@ -509,7 +509,7 @@ ArdourStartup::setup_new_session_page ()
new_name_entry.signal_changed().connect (mem_fun (*this, &ArdourStartup::new_name_changed));
new_name_entry.signal_activate().connect (mem_fun (*this, &ArdourStartup::move_along_now));
- session_new_vbox.pack_start (*hbox1, false, false);
+ vbox1->pack_start (*hbox1, true, true);
/* --- */
@@ -528,30 +528,42 @@ ArdourStartup::setup_new_session_page ()
new_folder_chooser.set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
}
new_folder_chooser.set_title (_("Select folder for session"));
-
- hbox2->show();
- label2->show();
- new_folder_chooser.show ();
- session_new_vbox.pack_start (*hbox2, false, false);
+ vbox1->pack_start (*hbox2, false, false);
+
+ session_new_vbox.pack_start (*vbox1, false, false);
/* --- */
+ VBox *vbox2 = manage (new VBox);
+ HBox* hbox3 = manage (new HBox);
+ Label* label3 = manage (new Label);
template_model = ListStore::create (session_template_columns);
populate_session_templates ();
+ vbox2->set_spacing (6);
+
+ label3->set_markup (_("<b>Options</b>"));
+ label3->set_alignment (0.0, 0.0);
+
+ vbox2->pack_start (*label3, false, true);
+
+ VBox *vbox3 = manage (new VBox);
+
+ vbox3->set_spacing (6);
+
if (!template_model->children().empty()) {
- HBox* hbox3 = manage (new HBox);
+ HBox* hbox4a = manage (new HBox);
use_template_button.set_label (_("Use this template"));
TreeModel::Row row = *template_model->prepend ();
row[session_template_columns.name] = (_("no template"));
row[session_template_columns.path] = string();
- hbox3->set_spacing (6);
- hbox3->pack_start (use_template_button, false, false);
- hbox3->pack_start (template_chooser, true, true);
+ hbox4a->set_spacing (6);
+ hbox4a->pack_start (use_template_button, false, false);
+ hbox4a->pack_start (template_chooser, true, true);
template_chooser.set_model (template_model);
@@ -562,11 +574,10 @@ ArdourStartup::setup_new_session_page ()
template_chooser.add_attribute (text_renderer->property_text(), session_template_columns.name);
template_chooser.set_active (0);
- hbox3->show ();
use_template_button.show();
template_chooser.show ();
- session_new_vbox.pack_start (*hbox3, false, false);
+ vbox3->pack_start (*hbox4a, false, false);
}
/* --- */
@@ -574,14 +585,13 @@ ArdourStartup::setup_new_session_page ()
if (!new_user) {
session_template_chooser.set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
- HBox* hbox3a = manage (new HBox);
+ HBox* hbox4b = manage (new HBox);
use_session_as_template_button.set_label (_("Use an existing session as a template:"));
- hbox3a->set_spacing (6);
- hbox3a->pack_start (use_session_as_template_button, false, false);
- hbox3a->pack_start (session_template_chooser, true, true);
+ hbox4b->set_spacing (6);
+ hbox4b->pack_start (use_session_as_template_button, false, false);
+ hbox4b->pack_start (session_template_chooser, true, true);
- hbox3a->show ();
use_session_as_template_button.show ();
session_template_chooser.show ();
@@ -590,26 +600,30 @@ ArdourStartup::setup_new_session_page ()
session_template_chooser.set_filter (*template_filter);
session_template_chooser.set_title (_("Select template"));
- session_new_vbox.pack_start (*hbox3a, false, false);
+ vbox3->pack_start (*hbox4b, false, false);
}
-
/* --- */
- HBox* hbox4 = manage (new HBox);
+ HBox* hbox5 = manage (new HBox);
- hbox4->set_spacing (6);
- hbox4->pack_start (more_new_session_options_button, false, false);
+ hbox5->set_spacing (6);
+ hbox5->pack_start (more_new_session_options_button, false, false);
- hbox4->show ();
more_new_session_options_button.show ();
more_new_session_options_button.signal_clicked().connect (mem_fun (*this, &ArdourStartup::more_new_session_options_button_clicked));
- session_new_vbox.pack_start (*hbox4, false, false);
+ vbox3->pack_start (*hbox5, false, false);
+ hbox3->pack_start (*vbox3, true, true, 8);
+ vbox2->pack_start (*hbox3, false, false);
+
+ /* --- */
+
+ session_new_vbox.pack_start (*vbox2, false, false);
}
- session_new_vbox.show ();
- session_hbox.pack_start (session_new_vbox, false, false);
+ session_new_vbox.show_all ();
+ session_hbox.pack_start (session_new_vbox, true, true);
set_page_title (session_vbox, _("New Session"));
set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
@@ -736,6 +750,7 @@ ArdourStartup::setup_existing_session_page ()
recent_scroller.add (recent_session_display);
recent_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
+ recent_scroller.set_shadow_type (Gtk::SHADOW_IN);
recent_session_display.show();
}
@@ -765,7 +780,7 @@ ArdourStartup::more_new_session_options_button_clicked ()
void
ArdourStartup::setup_more_options_page ()
{
- more_options_vbox.set_border_width (12);
+ 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);