rework Stateful::set_state() patch to avoid default version argument

git-svn-id: svn://localhost/ardour2/branches/3.0@5787 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2009-10-15 18:56:11 +00:00
parent 79f91c7a20
commit 8713667ec1
120 changed files with 270 additions and 236 deletions

View file

@ -100,7 +100,7 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
ensure_xml_node (); ensure_xml_node ();
set_state (*xml_node); set_state (*xml_node, Stateful::loading_state_version);
/* if set_state above didn't create a gain automation child, we need to make one */ /* if set_state above didn't create a gain automation child, we need to make one */
if (automation_track (GainAutomation) == 0) { if (automation_track (GainAutomation) == 0) {

View file

@ -1264,7 +1264,7 @@ int
AutomationLine::set_state (const XMLNode &node, int version) AutomationLine::set_state (const XMLNode &node, int version)
{ {
/* function as a proxy for the model */ /* function as a proxy for the model */
return alist->set_state (node); return alist->set_state (node, version);
} }
void void

View file

@ -125,7 +125,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulThingWithGoin
bool is_first_point (ControlPoint &); bool is_first_point (ControlPoint &);
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
void set_colors(); void set_colors();
void modify_point_y (ControlPoint&, double); void modify_point_y (ControlPoint&, double);

View file

@ -194,7 +194,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
_control->parameter()); _control->parameter());
if (xml_node) { if (xml_node) {
set_state (*xml_node); set_state (*xml_node, Stateful::loading_state_version);
} }
/* ask for notifications of any new RegionViews */ /* ask for notifications of any new RegionViews */
@ -867,7 +867,7 @@ AutomationTimeAxisView::color_handler ()
int int
AutomationTimeAxisView::set_state (const XMLNode& node, int version) AutomationTimeAxisView::set_state (const XMLNode& node, int version)
{ {
TimeAxisView::set_state (node); TimeAxisView::set_state (node, version);
XMLProperty const * type = node.property ("automation-id"); XMLProperty const * type = node.property ("automation-id");
if (type && type->value () == ARDOUR::EventTypeMap::instance().to_symbol (_control->parameter())) { if (type && type->value () == ARDOUR::EventTypeMap::instance().to_symbol (_control->parameter())) {

View file

@ -90,7 +90,7 @@ class AutomationTimeAxisView : public TimeAxisView {
bool paste (nframes_t, float times, Selection&, size_t nth); bool paste (nframes_t, float times, Selection&, size_t nth);
void reset_objects (PointSelection&); void reset_objects (PointSelection&);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
guint32 show_at (double y, int& nth, Gtk::VBox *parent); guint32 show_at (double y, int& nth, Gtk::VBox *parent);
void hide (); void hide ();

View file

@ -614,7 +614,7 @@ Editor::Editor ()
set_edit_point_preference (EditAtMouse, true); set_edit_point_preference (EditAtMouse, true);
XMLNode* node = ARDOUR_UI::instance()->editor_settings(); XMLNode* node = ARDOUR_UI::instance()->editor_settings();
set_state (*node); set_state (*node, Stateful::loading_state_version);
_playlist_selector = new PlaylistSelector(); _playlist_selector = new PlaylistSelector();
_playlist_selector->signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), static_cast<Window *> (_playlist_selector))); _playlist_selector->signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), static_cast<Window *> (_playlist_selector)));
@ -1061,7 +1061,7 @@ Editor::connect_to_session (Session *t)
sensitize_the_right_region_actions (false); sensitize_the_right_region_actions (false);
XMLNode* node = ARDOUR_UI::instance()->editor_settings(); XMLNode* node = ARDOUR_UI::instance()->editor_settings();
set_state (*node); set_state (*node, Stateful::loading_state_version);
/* catch up with the playhead */ /* catch up with the playhead */
@ -4245,7 +4245,7 @@ Editor::use_visual_state (VisualState& vs)
/* check if the track still exists - it could have been deleted */ /* check if the track still exists - it could have been deleted */
if ((t = find (track_views.begin(), track_views.end(), i->first)) != track_views.end()) { if ((t = find (track_views.begin(), track_views.end(), i->first)) != track_views.end()) {
(*t)->set_state (*(i->second)); (*t)->set_state (*(i->second), Stateful::loading_state_version);
} }
} }

View file

@ -180,7 +180,7 @@ class Editor : public PublicEditor
void redo (uint32_t n = 1); void redo (uint32_t n = 1);
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
void set_mouse_mode (Editing::MouseMode, bool force=true); void set_mouse_mode (Editing::MouseMode, bool force=true);
void step_mouse_mode (bool next); void step_mouse_mode (bool next);

View file

@ -129,7 +129,7 @@ Keyboard::Keyboard ()
snooper_id = gtk_key_snooper_install (_snooper, (gpointer) this); snooper_id = gtk_key_snooper_install (_snooper, (gpointer) this);
XMLNode* node = ARDOUR_UI::instance()->keyboard_settings(); XMLNode* node = ARDOUR_UI::instance()->keyboard_settings();
set_state (*node); set_state (*node, Stateful::loading_state_version);
} }
Keyboard::~Keyboard () Keyboard::~Keyboard ()

View file

@ -40,7 +40,7 @@ class Keyboard : public sigc::trackable, PBD::Stateful
~Keyboard (); ~Keyboard ();
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
typedef std::vector<uint32_t> State; typedef std::vector<uint32_t> State;
typedef uint32_t ModifierMask; typedef uint32_t ModifierMask;

View file

@ -136,7 +136,7 @@ MidiTimeAxisView::MidiTimeAxisView (PublicEditor& ed, Session& sess,
ensure_xml_node (); ensure_xml_node ();
set_state (*xml_node); set_state (*xml_node, Stateful::loading_state_version);
_route->processors_changed.connect (mem_fun(*this, &MidiTimeAxisView::processors_changed)); _route->processors_changed.connect (mem_fun(*this, &MidiTimeAxisView::processors_changed));

View file

@ -385,7 +385,7 @@ RouteTimeAxisView::automation_click ()
int int
RouteTimeAxisView::set_state (const XMLNode& node, int version) RouteTimeAxisView::set_state (const XMLNode& node, int version)
{ {
TimeAxisView::set_state (node); TimeAxisView::set_state (node, version);
XMLNodeList kids = node.children(); XMLNodeList kids = node.children();
XMLNodeConstIterator iter; XMLNodeConstIterator iter;

View file

@ -114,7 +114,7 @@ public:
void remove_underlay (StreamView*); void remove_underlay (StreamView*);
void build_underlay_menu(Gtk::Menu*); void build_underlay_menu(Gtk::Menu*);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
/* This is a bit nasty to expose :/ */ /* This is a bit nasty to expose :/ */
struct RouteAutomationNode { struct RouteAutomationNode {

View file

@ -709,6 +709,9 @@ SessionMetadataImporter::run ()
return; return;
} }
/* XXX GET VERSION FROM TREE */
int version = 3000;
XMLNode * node = session_tree.root()->child ("Metadata"); XMLNode * node = session_tree.root()->child ("Metadata");
if (!node) { if (!node) {
@ -717,7 +720,7 @@ SessionMetadataImporter::run ()
} }
ARDOUR::SessionMetadata data; ARDOUR::SessionMetadata data;
data.set_state (*node); data.set_state (*node, version);
init_data (); init_data ();
load_extra_data (data); load_extra_data (data);

View file

@ -93,7 +93,7 @@ class TimeAxisView : public virtual AxisView, public PBD::Stateful
virtual ~TimeAxisView (); virtual ~TimeAxisView ();
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
/** @return index of this TimeAxisView within its parent */ /** @return index of this TimeAxisView within its parent */
int order () const { return _order; } int order () const { return _order; }

View file

@ -86,7 +86,7 @@ UIConfiguration::load_defaults ()
return -1; return -1;
} }
if (set_state (*tree.root())) { if (set_state (*tree.root(), Stateful::loading_state_version)) {
error << string_compose(_("Ardour: default ui configuration file \"%1\" not loaded successfully."), rcfile) << endmsg; error << string_compose(_("Ardour: default ui configuration file \"%1\" not loaded successfully."), rcfile) << endmsg;
return -1; return -1;
} }
@ -116,7 +116,7 @@ UIConfiguration::load_state ()
return -1; return -1;
} }
if (set_state (*tree.root())) { if (set_state (*tree.root(), Stateful::loading_state_version)) {
error << string_compose(_("Ardour: default ui configuration file \"%1\" not loaded successfully."), rcfile) << endmsg; error << string_compose(_("Ardour: default ui configuration file \"%1\" not loaded successfully."), rcfile) << endmsg;
return -1; return -1;
} }
@ -139,7 +139,7 @@ UIConfiguration::load_state ()
return -1; return -1;
} }
if (set_state (*tree.root())) { if (set_state (*tree.root(), Stateful::loading_state_version)) {
error << string_compose(_("Ardour: user ui configuration file \"%1\" not loaded successfully."), rcfile) << endmsg; error << string_compose(_("Ardour: user ui configuration file \"%1\" not loaded successfully."), rcfile) << endmsg;
return -1; return -1;
} }

