Some preparations for allowing multiple channel configurations in export channel configurations.

Also unified the timespan selector interface...


git-svn-id: svn://localhost/ardour2/branches/3.0@4748 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Sakari Bergen 2009-03-08 10:56:40 +00:00
parent b669de1e97
commit ab47be7b5a
5 changed files with 68 additions and 52 deletions

View file

@ -40,13 +40,13 @@
using namespace ARDOUR; using namespace ARDOUR;
using namespace PBD; using namespace PBD;
PortExportChannelSelector::PortExportChannelSelector () : PortExportChannelSelector::PortExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager) :
ExportChannelSelector (session, manager),
channels_label (_("Channels:"), Gtk::ALIGN_LEFT), channels_label (_("Channels:"), Gtk::ALIGN_LEFT),
split_checkbox (_("Split to mono files")), split_checkbox (_("Split to mono files")),
max_channels (20), max_channels (20),
channel_view (max_channels) channel_view (max_channels)
{ {
channels_hbox.pack_start (channels_label, false, false, 0); channels_hbox.pack_start (channels_label, false, false, 0);
channels_hbox.pack_end (channels_spinbutton, false, false, 0); channels_hbox.pack_end (channels_spinbutton, false, false, 0);
@ -78,6 +78,7 @@ PortExportChannelSelector::PortExportChannelSelector () :
/* Finalize */ /* Finalize */
sync_with_manager();
show_all_children (); show_all_children ();
} }
@ -90,10 +91,9 @@ PortExportChannelSelector::~PortExportChannelSelector ()
} }
void void
PortExportChannelSelector::set_state (ARDOUR::ExportProfileManager::ChannelConfigStatePtr const state_, ARDOUR::Session * session_) PortExportChannelSelector::sync_with_manager ()
{ {
state = state_; state = manager->get_channel_configs().front();
session = session_;
split_checkbox.set_active (state->config->get_split()); split_checkbox.set_active (state->config->get_split());
channels_spinbutton.set_value (state->config->get_n_chans()); channels_spinbutton.set_value (state->config->get_n_chans());
@ -433,8 +433,11 @@ PortExportChannelSelector::ChannelTreeView::update_selection_text (Glib::ustring
update_config (); update_config ();
} }
RegionExportChannelSelector::RegionExportChannelSelector (ARDOUR::AudioRegion const & region, ARDOUR::AudioTrack & track) : RegionExportChannelSelector::RegionExportChannelSelector (ARDOUR::Session * session,
session (0), ProfileManagerPtr manager,
ARDOUR::AudioRegion const & region,
ARDOUR::AudioTrack & track) :
ExportChannelSelector (session, manager),
region (region), region (region),
track (track), track (track),
region_chans (region.n_channels()), region_chans (region.n_channels()),
@ -458,16 +461,15 @@ RegionExportChannelSelector::RegionExportChannelSelector (ARDOUR::AudioRegion co
processed_button.signal_toggled ().connect (sigc::mem_fun (*this, &RegionExportChannelSelector::handle_selection)); processed_button.signal_toggled ().connect (sigc::mem_fun (*this, &RegionExportChannelSelector::handle_selection));
vbox.pack_start (processed_button); vbox.pack_start (processed_button);
sync_with_manager();
vbox.show_all_children (); vbox.show_all_children ();
show_all_children (); show_all_children ();
} }
void void
RegionExportChannelSelector::set_state (ARDOUR::ExportProfileManager::ChannelConfigStatePtr const state_, ARDOUR::Session * session_) RegionExportChannelSelector::sync_with_manager ()
{ {
state = state_; state = manager->get_channel_configs().front();
session = session_;
handle_selection (); handle_selection ();
} }

View file

