Generalize no-plugin-state from AudioUnits to all plugins
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 14 Jun 2013 02:50:54 +0000 (22:50 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 14 Jun 2013 02:50:54 +0000 (22:50 -0400)
Replace AU_STATE_SUPPORT compile-time define with NO_PLUGIN_STATE and make it prevent plugin state setting, preset loading, preset saving and plugin state saving. Blocks on these actions exist partially in the backend and partially in the GUI (this latter class are not absolute, and should OSC or MIDI be able to drive Plugin::save_preset() the block could be circumvented). Set NO_PLUGIN_STATE if --freebie is used at waf-configure time

gtk2_ardour/plugin_ui.cc
libs/ardour/audio_unit.cc
libs/ardour/plugin.cc
libs/ardour/route.cc
wscript

index 943a7a8bce4b058a77588a1710cfb22def3a8892..9a85b7845409ecac80b9fd5ed05f57a09c44fcfb 100644 (file)
@@ -565,9 +565,14 @@ PlugUIBase::preset_selected ()
        }
 }
 
+#ifdef NO_PLUGIN_STATE
+static bool seen_saving_message = false;
+#endif
+
 void
 PlugUIBase::add_plugin_setting ()
 {
+#ifndef NO_PLUGIN_STATE
        NewPluginPresetDialog d (plugin);
 
        switch (d.run ()) {
@@ -586,23 +591,49 @@ PlugUIBase::add_plugin_setting ()
                }
                break;
        }
+#else 
+       if (!seen_saving_message) {
+               info << string_compose (_("Plugin presets are not supported in this build of %1. Consider paying for a full version"),
+                                       PROGRAM_NAME)
+                    << endmsg;
+               seen_saving_message = true;
+       }
+#endif
 }
 
 void
 PlugUIBase::save_plugin_setting ()
 {
+#ifndef NO_PLUGIN_STATE
        string const name = _preset_combo.get_active_text ();
        plugin->remove_preset (name);
        Plugin::PresetRecord const r = plugin->save_preset (name);
        if (!r.uri.empty ()) {
                plugin->load_preset (r);
        }
+#else 
+       if (!seen_saving_message) {
+               info << string_compose (_("Plugin presets are not supported in this build of %1. Consider paying for a newer version"),
+                                       PROGRAM_NAME)
+                    << endmsg;
+               seen_saving_message = true;
+       }
+#endif
 }
 
 void
 PlugUIBase::delete_plugin_setting ()
 {
+#ifndef NO_PLUGIN_STATE
        plugin->remove_preset (_preset_combo.get_active_text ());
+#else
+       if (!seen_saving_message) {
+               info << string_compose (_("Plugin presets are not supported in this build of %1. Consider paying for a newer version"),
+                                       PROGRAM_NAME)
+                    << endmsg;
+               seen_saving_message = true;
+       }
+#endif
 }
 
 bool
index 399ce8aba7c6c19503acffe7e64d3b1d2f10df4a..0e9a11e6dfcb003816c41d66318b037235cebbf5 100644 (file)
@@ -65,13 +65,6 @@ using namespace std;
 using namespace PBD;
 using namespace ARDOUR;
 
-#ifndef AU_STATE_SUPPORT
-static bool seen_get_state_message = false;
-static bool seen_set_state_message = false;
-static bool seen_loading_message = false;
-static bool seen_saving_message = false;
-#endif
-
 AUPluginInfo::CachedInfoMap AUPluginInfo::cached_info;
 
 static string preset_search_path = "/Library/Audio/Presets:/Network/Library/Audio/Presets";