View file

@ -80,7 +80,7 @@ class UIConfiguration : public PBD::Stateful
int save_state (); int save_state ();
int load_defaults (); int load_defaults ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
XMLNode& get_state (void); XMLNode& get_state (void);
XMLNode& get_variables (std::string); XMLNode& get_variables (std::string);
void set_variables (const XMLNode&); void set_variables (const XMLNode&);

View file

@ -339,7 +339,7 @@ Amp::set_state (const XMLNode& node, int version)
{ {
const XMLProperty* prop; const XMLProperty* prop;
Processor::set_state (node); Processor::set_state (node, version);
prop = node.property ("gain"); prop = node.property ("gain");
if (prop) { if (prop) {

View file

@ -55,7 +55,7 @@ public:
void apply_gain_automation(bool yn) { _apply_gain_automation = yn; } void apply_gain_automation(bool yn) { _apply_gain_automation = yn; }
XMLNode& state (bool full); XMLNode& state (bool full);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
static void apply_gain (BufferSet& bufs, nframes_t nframes, gain_t initial, gain_t target); static void apply_gain (BufferSet& bufs, nframes_t nframes, gain_t initial, gain_t target);
static void apply_simple_gain(BufferSet& bufs, nframes_t nframes, gain_t target); static void apply_simple_gain(BufferSet& bufs, nframes_t nframes, gain_t target);

View file

@ -126,7 +126,7 @@ class AudioDiskstream : public Diskstream
/* stateful */ /* stateful */
XMLNode& get_state(void); XMLNode& get_state(void);
int set_state(const XMLNode& node, int version = 3000); int set_state(const XMLNode& node, int version);
void monitor_input (bool); void monitor_input (bool);

View file

@ -55,7 +55,7 @@ class AudioTrack : public Track
boost::shared_ptr<Region> bounce (InterThreadInfo&); boost::shared_ptr<Region> bounce (InterThreadInfo&);
boost::shared_ptr<Region> bounce_range (nframes_t start, nframes_t end, InterThreadInfo&, bool enable_processing); boost::shared_ptr<Region> bounce_range (nframes_t start, nframes_t end, InterThreadInfo&, bool enable_processing);
int set_state(const XMLNode&, int version = 3000); int set_state(const XMLNode&, int version);
protected: protected:
XMLNode& state (bool full); XMLNode& state (bool full);

View file

@ -72,7 +72,7 @@ public:
int setup_peakfile (); int setup_peakfile ();
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
bool can_truncate_peaks() const { return !destructive(); } bool can_truncate_peaks() const { return !destructive(); }
bool can_be_analysed() const { return _length > 0; } bool can_be_analysed() const { return _length > 0; }

View file

@ -50,7 +50,7 @@ class AudioPlaylist : public ARDOUR::Playlist
nframes_t read (Sample *dst, Sample *mixdown, float *gain_buffer, nframes_t start, nframes_t cnt, uint32_t chan_n=0); nframes_t read (Sample *dst, Sample *mixdown, float *gain_buffer, nframes_t start, nframes_t cnt, uint32_t chan_n=0);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
sigc::signal<void,boost::shared_ptr<Crossfade> > NewCrossfade; sigc::signal<void,boost::shared_ptr<Crossfade> > NewCrossfade;

View file

@ -107,7 +107,7 @@ class AudioRegion : public Region
virtual nframes_t read_raw_internal (Sample*, sframes_t, nframes_t, int channel) const; virtual nframes_t read_raw_internal (Sample*, sframes_t, nframes_t, int channel) const;
XMLNode& state (bool); XMLNode& state (bool);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
static void set_default_fade (float steepness, nframes_t len); static void set_default_fade (float steepness, nframes_t len);
bool fade_in_is_default () const; bool fade_in_is_default () const;
@ -219,7 +219,7 @@ class AudioRegion : public Region
AudioRegion (Session& s, nframes_t, nframes_t, std::string name); AudioRegion (Session& s, nframes_t, nframes_t, std::string name);
int set_live_state (const XMLNode&, Change&, bool send); int set_live_state (const XMLNode&, int version, Change&, bool send);
}; };
} /* namespace ARDOUR */ } /* namespace ARDOUR */

View file

@ -79,7 +79,7 @@ class AudioSource : virtual public Source,
mutable sigc::signal<void,nframes_t,nframes_t> PeakRangeReady; mutable sigc::signal<void,nframes_t,nframes_t> PeakRangeReady;
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
int rename_peakfile (Glib::ustring newpath); int rename_peakfile (Glib::ustring newpath);
void touch_peakfile (); void touch_peakfile ();

View file

@ -80,7 +80,7 @@ class AutomationList : public PBD::StatefulDestructible, public Evoral::ControlL
bool touching() const { return _touching; } bool touching() const { return _touching; }
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode &, int version = 3000); int set_state (const XMLNode &, int version);
XMLNode& state (bool full); XMLNode& state (bool full);
XMLNode& serialize_events (); XMLNode& serialize_events ();

View file

@ -70,7 +70,7 @@ struct ControlProtocolInfo {
void set_protocol_states (const XMLNode&); void set_protocol_states (const XMLNode&);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
XMLNode& get_state (void); XMLNode& get_state (void);
private: private:

View file

@ -75,7 +75,7 @@ class Crossfade : public ARDOUR::AudioRegion
bool operator== (const ARDOUR::Crossfade&); bool operator== (const ARDOUR::Crossfade&);
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
boost::shared_ptr<ARDOUR::AudioRegion> in() const { return _in; } boost::shared_ptr<ARDOUR::AudioRegion> in() const { return _in; }
boost::shared_ptr<ARDOUR::AudioRegion> out() const { return _out; } boost::shared_ptr<ARDOUR::AudioRegion> out() const { return _out; }

View file

@ -89,7 +89,7 @@ public:
static sigc::signal<void,nframes_t> CycleStart; static sigc::signal<void,nframes_t> CycleStart;
XMLNode& state (bool full); XMLNode& state (bool full);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
/* Panning */ /* Panning */

View file

@ -130,7 +130,7 @@ class Diskstream : public SessionObject, public boost::noncopyable
/* Stateful */ /* Stateful */
virtual XMLNode& get_state(void) = 0; virtual XMLNode& get_state(void) = 0;
virtual int set_state(const XMLNode&, int version = 3000) = 0; virtual int set_state(const XMLNode&, int version) = 0;
virtual void monitor_input (bool) {} virtual void monitor_input (bool) {}

View file

@ -46,7 +46,7 @@ public:
bool is_embedded () const { return _is_embedded; } bool is_embedded () const { return _is_embedded; }
uint16_t channel() const { return _channel; } uint16_t channel() const { return _channel; }
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
int set_source_name (const Glib::ustring& newname, bool destructive); int set_source_name (const Glib::ustring& newname, bool destructive);

View file

@ -38,7 +38,7 @@ class InternalReturn : public Return
XMLNode& state(bool full); XMLNode& state(bool full);
XMLNode& get_state(void); XMLNode& get_state(void);
int set_state(const XMLNode&, int version = 3000); int set_state(const XMLNode&, int version);
void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes); void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes);
bool configure_io (ChanCount in, ChanCount out); bool configure_io (ChanCount in, ChanCount out);

View file

@ -38,7 +38,7 @@ class InternalSend : public Send
XMLNode& state(bool full); XMLNode& state(bool full);
XMLNode& get_state(void); XMLNode& get_state(void);
int set_state(const XMLNode& node, int version = 3000); int set_state(const XMLNode& node, int version);
void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes); void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes);
bool feeds (boost::shared_ptr<Route> other) const; bool feeds (boost::shared_ptr<Route> other) const;

View file

@ -137,7 +137,7 @@ class IO : public SessionObject, public Latent
virtual XMLNode& state (bool full); virtual XMLNode& state (bool full);
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
int set_state_2X (const XMLNode&, int, bool); int set_state_2X (const XMLNode&, int, bool);
static int disable_connecting (void); static int disable_connecting (void);

View file

@ -72,7 +72,7 @@ class IOProcessor : public Processor
sigc::signal<void,IOProcessor*,uint32_t> AutomationChanged; sigc::signal<void,IOProcessor*,uint32_t> AutomationChanged;
XMLNode& state (bool full_state); XMLNode& state (bool full_state);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
protected: protected:
boost::shared_ptr<IO> _input; boost::shared_ptr<IO> _input;

View file

@ -99,7 +99,7 @@ class LadspaPlugin : public ARDOUR::Plugin
bool parameter_is_toggled(uint32_t) const; bool parameter_is_toggled(uint32_t) const;
XMLNode& get_state(); XMLNode& get_state();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
bool save_preset(std::string name); bool save_preset(std::string name);
bool has_editor() const { return false; } bool has_editor() const { return false; }
@ -133,7 +133,7 @@ class LadspaPlugin : public ARDOUR::Plugin
void init (void *mod, uint32_t index, nframes_t rate); void init (void *mod, uint32_t index, nframes_t rate);
void run_in_place (nframes_t nsamples); void run_in_place (nframes_t nsamples);
void latency_compute_run (); void latency_compute_run ();
int set_state_2X (const XMLNode&, int version = 3000); int set_state_2X (const XMLNode&, int version);
}; };
class LadspaPluginInfo : public PluginInfo { class LadspaPluginInfo : public PluginInfo {

View file

@ -71,7 +71,7 @@ class Location : public PBD::StatefulDestructible
} }
Location (const Location& other); Location (const Location& other);
Location (const XMLNode&, int version = 3000); Location (const XMLNode&);
Location* operator= (const Location& other); Location* operator= (const Location& other);
bool locked() const { return _locked; } bool locked() const { return _locked; }
@ -125,7 +125,7 @@ class Location : public PBD::StatefulDestructible
XMLNode& cd_info_node (const std::string &, const std::string &); XMLNode& cd_info_node (const std::string &, const std::string &);
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
private: private:
std::string _name; std::string _name;
@ -155,7 +155,7 @@ class Locations : public PBD::StatefulDestructible
void clear_ranges (); void clear_ranges ();
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
Location *get_location_by_id(PBD::ID); Location *get_location_by_id(PBD::ID);
Location* auto_loop_location () const; Location* auto_loop_location () const;

View file

@ -115,7 +115,7 @@ class LV2Plugin : public ARDOUR::Plugin
static uint32_t midi_event_type() { return _midi_event_type; } static uint32_t midi_event_type() { return _midi_event_type; }
XMLNode& get_state(); XMLNode& get_state();
int set_state(const XMLNode& node); int set_state(const XMLNode& node, int version);
bool save_preset(std::string uri); bool save_preset(std::string uri);
bool load_preset(const std::string uri); bool load_preset(const std::string uri);
virtual std::vector<Plugin::PresetRecord> get_presets(); virtual std::vector<Plugin::PresetRecord> get_presets();

View file

@ -75,7 +75,7 @@ class MidiDiskstream : public Diskstream
/* stateful */ /* stateful */
XMLNode& get_state(void); XMLNode& get_state(void);
int set_state(const XMLNode&, int version = 3000); int set_state(const XMLNode&, int version);
void monitor_input (bool); void monitor_input (bool);

View file

@ -70,7 +70,7 @@ public:
void operator()(); void operator()();
void undo(); void undo();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
XMLNode& get_state (); XMLNode& get_state ();
void add(const boost::shared_ptr< Evoral::Note<TimeType> > note); void add(const boost::shared_ptr< Evoral::Note<TimeType> > note);
@ -114,7 +114,7 @@ public:
void operator()(); void operator()();
void undo(); void undo();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
XMLNode& get_state (); XMLNode& get_state ();
void change (const boost::shared_ptr<Evoral::Note<TimeType> > note, void change (const boost::shared_ptr<Evoral::Note<TimeType> > note,

View file

@ -50,7 +50,7 @@ public:
nframes_t read (MidiRingBuffer<nframes_t>& buf, nframes_t read (MidiRingBuffer<nframes_t>& buf,
nframes_t start, nframes_t cnt, uint32_t chan_n=0); nframes_t start, nframes_t cnt, uint32_t chan_n=0);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
bool destroy_region (boost::shared_ptr<Region>); bool destroy_region (boost::shared_ptr<Region>);

View file

@ -68,7 +68,7 @@ class MidiRegion : public Region
NoteMode mode = Sustained) const; NoteMode mode = Sustained) const;
XMLNode& state (bool); XMLNode& state (bool);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
int separate_by_channel (ARDOUR::Session&, std::vector< boost::shared_ptr<Region> >&) const; int separate_by_channel (ARDOUR::Session&, std::vector< boost::shared_ptr<Region> >&) const;
@ -118,7 +118,7 @@ class MidiRegion : public Region
protected: protected:
int set_live_state (const XMLNode&, Change&, bool send); int set_live_state (const XMLNode&, int version, Change&, bool send);
}; };
} /* namespace ARDOUR */ } /* namespace ARDOUR */

View file

@ -91,7 +91,7 @@ class MidiSource : virtual public Source
mutable sigc::signal<void,sframes_t,nframes_t> ViewDataRangeReady; mutable sigc::signal<void,sframes_t,nframes_t> ViewDataRangeReady;
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
bool length_mutable() const { return true; } bool length_mutable() const { return true; }

View file

@ -59,7 +59,7 @@ public:
boost::shared_ptr<Region> bounce_range ( boost::shared_ptr<Region> bounce_range (
nframes_t start, nframes_t end, InterThreadInfo&, bool enable_processing); nframes_t start, nframes_t end, InterThreadInfo&, bool enable_processing);
int set_state(const XMLNode&, int version = 3000); int set_state(const XMLNode&, int version);
void midi_panic(void); void midi_panic(void);
bool write_immediate_event(size_t size, const uint8_t* buf); bool write_immediate_event(size_t size, const uint8_t* buf);

View file

@ -65,7 +65,7 @@ class MuteMaster : public AutomationControl
sigc::signal<void> MutePointChanged; sigc::signal<void> MutePointChanged;
XMLNode& get_state(); XMLNode& get_state();
int set_state(const XMLNode&, int version = 3000); int set_state(const XMLNode&, int version);
private: private:
AutomationList* _automation; AutomationList* _automation;

View file

@ -44,7 +44,7 @@ struct NamedSelection : public PBD::Stateful
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
static sigc::signal<void,NamedSelection*> NamedSelectionCreated; static sigc::signal<void,NamedSelection*> NamedSelectionCreated;
}; };

View file

@ -73,7 +73,7 @@ class StreamPanner : public sigc::trackable, public PBD::Stateful
sigc::signal<void> Changed; /* for position */ sigc::signal<void> Changed; /* for position */
sigc::signal<void> StateChanged; /* for mute */ sigc::signal<void> StateChanged; /* for mute */
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
virtual XMLNode& state (bool full_state) = 0; virtual XMLNode& state (bool full_state) = 0;
Panner & get_parent() { return parent; } Panner & get_parent() { return parent; }
@ -150,7 +150,7 @@ class EqualPowerStereoPanner : public BaseStereoPanner
XMLNode& state (bool full_state); XMLNode& state (bool full_state);
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
private: private:
void update (); void update ();
@ -171,7 +171,7 @@ class Multi2dPanner : public StreamPanner
XMLNode& state (bool full_state); XMLNode& state (bool full_state);
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
/* old school automation loading */ /* old school automation loading */
@ -228,7 +228,7 @@ public:
XMLNode& get_state (void); XMLNode& get_state (void);
XMLNode& state (bool full); XMLNode& state (bool full);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
static bool equivalent (pan_t a, pan_t b) { static bool equivalent (pan_t a, pan_t b) {
return fabsf (a - b) < 0.002; // about 1 degree of arc for a stereo panner return fabsf (a - b) < 0.002; // about 1 degree of arc for a stereo panner

View file

@ -124,7 +124,7 @@ class Playlist : public SessionObject,
void foreach_region (sigc::slot<void, boost::shared_ptr<Region> >); void foreach_region (sigc::slot<void, boost::shared_ptr<Region> >);
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
XMLNode& get_template (); XMLNode& get_template ();
sigc::signal<void,bool> InUse; sigc::signal<void,bool> InUse;

View file

@ -45,14 +45,14 @@ class PluginInsert : public Processor
{ {
public: public:
PluginInsert (Session&, boost::shared_ptr<Plugin>); PluginInsert (Session&, boost::shared_ptr<Plugin>);
PluginInsert (Session&, const XMLNode&, int version = 3000); PluginInsert (Session&, const XMLNode&);
~PluginInsert (); ~PluginInsert ();
static const std::string port_automation_node_name; static const std::string port_automation_node_name;
XMLNode& state(bool); XMLNode& state(bool);
XMLNode& get_state(void); XMLNode& get_state(void);
int set_state(const XMLNode&, int version = 3000); int set_state(const XMLNode&, int version);
void run (BufferSet& in, sframes_t start_frame, sframes_t end_frame, nframes_t nframes); void run (BufferSet& in, sframes_t start_frame, sframes_t end_frame, nframes_t nframes);
void silence (nframes_t nframes); void silence (nframes_t nframes);

View file

@ -44,12 +44,12 @@ class PortInsert : public IOProcessor
{ {
public: public:
PortInsert (Session&, boost::shared_ptr<MuteMaster> mm); PortInsert (Session&, boost::shared_ptr<MuteMaster> mm);
PortInsert (Session&, boost::shared_ptr<MuteMaster> mm, const XMLNode&, int version = 3000); PortInsert (Session&, boost::shared_ptr<MuteMaster> mm, const XMLNode&);
~PortInsert (); ~PortInsert ();
XMLNode& state(bool full); XMLNode& state(bool full);
XMLNode& get_state(void); XMLNode& get_state(void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes); void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes);

View file

@ -91,7 +91,7 @@ class Processor : public SessionObject, public AutomatableControls, public Laten
virtual XMLNode& state (bool full); virtual XMLNode& state (bool full);
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
void *get_gui () const { return _gui; } void *get_gui () const { return _gui; }
void set_gui (void *p) { _gui = p; } void set_gui (void *p) { _gui = p; }

View file

@ -37,7 +37,7 @@ class RCConfiguration : public Configuration
RCConfiguration(); RCConfiguration();
void map_parameters (sigc::slot<void, std::string>); void map_parameters (sigc::slot<void, std::string>);
int set_state (XMLNode const &, int version = 3000); int set_state (XMLNode const &, int version);
XMLNode& get_state (); XMLNode& get_state ();
XMLNode& get_variables (); XMLNode& get_variables ();
void set_variables (XMLNode const &); void set_variables (XMLNode const &);

View file

@ -241,8 +241,8 @@ class Region
XMLNode& get_state (); XMLNode& get_state ();
virtual XMLNode& state (bool); virtual XMLNode& state (bool);
virtual int set_state (const XMLNode&, int version = 3000); virtual int set_state (const XMLNode&, int version);
virtual int set_live_state (const XMLNode&, Change&, bool send); virtual int set_live_state (const XMLNode&, int version, Change&, bool send);
virtual boost::shared_ptr<Region> get_parent() const; virtual boost::shared_ptr<Region> get_parent() const;

View file

@ -54,7 +54,7 @@ public:
XMLNode& state(bool full); XMLNode& state(bool full);
XMLNode& get_state(void); XMLNode& get_state(void);
int set_state(const XMLNode&, int version = 3000); int set_state(const XMLNode&, int version);
uint32_t pans_required() const { return _configured_input.n_audio(); } uint32_t pans_required() const { return _configured_input.n_audio(); }

View file

@ -66,9 +66,8 @@ class Route : public SessionObject, public AutomatableControls
ControlOut = 0x4 ControlOut = 0x4
}; };
Route (Session&, std::string name, Flag flags = Flag(0), Route (Session&, std::string name, Flag flags = Flag(0), DataType default_type = DataType::AUDIO);
DataType default_type = DataType::AUDIO); Route (Session&, const XMLNode&, DataType default_type = DataType::AUDIO);
Route (Session&, const XMLNode&, int, DataType default_type = DataType::AUDIO);
virtual ~Route(); virtual ~Route();
boost::shared_ptr<IO> input() const { return _input; } boost::shared_ptr<IO> input() const { return _input; }
@ -251,7 +250,7 @@ class Route : public SessionObject, public AutomatableControls
/* stateful */ /* stateful */
XMLNode& get_state(); XMLNode& get_state();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
virtual XMLNode& get_template(); virtual XMLNode& get_template();
XMLNode& get_processor_state (); XMLNode& get_processor_state ();

View file

@ -131,7 +131,7 @@ public:
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
private: private:
Session& _session; Session& _session;

View file

@ -53,7 +53,7 @@ class Send : public Delivery
XMLNode& state(bool full); XMLNode& state(bool full);
XMLNode& get_state(void); XMLNode& get_state(void);
int set_state(const XMLNode&, int version = 3000); int set_state(const XMLNode&, int version);
uint32_t pans_required() const { return _configured_input.n_audio(); } uint32_t pans_required() const { return _configured_input.n_audio(); }

View file

@ -468,7 +468,7 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable
static std::vector<std::string*>* possible_states (std::string path); static std::vector<std::string*>* possible_states (std::string path);
XMLNode& get_state(); XMLNode& get_state();
int set_state(const XMLNode& node, int version = 3000); // not idempotent int set_state(const XMLNode& node, int version); // not idempotent
XMLNode& get_template(); XMLNode& get_template();
/// The instant xml file is written to the session directory /// The instant xml file is written to the session directory
@ -849,7 +849,7 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable
public: public:
GlobalRouteStateCommand (Session&, void*); GlobalRouteStateCommand (Session&, void*);
GlobalRouteStateCommand (Session&, const XMLNode& node); GlobalRouteStateCommand (Session&, const XMLNode& node);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
XMLNode& get_state (); XMLNode& get_state ();
protected: protected:
@ -899,7 +899,7 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable
void operator()(); void operator()();
void undo(); void undo();
XMLNode &get_state(); XMLNode &get_state();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
void mark(); void mark();
protected: protected:
@ -1170,8 +1170,8 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable
std::string _current_snapshot_name; std::string _current_snapshot_name;
XMLTree* state_tree; XMLTree* state_tree;
bool state_was_pending; bool state_was_pending;
StateOfTheState _state_of_the_state; StateOfTheState _state_of_the_state;
void auto_save(); void auto_save();

View file

@ -30,7 +30,7 @@ public:
SessionConfiguration (); SessionConfiguration ();
void map_parameters (sigc::slot<void, std::string>); void map_parameters (sigc::slot<void, std::string>);
int set_state (XMLNode const &, int version = 3000); int set_state (XMLNode const &, int version);
XMLNode& get_state (); XMLNode& get_state ();
XMLNode& get_variables (); XMLNode& get_variables ();
void set_variables (XMLNode const &); void set_variables (XMLNode const &);

View file

@ -107,7 +107,7 @@ class SessionMetadata : public PBD::StatefulDestructible
/*** Serialization ***/ /*** Serialization ***/
XMLNode & get_state (); XMLNode & get_state ();
int set_state (const XMLNode &, int version = 3000); int set_state (const XMLNode &, int version);
private: private:

View file

@ -58,7 +58,7 @@ public:
void mark_streaming_write_completed (); void mark_streaming_write_completed ();
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
void load_model (bool lock=true, bool force_reload=false); void load_model (bool lock=true, bool force_reload=false);
void destroy_model (); void destroy_model ();

View file

@ -76,7 +76,7 @@ class Source : public SessionObject, public boost::noncopyable
virtual void session_saved() {} virtual void session_saved() {}
XMLNode& get_state (); XMLNode& get_state ();
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
bool destructive() const { return (_flags & Destructive); } bool destructive() const { return (_flags & Destructive); }
bool writable () const { return (_flags & Writable); } bool writable () const { return (_flags & Writable); }

View file

@ -212,7 +212,7 @@ class TempoMap : public PBD::StatefulDestructible
void set_length (nframes_t frames); void set_length (nframes_t frames);
XMLNode& get_state (void); XMLNode& get_state (void);
int set_state (const XMLNode&, int version = 3000); int set_state (const XMLNode&, int version);
void dump (std::ostream&) const; void dump (std::ostream&) const;
void clear (); void clear ();

View file

@ -82,7 +82,7 @@ class Track : public Route
XMLNode& get_state(); XMLNode& get_state();
XMLNode& get_template(); XMLNode& get_template();
virtual int set_state (const XMLNode&, int version = 3000) = 0; virtual int set_state (const XMLNode&, int version) = 0;
static void zero_diskstream_id_in_xml (XMLNode&); static void zero_diskstream_id_in_xml (XMLNode&);
boost::shared_ptr<PBD::Controllable> rec_enable_control() { return _rec_enable_control; } boost::shared_ptr<PBD::Controllable> rec_enable_control() { return _rec_enable_control; }
@ -96,7 +96,7 @@ class Track : public Route
sigc::signal<void> FreezeChange; sigc::signal<void> FreezeChange;
protected: protected:
Track (Session& sess, const XMLNode& node, int, DataType default_type = DataType::AUDIO); Track (Session& sess, const XMLNode& node, DataType default_type = DataType::AUDIO);
virtual XMLNode& state (bool full) = 0; virtual XMLNode& state (bool full) = 0;

View file

@ -38,7 +38,7 @@ class UserBundle : public Bundle, public PBD::Stateful {
XMLNode& get_state (); XMLNode& get_state ();
private: private:
int set_state (XMLNode const &, int version = 3000); int set_state (XMLNode const &, int version);
}; };
} }

View file

@ -90,7 +90,7 @@ AudioDiskstream::AudioDiskstream (Session& sess, const XMLNode& node)
in_set_state = true; in_set_state = true;
init (Recordable); init (Recordable);
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
in_set_state = false; in_set_state = false;
throw failed_constructor(); throw failed_constructor();
} }

View file

@ -46,7 +46,7 @@ AudioPlaylist::AudioPlaylist (Session& session, const XMLNode& node, bool hidden
assert(!prop || DataType(prop->value()) == DataType::AUDIO); assert(!prop || DataType(prop->value()) == DataType::AUDIO);
in_set_state++; in_set_state++;
set_state (node); set_state (node, Stateful::loading_state_version);
in_set_state--; in_set_state--;
} }
@ -566,7 +566,7 @@ AudioPlaylist::set_state (const XMLNode& node, int version)
in_set_state++; in_set_state++;
Playlist::set_state (node); Playlist::set_state (node, version);
freeze (); freeze ();