@ -47,12 +47,21 @@ class ExportChannelSelector : public Gtk::HBox
{ {
protected: protected:
typedef boost::shared_ptr<ARDOUR::ExportChannelConfiguration> ChannelConfigPtr; typedef boost::shared_ptr<ARDOUR::ExportChannelConfiguration> ChannelConfigPtr;
typedef boost::shared_ptr<ARDOUR::ExportHandler> HandlerPtr; typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ProfileManagerPtr;
ARDOUR::Session * session;
ProfileManagerPtr manager;
public: public:
ExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager)
: session (session)
, manager (manager)
{}
virtual ~ExportChannelSelector () {} virtual ~ExportChannelSelector () {}
virtual void set_state (ARDOUR::ExportProfileManager::ChannelConfigStatePtr const state_, ARDOUR::Session * session_) = 0; virtual void sync_with_manager () = 0;
sigc::signal<void> CriticalSelectionChanged; sigc::signal<void> CriticalSelectionChanged;
}; };
@ -61,10 +70,10 @@ class PortExportChannelSelector : public ExportChannelSelector
public: public:
PortExportChannelSelector (); PortExportChannelSelector (ARDOUR::Session * session, ProfileManagerPtr manager);
~PortExportChannelSelector (); ~PortExportChannelSelector ();
void set_state (ARDOUR::ExportProfileManager::ChannelConfigStatePtr const state_, ARDOUR::Session * session_); void sync_with_manager ();
private: private:
@ -74,7 +83,6 @@ class PortExportChannelSelector : public ExportChannelSelector
typedef std::list<ARDOUR::ExportChannelPtr> CahnnelList; typedef std::list<ARDOUR::ExportChannelPtr> CahnnelList;
ARDOUR::Session * session;
ARDOUR::ExportProfileManager::ChannelConfigStatePtr state; ARDOUR::ExportProfileManager::ChannelConfigStatePtr state;
/*** GUI stuff ***/ /*** GUI stuff ***/
@ -189,15 +197,17 @@ class PortExportChannelSelector : public ExportChannelSelector
class RegionExportChannelSelector : public ExportChannelSelector class RegionExportChannelSelector : public ExportChannelSelector
{ {
public: public:
RegionExportChannelSelector (ARDOUR::AudioRegion const & region, ARDOUR::AudioTrack & track); RegionExportChannelSelector (ARDOUR::Session * session,
ProfileManagerPtr manager,
ARDOUR::AudioRegion const & region,
ARDOUR::AudioTrack & track);
virtual void set_state (ARDOUR::ExportProfileManager::ChannelConfigStatePtr const state_, ARDOUR::Session * session_); virtual void sync_with_manager ();
private: private:
void handle_selection (); void handle_selection ();
ARDOUR::Session * session;
ARDOUR::ExportProfileManager::ChannelConfigStatePtr state; ARDOUR::ExportProfileManager::ChannelConfigStatePtr state;
boost::shared_ptr<ARDOUR::RegionExportChannelFactory> factory; boost::shared_ptr<ARDOUR::RegionExportChannelFactory> factory;
ARDOUR::AudioRegion const & region; ARDOUR::AudioRegion const & region;

View file

@ -168,8 +168,8 @@ void
ExportDialog::init_components () ExportDialog::init_components ()
{ {
preset_selector.reset (new ExportPresetSelector ()); preset_selector.reset (new ExportPresetSelector ());
timespan_selector.reset (new ExportTimespanSelectorMultiple ()); timespan_selector.reset (new ExportTimespanSelectorMultiple (session, profile_manager));
channel_selector.reset (new PortExportChannelSelector ()); channel_selector.reset (new PortExportChannelSelector (session, profile_manager));
file_notebook.reset (new ExportFileNotebook ()); file_notebook.reset (new ExportFileNotebook ());
} }
@ -198,8 +198,8 @@ ExportDialog::close_dialog ()
void void
ExportDialog::sync_with_manager () ExportDialog::sync_with_manager ()
{ {
timespan_selector->set_state (profile_manager->get_timespans().front(), session); timespan_selector->sync_with_manager();
channel_selector->set_state (profile_manager->get_channel_configs().front(), session); channel_selector->sync_with_manager();
file_notebook->sync_with_manager (); file_notebook->sync_with_manager ();
update_warnings (); update_warnings ();
@ -363,8 +363,8 @@ void
ExportRangeDialog::init_components () ExportRangeDialog::init_components ()
{ {
preset_selector.reset (new ExportPresetSelector ()); preset_selector.reset (new ExportPresetSelector ());
timespan_selector.reset (new ExportTimespanSelectorSingle (range_id)); timespan_selector.reset (new ExportTimespanSelectorSingle (session, profile_manager, range_id));
channel_selector.reset (new PortExportChannelSelector ()); channel_selector.reset (new PortExportChannelSelector (session, profile_manager));
file_notebook.reset (new ExportFileNotebook ()); file_notebook.reset (new ExportFileNotebook ());
} }
@ -376,8 +376,8 @@ void
ExportSelectionDialog::init_components () ExportSelectionDialog::init_components ()
{ {
preset_selector.reset (new ExportPresetSelector ()); preset_selector.reset (new ExportPresetSelector ());
timespan_selector.reset (new ExportTimespanSelectorSingle (X_("selection"))); timespan_selector.reset (new ExportTimespanSelectorSingle (session, profile_manager, X_("selection")));
channel_selector.reset (new PortExportChannelSelector ()); channel_selector.reset (new PortExportChannelSelector (session, profile_manager));
file_notebook.reset (new ExportFileNotebook ()); file_notebook.reset (new ExportFileNotebook ());
} }
@ -401,7 +401,7 @@ ExportRegionDialog::init_components ()
Glib::ustring loc_id = profile_manager->set_single_range (region.position(), region.position() + region.length(), region.name()); Glib::ustring loc_id = profile_manager->set_single_range (region.position(), region.position() + region.length(), region.name());
preset_selector.reset (new ExportPresetSelector ()); preset_selector.reset (new ExportPresetSelector ());
timespan_selector.reset (new ExportTimespanSelectorSingle (loc_id)); timespan_selector.reset (new ExportTimespanSelectorSingle (session, profile_manager, loc_id));
channel_selector.reset (new RegionExportChannelSelector (region, track)); channel_selector.reset (new RegionExportChannelSelector (session, profile_manager, region, track));
file_notebook.reset (new ExportFileNotebook ()); file_notebook.reset (new ExportFileNotebook ());
} }

View file

@ -39,7 +39,9 @@
using namespace ARDOUR; using namespace ARDOUR;
using namespace PBD; using namespace PBD;
ExportTimespanSelector::ExportTimespanSelector () : ExportTimespanSelector::ExportTimespanSelector (ARDOUR::Session * session, ProfileManagerPtr manager) :
session (session),
manager (manager),
time_format_label (_("Show Times as:"), Gtk::ALIGN_LEFT) time_format_label (_("Show Times as:"), Gtk::ALIGN_LEFT)
{ {
@ -126,13 +128,10 @@ ExportTimespanSelector::set_time_format_from_state ()
} }
void void
ExportTimespanSelector::set_state (ARDOUR::ExportProfileManager::TimespanStatePtr const state_, ARDOUR::Session * session_) ExportTimespanSelector::sync_with_manager ()
{ {
state = state_; state = manager->get_timespans().front();
session = session_;
fill_range_list (); fill_range_list ();
CriticalSelectionChanged(); CriticalSelectionChanged();
} }
@ -293,8 +292,8 @@ ExportTimespanSelector::update_range_name (Glib::ustring const & path, Glib::ust
/*** ExportTimespanSelectorSingle ***/ /*** ExportTimespanSelectorSingle ***/
ExportTimespanSelectorSingle::ExportTimespanSelectorSingle (Glib::ustring range_id) : ExportTimespanSelectorSingle::ExportTimespanSelectorSingle (ARDOUR::Session * session, ProfileManagerPtr manager, Glib::ustring range_id) :
ExportTimespanSelector (), ExportTimespanSelector (session, manager),
range_id (range_id) range_id (range_id)
{ {
range_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_NEVER); range_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_NEVER);
@ -358,8 +357,8 @@ ExportTimespanSelectorSingle::fill_range_list ()
/*** ExportTimespanSelectorMultiple ***/ /*** ExportTimespanSelectorMultiple ***/
ExportTimespanSelectorMultiple::ExportTimespanSelectorMultiple () : ExportTimespanSelectorMultiple::ExportTimespanSelectorMultiple (ARDOUR::Session * session, ProfileManagerPtr manager) :
ExportTimespanSelector () ExportTimespanSelector (session, manager)
{ {
range_scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); range_scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
range_view.append_column_editable ("", range_cols.selected); range_view.append_column_editable ("", range_cols.selected);

View file

@ -43,26 +43,31 @@ using ARDOUR::CDMarkerFormat;
/// Timespan Selector base /// Timespan Selector base
class ExportTimespanSelector : public Gtk::VBox { class ExportTimespanSelector : public Gtk::VBox {
protected:
typedef std::list<ARDOUR::Location *> LocationList;
typedef boost::shared_ptr<ARDOUR::ExportHandler> HandlerPtr;
typedef boost::shared_ptr<ARDOUR::ExportProfileManager> ProfileManagerPtr;
typedef boost::shared_ptr<ARDOUR::ExportTimespan> TimespanPtr;
typedef std::list<TimespanPtr> TimespanList;
typedef boost::shared_ptr<TimespanList> TimespanListPtr;
typedef ARDOUR::ExportProfileManager::TimespanStatePtr TimespanStatePtr;
public: public:
ExportTimespanSelector (); ExportTimespanSelector (ARDOUR::Session * session, ProfileManagerPtr manager);
virtual ~ExportTimespanSelector (); virtual ~ExportTimespanSelector ();
void set_state (ARDOUR::ExportProfileManager::TimespanStatePtr const state_, ARDOUR::Session * session_); void sync_with_manager ();
sigc::signal<void> CriticalSelectionChanged; sigc::signal<void> CriticalSelectionChanged;
protected: protected:
typedef std::list<ARDOUR::Location *> LocationList; ARDOUR::Session * session;
typedef boost::shared_ptr<ARDOUR::ExportHandler> HandlerPtr; ProfileManagerPtr manager;
TimespanStatePtr state;
typedef boost::shared_ptr<ARDOUR::ExportTimespan> TimespanPtr;
typedef std::list<TimespanPtr> TimespanList;
typedef boost::shared_ptr<TimespanList> TimespanListPtr;
ARDOUR::Session * session;
ARDOUR::ExportProfileManager::TimespanStatePtr state;
virtual void fill_range_list () = 0; virtual void fill_range_list () = 0;
@ -123,7 +128,7 @@ class ExportTimespanSelector : public Gtk::VBox {
class ExportTimespanSelectorMultiple : public ExportTimespanSelector class ExportTimespanSelectorMultiple : public ExportTimespanSelector
{ {
public: public:
ExportTimespanSelectorMultiple (); ExportTimespanSelectorMultiple (ARDOUR::Session * session, ProfileManagerPtr manager);
private: private:
@ -138,7 +143,7 @@ class ExportTimespanSelectorMultiple : public ExportTimespanSelector
class ExportTimespanSelectorSingle : public ExportTimespanSelector class ExportTimespanSelectorSingle : public ExportTimespanSelector
{ {
public: public:
ExportTimespanSelectorSingle (Glib::ustring range_id); ExportTimespanSelectorSingle (ARDOUR::Session * session, ProfileManagerPtr manager, Glib::ustring range_id);
private: private: