From 637463c953682b38dc3b6258a979849fb3458bb5 Mon Sep 17 00:00:00 2001 From: Michael Adler Date: Wed, 5 Aug 2026 13:39:33 -0400 Subject: [PATCH] gui: add control to show/hide bottom status bar --- src/dfltcfg.h | 2 ++ src/gui/FrameMain.cpp | 9 +++++++++ src/gui/FrameMain.h | 1 + src/gui/MyFrameMain.cpp | 44 +++++++++++++++++++++++++++++++++++------ src/gui/MyFrameMain.h | 3 +++ src/gui/evtids.h | 1 + 6 files changed, 54 insertions(+), 6 deletions(-) diff --git a/src/dfltcfg.h b/src/dfltcfg.h index 7015c9d0..5126da5d 100644 --- a/src/dfltcfg.h +++ b/src/dfltcfg.h @@ -29,6 +29,8 @@ // gui stuff #define K_SHOWTOOLBAR _T("ShowToolbar") #define V_SHOWTOOLBAR true +#define K_SHOWSTATUSBAR _T("ShowStatusBar") +#define V_SHOWSTATUSBAR true #define K_SHOWDISCOVERED _T("ShowZeroConf") #define V_SHOWDISCOVERED true #define K_SHOWBOOKMARKS _T("ShowBookmarks") diff --git a/src/gui/FrameMain.cpp b/src/gui/FrameMain.cpp index 0e2e08c5..955ca836 100644 --- a/src/gui/FrameMain.cpp +++ b/src/gui/FrameMain.cpp @@ -55,6 +55,8 @@ FrameMain::FrameMain(wxWindow* parent, wxWindowID id, const wxString& title, con wxglade_tmp_menu = new wxMenu(); wxglade_tmp_menu->Append(ID_TOOLBAR, _("Toolbar"), wxEmptyString, wxITEM_CHECK); Bind(wxEVT_MENU, &FrameMain::view_toggletoolbar, this, ID_TOOLBAR); + wxglade_tmp_menu->Append(ID_STATUSBAR, _("Status Bar"), wxEmptyString, wxITEM_CHECK); + Bind(wxEVT_MENU, &FrameMain::view_togglestatusbar, this, ID_STATUSBAR); wxglade_tmp_menu->Append(ID_DISCOVERED, _("Discovered Servers"), wxEmptyString, wxITEM_CHECK); Bind(wxEVT_MENU, &FrameMain::view_togglediscovered, this, ID_DISCOVERED); wxglade_tmp_menu->Append(ID_BOOKMARKS, _("Bookmarks"), wxEmptyString, wxITEM_CHECK); @@ -275,6 +277,13 @@ void FrameMain::view_toggletoolbar(wxCommandEvent &event) // wxGlade: FrameMain wxLogDebug(wxT("Event handler (FrameMain::view_toggletoolbar) not implemented yet")); } +void FrameMain::view_togglestatusbar(wxCommandEvent &event) // wxGlade: FrameMain. +{ + event.Skip(); + // notify the user that he hasn't implemented the event handler yet + wxLogDebug(wxT("Event handler (FrameMain::view_togglestatusbar) not implemented yet")); +} + void FrameMain::view_togglediscovered(wxCommandEvent &event) // wxGlade: FrameMain. { event.Skip(); diff --git a/src/gui/FrameMain.h b/src/gui/FrameMain.h index 81276002..1da7a85b 100644 --- a/src/gui/FrameMain.h +++ b/src/gui/FrameMain.h @@ -78,6 +78,7 @@ class FrameMain: public wxFrame { virtual void machine_input_replay(wxCommandEvent &event); // wxGlade: virtual void machine_exit(wxCommandEvent &event); // wxGlade: virtual void view_toggletoolbar(wxCommandEvent &event); // wxGlade: + virtual void view_togglestatusbar(wxCommandEvent &event); // wxGlade: virtual void view_togglediscovered(wxCommandEvent &event); // wxGlade: virtual void view_togglebookmarks(wxCommandEvent &event); // wxGlade: virtual void view_togglestatistics(wxCommandEvent &event); // wxGlade: diff --git a/src/gui/MyFrameMain.cpp b/src/gui/MyFrameMain.cpp index 9dcf3089..5bfa1760 100644 --- a/src/gui/MyFrameMain.cpp +++ b/src/gui/MyFrameMain.cpp @@ -74,6 +74,7 @@ MyFrameMain::MyFrameMain(wxWindow* parent, int id, const wxString& title, // get default config object, created on demand if not exist wxConfigBase *pConfig = wxConfigBase::Get(); pConfig->Read(K_SHOWTOOLBAR, &show_toolbar, V_SHOWTOOLBAR); + pConfig->Read(K_SHOWSTATUSBAR, &show_statusbar, V_SHOWSTATUSBAR); pConfig->Read(K_SHOWDISCOVERED, &show_discovered, V_SHOWDISCOVERED); pConfig->Read(K_SHOWBOOKMARKS, &show_bookmarks, V_SHOWBOOKMARKS); pConfig->Read(K_SHOWSTATS, &show_stats, V_SHOWSTATS); @@ -179,6 +180,8 @@ MyFrameMain::MyFrameMain(wxWindow* parent, int id, const wxString& title, frame_main_menubar->Check(ID_BOOKMARKS, true); if(show_stats) frame_main_menubar->Check(ID_STATISTICS, true); + if(show_statusbar) + frame_main_menubar->Check(ID_STATUSBAR, true); if (VNCSeamlessConnector::isSupportedByCurrentPlatform()) { switch (show_seamless) { @@ -218,6 +221,8 @@ MyFrameMain::MyFrameMain(wxWindow* parent, int id, const wxString& title, Bind(wxEVT_AUINOTEBOOK_PAGE_CLOSE, &MyFrameMain::notebook_connections_pageclose, this, wxID_ANY); Bind(wxEVT_AUINOTEBOOK_TAB_RIGHT_DOWN, &MyFrameMain::notebook_connections_tab_right_down, this, wxID_ANY); Bind(wxEVT_AUINOTEBOOK_DRAG_DONE, &MyFrameMain::notebook_connections_drag_done, this, wxID_ANY); + + applyStatusBarVisibility(); } @@ -260,6 +265,23 @@ MyFrameMain::~MyFrameMain() } +void MyFrameMain::applyStatusBarVisibility() +{ + if(show_fullscreen || !show_statusbar) + { + if(GetStatusBar() == frame_main_statusbar) + SetStatusBar(nullptr); + frame_main_statusbar->Hide(); + } + else + { + if(GetStatusBar() != frame_main_statusbar) + SetStatusBar(frame_main_statusbar); + frame_main_statusbar->Show(); + } +} + + @@ -752,9 +774,7 @@ void MyFrameMain::onFullScreenChanged(wxFullScreenEvent &event) { splitwinlayout(); // hide toolbar labels GetToolBar()->SetWindowStyle(GetToolBar()->GetWindowStyle() & ~wxTB_TEXT); - // hide and unlink status bar - GetStatusBar()->Hide(); - SetStatusBar(nullptr); + applyStatusBarVisibility(); } else { // untick menu item frame_main_menubar->Check(ID_FULLSCREEN, false); @@ -774,9 +794,7 @@ void MyFrameMain::onFullScreenChanged(wxFullScreenEvent &event) { splitwinlayout(); // show toolbar labels GetToolBar()->SetWindowStyle(GetToolBar()->GetWindowStyle() | wxTB_TEXT); - // reattach and status bar - SetStatusBar(frame_main_statusbar); - GetStatusBar()->Show(); + applyStatusBarVisibility(); } // needed at least on MacOS to let the status bar re-appear correctly on restore SendSizeEvent(); @@ -2120,6 +2138,20 @@ void MyFrameMain::view_toggletoolbar(wxCommandEvent &event) } +void MyFrameMain::view_togglestatusbar(wxCommandEvent &event) +{ + show_statusbar = !show_statusbar; + + applyStatusBarVisibility(); + + // this does more than Layout() which only deals with sizers + SendSizeEvent(); + + wxConfigBase *pConfig = wxConfigBase::Get(); + pConfig->Write(K_SHOWSTATUSBAR, show_statusbar); +} + + void MyFrameMain::view_togglediscovered(wxCommandEvent &event) { diff --git a/src/gui/MyFrameMain.h b/src/gui/MyFrameMain.h index 6a6ce811..8b55830f 100644 --- a/src/gui/MyFrameMain.h +++ b/src/gui/MyFrameMain.h @@ -44,6 +44,7 @@ class MyFrameMain: public FrameMain // gui layout stuff bool show_toolbar; + bool show_statusbar; bool show_discovered; bool show_bookmarks; bool show_stats; @@ -116,6 +117,7 @@ class MyFrameMain: public FrameMain // multi-sync input bool multi_sync_enabled; void updateMultiSyncTargets(); + void applyStatusBarVisibility(); protected: @@ -155,6 +157,7 @@ class MyFrameMain: public FrameMain void machine_exit(wxCommandEvent &event); void view_toggletoolbar(wxCommandEvent &event); + void view_togglestatusbar(wxCommandEvent &event); void view_togglediscovered(wxCommandEvent &event); void view_togglebookmarks(wxCommandEvent &event); void view_togglestatistics(wxCommandEvent &event); diff --git a/src/gui/evtids.h b/src/gui/evtids.h index d4c5c49d..e34edded 100644 --- a/src/gui/evtids.h +++ b/src/gui/evtids.h @@ -4,6 +4,7 @@ enum { ID_TOOLBAR = wxID_HIGHEST + 42, + ID_STATUSBAR, ID_DISCOVERED, ID_BOOKMARKS, ID_STATISTICS,