From 6dc74f8c871752b05eb7def894bd44e38d76c3f4 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 11 Jul 2011 20:32:33 +0000 Subject: [PATCH] clean up GUIObjectState API, and use bools when setting "visible" property rather than string (not that it matters); don't unconditionally set visible to true unless a non-hidden track/bus has no visibility property already git-svn-id: svn://localhost/ardour2/branches/3.0@9843 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/automation_time_axis.cc | 4 +-- gtk2_ardour/axis_view.cc | 23 +++++-------- gtk2_ardour/axis_view.h | 14 +++++--- gtk2_ardour/gui_object.cc | 39 +++++++++++++++++++--- gtk2_ardour/gui_object.h | 50 ++++++----------------------- gtk2_ardour/mixer_strip.cc | 4 +-- gtk2_ardour/mixer_ui.cc | 4 +-- gtk2_ardour/route_time_axis.cc | 6 +++- 8 files changed, 72 insertions(+), 72 deletions(-) diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index e8b0d9b8ed..def810f74e 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -942,9 +942,9 @@ AutomationTimeAxisView::set_state_2X (const XMLNode& node, int /*version*/) if (yn) { _canvas_display->show (); /* FIXME: necessary? show_at? */ } - set_gui_property ("visible", (yn ? "yes" : "no")); + set_gui_property ("visible", yn); } else { - set_gui_property ("visible", "no"); + set_gui_property ("visible", false); } } diff --git a/gtk2_ardour/axis_view.cc b/gtk2_ardour/axis_view.cc index 65a9f1b79a..513033e05a 100644 --- a/gtk2_ardour/axis_view.cc +++ b/gtk2_ardour/axis_view.cc @@ -97,22 +97,10 @@ AxisView::unique_random_color() } } -void -AxisView::set_gui_property (const string& property_name, const string& value) -{ - ARDOUR_UI::instance()->gui_object_state->set (state_id(), property_name, value); -} - -void -AxisView::set_gui_property (const string& property_name, int value) -{ - ARDOUR_UI::instance()->gui_object_state->set (state_id(), property_name, value); -} - string AxisView::gui_property (const string& property_name) const { - return ARDOUR_UI::instance()->gui_object_state->get_string (state_id(), property_name); + return gui_object_state().get_string (state_id(), property_name); } bool @@ -126,9 +114,9 @@ AxisView::set_marked_for_display (bool yn) { if (yn != marked_for_display()) { if (yn) { - set_gui_property ("visible", "yes"); + set_gui_property ("visible", true); } else { - set_gui_property ("visible", "no"); + set_gui_property ("visible", false); } return true; // things changed } @@ -136,3 +124,8 @@ AxisView::set_marked_for_display (bool yn) return false; } +GUIObjectState& +AxisView::gui_object_state() +{ + return *ARDOUR_UI::instance()->gui_object_state; +} diff --git a/gtk2_ardour/axis_view.h b/gtk2_ardour/axis_view.h index d24cd62a73..ea502f8181 100644 --- a/gtk2_ardour/axis_view.h +++ b/gtk2_ardour/axis_view.h @@ -30,6 +30,7 @@ #include "ardour/session_handle.h" +#include "gui_object.h" #include "prompter.h" #include "selectable.h" @@ -61,11 +62,13 @@ class AxisView : public virtual Selectable, public PBD::ScopedConnectionList, pu uint32_t old_order_key() const { return _old_order_key; } virtual std::string state_id() const = 0; + /* for now, we always return properties in string form. + */ std::string gui_property (const std::string& property_name) const; - - void set_gui_property (const std::string& property_name, const std::string& value); - void set_gui_property (const std::string& property_name, int value); - void set_gui_property (const std::string& property_name, double value); + + template void set_gui_property (const std::string& property_name, const T& value) { + gui_object_state().set (state_id(), property_name, value); + } bool marked_for_display () const; virtual bool set_marked_for_display (bool); @@ -92,6 +95,9 @@ class AxisView : public virtual Selectable, public PBD::ScopedConnectionList, pu bool _marked_for_display; uint32_t _old_order_key; + private: + static GUIObjectState& gui_object_state(); + }; /* class AxisView */ #endif /* __ardour_gtk_axis_view_h__ */ diff --git a/gtk2_ardour/gui_object.cc b/gtk2_ardour/gui_object.cc index 857ee3a770..fda1e0b29e 100644 --- a/gtk2_ardour/gui_object.cc +++ b/gtk2_ardour/gui_object.cc @@ -49,11 +49,6 @@ class gos_string_vistor : public boost::static_visitor<> { void operator() (const int64_t& i) { stream << i; } -#if 0 - void operator() (const double& d) { - stream << std::setprecision (12) << d; - } -#endif void operator() (const std::string& s) { stream << s; @@ -63,6 +58,40 @@ class gos_string_vistor : public boost::static_visitor<> { std::ostream& stream; }; +std::string +GUIObjectState::get_string (const std::string& id, const std::string& prop_name, bool* empty) +{ + StringPropertyMap::iterator i = _property_maps.find (id); + + if (i == _property_maps.end()) { + if (empty) { + *empty = true; + } + return string(); + } + + const PropertyMap& pmap (i->second); + PropertyMap::const_iterator p = pmap.find (prop_name); + + if (p == pmap.end()) { + if (empty) { + *empty = true; + } + return string(); + } + + std::stringstream ss; + gos_string_vistor gsv (ss); + + boost::apply_visitor (gsv, p->second); + + if (empty) { + *empty = false; + } + + return ss.str (); +} + XMLNode& GUIObjectState::get_state () const { diff --git a/gtk2_ardour/gui_object.h b/gtk2_ardour/gui_object.h index a109e625ae..025be30fab 100644 --- a/gtk2_ardour/gui_object.h +++ b/gtk2_ardour/gui_object.h @@ -29,6 +29,11 @@ #include "pbd/id.h" class GUIObjectState { + private: + typedef boost::variant Variant; + typedef std::map PropertyMap; + typedef std::map StringPropertyMap; + public: GUIObjectState() {} ~GUIObjectState(); @@ -41,59 +46,22 @@ class GUIObjectState { GUIObjectState& operator= (const GUIObjectState& other); - private: - typedef boost::variant Variant; - typedef std::map PropertyMap; - typedef std::map StringPropertyMap; - - StringPropertyMap _property_maps; - - template T get (const std::string& id, const std::string& prop_name, const T& type_determination_placeholder, bool* empty = 0) { - StringPropertyMap::iterator i = _property_maps.find (id); - - if (i == _property_maps.end()) { - if (empty) { - *empty = true; - } - return T(); - } - - const PropertyMap& pmap (i->second); - PropertyMap::const_iterator p = pmap.find (prop_name); - - if (p == pmap.end()) { - return T(); - } - - return boost::get (p->second); - } - - void clear_maps (); - - public: - int get_int (const std::string& id, const std::string& prop_name) { - int i = 0; - return get (id, prop_name, i); - } - - std::string get_string (const std::string& id, const std::string& prop_name) { - std::string s; - return get (id, prop_name, s); - } + std::string get_string (const std::string& id, const std::string& prop_name, bool* empty = 0); template void set (const std::string& id, const std::string& prop_name, const T& val) { StringPropertyMap::iterator i = _property_maps.find (id); if (i != _property_maps.end()) { i->second[prop_name] = val; - // std::cerr << id << " REset " << prop_name << " = [" << val << "]\n"; } else { _property_maps[id] = PropertyMap(); _property_maps[id][prop_name] = val; - // std::cerr << id << " set " << prop_name << " = [" << val << "]\n"; } } + private: + StringPropertyMap _property_maps; + void clear_maps (); }; diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index fbba5a3117..dc0872ce87 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -619,9 +619,9 @@ MixerStrip::set_packed (bool yn) _packed = yn; if (_packed) { - set_gui_property ("visible", "yes"); + set_gui_property ("visible", true); } else { - set_gui_property ("visible", "no"); + set_gui_property ("visible", false); } } diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 496284c51d..0e6d21b7fc 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -750,7 +750,7 @@ Mixer_UI::redisplay_track_list () bool visible = (*i)[track_columns.visible]; if (visible) { - strip->set_gui_property ("visible", "yes"); + strip->set_gui_property ("visible", true); strip->route()->set_order_key (N_("signal"), order); if (!strip_redisplay_does_not_reset_order_keys) { @@ -778,7 +778,7 @@ Mixer_UI::redisplay_track_list () } else { - strip->set_gui_property ("visible", "no"); + strip->set_gui_property ("visible", false); if (strip->route()->is_master() || strip->route()->is_monitor()) { /* do nothing, these cannot be hidden */ diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 37775adb39..85601362c8 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -141,7 +141,11 @@ RouteTimeAxisView::set_route (boost::shared_ptr rt) } if (!_route->is_hidden()) { - set_gui_property ("visible", "yes"); + if (gui_property ("visible").empty()) { + set_gui_property ("visible", true); + } + } else { + set_gui_property ("visible", false); } mute_changed (0);