diff options
author | Robin Gareus <robin@gareus.org> | 2014-06-28 21:45:52 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-06-28 22:02:20 +0200 |
commit | fd7cddb847639b28bbeaf72d5b613833761efe6f (patch) | |
tree | fc47fa06466cdfd1fc703762b3af17583ef3dd0a /gtk2_ardour | |
parent | 4a7eb62bf869e156d58e5c6f56ac355e747b3ad9 (diff) |
use a hash-table to cache gui properties
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/axis_view.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/axis_view.h | 7 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 1 |
3 files changed, 15 insertions, 3 deletions
diff --git a/gtk2_ardour/axis_view.cc b/gtk2_ardour/axis_view.cc index 41efbf86ae..5e36fc43c1 100644 --- a/gtk2_ardour/axis_view.cc +++ b/gtk2_ardour/axis_view.cc @@ -66,7 +66,14 @@ AxisView::unique_random_color() string AxisView::gui_property (const string& property_name) const { - return gui_object_state().get_string (state_id(), property_name); + if (property_hashtable.count(property_name)) { + return property_hashtable[property_name]; + } else { + string rv = gui_object_state().get_string (state_id(), property_name); + property_hashtable.erase(property_name); + property_hashtable.emplace(property_name, rv); + return rv; + } } bool @@ -84,7 +91,6 @@ AxisView::set_marked_for_display (bool yn) set_gui_property ("visible", yn); return true; // things changed } - return false; } diff --git a/gtk2_ardour/axis_view.h b/gtk2_ardour/axis_view.h index 8e777c2a58..4ce76c92ce 100644 --- a/gtk2_ardour/axis_view.h +++ b/gtk2_ardour/axis_view.h @@ -21,6 +21,7 @@ #define __ardour_gtk_axis_view_h__ #include <list> +#include <boost/unordered_map.hpp> #include <gtkmm/label.h> #include <gdkmm/color.h> @@ -63,6 +64,10 @@ class AxisView : public virtual Selectable, public PBD::ScopedConnectionList, pu std::string gui_property (const std::string& property_name) const; template<typename T> void set_gui_property (const std::string& property_name, const T& value) { + std::stringstream s; + s << value; + property_hashtable.erase(property_name); + property_hashtable.emplace(property_name, s.str()); gui_object_state().set_property<T> (state_id(), property_name, value); } @@ -89,7 +94,7 @@ class AxisView : public virtual Selectable, public PBD::ScopedConnectionList, pu Gtk::Label name_label; - bool _marked_for_display; + mutable boost::unordered_map<std::string, std::string> property_hashtable; uint32_t _old_order_key; }; /* class AxisView */ diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index a50fe95649..83610f0895 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -404,6 +404,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void center_screen (framepos_t); TrackViewList axis_views_from_routes (boost::shared_ptr<ARDOUR::RouteList>) const; + Gtkmm2ext::TearOff* mouse_mode_tearoff () const { return _mouse_mode_tearoff; } Gtkmm2ext::TearOff* tools_tearoff () const { return _tools_tearoff; } |