View file

@ -57,9 +57,9 @@ AudioTrack::AudioTrack (Session& sess, string name, Route::Flag flag, TrackMode
} }
AudioTrack::AudioTrack (Session& sess, const XMLNode& node, int version) AudioTrack::AudioTrack (Session& sess, const XMLNode& node, int version)
: Track (sess, node, version) : Track (sess, node)
{ {
_set_state (node, version, false); _set_state (node, Stateful::loading_state_version, false);
} }
AudioTrack::~AudioTrack () AudioTrack::~AudioTrack ()
@ -300,7 +300,7 @@ AudioTrack::_set_state (const XMLNode& node, int version, bool call_base)
child = *niter; child = *niter;
if (child->name() == X_("recenable")) { if (child->name() == X_("recenable")) {
_rec_enable_control->set_state (*child); _rec_enable_control->set_state (*child, version);
_session.add_controllable (_rec_enable_control); _session.add_controllable (_rec_enable_control);
} }
} }
@ -809,7 +809,7 @@ AudioTrack::unfreeze ()
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
for (vector<FreezeRecordProcessorInfo*>::iterator ii = _freeze_record.processor_info.begin(); ii != _freeze_record.processor_info.end(); ++ii) { for (vector<FreezeRecordProcessorInfo*>::iterator ii = _freeze_record.processor_info.begin(); ii != _freeze_record.processor_info.end(); ++ii) {
if ((*ii)->id == (*i)->id()) { if ((*ii)->id == (*i)->id()) {
(*i)->set_state (((*ii)->state)); (*i)->set_state (((*ii)->state), Stateful::current_state_version);
break; break;
} }
} }

View file

@ -121,7 +121,7 @@ AudioFileSource::AudioFileSource (Session& s, const XMLNode& node, bool must_exi
, AudioSource (s, node) , AudioSource (s, node)
, FileSource (s, node, must_exist) , FileSource (s, node, must_exist)
{ {
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor (); throw failed_constructor ();
} }
@ -260,15 +260,15 @@ AudioFileSource::get_state ()
int int
AudioFileSource::set_state (const XMLNode& node, int version) AudioFileSource::set_state (const XMLNode& node, int version)
{ {
if (Source::set_state (node)) { if (Source::set_state (node, version)) {
return -1; return -1;
} }
if (AudioSource::set_state (node)) { if (AudioSource::set_state (node, version)) {
return -1; return -1;
} }
if (FileSource::set_state (node)) { if (FileSource::set_state (node, version)) {
return -1; return -1;
} }

View file

@ -236,7 +236,7 @@ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, const XMLNode& nod
init (); init ();
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
@ -255,7 +255,7 @@ AudioRegion::AudioRegion (SourceList& srcs, const XMLNode& node)
{ {
init (); init ();
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
@ -634,13 +634,13 @@ AudioRegion::state (bool full)
} }
int int
AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool send) AudioRegion::set_live_state (const XMLNode& node, int version, Change& what_changed, bool send)
{ {
const XMLNodeList& nlist = node.children(); const XMLNodeList& nlist = node.children();
const XMLProperty *prop; const XMLProperty *prop;
LocaleGuard lg (X_("POSIX")); LocaleGuard lg (X_("POSIX"));
Region::set_live_state (node, what_changed, false); Region::set_live_state (node, version, what_changed, false);
uint32_t old_flags = _flags; uint32_t old_flags = _flags;
@ -691,7 +691,7 @@ AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool sen
_envelope->clear (); _envelope->clear ();
if ((prop = child->property ("default")) != 0 || _envelope->set_state (*child)) { if ((prop = child->property ("default")) != 0 || _envelope->set_state (*child, version)) {
set_default_envelope (); set_default_envelope ();
} }
@ -707,7 +707,7 @@ AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool sen
} else { } else {
XMLNode* grandchild = child->child ("AutomationList"); XMLNode* grandchild = child->child ("AutomationList");
if (grandchild) { if (grandchild) {
_fade_in->set_state (*grandchild); _fade_in->set_state (*grandchild, version);
} }
} }
@ -728,7 +728,7 @@ AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool sen
} else { } else {
XMLNode* grandchild = child->child ("AutomationList"); XMLNode* grandchild = child->child ("AutomationList");
if (grandchild) { if (grandchild) {
_fade_out->set_state (*grandchild); _fade_out->set_state (*grandchild, version);
} }
} }
@ -758,7 +758,7 @@ AudioRegion::set_state (const XMLNode& node, int version)
to handle the relevant stuff. to handle the relevant stuff.
*/ */
return Region::set_state (node); return Region::set_state (node, version);
} }
void void

View file

@ -85,7 +85,7 @@ AudioSource::AudioSource (Session& s, const XMLNode& node)
peak_leftover_size = 0; peak_leftover_size = 0;
peak_leftovers = 0; peak_leftovers = 0;
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
} }

View file

@ -100,7 +100,7 @@ AutomationList::AutomationList (const XMLNode& node, Evoral::Parameter id)
_state = Off; _state = Off;
_style = Absolute; _style = Absolute;
set_state (node); set_state (node, Stateful::loading_state_version);
if (id) { if (id) {
_parameter = id; _parameter = id;
@ -368,7 +368,7 @@ AutomationList::set_state (const XMLNode& node, int version)
if ((nsos = node.child (X_("AutomationList")))) { if ((nsos = node.child (X_("AutomationList")))) {
/* new school in old school clothing */ /* new school in old school clothing */
return set_state (*nsos); return set_state (*nsos, version);
} }
/* old school */ /* old school */

View file

@ -74,7 +74,7 @@ ControlProtocolManager::set_session (Session& s)
(*i)->requested = false; (*i)->requested = false;
if ((*i)->protocol && (*i)->state) { if ((*i)->protocol && (*i)->state) {
(*i)->protocol->set_state (*(*i)->state); (*i)->protocol->set_state (*(*i)->state, Stateful::loading_state_version);
} }
} }
} }

View file

@ -157,7 +157,7 @@ Crossfade::Crossfade (const Playlist& playlist, XMLNode& node)
initialize(); initialize();
_active = true; _active = true;
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
} }

View file

@ -109,7 +109,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<MuteMaster> mm, const XMLNode&
{ {
_panner = boost::shared_ptr<Panner>(new Panner (_name, _session)); _panner = boost::shared_ptr<Panner>(new Panner (_name, _session));
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor (); throw failed_constructor ();
} }
@ -136,7 +136,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<IO> out, boost::shared_ptr<Mut
{ {
_panner = boost::shared_ptr<Panner>(new Panner (_name, _session)); _panner = boost::shared_ptr<Panner>(new Panner (_name, _session));
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor (); throw failed_constructor ();
} }
@ -376,7 +376,7 @@ Delivery::set_state (const XMLNode& node, int version)
{ {
const XMLProperty* prop; const XMLProperty* prop;
if (IOProcessor::set_state (node)) { if (IOProcessor::set_state (node, version)) {
return -1; return -1;
} }
@ -390,7 +390,7 @@ Delivery::set_state (const XMLNode& node, int version)
XMLNode* pan_node = node.child (X_("Panner")); XMLNode* pan_node = node.child (X_("Panner"));
if (pan_node) { if (pan_node) {
_panner->set_state (*pan_node); _panner->set_state (*pan_node, version);
} }
reset_panner (); reset_panner ();

View file

@ -298,6 +298,12 @@ ARDOUR::init (bool use_vst, bool try_optimization)
(void) bindtextdomain(PACKAGE, LOCALEDIR); (void) bindtextdomain(PACKAGE, LOCALEDIR);
/* provide a state version for the few cases that need it and are not
driven by reading state from disk (e.g. undo/redo)
*/
Stateful::current_state_version = CURRENT_SESSION_FILE_VERSION;
setup_enum_writer (); setup_enum_writer ();
// allow ardour the absolute maximum number of open files // allow ardour the absolute maximum number of open files
@ -360,7 +366,7 @@ ARDOUR::init_post_engine ()
XMLNode* node; XMLNode* node;
if ((node = Config->control_protocol_state()) != 0) { if ((node = Config->control_protocol_state()) != 0) {
ControlProtocolManager::instance().set_state (*node); ControlProtocolManager::instance().set_state (*node, Stateful::loading_state_version);
} }
} }

View file

@ -133,7 +133,7 @@ InternalReturn::get_state()
int int
InternalReturn::set_state (const XMLNode& node, int version) InternalReturn::set_state (const XMLNode& node, int version)
{ {
return Return::set_state (node); return Return::set_state (node, version);
} }
bool bool

View file