@@ -1679,8 +1672,6 @@ void
 AUPlugin::add_state (XMLNode* root) const
 {
        LocaleGuard lg (X_("POSIX"));
-
-#ifdef AU_STATE_SUPPORT
        CFDataRef xmlData;
        CFPropertyListRef propertyList;
 
@@ -1712,20 +1703,11 @@ AUPlugin::add_state (XMLNode* root) const
 
        CFRelease (xmlData);
        CFRelease (propertyList);
-#else
-       if (!seen_get_state_message) {
-               info << string_compose (_("Saving AudioUnit settings is not supported in this build of %1. Consider paying for a newer version"),
-                                       PROGRAM_NAME)
-                    << endmsg;
-               seen_get_state_message = true;
-       }
-#endif
 }
 
 int
 AUPlugin::set_state(const XMLNode& node, int version)
 {
-#ifdef AU_STATE_SUPPORT
        int ret = -1;
        CFPropertyListRef propertyList;
        LocaleGuard lg (X_("POSIX"));
@@ -1773,14 +1755,6 @@ AUPlugin::set_state(const XMLNode& node, int version)
 
        Plugin::set_state (node, version);
        return ret;
-#else
-       if (!seen_set_state_message) {
-               info << string_compose (_("Restoring AudioUnit settings is not supported in this build of %1. Consider paying for a newer version"),
-                                       PROGRAM_NAME)
-                    << endmsg;
-       }
-       return Plugin::set_state (node, version);
-#endif
 }
 
 bool
@@ -1788,7 +1762,6 @@ AUPlugin::load_preset (PresetRecord r)
 {
        Plugin::load_preset (r);
 
-#ifdef AU_STATE_SUPPORT
        bool ret = false;
        CFPropertyListRef propertyList;
        Glib::ustring path;
@@ -1836,15 +1809,6 @@ AUPlugin::load_preset (PresetRecord r)
        }
 
        return ret;
-#else
-       if (!seen_loading_message) {
-               info << string_compose (_("Loading AudioUnit presets is not supported in this build of %1. Consider paying for a newer version"),
-                                       PROGRAM_NAME)
-                    << endmsg;
-               seen_loading_message = true;
-       }
-       return true;
-#endif
 }
 
 void
@@ -1855,7 +1819,6 @@ AUPlugin::do_remove_preset (std::string)
 string
 AUPlugin::do_save_preset (string preset_name)
 {
-#ifdef AU_STATE_SUPPORT
        CFPropertyListRef propertyList;
        vector<Glib::ustring> v;
        Glib::ustring user_preset_path;
@@ -1904,15 +1867,6 @@ AUPlugin::do_save_preset (string preset_name)
        CFRelease(propertyList);
 
        return string ("file:///") + user_preset_path;
-#else
-       if (!seen_saving_message) {
-               info << string_compose (_("Saving AudioUnit presets is not supported in this build of %1. Consider paying for a newer version"),
-                                       PROGRAM_NAME)
-                    << endmsg;
-               seen_saving_message = true;
-       }
-       return string();
-#endif
 }
 
 //-----------------------------------------------------------------------------
@@ -2079,7 +2033,6 @@ AUPlugin::current_preset() const
 {
        string preset_name;
 
-#ifdef AU_STATE_SUPPORT
        CFPropertyListRef propertyList;
 
        DEBUG_TRACE (DEBUG::AudioUnits, "get current preset for current_preset()\n");
@@ -2087,14 +2040,13 @@ AUPlugin::current_preset() const
                preset_name = get_preset_name_in_plist (propertyList);
                CFRelease(propertyList);
        }
-#endif
+
        return preset_name;
 }
 
 void
 AUPlugin::find_presets ()
 {
-#ifdef AU_STATE_SUPPORT
        vector<string*>* preset_files;
        PathScanner scanner;
 
@@ -2143,8 +2095,6 @@ AUPlugin::find_presets ()
                string const uri = string_compose ("%1", _presets.size ());
                _presets.insert (make_pair (uri, Plugin::PresetRecord (uri, i->first, i->second)));
        }
-
-#endif
 }
 
 bool
index 57198475d72f9ad81d355924e91a19da7acd4ea5..e76353e8d53ddd3f2ca8b7b9bbc3c9c4e64ca895 100644 (file)
@@ -68,6 +68,11 @@ using namespace PBD;
 
 namespace ARDOUR { class AudioEngine; }
 
+#ifdef NO_PLUGIN_STATE
+static bool seen_get_state_message = false;
+static bool seen_set_state_message = false;
+#endif
+
 bool
 PluginInfo::is_instrument () const
 {
@@ -299,18 +304,28 @@ Plugin::resolve_midi ()
        _have_pending_stop_events = true;
 }
 
