X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fdevice_profile.cc;h=8fcde621a5a26a647ef6543469fb0b8fefc18f4e;hb=30b087ab3d28f1585987fa3f6ae006562ae192e3;hp=320dd49297b338a946cba6a4fd64ebdd245e7487;hpb=ad017365f7a73f8ba57f667cc1aa36478b48c50e;p=ardour.git diff --git a/libs/surfaces/mackie/device_profile.cc b/libs/surfaces/mackie/device_profile.cc index 320dd49297..8fcde621a5 100644 --- a/libs/surfaces/mackie/device_profile.cc +++ b/libs/surfaces/mackie/device_profile.cc @@ -33,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) { } @@ -88,7 +93,6 @@ devprofile_filter (const string &str, void* /*arg*/) void DeviceProfile::reload_device_profiles () { - DeviceProfile dp; vector s; vector devprofiles; Searchpath spath (devprofile_search_path()); @@ -103,6 +107,7 @@ DeviceProfile::reload_device_profiles () 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; @@ -133,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 { @@ -155,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; } @@ -167,28 +172,18 @@ DeviceProfile::set_state (const XMLNode& node, int /* version */) b = _button_map.insert (_button_map.end(), std::pair (bid, ButtonActions())); } - if ((prop = (*i)->property ("plain")) != 0) { - b->second.plain = prop->value (); - } - if ((prop = (*i)->property ("control")) != 0) { - b->second.control = prop->value (); - } - if ((prop = (*i)->property ("shift")) != 0) { - b->second.shift = prop->value (); - } - if ((prop = (*i)->property ("option")) != 0) { - b->second.option = prop->value (); - } - if ((prop = (*i)->property ("cmdalt")) != 0) { - b->second.cmdalt = prop->value (); - } - if ((prop = (*i)->property ("shiftcontrol")) != 0) { - b->second.shiftcontrol = prop->value (); - } + (*i)->get_property ("plain", b->second.plain); + (*i)->get_property ("control", b->second.control); + (*i)->get_property ("shift", b->second.shift); + (*i)->get_property ("option", b->second.option); + (*i)->get_property ("cmdalt", b->second.cmdalt); + (*i)->get_property ("shiftcontrol", b->second.shiftcontrol); } } } + edited = false; + return 0; } @@ -198,7 +193,7 @@ DeviceProfile::get_state () const XMLNode* node = new XMLNode ("MackieDeviceProfile"); XMLNode* child = new XMLNode ("Name"); - child->add_property ("value", _name); + child->set_property ("value", name()); node->add_child_nocopy (*child); if (_button_map.empty()) { @@ -211,25 +206,25 @@ DeviceProfile::get_state () const for (ButtonActionMap::const_iterator b = _button_map.begin(); b != _button_map.end(); ++b) { XMLNode* n = new XMLNode ("Button"); - n->add_property ("name", Button::id_to_name (b->first)); + n->set_property ("name", Button::id_to_name (b->first)); if (!b->second.plain.empty()) { - n->add_property ("plain", b->second.plain); + n->set_property ("plain", b->second.plain); } if (!b->second.control.empty()) { - n->add_property ("control", b->second.control); + n->set_property ("control", b->second.control); } if (!b->second.shift.empty()) { - n->add_property ("shift", b->second.shift); + n->set_property ("shift", b->second.shift); } if (!b->second.option.empty()) { - n->add_property ("option", b->second.option); + n->set_property ("option", b->second.option); } if (!b->second.cmdalt.empty()) { - n->add_property ("cmdalt", b->second.cmdalt); + n->set_property ("cmdalt", b->second.cmdalt); } if (!b->second.shiftcontrol.empty()) { - n->add_property ("shiftcontrol", b->second.shiftcontrol); + n->set_property ("shiftcontrol", b->second.shiftcontrol); } buttons->add_child_nocopy (*n); @@ -290,13 +285,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 @@ -336,8 +349,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()); @@ -345,4 +358,3 @@ DeviceProfile::save () error << string_compose ("MCP profile not saved to %1", fullpath) << endmsg; } } -