@ -49,7 +49,7 @@ InternalSend::InternalSend (Session& s, boost::shared_ptr<MuteMaster> mm, boost:
InternalSend::InternalSend (Session& s, boost::shared_ptr<MuteMaster> mm, const XMLNode& node) InternalSend::InternalSend (Session& s, boost::shared_ptr<MuteMaster> mm, const XMLNode& node)
: Send (s, mm, node, Delivery::Aux /* will be reset in set_state() */) : Send (s, mm, node, Delivery::Aux /* will be reset in set_state() */)
{ {
set_state (node); set_state (node, Stateful::loading_state_version);
} }
InternalSend::~InternalSend () InternalSend::~InternalSend ()
@ -175,7 +175,7 @@ InternalSend::set_state (const XMLNode& node, int version)
{ {
const XMLProperty* prop; const XMLProperty* prop;
Send::set_state (node); Send::set_state (node, version);
if ((prop = node.property ("target")) != 0) { if ((prop = node.property ("target")) != 0) {

View file

@ -93,7 +93,7 @@ IO::IO (Session& s, const XMLNode& node, DataType dt)
_active = true; _active = true;
pending_state_node = 0; pending_state_node = 0;
set_state (node); set_state (node, Stateful::loading_state_version);
setup_bundles (); setup_bundles ();
} }

View file

@ -152,7 +152,7 @@ IOProcessor::set_state (const XMLNode& node, int version)
const XMLProperty *prop; const XMLProperty *prop;
const XMLNode *io_node = 0; const XMLNode *io_node = 0;
Processor::set_state(node); Processor::set_state(node, version);
if ((prop = node.property ("own-input")) != 0) { if ((prop = node.property ("own-input")) != 0) {
_own_input = string_is_affirmative (prop->value()); _own_input = string_is_affirmative (prop->value());
@ -176,7 +176,7 @@ IOProcessor::set_state (const XMLNode& node, int version)
} }
if (io_node) { if (io_node) {
_input->set_state(*io_node); _input->set_state(*io_node, version);
// legacy sessions: use IO name // legacy sessions: use IO name
if ((prop = node.property ("name")) == 0) { if ((prop = node.property ("name")) == 0) {
@ -198,7 +198,7 @@ IOProcessor::set_state (const XMLNode& node, int version)
} }
if (io_node) { if (io_node) {
_output->set_state(*io_node); _output->set_state(*io_node, version);
// legacy sessions: use IO name // legacy sessions: use IO name
if ((prop = node.property ("name")) == 0) { if ((prop = node.property ("name")) == 0) {

View file

@ -59,9 +59,9 @@ Location::Location (const Location& other)
_locked = false; _locked = false;
} }
Location::Location (const XMLNode& node, int version) Location::Location (const XMLNode& node)
{ {
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor (); throw failed_constructor ();
} }
} }

View file

@ -354,7 +354,7 @@ LV2Plugin::has_editor() const
} }
int int
LV2Plugin::set_state(const XMLNode& node) LV2Plugin::set_state(const XMLNode& node, int version)
{ {
XMLNodeList nodes; XMLNodeList nodes;
XMLProperty *prop; XMLProperty *prop;

View file

@ -98,7 +98,7 @@ MidiDiskstream::MidiDiskstream (Session& sess, const XMLNode& node)
in_set_state = true; in_set_state = true;
init (Recordable); init (Recordable);
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
in_set_state = false; in_set_state = false;
throw failed_constructor(); throw failed_constructor();
} }

View file

@ -112,7 +112,7 @@ MidiModel::DeltaCommand::DeltaCommand(boost::shared_ptr<MidiModel> m, const XMLN
: _model(m) : _model(m)
{ {
assert(_model); assert(_model);
set_state(node); set_state(node, Stateful::loading_state_version);
} }
void void
@ -321,7 +321,7 @@ MidiModel::DiffCommand::DiffCommand(boost::shared_ptr<MidiModel> m, const XMLNod
: _model(m) : _model(m)
{ {
assert(_model); assert(_model);
set_state(node); set_state(node, Stateful::loading_state_version);
} }
void void

View file

@ -48,7 +48,7 @@ MidiPlaylist::MidiPlaylist (Session& session, const XMLNode& node, bool hidden)
assert(prop && DataType(prop->value()) == DataType::MIDI); assert(prop && DataType(prop->value()) == DataType::MIDI);
in_set_state++; in_set_state++;
set_state (node); set_state (node, Stateful::loading_state_version);
in_set_state--; in_set_state--;
} }
@ -192,7 +192,7 @@ MidiPlaylist::set_state (const XMLNode& node, int version)
in_set_state++; in_set_state++;
freeze (); freeze ();
Playlist::set_state (node); Playlist::set_state (node, version);
thaw(); thaw();
in_set_state--; in_set_state--;

View file

@ -91,7 +91,7 @@ MidiRegion::MidiRegion (boost::shared_ptr<const MidiRegion> other)
MidiRegion::MidiRegion (boost::shared_ptr<MidiSource> src, const XMLNode& node) MidiRegion::MidiRegion (boost::shared_ptr<MidiSource> src, const XMLNode& node)
: Region (src, node) : Region (src, node)
{ {
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
@ -103,7 +103,7 @@ MidiRegion::MidiRegion (boost::shared_ptr<MidiSource> src, const XMLNode& node)
MidiRegion::MidiRegion (const SourceList& srcs, const XMLNode& node) MidiRegion::MidiRegion (const SourceList& srcs, const XMLNode& node)
: Region (srcs, node) : Region (srcs, node)
{ {
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
@ -249,12 +249,12 @@ MidiRegion::state (bool full)
} }
int int
MidiRegion::set_live_state (const XMLNode& node, Change& what_changed, bool send) MidiRegion::set_live_state (const XMLNode& node, int version, Change& what_changed, bool send)
{ {
const XMLProperty *prop; const XMLProperty *prop;
LocaleGuard lg (X_("POSIX")); LocaleGuard lg (X_("POSIX"));
Region::set_live_state (node, what_changed, false); Region::set_live_state (node, version, what_changed, false);
uint32_t old_flags = _flags; uint32_t old_flags = _flags;
@ -292,7 +292,7 @@ MidiRegion::set_state (const XMLNode& node, int version)
to handle the relevant stuff. to handle the relevant stuff.
*/ */
return Region::set_state (node); return Region::set_state (node, version);
} }
void void

View file

@ -72,7 +72,7 @@ MidiSource::MidiSource (Session& s, const XMLNode& node)
_read_data_count = 0; _read_data_count = 0;
_write_data_count = 0; _write_data_count = 0;
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
} }

View file

@ -67,7 +67,7 @@ MidiTrack::MidiTrack (Session& sess, string name, Route::Flag flag, TrackMode mo
} }
MidiTrack::MidiTrack (Session& sess, const XMLNode& node, int version) MidiTrack::MidiTrack (Session& sess, const XMLNode& node, int version)
: Track (sess, node, version, DataType::MIDI) : Track (sess, node, DataType::MIDI)
, _immediate_events(1024) // FIXME: size? , _immediate_events(1024) // FIXME: size?
, _step_edit_ring_buffer(64) // FIXME: size? , _step_edit_ring_buffer(64) // FIXME: size?
, _note_mode(Sustained) , _note_mode(Sustained)
@ -75,7 +75,7 @@ MidiTrack::MidiTrack (Session& sess, const XMLNode& node, int version)
, _default_channel (0) , _default_channel (0)
, _midi_thru (true) , _midi_thru (true)
{ {
_set_state (node, version, false); _set_state (node, Stateful::loading_state_version, false);
} }
MidiTrack::~MidiTrack () MidiTrack::~MidiTrack ()
@ -232,7 +232,7 @@ MidiTrack::_set_state (const XMLNode& node, int version, bool call_base)
child = *niter; child = *niter;
if (child->name() == X_("recenable")) { if (child->name() == X_("recenable")) {
_rec_enable_control->set_state (*child); _rec_enable_control->set_state (*child, version);
_session.add_controllable (_rec_enable_control); _session.add_controllable (_rec_enable_control);
} }
} }

View file

