From 4d365d08c1f654289f3df5a3b2ef6079b1dcea28 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 29 Oct 2011 20:07:00 +0000 Subject: Use general VisibilityGroup class to manage visibility 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 | 20 ++++---- gtk2_ardour/ardour_ui.h | 6 +-- gtk2_ardour/ardour_ui_ed.cc | 111 ++++++-------------------------------------- gtk2_ardour/enums.cc | 9 ---- gtk2_ardour/enums.h | 9 ---- gtk2_ardour/wscript | 1 + 6 files changed, 25 insertions(+), 131 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 63ca764477..7319be632e 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -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)); } diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 2a3e428cc5..025039156e 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -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__ */ diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index c9381b7a64..8ab5a9aa50 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -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 (&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 (&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 (&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 (&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 (&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 (&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::iterator i = _window_proxies.begin(); i != _window_proxies.end(); ++i) { if ((*i)->rc_configured()) { diff --git a/gtk2_ardour/enums.cc b/gtk2_ardour/enums.cc index 76bcff4205..930ac7e2d6 100644 --- a/gtk2_ardour/enums.cc +++ b/gtk2_ardour/enums.cc @@ -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); } diff --git a/gtk2_ardour/enums.h b/gtk2_ardour/enums.h index e0e94c57d1..92b2923894 100644 --- a/gtk2_ardour/enums.h +++ b/gtk2_ardour/enums.h @@ -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__ */ diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index 6096394bed..a0a1861001 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -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' -- cgit v1.2.3