summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-10-29 20:07:00 +0000
committerCarl Hetherington <carl@carlh.net>2011-10-29 20:07:00 +0000
commit4d365d08c1f654289f3df5a3b2ef6079b1dcea28 (patch)
tree16c571e289b6c9762b3d561959a951357a9c8029 /gtk2_ardour
parent780cd2fabcf15e666fa219fc94720c8c67da204b (diff)
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
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc20
-rw-r--r--gtk2_ardour/ardour_ui.h6
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc111
-rw-r--r--gtk2_ardour/enums.cc9
-rw-r--r--gtk2_ardour/enums.h9
-rw-r--r--gtk2_ardour/wscript1
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<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()) {
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'