@ -496,18 +496,18 @@ EqualPowerStereoPanner::set_state (const XMLNode& node, int version)
set_position (pos, true); set_position (pos, true);
} }
StreamPanner::set_state (node); StreamPanner::set_state (node, version);
for (XMLNodeConstIterator iter = node.children().begin(); iter != node.children().end(); ++iter) { for (XMLNodeConstIterator iter = node.children().begin(); iter != node.children().end(); ++iter) {
if ((*iter)->name() == X_("Controllable")) { if ((*iter)->name() == X_("Controllable")) {
if ((prop = (*iter)->property("name")) != 0 && prop->value() == "panner") { if ((prop = (*iter)->property("name")) != 0 && prop->value() == "panner") {
_control->set_state (**iter); _control->set_state (**iter, version);
} }
} else if ((*iter)->name() == X_("Automation")) { } else if ((*iter)->name() == X_("Automation")) {
_control->alist()->set_state (*((*iter)->children().front())); _control->alist()->set_state (*((*iter)->children().front()), version);
if (_control->alist()->automation_state() != Off) { if (_control->alist()->automation_state() != Off) {
set_position (_control->list()->eval (parent.session().transport_frame())); set_position (_control->list()->eval (parent.session().transport_frame()));
@ -1154,7 +1154,7 @@ Panner::set_state (const XMLNode& node, int version)
sp = pan_plugins[i].factory (*this, Evoral::Parameter(PanAutomation, 0, num_panners)); sp = pan_plugins[i].factory (*this, Evoral::Parameter(PanAutomation, 0, num_panners));
num_panners++; num_panners++;
if (sp->set_state (**niter) == 0) { if (sp->set_state (**niter, version) == 0) {
_streampanners.push_back (sp); _streampanners.push_back (sp);
} }

View file

@ -1845,7 +1845,7 @@ Playlist::set_state (const XMLNode& node, int version)
Change what_changed = Change (0); Change what_changed = Change (0);
if (region->set_live_state (*child, what_changed, true)) { if (region->set_live_state (*child, version, what_changed, true)) {
error << _("Playlist: cannot reset region state from XML") << endmsg; error << _("Playlist: cannot reset region state from XML") << endmsg;
continue; continue;
} }

View file

@ -81,12 +81,12 @@ PluginInsert::PluginInsert (Session& s, boost::shared_ptr<Plugin> plug)
ProcessorCreated (this); /* EMIT SIGNAL */ ProcessorCreated (this); /* EMIT SIGNAL */
} }
PluginInsert::PluginInsert (Session& s, const XMLNode& node, int version) PluginInsert::PluginInsert (Session& s, const XMLNode& node)
: Processor (s, "unnamed plugin insert"), : Processor (s, "unnamed plugin insert"),
_signal_analysis_collected_nframes(0), _signal_analysis_collected_nframes(0),
_signal_analysis_collect_nframes_max(0) _signal_analysis_collect_nframes_max(0)
{ {
if (set_state (node, version)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
@ -836,7 +836,7 @@ PluginInsert::set_state(const XMLNode& node, int version)
data().control(Evoral::Parameter(PluginAutomation, 0, port_id), true)); data().control(Evoral::Parameter(PluginAutomation, 0, port_id), true));
if (!child->children().empty()) { if (!child->children().empty()) {
c->alist()->set_state (*child->children().front()); c->alist()->set_state (*child->children().front(), version);
} else { } else {
if ((cprop = child->property("auto")) != 0) { if ((cprop = child->property("auto")) != 0) {

View file

@ -48,12 +48,12 @@ PortInsert::PortInsert (Session& s, boost::shared_ptr<MuteMaster> mm)
ProcessorCreated (this); /* EMIT SIGNAL */ ProcessorCreated (this); /* EMIT SIGNAL */
} }
PortInsert::PortInsert (Session& s, boost::shared_ptr<MuteMaster> mm, const XMLNode& node, int version) PortInsert::PortInsert (Session& s, boost::shared_ptr<MuteMaster> mm, const XMLNode& node)
: IOProcessor (s, true, true, "unnamed port insert") : IOProcessor (s, true, true, "unnamed port insert")
, _out (new Delivery (s, _output, mm, _name, Delivery::Insert)) , _out (new Delivery (s, _output, mm, _name, Delivery::Insert))
{ {
if (set_state (node, version)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
@ -138,7 +138,7 @@ PortInsert::set_state (const XMLNode& node, int version)
} }
} }
Processor::set_state (*insert_node); Processor::set_state (*insert_node, version);
return 0; return 0;
} }

View file

@ -82,7 +82,7 @@ Processor::Processor (Session& session, const XMLNode& node)
, _configured(false) , _configured(false)
, _gui(0) , _gui(0)
{ {
set_state (node); set_state (node, Stateful::loading_state_version);
_pending_active = _active; _pending_active = _active;
} }

View file

@ -97,7 +97,7 @@ RCConfiguration::load_state ()
return -1; return -1;
} }
if (set_state (*tree.root())) { if (set_state (*tree.root(), Stateful::current_state_version)) {
error << string_compose(_("Ardour: system configuration file \"%1\" not loaded successfully."), rcfile) << endmsg; error << string_compose(_("Ardour: system configuration file \"%1\" not loaded successfully."), rcfile) << endmsg;
return -1; return -1;
} }
@ -132,7 +132,7 @@ RCConfiguration::load_state ()
return -1; return -1;
} }
if (set_state (*tree.root())) { if (set_state (*tree.root(), Stateful::current_state_version)) {
error << string_compose(_("Ardour: user configuration file \"%1\" not loaded successfully."), rcfile) << endmsg; error << string_compose(_("Ardour: user configuration file \"%1\" not loaded successfully."), rcfile) << endmsg;
return -1; return -1;
} }

View file

@ -298,7 +298,7 @@ Region::Region (const SourceList& srcs, const XMLNode& node)
{ {
use_sources (srcs); use_sources (srcs);
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
@ -328,7 +328,7 @@ Region::Region (boost::shared_ptr<Source> src, const XMLNode& node)
{ {
_sources.push_back (src); _sources.push_back (src);
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
@ -1172,7 +1172,7 @@ Region::get_state ()
} }
int int
Region::set_live_state (const XMLNode& node, Change& what_changed, bool send) Region::set_live_state (const XMLNode& node, int version, Change& what_changed, bool send)
{ {
const XMLNodeList& nlist = node.children(); const XMLNodeList& nlist = node.children();
const XMLProperty *prop; const XMLProperty *prop;
@ -1355,7 +1355,7 @@ Region::set_state (const XMLNode& node, int version)
_first_edit = EditChangesNothing; _first_edit = EditChangesNothing;
set_live_state (node, what_changed, true); set_live_state (node, version, what_changed, true);
return 0; return 0;
} }

View file

@ -58,7 +58,7 @@ Return::Return (Session& s, const XMLNode& node, bool internal)
_amp.reset (new Amp (_session, boost::shared_ptr<MuteMaster>())); _amp.reset (new Amp (_session, boost::shared_ptr<MuteMaster>()));
_meter.reset (new PeakMeter (_session)); _meter.reset (new PeakMeter (_session));
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
@ -114,7 +114,7 @@ Return::set_state (const XMLNode& node, int version)
} }
} }
IOProcessor::set_state (*insert_node); IOProcessor::set_state (*insert_node, version);
return 0; return 0;
} }

View file

