#include "i18n.h"
using namespace ARDOUR;
+using namespace std;
+
+bool StateManager::_allow_save = true;
+set<StateManager*> StateManager::deferred;
StateManager::StateManager ()
{
{
}
+void
+StateManager::prohibit_save ()
+{
+ _allow_save = false;
+}
+
+void
+StateManager::allow_save (const char* why, bool do_save)
+{
+ _allow_save = true;
+ if (do_save) {
+ for (set<StateManager*>::iterator x = deferred.begin(); x != deferred.end(); ++x) {
+ (*x)->save_state (why);
+ }
+ }
+ deferred.clear ();
+}
+
void
StateManager::drop_all_states ()
{
Change what_changed;
state_id_t n;
StateMap::iterator i;
-
+
for (n = 0, i = states.begin(); n < id && i != states.end(); ++n, ++i);
if (n != id || i == states.end()) {
- fatal << compose (_("programming error: illegal state ID (%1) passed to "
- "StateManager::set_state() (range = 0-%3)"), id,
- states.size()-1)
+ fatal << string_compose (_("programming error: illegal state ID (%1) passed to "
+ "StateManager::set_state() (range = 0-%2)"), id, states.size()-1)
<< endmsg;
/*NOTREACHED*/
return;
void
StateManager::save_state (std::string why)
{
+ if (!_allow_save) {
+ deferred.insert (this);
+ return;
+ }
+
states.push_back (state_factory (why));
_current_state_id = states.size() - 1;
}