summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-01-08 20:51:26 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-01-08 20:51:26 +0000
commitca49f7cba731bd443c4a62184c8dec892b4ce5e7 (patch)
tree5c10cc5b82b1e22a6a205c4843b1dc6343906d0a
parent57bafcd1f4277ba9805bfb4ed05b8eaffaa7a5ce (diff)
fix audio clock restore, provide XMLNode::property (string) and speed up the property methods by not scanning the map twice. sorry about the recompile
git-svn-id: svn://localhost/ardour2/trunk@1286 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/ardour_ui.cc5
-rw-r--r--gtk2_ardour/ardour_ui2.cc3
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc7
-rw-r--r--gtk2_ardour/audio_clock.cc2
-rw-r--r--libs/pbd/pbd/xml++.h3
-rw-r--r--libs/pbd/xml++.cc20
6 files changed, 31 insertions, 9 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 8d7e48bc1b..caf84bd1e3 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -248,9 +248,10 @@ ARDOUR_UI::set_engine (AudioEngine& e)
throw failed_constructor();
}
- /* listen to clock mode changes */
+ /* set default clock modes */
- AudioClock::ModeChanged.connect (mem_fun (*this, &ARDOUR_UI::store_clock_modes));
+ primary_clock.set_mode (AudioClock::SMPTE);
+ secondary_clock.set_mode (AudioClock::BBT);
/* start the time-of-day-clock */
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index 27b852982a..a39bcb124d 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -325,9 +325,6 @@ ARDOUR_UI::setup_transport ()
ARDOUR_UI::Clock.connect (bind (mem_fun (primary_clock, &AudioClock::set), false));
ARDOUR_UI::Clock.connect (bind (mem_fun (secondary_clock, &AudioClock::set), false));
- primary_clock.set_mode (AudioClock::SMPTE);
- secondary_clock.set_mode (AudioClock::BBT);
-
primary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::primary_clock_value_changed));
secondary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::secondary_clock_value_changed));
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index a9a61176a9..140ee649ea 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -125,6 +125,13 @@ ARDOUR_UI::connect_to_session (Session *s)
connect_dependents_to_session (s);
+ /* listen to clock mode changes. don't do this earlier because otherwise as the clocks
+ restore their modes or are explicitly set, we will cause the "new" mode to be saved
+ back to the session XML ("extra") state.
+ */
+
+ AudioClock::ModeChanged.connect (mem_fun (*this, &ARDOUR_UI::store_clock_modes));
+
start_clocking ();
start_blinking ();
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 7ad7e4df65..66822289c2 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -599,7 +599,7 @@ AudioClock::set_session (Session *s)
AudioClock::Mode amode;
if (node) {
- if ((prop = node->property (_name.c_str())) != 0) {
+ if ((prop = node->property (_name)) != 0) {
amode = AudioClock::Mode (string_2_enum (prop->value(), amode));
set_mode (amode);
}
diff --git a/libs/pbd/pbd/xml++.h b/libs/pbd/pbd/xml++.h
index 70e231e717..bf26a6f685 100644
--- a/libs/pbd/pbd/xml++.h
+++ b/libs/pbd/pbd/xml++.h
@@ -95,8 +95,11 @@ public:
const XMLPropertyList & properties() const { return _proplist; };
XMLProperty *property(const char * );
+ XMLProperty *property(const std::string&);
const XMLProperty *property(const char * n) const
{ return ((XMLNode *) this)->property(n); };
+ const XMLProperty *property(const std::string& ns) const
+ { return ((XMLNode *) this)->property(ns); };
XMLProperty *add_property(const char *, const string &);
XMLProperty *add_property(const char *, const char * = "");
diff --git a/libs/pbd/xml++.cc b/libs/pbd/xml++.cc
index 8d783d59f2..5507f658e9 100644
--- a/libs/pbd/xml++.cc
+++ b/libs/pbd/xml++.cc
@@ -289,11 +289,25 @@ XMLProperty *
XMLNode::property(const char * n)
{
string ns(n);
- if (_propmap.find(ns) == _propmap.end()) {
- return 0;
+ map<string,XMLProperty*>::iterator iter;
+
+ if ((iter = _propmap.find(ns)) != _propmap.end()) {
+ return iter->second;
+ }
+
+ return 0;
+}
+
+XMLProperty *
+XMLNode::property(const string & ns)
+{
+ map<string,XMLProperty*>::iterator iter;
+
+ if ((iter = _propmap.find(ns)) != _propmap.end()) {
+ return iter->second;
}
- return _propmap[ns];
+ return 0;
}
XMLProperty *