@ -96,7 +96,7 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
_meter_connection = Metering::connect (mem_fun (*this, &Route::meter)); _meter_connection = Metering::connect (mem_fun (*this, &Route::meter));
} }
Route::Route (Session& sess, const XMLNode& node, int version, DataType default_type) Route::Route (Session& sess, const XMLNode& node, DataType default_type)
: SessionObject (sess, "toBeReset") : SessionObject (sess, "toBeReset")
, AutomatableControls (sess) , AutomatableControls (sess)
, _solo_control (new SoloControllable (X_("solo"), *this)) , _solo_control (new SoloControllable (X_("solo"), *this))
@ -105,7 +105,7 @@ Route::Route (Session& sess, const XMLNode& node, int version, DataType default_
{ {
init (); init ();
_set_state (node, version, false); _set_state (node, Stateful::loading_state_version, false);
/* now that we have _meter, its safe to connect to this */ /* now that we have _meter, its safe to connect to this */
@ -748,7 +748,7 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter
} else if (prop->value() == "meter") { } else if (prop->value() == "meter") {
if (_meter) { if (_meter) {
if (_meter->set_state (node)) { if (_meter->set_state (node, Stateful::loading_state_version)) {
return false; return false;
} else { } else {
return true; return true;
@ -763,7 +763,7 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter
/* amp always exists */ /* amp always exists */
processor = _amp; processor = _amp;
if (processor->set_state (node)) { if (processor->set_state (node, Stateful::loading_state_version)) {
return false; return false;
} else { } else {
/* never any reason to add it */ /* never any reason to add it */
@ -777,7 +777,7 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter
} else if (prop->value() == "intreturn") { } else if (prop->value() == "intreturn") {
if (_intreturn) { if (_intreturn) {
if (_intreturn->set_state (node)) { if (_intreturn->set_state (node, Stateful::loading_state_version)) {
return false; return false;
} else { } else {
return true; return true;
@ -789,7 +789,7 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter
} else if (prop->value() == "main-outs") { } else if (prop->value() == "main-outs") {
if (_main_outs) { if (_main_outs) {
if (_main_outs->set_state (node)) { if (_main_outs->set_state (node, Stateful::loading_state_version)) {
return false; return false;
} else { } else {
return true; return true;
@ -848,11 +848,11 @@ Route::add_processor_from_xml_2X (const XMLNode& node, int version, ProcessorLis
prop->value() == "vst" || prop->value() == "vst" ||
prop->value() == "audiounit") { prop->value() == "audiounit") {
processor.reset (new PluginInsert (_session, node, version)); processor.reset (new PluginInsert (_session, node));
} else { } else {
processor.reset (new PortInsert (_session, _mute_master, node, version)); processor.reset (new PortInsert (_session, _mute_master, node));
} }
} }
@ -1710,9 +1710,9 @@ Route::_set_state (const XMLNode& node, int version, bool /*call_base*/)
} }
if (prop->value() == "Input") { if (prop->value() == "Input") {
_input->set_state (*child); _input->set_state (*child, version);
} else if (prop->value() == "Output") { } else if (prop->value() == "Output") {
_output->set_state (*child); _output->set_state (*child, version);
} }
} }
@ -1815,7 +1815,7 @@ Route::_set_state (const XMLNode& node, int version, bool /*call_base*/)
} else if (child->name() == X_("Controllable") && (prop = child->property("name")) != 0) { } else if (child->name() == X_("Controllable") && (prop = child->property("name")) != 0) {
if (prop->value() == "solo") { if (prop->value() == "solo") {
_solo_control->set_state (*child); _solo_control->set_state (*child, version);
_session.add_controllable (_solo_control); _session.add_controllable (_solo_control);
} }
@ -1827,7 +1827,7 @@ Route::_set_state (const XMLNode& node, int version, bool /*call_base*/)
} }
} else if (child->name() == X_("MuteMaster")) { } else if (child->name() == X_("MuteMaster")) {
_mute_master->set_state (*child); _mute_master->set_state (*child, version);
} }
} }
@ -1887,6 +1887,11 @@ Route::_set_state_2X (const XMLNode& node, int version)
child = *niter; child = *niter;
if (child->name() == IO::state_node_name) { if (child->name() == IO::state_node_name) {
/* there is a note in IO::set_state_2X() about why we have to call
this directly.
*/
_input->set_state_2X (*child, version, true); _input->set_state_2X (*child, version, true);
_output->set_state_2X (*child, version, false); _output->set_state_2X (*child, version, false);
@ -2011,7 +2016,7 @@ Route::_set_state_2X (const XMLNode& node, int version)
} else if (child->name() == X_("Controllable") && (prop = child->property("name")) != 0) { } else if (child->name() == X_("Controllable") && (prop = child->property("name")) != 0) {
if (prop->value() == "solo") { if (prop->value() == "solo") {
_solo_control->set_state (*child); _solo_control->set_state (*child, version);
_session.add_controllable (_solo_control); _session.add_controllable (_solo_control);
} }
@ -2144,7 +2149,7 @@ Route::set_processor_state (const XMLNode& node)
// and make it (just) so // and make it (just) so
(*i)->set_state (**niter); (*i)->set_state (**niter, Stateful::current_state_version);
} }
} }

View file

@ -167,7 +167,7 @@ Send::set_state (const XMLNode& node, int version)
/* XXX need to load automation state & data for amp */ /* XXX need to load automation state & data for amp */
Delivery::set_state (*insert_node); Delivery::set_state (*insert_node, version);
return 0; return 0;
} }

View file

@ -353,6 +353,10 @@ Session::destroy ()
delete state_tree; delete state_tree;
/* reset dynamic state version back to default */
Stateful::loading_state_version = 0;
terminate_butler_thread (); terminate_butler_thread ();
//terminate_midi_thread (); //terminate_midi_thread ();
@ -547,7 +551,7 @@ Session::when_engine_running ()
/* existing state for Click */ /* existing state for Click */
if (_click_io->set_state (*child->children().front()) == 0) { if (_click_io->set_state (*child->children().front(), Stateful::loading_state_version) == 0) {
_clicking = Config->get_clicking (); _clicking = Config->get_clicking ();

View file

@ -164,7 +164,7 @@ Session::GlobalRouteStateCommand::GlobalRouteStateCommand (Session& s, void* p)
Session::GlobalRouteStateCommand::GlobalRouteStateCommand (Session& s, const XMLNode& node) Session::GlobalRouteStateCommand::GlobalRouteStateCommand (Session& s, const XMLNode& node)
: sess (s), src (this) : sess (s), src (this)
{ {
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor (); throw failed_constructor ();
} }
} }
@ -389,7 +389,7 @@ Session::GlobalMeteringStateCommand::GlobalMeteringStateCommand(Session &s, void
Session::GlobalMeteringStateCommand::GlobalMeteringStateCommand (Session& s, const XMLNode& node) Session::GlobalMeteringStateCommand::GlobalMeteringStateCommand (Session& s, const XMLNode& node)
: sess (s), src (this) : sess (s), src (this)
{ {
if (set_state (node)) { if (set_state (node, Stateful::loading_state_version)) {
throw failed_constructor(); throw failed_constructor();
} }
} }

View file

@ -6,7 +6,7 @@
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
@ -311,7 +311,7 @@ Session::second_stage_init (bool new_session)
// to call setup_raid_path() here. // to call setup_raid_path() here.
if (state_tree) { if (state_tree) {
if (set_state (*state_tree->root())) { if (set_state (*state_tree->root(), Stateful::loading_state_version)) {
return -1; return -1;
} }
} else { } else {
@ -756,7 +756,7 @@ int
Session::restore_state (string snapshot_name) Session::restore_state (string snapshot_name)
{ {
if (load_state (snapshot_name) == 0) { if (load_state (snapshot_name) == 0) {
set_state (*state_tree->root()); set_state (*state_tree->root(), Stateful::loading_state_version);
} }
return 0; return 0;
@ -824,20 +824,20 @@ Session::load_state (string snapshot_name)
} }
const XMLProperty* prop; const XMLProperty* prop;
bool is_old = false; // session is _very_ old (pre-2.0)
if ((prop = root.property ("version")) == 0) { if ((prop = root.property ("version")) == 0) {
/* no version implies very old version of Ardour */ /* no version implies very old version of Ardour */
is_old = true; Stateful::loading_state_version = 1000;
} else { } else {
int major_version; int major;
major_version = atoi (prop->value().c_str()); // grab just the first number before the period int minor;
if (major_version < 2) { int micro;
is_old = true;
} sscanf (prop->value().c_str(), "%d.%d.%d", &major, &minor, &micro);
Stateful::loading_state_version = (major * 1000) + minor;
} }
if (is_old) { if (Stateful::loading_state_version < CURRENT_SESSION_FILE_VERSION) {
sys::path backup_path(_session_dir->root_path()); sys::path backup_path(_session_dir->root_path());
@ -1212,7 +1212,7 @@ Session::set_state (const XMLNode& node, int version)
if (version >= 3000) { if (version >= 3000) {
if ((child = find_named_node (node, "Metadata")) == 0) { if ((child = find_named_node (node, "Metadata")) == 0) {
warning << _("Session: XML state has no metadata section") << endmsg; warning << _("Session: XML state has no metadata section") << endmsg;
} else if (_metadata->set_state (*child)) { } else if (_metadata->set_state (*child, version)) {
goto out; goto out;
} }
} }
@ -1220,7 +1220,7 @@ Session::set_state (const XMLNode& node, int version)
if ((child = find_named_node (node, "Locations")) == 0) { if ((child = find_named_node (node, "Locations")) == 0) {
error << _("Session: XML state has no locations section") << endmsg; error << _("Session: XML state has no locations section") << endmsg;
goto out; goto out;
} else if (_locations.set_state (*child)) { } else if (_locations.set_state (*child, version)) {
goto out; goto out;
} }
@ -1331,7 +1331,7 @@ Session::set_state (const XMLNode& node, int version)
if ((child = find_named_node (node, "TempoMap")) == 0) { if ((child = find_named_node (node, "TempoMap")) == 0) {
error << _("Session: XML state has no Tempo Map section") << endmsg; error << _("Session: XML state has no Tempo Map section") << endmsg;
goto out; goto out;
} else if (_tempo_map->set_state (*child)) { } else if (_tempo_map->set_state (*child, version)) {
goto out; goto out;
} }
@ -1345,7 +1345,7 @@ Session::set_state (const XMLNode& node, int version)
if ((child = find_named_node (node, "Click")) == 0) { if ((child = find_named_node (node, "Click")) == 0) {
warning << _("Session: XML state has no click section") << endmsg; warning << _("Session: XML state has no click section") << endmsg;
} else if (_click_io) { } else if (_click_io) {
_click_io->set_state (*child); _click_io->set_state (*child, version);
} }
if ((child = find_named_node (node, "ControlProtocols")) != 0) { if ((child = find_named_node (node, "ControlProtocols")) != 0) {
@ -1419,7 +1419,7 @@ Session::XMLRouteFactory (const XMLNode& node, int version)
return ret; return ret;
} }
} else { } else {
boost::shared_ptr<Route> ret (new Route (*this, node, version)); boost::shared_ptr<Route> ret (new Route (*this, node));
return ret; return ret;
} }
} }

Some files were not shown because too many files have changed in this diff Show more