summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorSakari Bergen <sakari.bergen@beatwaves.net>2011-01-06 16:55:19 +0000
committerSakari Bergen <sakari.bergen@beatwaves.net>2011-01-06 16:55:19 +0000
commit8e35583358e7df6f0f950463612740b2a8cdffb1 (patch)
treef576a405fd8717b0fa50543cfd35bd760e8c4cd1 /gtk2_ardour
parent9a400114bb2a79d503be6c6b6f95cd1572c95927 (diff)
Add stem export dialog and make all different export dialogs save their config to a different node in instant.xml
git-svn-id: svn://localhost/ardour2/branches/3.0@8465 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour.menus.in1
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc3
-rw-r--r--gtk2_ardour/editor.h1
-rw-r--r--gtk2_ardour/editor_export_audio.cc10
-rw-r--r--gtk2_ardour/export_channel_selector.cc93
-rw-r--r--gtk2_ardour/export_channel_selector.h34
-rw-r--r--gtk2_ardour/export_dialog.cc39
-rw-r--r--gtk2_ardour/export_dialog.h14
-rw-r--r--gtk2_ardour/public_editor.h3
9 files changed, 184 insertions, 14 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 428160c0f5..c257a54f7d 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -22,6 +22,7 @@
<menuitem action='importFromSession'/>
<menu name='Export' action='Export'>
<menuitem action='ExportAudio'/>
+ <menuitem action='StemExport'/>
</menu>
<menu name='Cleanup' action='Cleanup'>
<menuitem action='CleanupUnused'/>
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index 37552dee7a..387896432f 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -161,6 +161,9 @@ ARDOUR_UI::install_actions ()
act = ActionManager::register_action (main_actions, X_("ExportAudio"), _("Export To Audio File(s)..."), sigc::mem_fun (*editor, &PublicEditor::export_audio));
ActionManager::session_sensitive_actions.push_back (act);
+
+ act = ActionManager::register_action (main_actions, X_("StemExport"), _("Stem export..."), sigc::mem_fun (*editor, &PublicEditor::stem_export));
+ ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
ActionManager::session_sensitive_actions.push_back (act);
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index c4d3edeef7..8cbccefabd 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -291,6 +291,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
/* export */
void export_audio ();
+ void stem_export ();
void export_selection ();
void export_range ();
void export_region ();
diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc
index 928a9809bc..7b77f19099 100644
--- a/gtk2_ardour/editor_export_audio.cc
+++ b/gtk2_ardour/editor_export_audio.cc
@@ -59,7 +59,15 @@ using namespace Gtk;
void
Editor::export_audio ()
{
- ExportDialog dialog (*this, _("Export"));
+ ExportDialog dialog (*this, _("Export"), X_("ExportProfile"));
+ dialog.set_session (_session);
+ dialog.run();
+}
+
+void
+Editor::stem_export ()
+{
+ StemExportDialog dialog (*this);
dialog.set_session (_session);
dialog.run();
}
diff --git a/gtk2_ardour/export_channel_selector.cc b/gtk2_ardour/export_channel_selector.cc
index 8df698e853..6881b032a4 100644
--- a/gtk2_ardour/export_channel_selector.cc
+++ b/gtk2_ardour/export_channel_selector.cc
@@ -502,3 +502,96 @@ RegionExportChannelSelector::handle_selection ()
CriticalSelectionChanged ();
}
+
+TrackExportChannelSelector::TrackExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager)
+ : ExportChannelSelector(session, manager)
+{
+ track_scroller.add (track_view);
+ track_scroller.set_size_request (-1, 130);
+ track_scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+ pack_start(track_scroller);
+
+ // Track list
+ track_list = Gtk::ListStore::create (track_cols);
+ track_view.set_model (track_list);
+ track_view.set_headers_visible (true);
+
+ track_view.append_column_editable (_("Track"), track_cols.selected);
+ Gtk::CellRendererToggle *toggle = dynamic_cast<Gtk::CellRendererToggle *>(track_view.get_column_cell_renderer (0));
+ toggle->signal_toggled().connect (sigc::hide (sigc::mem_fun (*this, &TrackExportChannelSelector::update_config)));
+
+ Gtk::CellRendererText* text_renderer = Gtk::manage (new Gtk::CellRendererText);
+ text_renderer->property_editable() = false;
+
+ Gtk::TreeView::Column* column = track_view.get_column (0);
+ column->pack_start (*text_renderer);
+ column->add_attribute (text_renderer->property_text(), track_cols.label);
+
+ fill_list();
+
+ show_all_children ();
+}
+
+void
+TrackExportChannelSelector::sync_with_manager ()
+{
+ // TODO implement properly
+ update_config();
+}
+
+void
+TrackExportChannelSelector::fill_list()
+{
+ track_list->clear();
+ RouteList routes = *_session->get_routes();
+
+ for (RouteList::iterator it = routes.begin(); it != routes.end(); ++it) {
+ Route * route = it->get();
+ if(dynamic_cast<AudioTrack *>(route)) {
+ add_track(route->output().get());
+ }
+ }
+}
+
+void
+TrackExportChannelSelector::add_track(IO * io)
+{
+ Gtk::TreeModel::iterator iter = track_list->append();
+ Gtk::TreeModel::Row row = *iter;
+
+ row[track_cols.selected] = true;
+ row[track_cols.label] = io->name();
+ row[track_cols.track] = io;
+}
+
+void
+TrackExportChannelSelector::update_config()
+{
+ manager->clear_channel_configs();
+
+ for (Gtk::ListStore::Children::iterator it = track_list->children().begin(); it != track_list->children().end(); ++it) {
+ Gtk::TreeModel::Row row = *it;
+
+ if (!row[track_cols.selected]) {
+ continue;
+ }
+
+ ExportProfileManager::ChannelConfigStatePtr state = manager->add_channel_config();
+
+ IO * track = row[track_cols.track];
+ uint32_t outs = track->n_ports().n_audio();
+ for (uint32_t i = 0; i < outs; ++i) {
+ AudioPort * port = track->audio (i);
+ if(port) {
+ ExportChannelPtr channel (new PortExportChannel ());
+ PortExportChannel * pec = static_cast<PortExportChannel *> (channel.get());
+ pec->add_port(port);
+ state->config->register_channel(channel);
+ }
+ }
+
+ state->config->set_name(track->name());
+ }
+
+ CriticalSelectionChanged ();
+}
diff --git a/gtk2_ardour/export_channel_selector.h b/gtk2_ardour/export_channel_selector.h
index cfb71b34f5..63af76e77d 100644
--- a/gtk2_ardour/export_channel_selector.h
+++ b/gtk2_ardour/export_channel_selector.h
@@ -47,6 +47,7 @@ class ExportChannelSelector : public Gtk::HBox, public ARDOUR::SessionHandlePtr
{
protected:
typedef boost::shared_ptr<ARDOUR::ExportChannelConfiguration> ChannelConfigPtr;
+ typedef std::list<ChannelConfigPtr> ChannelConfigList;
typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ProfileManagerPtr;
ProfileManagerPtr manager;
@@ -225,4 +226,37 @@ class RegionExportChannelSelector : public ExportChannelSelector
Gtk::RadioButton processed_button;
};
+class TrackExportChannelSelector : public ExportChannelSelector
+{
+ public:
+ TrackExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager);
+
+ virtual void sync_with_manager ();
+
+ private:
+
+ void fill_list();
+ void add_track(ARDOUR::IO * io);
+ void update_config();
+
+ ChannelConfigList configs;
+
+ struct TrackCols : public Gtk::TreeModelColumnRecord
+ {
+ public:
+ Gtk::TreeModelColumn<ARDOUR::IO *> track;
+ Gtk::TreeModelColumn<std::string> label;
+ Gtk::TreeModelColumn<bool> selected;
+
+ TrackCols () { add (track); add(label); add(selected); }
+ };
+ TrackCols track_cols;
+
+ Glib::RefPtr<Gtk::ListStore> track_list;
+ Gtk::TreeView track_view;
+
+ Gtk::ScrolledWindow track_scroller;
+
+};
+
#endif /* __export_channel_selector_h__ */
diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc
index fac810c92f..77e75ab0a5 100644
--- a/gtk2_ardour/export_dialog.cc
+++ b/gtk2_ardour/export_dialog.cc
@@ -36,13 +36,14 @@ using namespace ARDOUR;
using namespace PBD;
using std::string;
-ExportDialog::ExportDialog (PublicEditor & editor, std::string title) :
- ArdourDialog (title),
- editor (editor),
-
- warn_label ("", Gtk::ALIGN_LEFT),
- list_files_label (_("<span color=\"#ffa755\">Some already existing files will be overwritten.</span>"), Gtk::ALIGN_RIGHT),
- list_files_button (_("List files"))
+ExportDialog::ExportDialog (PublicEditor & editor, std::string title, std::string xml_node_name)
+ : ArdourDialog (title)
+ , xml_node_name (xml_node_name)
+ , editor (editor)
+
+ , warn_label ("", Gtk::ALIGN_LEFT)
+ , list_files_label (_("<span color=\"#ffa755\">Some already existing files will be overwritten.</span>"), Gtk::ALIGN_RIGHT)
+ , list_files_button (_("List files"))
{ }
ExportDialog::~ExportDialog ()
@@ -61,7 +62,7 @@ ExportDialog::set_session (ARDOUR::Session* s)
handler = _session->get_export_handler ();
status = _session->get_export_status ();
- profile_manager.reset (new ExportProfileManager (*_session));
+ profile_manager.reset (new ExportProfileManager (*_session, xml_node_name));
/* Possibly init stuff in derived classes */
@@ -381,7 +382,7 @@ ExportDialog::add_warning (string const & text)
/*** Dialog specializations ***/
ExportRangeDialog::ExportRangeDialog (PublicEditor & editor, string range_id) :
- ExportDialog (editor, _("Export Range")),
+ ExportDialog (editor, _("Export Range"), X_("RangeExportProfile")),
range_id (range_id)
{}
@@ -395,7 +396,7 @@ ExportRangeDialog::init_components ()
}
ExportSelectionDialog::ExportSelectionDialog (PublicEditor & editor) :
- ExportDialog (editor, _("Export Selection"))
+ ExportDialog (editor, _("Export Selection"), X_("SelectionExportProfile"))
{}
void
@@ -408,7 +409,7 @@ ExportSelectionDialog::init_components ()
}
ExportRegionDialog::ExportRegionDialog (PublicEditor & editor, ARDOUR::AudioRegion const & region, ARDOUR::AudioTrack & track) :
- ExportDialog (editor, _("Export Region")),
+ ExportDialog (editor, _("Export Region"), X_("RegionExportProfile")),
region (region),
track (track)
{}
@@ -431,3 +432,19 @@ ExportRegionDialog::init_components ()
channel_selector.reset (new RegionExportChannelSelector (_session, profile_manager, region, track));
file_notebook.reset (new ExportFileNotebook ());
}
+
+StemExportDialog::StemExportDialog (PublicEditor & editor)
+ : ExportDialog(editor, _("Stem Export"), X_("StemExportProfile"))
+{
+
+}
+
+void
+StemExportDialog::init_components ()
+{
+ preset_selector.reset (new ExportPresetSelector ());
+ timespan_selector.reset (new ExportTimespanSelectorMultiple (_session, profile_manager));
+ channel_selector.reset (new TrackExportChannelSelector (_session, profile_manager));
+ file_notebook.reset (new ExportFileNotebook ());
+}
+
diff --git a/gtk2_ardour/export_dialog.h b/gtk2_ardour/export_dialog.h
index b635d4c472..5c9e346f50 100644
--- a/gtk2_ardour/export_dialog.h
+++ b/gtk2_ardour/export_dialog.h
@@ -47,7 +47,7 @@ class ExportDialog : public ArdourDialog {
public:
- explicit ExportDialog (PublicEditor & editor, std::string title);
+ ExportDialog (PublicEditor & editor, std::string title, std::string xml_node_name);
~ExportDialog ();
void set_session (ARDOUR::Session* s);
@@ -65,6 +65,7 @@ class ExportDialog : public ArdourDialog {
typedef boost::shared_ptr<ARDOUR::ExportHandler> HandlerPtr;
typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ManagerPtr;
+ std::string xml_node_name;
HandlerPtr handler;
ManagerPtr profile_manager;
@@ -160,7 +161,7 @@ class ExportSelectionDialog : public ExportDialog
class ExportRegionDialog : public ExportDialog
{
- public:
+ public:
ExportRegionDialog (PublicEditor & editor, ARDOUR::AudioRegion const & region, ARDOUR::AudioTrack & track);
private:
@@ -171,4 +172,13 @@ class ExportRegionDialog : public ExportDialog
ARDOUR::AudioTrack & track;
};
+class StemExportDialog : public ExportDialog
+{
+ public:
+ StemExportDialog (PublicEditor & editor);
+
+ private:
+ void init_components ();
+};
+
#endif /* __ardour_export_dialog_h__ */
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 2667d031b6..5d054fe174 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -210,6 +210,9 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
/** Open main export dialog */
virtual void export_audio () = 0;
+
+ /** Open stem export dialog */
+ virtual void stem_export () = 0;
/** Open export dialog with current selection pre-selected */
virtual void export_selection () = 0;