Use general VisibilityGroup class to manage visibility
authorCarl Hetherington <carl@carlh.net>
Sat, 29 Oct 2011 20:07:00 +0000 (20:07 +0000)
committerCarl Hetherington <carl@carlh.net>
Sat, 29 Oct 2011 20:07:00 +0000 (20:07 +0000)
of bits of the status bar.

git-svn-id: svn://localhost/ardour2/branches/3.0@10340 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui_ed.cc
gtk2_ardour/enums.cc
gtk2_ardour/enums.h
gtk2_ardour/wscript

index 63ca764477504b994df097f0106784a161a2ae8a..7319be632edb946652152d731a2fd05de9b5a506 100644 (file)
@@ -178,6 +178,8 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
 
        , error_log_button (_("Errors"))
 
+       , _status_bar_visibility (X_("status-bar"))
+
 {
        using namespace Gtk::Menu_Helpers;
 
@@ -330,16 +332,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
        starting.connect (sigc::mem_fun(*this, &ARDOUR_UI::startup));
        stopping.connect (sigc::mem_fun(*this, &ARDOUR_UI::shutdown));
 
-       {
-               _status_bar_visiblity = (StatusBarComponent) (StatusCPULoad | StatusBufferLoad | StatusSampleRate | StatusFormat);
-               XMLNode* n = Config->extra_xml (X_("UI"));
-               if (n) {
-                       XMLProperty* p = n->property (X_("status-bar-visibility"));
-                       if (p) {
-                               _status_bar_visiblity = (StatusBarComponent) string_2_enum (p->value(), _status_bar_visiblity);
-                       }
-               }
-       }
 }
 
 /** @return true if a session was chosen and `apply' clicked, otherwise false if `cancel' was clicked */
@@ -420,6 +412,12 @@ ARDOUR_UI::post_engine ()
                throw failed_constructor ();
        }
 
+       /* Do this after setup_windows (), as that's when the _status_bar_visibility is created */
+       XMLNode* n = Config->extra_xml (X_("UI"));
+       if (n) {
+               _status_bar_visibility.set_state (*n);
+       }
+       
        check_memory_locking();
 
        /* this is the first point at which all the keybindings are available */
@@ -726,7 +724,7 @@ ARDOUR_UI::startup ()
        /* We have to do this here since goto_editor_window() ends up calling show_all() on the
         * editor window, and we may want stuff to be hidden.
         */
-       update_status_bar_visibility ();
+       _status_bar_visibility.update ();
 
        BootMessage (string_compose (_("%1 is ready for use"), PROGRAM_NAME));
 }
index 2a3e428cc505a7ebac32f62f31f79f359fd88036..025039156e5677ab484ecba67462ffe90452e59e 100644 (file)
@@ -68,6 +68,7 @@
 #include "ui_config.h"
 #include "window_proxy.h"
 #include "enums.h"
+#include "visibility_group.h"
 
 class About;
 class AddRouteDialog;
@@ -722,10 +723,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
 
        bool click_button_clicked (GdkEventButton *);
 
-       bool status_bar_button_press_event (GdkEventButton *);
-       void update_status_bar_visibility ();
-       void toggle_status_bar_visibility (StatusBarComponent);
-       StatusBarComponent _status_bar_visiblity;
+       VisibilityGroup _status_bar_visibility;
 };
 
 #endif /* __ardour_gui_h__ */
index c9381b7a6469474d520b58e51cc9e4d36d14b7b9..8ab5a9aa50fdea1d90f11db14589949556c61104 100644 (file)
@@ -566,12 +566,15 @@ ARDOUR_UI::build_menu_bar ()
        use_menubar_as_top_menubar ();
 #endif
 
+       bool wall_clock = false;
+       bool disk_space = false;
+
        if (!Profile->get_small_screen()) {
 #ifndef GTKOSX
                // OSX provides its own wallclock, thank you very much
-               _status_bar_visiblity = (StatusBarComponent) (_status_bar_visiblity | StatusWallClock);
+               wall_clock = true;
 #endif
-               _status_bar_visiblity = (StatusBarComponent) (_status_bar_visiblity | StatusDiskSpace);
+               disk_space = true;
        }
        
        hbox->pack_end (wall_clock_box, false, false, 2);
@@ -586,102 +589,14 @@ ARDOUR_UI::build_menu_bar ()
        menu_bar_base.set_name ("MainMenuBar");
        menu_bar_base.add (menu_hbox);
 
-       ev->signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::status_bar_button_press_event));
-}
-
-bool
-ARDOUR_UI::status_bar_button_press_event (GdkEventButton* ev)
-{
-       if (ev->button != 3) {
-               return false;
-       }
-
-       using namespace Menu_Helpers;
-       
-       Menu* m = manage (new Menu);
-
-       MenuList& items = m->items ();
-
-       items.push_back (CheckMenuElem (_("Wall Clock")));
-       CheckMenuItem* i = dynamic_cast<CheckMenuItem*> (&items.back ());
-       i->set_active (_status_bar_visiblity & StatusWallClock);
-       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_status_bar_visibility), StatusWallClock));
-
-       items.push_back (CheckMenuElem (_("Disk Space")));
-       i = dynamic_cast<CheckMenuItem*> (&items.back ());
-       i->set_active (_status_bar_visiblity & StatusDiskSpace);
-       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_status_bar_visibility), StatusDiskSpace));
+       _status_bar_visibility.add (&wall_clock_box,  X_("WallClock"), _("Wall Clock"), wall_clock);
+       _status_bar_visibility.add (&disk_space_box,  X_("Disk"),      _("Disk Space"), disk_space);
+       _status_bar_visibility.add (&cpu_load_box,    X_("DSP"),       _("DSP"));
+       _status_bar_visibility.add (&buffer_load_box, X_("Buffers"),   _("Buffers"));
+       _status_bar_visibility.add (&sample_rate_box, X_("JACK"),      _("JACK Sampling Rate and Latency"));
+       _status_bar_visibility.add (&format_box,      X_("Format"),    _("File Format"));
 
