X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fdevice_profile.cc;h=ca3f14680359cd07e9cea925a64a88610bd0be8e;hb=cf52d6e4b40111eb04b244ec054055a4ec15dbe0;hp=ddbb4782db779d5168a2744ad22a56683c768b93;hpb=0da34e65e3470b1c2298ddf571df6356d0d42bd8;p=ardour.git diff --git a/libs/surfaces/mackie/device_profile.cc b/libs/surfaces/mackie/device_profile.cc index ddbb4782db..ca3f146803 100644 --- a/libs/surfaces/mackie/device_profile.cc +++ b/libs/surfaces/mackie/device_profile.cc @@ -24,7 +24,8 @@ #include "pbd/xml++.h" #include "pbd/error.h" -#include "pbd/pathscanner.h" +#include "pbd/file_utils.h" +#include "pbd/stl_delete.h" #include "pbd/replace_all.h" #include "ardour/filesystem_paths.h" @@ -32,18 +33,23 @@ #include "mackie_control_protocol.h" #include "device_profile.h" -#include "i18n.h" +#include "pbd/i18n.h" -using namespace Mackie; using namespace PBD; using namespace ARDOUR; +using namespace ArdourSurface; +using namespace Mackie; + using std::string; using std::vector; std::map DeviceProfile::device_profiles; +const std::string DeviceProfile::edited_indicator (" (edited)"); +const std::string DeviceProfile::default_profile_name ("User"); DeviceProfile::DeviceProfile (const string& n) : _name (n) + , edited (false) { } @@ -87,27 +93,21 @@ devprofile_filter (const string &str, void* /*arg*/) void DeviceProfile::reload_device_profiles () { - DeviceProfile dp; vector s; - vector *devprofiles; - PathScanner scanner; + vector devprofiles; Searchpath spath (devprofile_search_path()); - devprofiles = scanner (spath.to_string(), devprofile_filter, 0, false, true); + find_files_matching_filter (devprofiles, spath, devprofile_filter, 0, false, true); device_profiles.clear (); - if (!devprofiles) { + if (devprofiles.empty()) { error << "No MCP device info files found using " << spath.to_string() << endmsg; return; } - if (devprofiles->empty()) { - error << "No MCP device info files found using " << spath.to_string() << endmsg; - return; - } - - for (vector::iterator i = devprofiles->begin(); i != devprofiles->end(); ++i) { - string fullpath = *(*i); + for (vector::iterator i = devprofiles.begin(); i != devprofiles.end(); ++i) { + string fullpath = *i; + DeviceProfile dp; // has to be initial every loop or info from last added. XMLTree tree; @@ -125,8 +125,6 @@ DeviceProfile::reload_device_profiles () device_profiles[dp.name()] = dp; } } - - delete devprofiles; } int @@ -140,7 +138,7 @@ DeviceProfile::set_state (const XMLNode& node, int /* version */) } /* name is mandatory */ - + if ((child = node.child ("Name")) == 0 || (prop = child->property ("value")) == 0) { return -1; } else { @@ -162,7 +160,7 @@ DeviceProfile::set_state (const XMLNode& node, int /* version */) int id = Button::name_to_id (prop->value()); if (id < 0) { - error << string_compose ("Unknow button ID \"%1\"", prop->value()) << endmsg; + error << string_compose ("Unknown button ID \"%1\"", prop->value()) << endmsg; continue; } @@ -196,6 +194,8 @@ DeviceProfile::set_state (const XMLNode& node, int /* version */) } } + edited = false; + return 0; } @@ -205,7 +205,7 @@ DeviceProfile::get_state () const XMLNode* node = new XMLNode ("MackieDeviceProfile"); XMLNode* child = new XMLNode ("Name"); - child->add_property ("value", _name); + child->add_property ("value", name()); node->add_child_nocopy (*child); if (_button_map.empty()) { @@ -297,13 +297,31 @@ DeviceProfile::set_button_action (Button::ID id, int modifier_state, const strin i->second.plain = action; } + edited = true; + save (); } -const string& +string +DeviceProfile::name_when_edited (string const& base) +{ + return string_compose ("%1 %2", base, edited_indicator); +} + +string DeviceProfile::name() const { - return _name; + if (edited) { + if (_name.find (edited_indicator) == string::npos) { + /* modify name to included edited indicator */ + return name_when_edited (_name); + } else { + /* name already contains edited indicator */ + return _name; + } + } else { + return _name; + } } void @@ -343,8 +361,8 @@ DeviceProfile::save () return; } - fullpath = Glib::build_filename (fullpath, legalize_for_path (_name) + ".profile"); - + fullpath = Glib::build_filename (fullpath, string_compose ("%1%2", legalize_for_path (name()), devprofile_suffix)); + XMLTree tree; tree.set_root (&get_state()); @@ -352,4 +370,3 @@ DeviceProfile::save () error << string_compose ("MCP profile not saved to %1", fullpath) << endmsg; } } -