X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faxis_view.cc;h=632289bddffe68254493669c1f10e02b1dfeff2a;hb=24d5f1a6249b08a8b21854ecf001be7e07e5bf23;hp=dcbaa35d37db584f925ab997ccaa403571bcb49d;hpb=ed626628b54e67dd9621c08d82a42afaed00c7ac;p=ardour.git diff --git a/gtk2_ardour/axis_view.cc b/gtk2_ardour/axis_view.cc index dcbaa35d37..632289bddf 100644 --- a/gtk2_ardour/axis_view.cc +++ b/gtk2_ardour/axis_view.cc @@ -26,30 +26,31 @@ #include #include "pbd/error.h" +#include "pbd/convert.h" +#include "pbd/i18n.h" #include #include #include -#include "ardour/session.h" -#include "ardour/utils.h" +#include "ardour/selection.h" #include "public_editor.h" +#include "ardour_ui.h" +#include "gui_object.h" #include "axis_view.h" -#include "i18n.h" +#include "utils.h" using namespace std; using namespace Gtk; using namespace Gtkmm2ext; using namespace ARDOUR; +using namespace ARDOUR_UI_UTILS; list AxisView::used_colors; -AxisView::AxisView (ARDOUR::Session* sess) - : SessionHandlePtr (sess) +AxisView::AxisView () { - _selected = false; - _marked_for_display = false; } AxisView::~AxisView() @@ -59,39 +60,77 @@ AxisView::~AxisView() Gdk::Color AxisView::unique_random_color() { - Gdk::Color newcolor; + return ::unique_random_color (used_colors); +} + +string +AxisView::gui_property (const string& property_name) const +{ + 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; + } +} - while (1) { +bool +AxisView::get_gui_property (const std::string& property_name, std::string& value) const +{ + std::string str = gui_property(property_name); - /* avoid neon/glowing tones by limiting them to the - "inner section" (paler) of a color wheel/circle. - */ + if (!str.empty()) { + value = str; + return true; + } - const int32_t max_saturation = 48000; // 65535 would open up the whole color wheel + return false; +} - newcolor.set_red (random() % max_saturation); - newcolor.set_blue (random() % max_saturation); - newcolor.set_green (random() % max_saturation); +void +AxisView::set_gui_property (const std::string& property_name, const std::string& value) +{ + property_hashtable.erase (property_name); + property_hashtable.emplace (property_name, value); + gui_object_state ().set_property (state_id (), property_name, value); +} - if (used_colors.size() == 0) { - used_colors.push_back (newcolor); - return newcolor; - } +bool +AxisView::marked_for_display () const +{ + bool visible; + if (!get_gui_property ("visible", visible)) { + return true; + } + return visible; +} - for (list::iterator i = used_colors.begin(); i != used_colors.end(); ++i) { - Gdk::Color c = *i; - float rdelta, bdelta, gdelta; +bool +AxisView::set_marked_for_display (bool yn) +{ + bool visible; + if (get_gui_property ("visible", visible) && visible == yn) { + return false; // nothing changed + } - rdelta = newcolor.get_red() - c.get_red(); - bdelta = newcolor.get_blue() - c.get_blue(); - gdelta = newcolor.get_green() - c.get_green(); + set_gui_property ("visible", yn); + return true; // things changed +} - if (sqrt (rdelta*rdelta + bdelta*bdelta + gdelta*gdelta) > 25.0) { - used_colors.push_back (newcolor); - return newcolor; - } - } +GUIObjectState& +AxisView::gui_object_state() +{ + return *ARDOUR_UI::instance()->gui_object_state; +} - /* XXX need throttle here to make sure we don't spin for ever */ +void +AxisView::set_selected (bool yn) +{ + if (selected() == yn) { + return; } + + Selectable::set_selected (yn); }