-       items.push_back (CheckMenuElem (_("DSP")));
-       i = dynamic_cast<CheckMenuItem*> (&items.back ());
-       i->set_active (_status_bar_visiblity & StatusCPULoad);
-       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_status_bar_visibility), StatusCPULoad));
-
-       items.push_back (CheckMenuElem (_("Buffers")));
-       i = dynamic_cast<CheckMenuItem*> (&items.back ());
-       i->set_active (_status_bar_visiblity & StatusBufferLoad);
-       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_status_bar_visibility), StatusBufferLoad));
-
-       items.push_back (CheckMenuElem (_("JACK Sampling Rate and Latency")));
-       i = dynamic_cast<CheckMenuItem*> (&items.back ());
-       i->set_active (_status_bar_visiblity & StatusSampleRate);
-       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_status_bar_visibility), StatusSampleRate));
-
-       items.push_back (CheckMenuElem (_("File Format")));
-       i = dynamic_cast<CheckMenuItem*> (&items.back ());
-       i->set_active (_status_bar_visiblity & StatusFormat);
-       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_status_bar_visibility), StatusFormat));
-
-       m->popup (1, ev->time);
-
-       return true;
-}
-
-void
-ARDOUR_UI::update_status_bar_visibility ()
-{
-       if (_status_bar_visiblity & StatusWallClock) {
-               wall_clock_box.show ();
-       } else {
-               wall_clock_box.hide ();
-       }
-
-       if (_status_bar_visiblity & StatusDiskSpace) {
-               disk_space_box.show ();
-       } else {
-               disk_space_box.hide ();
-       }
-
-       if (_status_bar_visiblity & StatusCPULoad) {
-               cpu_load_box.show ();
-       } else {
-               cpu_load_box.hide ();
-       }
-
-       if (_status_bar_visiblity & StatusBufferLoad) {
-               buffer_load_box.show ();
-       } else {
-               buffer_load_box.hide ();
-       }
-
-       if (_status_bar_visiblity & StatusSampleRate) {
-               sample_rate_box.show ();
-       } else {
-               sample_rate_box.hide ();
-       }
-
-       if (_status_bar_visiblity & StatusFormat) {
-               format_box.show ();
-       } else {
-               format_box.hide ();
-       }
-}
-
-void
-ARDOUR_UI::toggle_status_bar_visibility (StatusBarComponent c)
-{
-       _status_bar_visiblity = (StatusBarComponent) (_status_bar_visiblity ^ c);
-       update_status_bar_visibility ();
+       ev->signal_button_press_event().connect (sigc::mem_fun (_status_bar_visibility, &VisibilityGroup::button_press_event));
 }
 
 void
@@ -829,7 +744,7 @@ ARDOUR_UI::save_ardour_state ()
        Config->add_extra_xml (get_transport_controllable_state());
 
        XMLNode* window_node = new XMLNode (X_("UI"));
-       window_node->add_property (X_("status-bar-visibility"), enum_2_string (_status_bar_visiblity));
+       window_node->add_property (_status_bar_visibility.get_state_name().c_str(), _status_bar_visibility.get_state_value ());
 
        for (list<WindowProxyBase*>::iterator i = _window_proxies.begin(); i != _window_proxies.end(); ++i) {
                if ((*i)->rc_configured()) {
index 76bcff4205d475ceb10e4dfa6d68aee3257c3553..930ac7e2d6209f5fcf1ea4d958962fa602de98c0 100644 (file)
@@ -41,7 +41,6 @@ setup_gtk_ardour_enums ()
        EditPoint edit_point;
        LayerDisplay layer_display;
        RegionListSortType region_list_sort_type;
-       StatusBarComponent status_bar_component;
 
 #define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
 #define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear()
@@ -84,12 +83,4 @@ setup_gtk_ardour_enums ()
        REGISTER_ENUM (ByStartInFile);
        REGISTER_ENUM (ByTimestamp);
        REGISTER (region_list_sort_type);
-
-       REGISTER_ENUM (StatusWallClock);
-       REGISTER_ENUM (StatusDiskSpace);
-       REGISTER_ENUM (StatusCPULoad);
-       REGISTER_ENUM (StatusBufferLoad);
-       REGISTER_ENUM (StatusSampleRate);
-       REGISTER_ENUM (StatusFormat);
-       REGISTER_BITS (status_bar_component);
 }
index e0e94c57d1cad0437929a16afeb1fe7f2817abad..92b2923894ef8c125eca45fd58aee97cbdb9841b 100644 (file)
@@ -53,15 +53,6 @@ enum Height {
        HeightSmall
 };
 
-enum StatusBarComponent {
-       StatusWallClock = 0x1,
-       StatusDiskSpace = 0x2,
-       StatusCPULoad = 0x4,
-       StatusBufferLoad = 0x8,
-       StatusSampleRate = 0x10,
-       StatusFormat = 0x20
-};
-
 extern void setup_gtk_ardour_enums ();
 
 #endif /* __ardour_gtk_enums_h__ */
index 6096394bed0541a73a2b845a8ed566caac2f1a55..a0a18610015871a418abf069da51a0228896baa8 100644 (file)
@@ -230,6 +230,7 @@ gtk2_ardour_sources = [
         'utils.cc',
         'verbose_cursor.cc',
         'version.cc',
+        'visibility_group.cc',
         'volume_controller.cc',
         'waveview.cc',
         'window_proxy.cc'