+
 vector<Plugin::PresetRecord>
 Plugin::get_presets ()
 {
+       vector<PresetRecord> p;
+
+#ifndef NO_PLUGIN_STATE
        if (!_have_presets) {
                find_presets ();
                _have_presets = true;
        }
 
-       vector<PresetRecord> p;
        for (map<string, PresetRecord>::const_iterator i = _presets.begin(); i != _presets.end(); ++i) {
                p.push_back (i->second);
        }
+#else
+       if (!seen_set_state_message) {
+               info << string_compose (_("Plugin presets are not supported in this build of %1. Consider paying for a full version"),
+                                       PROGRAM_NAME)
+                    << endmsg;
+       }
+#endif
 
        return p;
 }
@@ -376,7 +391,17 @@ Plugin::get_state ()
        root->add_property (X_("last-preset-label"), _last_preset.label);
        root->add_property (X_("parameter-changed-since-last-preset"), _parameter_changed_since_last_preset ? X_("yes") : X_("no"));
 
+#ifndef NO_PLUGIN_STATE        
        add_state (root);
+#else
+       if (!seen_get_state_message) {
+               info << string_compose (_("Saving AudioUnit settings is not supported in this build of %1. Consider paying for a newer version"),
+                                       PROGRAM_NAME)
+                    << endmsg;
+               seen_get_state_message = true;
+       }
+#endif
+
        return *root;
 }
 
index 29e778e4159a36c32c75e0e90d71641e45d33cbc..e84e8b6d939b089886c53c639cf527365210eade 100644 (file)
@@ -2551,10 +2551,21 @@ Route::set_processor_state (const XMLNode& node)
                                        continue;
                                }
 
+#ifndef NO_PLUGIN_STATE
                                if (processor->set_state (**niter, Stateful::current_state_version) != 0) {
                                        /* This processor could not be configured.  Turn it into a UnknownProcessor */
                                        processor.reset (new UnknownProcessor (_session, **niter));
                                }
+#else
+                               if (boost::dynamic_pointer_cast<PluginInsert>(processor)) {     
+                                       if (processor->set_state (**niter, Stateful::current_state_version) != 0) {
+                                               /* This processor could not be configured.  Turn it into a UnknownProcessor */
+                                               processor.reset (new UnknownProcessor (_session, **niter));
+                                       }
+                               } else {
+                                       /* plugin, but ::set_state() not * allowed no message here - things will get too verbose */
+                               }
+#endif
 
                                /* we have to note the monitor send here, otherwise a new one will be created
                                   and the state of this one will be lost.
diff --git a/wscript b/wscript
index 64e8f29102dcb983dd07e3c2aa03fea233e95762..6c5ea19d6471f076d4defe0c8303778355f3a047 100644 (file)
--- a/wscript
+++ b/wscript
@@ -513,6 +513,10 @@ def configure(conf):
     else:
         autowaf.display_msg(conf, 'Will build against private Ardour dependency stack', 'no')
         
+    if Options.options.freebie:
+        conf.env.append_value ('CFLAGS', '-DNO_PLUGIN_STATE')
+        conf.env.append_value ('CXXFLAGS', '-DNO_PLUGIN_STATE')
+
     if sys.platform == 'darwin':
 
         # this is required, potentially, for anything we link and then relocate into a bundle
@@ -521,9 +525,6 @@ def configure(conf):
         conf.define ('HAVE_COREAUDIO', 1)
         conf.define ('AUDIOUNIT_SUPPORT', 1)
 
-        if not Options.options.freebie:
-            conf.define ('AU_STATE_SUPPORT', 1)
-
         conf.define ('GTKOSX', 1)
         conf.define ('TOP_MENUBAR',1)
         conf.define ('GTKOSX',1)
@@ -563,7 +564,7 @@ def configure(conf):
         conf.env.append_value('LINKFLAGS_AUDIOUNITS', ['-framework', 'Cocoa'])
 
         if not Options.options.freebie:
-            conf.env.append_value('CXXFLAGS_AUDIOUNITS', "-DAU_STATE_SUPPORT")
+            conf.env.append_value('CXXFLAGS_AUDIOUNITS')
 
         if re.search ("^[1-9][0-9]\.", os.uname()[2]) == None and not Options.options.nocarbon:
             conf.env.append_value('CXXFLAGS_AUDIOUNITS', "-DWITH_CARBON")