X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faxis_view.cc;h=03ae8a4a571db1bbd3e1d389e5b0968f0728439f;hb=46bbe834009d51a652e03a7fd4fa57bfb6457e38;hp=1144fb1e68c67c13c681df1c1307d58ab7341554;hpb=7d32cf3813b7145b98c86b59867092e04aa2621a;p=ardour.git diff --git a/gtk2_ardour/axis_view.cc b/gtk2_ardour/axis_view.cc index 1144fb1e68..03ae8a4a57 100644 --- a/gtk2_ardour/axis_view.cc +++ b/gtk2_ardour/axis_view.cc @@ -1,21 +1,25 @@ /* - Copyright (C) 2003 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ + * Copyright (C) 2005-2017 Paul Davis + * Copyright (C) 2005 Taybin Rutkin + * Copyright (C) 2009-2011 Carl Hetherington + * Copyright (C) 2009-2012 David Robillard + * Copyright (C) 2014-2018 Robin Gareus + * Copyright (C) 2016 Tim Mayberry + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ #include #include @@ -26,32 +30,31 @@ #include #include "pbd/error.h" +#include "pbd/convert.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 "utils.h" -#include "i18n.h" + +#include "pbd/i18n.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; } AxisView::~AxisView() @@ -67,33 +70,71 @@ 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 +AxisView::get_gui_property (const std::string& property_name, std::string& value) const +{ + std::string str = gui_property(property_name); + + if (!str.empty()) { + value = str; + return true; + } + + return false; +} + +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); } bool AxisView::marked_for_display () const { - string const v = gui_property ("visible"); - return (v == "" || string_is_affirmative (v)); + bool visible; + if (!get_gui_property ("visible", visible)) { + return true; + } + return visible; } bool AxisView::set_marked_for_display (bool yn) { - if (yn != marked_for_display()) { - if (yn) { - set_gui_property ("visible", true); - } else { - set_gui_property ("visible", false); - } - return true; // things changed + bool visible; + if (get_gui_property ("visible", visible) && visible == yn) { + return false; // nothing changed } - return false; + set_gui_property ("visible", yn); + return true; // things changed } GUIObjectState& -AxisView::gui_object_state() +AxisView::gui_object_state() { return *ARDOUR_UI::instance()->gui_object_state; } + +void +AxisView::set_selected (bool yn) +{ + if (selected() == yn) { + return; + } + + Selectable::set_selected (yn); +}