diff --git a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp index ae152a827..0fe099529 100644 --- a/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp @@ -157,7 +157,9 @@ enum { /////////////////////////////////////////////////////////////////////////////// // Table class -class NoteTrackVRulerMenuTable : public PopupMenuTable +class NoteTrackVRulerMenuTable + : public PopupMenuTable + , private PrefsListener { NoteTrackVRulerMenuTable() : PopupMenuTable{ "NoteTrackVRuler" } @@ -205,6 +207,12 @@ private: } void InitUserData(void *pUserData) override; + + void UpdatePrefs() override + { + // Because labels depend on advanced vertical zoom setting + PopupMenuTable::Clear(); + } }; NoteTrackVRulerMenuTable &NoteTrackVRulerMenuTable::Instance() @@ -248,15 +256,25 @@ void NoteTrackVRulerMenuTable::OnZoom( int iZoomCode ){ BEGIN_POPUP_MENU(NoteTrackVRulerMenuTable) + // Accelerators only if zooming enabled. + bool bVZoom; + gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false); + BeginSection( "Zoom" ); BeginSection( "Basic" ); - AppendItem( "Reset", OnZoomResetID, XXO("Zoom Reset\tShift-Right-Click"), POPUP_MENU_FN( OnZoomReset ) ); + AppendItem( "Reset", OnZoomResetID, + MakeLabel( XXO("Zoom Reset"), bVZoom, XXO("Shift-Right-Click")), + POPUP_MENU_FN( OnZoomReset ) ); AppendItem( "Max", OnZoomMaxID, XXO("Max Zoom"), POPUP_MENU_FN( OnZoomMax ) ); EndSection(); BeginSection( "InOut" ); - AppendItem( "In", OnZoomInVerticalID, XXO("Zoom In\tLeft-Click/Left-Drag"), POPUP_MENU_FN( OnZoomInVertical ) ); - AppendItem( "Out", OnZoomOutVerticalID, XXO("Zoom Out\tShift-Left-Click"), POPUP_MENU_FN( OnZoomOutVertical ) ); + AppendItem( "In", OnZoomInVerticalID, + MakeLabel( XXO("Zoom In"), bVZoom, XXO("Left-Click/Left-Drag") ), + POPUP_MENU_FN( OnZoomInVertical ) ); + AppendItem( "Out", OnZoomOutVerticalID, + MakeLabel( XXO("Zoom Out"), bVZoom, XXO("Shift-Left-Click") ), + POPUP_MENU_FN( OnZoomOutVertical ) ); EndSection(); EndSection(); @@ -285,9 +303,6 @@ UIHandle::Result NoteTrackVZoomHandle::Release const bool rightUp = event.RightUp(); - bool bVZoom; - gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false); - // Popup menu... if ( rightUp && @@ -301,25 +316,13 @@ UIHandle::Result NoteTrackVZoomHandle::Release (PopupMenuTable *) &NoteTrackVRulerMenuTable::Instance(); auto pMenu = PopupMenuTable::BuildMenu(pParent, pTable, &data); - // Accelerators only if zooming enabled. - if( !bVZoom ) - { - wxMenuItemList & L = pMenu->GetMenuItems(); - // let's iterate over the list in STL syntax - wxMenuItemList::iterator iter; - for (iter = L.begin(); iter != L.end(); ++iter) - { - wxMenuItem *pItem = *iter; - // Remove accelerator, if any. - pItem->SetItemLabel( (pItem->GetItemLabel() + "\t" ).BeforeFirst('\t') ); - } - } - pParent->PopupMenu(pMenu.get(), event.m_x, event.m_y); return data.result; } + bool bVZoom; + gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false); bVZoom &= event.GetId() != kCaptureLostEventId; if( !bVZoom ) return RefreshAll; diff --git a/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp index e3325903b..fe6c754b7 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/SpectrumVZoomHandle.cpp @@ -290,14 +290,21 @@ EndSection(); BeginSection( "Zoom" ); + // Accelerators only if zooming enabled. + bool bVZoom; + gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false); + AppendItem( "Reset", OnZoomResetID, XXO("Zoom Reset"), POPUP_MENU_FN( OnZoomReset ) ); - AppendItem( "Fit", OnZoomFitVerticalID, XXO("Zoom to Fit\tShift-Right-Click"), - POPUP_MENU_FN( OnZoomFitVertical ) ); - AppendItem( "In", OnZoomInVerticalID, XXO("Zoom In\tLeft-Click/Left-Drag"), - POPUP_MENU_FN( OnZoomInVertical ) ); - AppendItem( "Out", OnZoomOutVerticalID, XXO("Zoom Out\tShift-Left-Click"), - POPUP_MENU_FN( OnZoomOutVertical ) ); + AppendItem( "Fit", OnZoomFitVerticalID, + MakeLabel( XXO("Zoom to Fit"), bVZoom, XXO("Shift-Right-Click") ), + POPUP_MENU_FN( OnZoomFitVertical ) ); + AppendItem( "In", OnZoomInVerticalID, + MakeLabel( XXO("Zoom In"), bVZoom, XXO("Left-Click/Left-Drag") ), + POPUP_MENU_FN( OnZoomInVertical ) ); + AppendItem( "Out", OnZoomOutVerticalID, + MakeLabel( XXO("Zoom Out"), bVZoom, XXO("Shift-Left-Click") ), + POPUP_MENU_FN( OnZoomOutVertical ) ); EndSection(); END_POPUP_MENU() diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp index 18ba5e5e2..d5968ea19 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp @@ -20,7 +20,6 @@ Paul Licameli split from TrackPanel.cpp #include "WaveTrackViewConstants.h" #include "../../../../AudioIOBase.h" #include "../../../../CellularPanel.h" -#include "../../../../Menus.h" #include "../../../../Project.h" #include "../../../../ProjectAudioIO.h" #include "../../../../ProjectHistory.h" diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp index 01f060a6b..19c2ea798 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp @@ -52,6 +52,12 @@ void WaveTrackVRulerMenuTable::OnZoom( mpData->result = UpdateVRuler | RefreshAll; } +void WaveTrackVRulerMenuTable::UpdatePrefs() +{ + // Because labels depend on advanced vertical zoom setting + PopupMenuTable::Clear(); +} + /////////////////////////////////////////////////////////////////////////////// HitTestPreview WaveTrackVZoomHandle::HitPreview(const wxMouseState &state) @@ -105,10 +111,7 @@ UIHandle::Result WaveTrackVZoomHandle::DoRelease( const bool rightUp = event.RightUp(); - bool bVZoom; - gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false); - - // Popup menu... + // Popup menu... using namespace WaveTrackViewConstants; if ( rightUp && @@ -119,27 +122,13 @@ UIHandle::Result WaveTrackVZoomHandle::DoRelease( pTrack, rect, RefreshCode::RefreshNone, event.m_y, doZoom }; auto pMenu = PopupMenuTable::BuildMenu(pParent, &table, &data); - - // Accelerators only if zooming enabled. - if( !bVZoom ) - { - wxMenuItemList & L = pMenu->GetMenuItems(); - // let's iterate over the list in STL syntax - wxMenuItemList::iterator iter; - for (iter = L.begin(); iter != L.end(); ++iter) - { - wxMenuItem *pItem = *iter; - // Remove accelerator, if any. - pItem->SetItemLabel( (pItem->GetItemLabel() + "\t" ).BeforeFirst('\t') ); - } - } - - pParent->PopupMenu(pMenu.get(), event.m_x, event.m_y); return data.result; } else{ + bool bVZoom; + gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false); // Ignore Capture Lost event bVZoom &= event.GetId() != kCaptureLostEventId; // shiftDown | rightUp | ZoomKind diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h index e469ec69a..35a991cca 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h @@ -16,7 +16,7 @@ class PopupMenuTable; class WaveTrack; #include "WaveTrackViewConstants.h" #include "../../../../UIHandle.h" - +#include "../../../../Prefs.h" namespace WaveTrackVZoomHandle { @@ -53,7 +53,9 @@ namespace WaveTrackVZoomHandle #include "../../../../widgets/PopupMenuTable.h" // to inherit -class WaveTrackVRulerMenuTable : public PopupMenuTable +class WaveTrackVRulerMenuTable + : public PopupMenuTable + , private PrefsListener { public: struct InitMenuData @@ -98,6 +100,8 @@ protected: { OnZoom( WaveTrackViewConstants::kZoomIn );}; void OnZoomOutVertical(wxCommandEvent&) { OnZoom( WaveTrackViewConstants::kZoomOut );}; + + void UpdatePrefs() override; }; enum { diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp index b457ed5c1..cd253292b 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveformVZoomHandle.cpp @@ -265,6 +265,9 @@ PopupMenuTable &WaveformVRulerMenuTable::Instance() } BEGIN_POPUP_MENU(WaveformVRulerMenuTable) + // Accelerators only if zooming enabled. + bool bVZoom; + gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false); BeginSection( "Scales" ); { @@ -289,8 +292,11 @@ BEGIN_POPUP_MENU(WaveformVRulerMenuTable) BeginSection( "Zoom" ); BeginSection( "Basic" ); - AppendItem( "Reset", OnZoomFitVerticalID, XXO("Zoom Reset\tShift-Right-Click"), POPUP_MENU_FN( OnZoomReset ) ); - AppendItem( "TimesHalf", OnZoomDiv2ID, XXO("Zoom x1/2"), POPUP_MENU_FN( OnZoomDiv2Vertical ) ); + AppendItem( "Reset", OnZoomFitVerticalID, + MakeLabel( XXO("Zoom Reset"), bVZoom, XXO("Shift-Right-Click") ), + POPUP_MENU_FN( OnZoomReset ) ); + AppendItem( "TimesHalf", OnZoomDiv2ID, XXO("Zoom x1/2"), + POPUP_MENU_FN( OnZoomDiv2Vertical ) ); AppendItem( "TimesTwo", OnZoomTimes2ID, XXO("Zoom x2"), POPUP_MENU_FN( OnZoomTimes2Vertical ) ); #ifdef EXPERIMENTAL_HALF_WAVE @@ -299,8 +305,12 @@ BEGIN_POPUP_MENU(WaveformVRulerMenuTable) EndSection(); BeginSection( "InOut" ); - AppendItem( "In", OnZoomInVerticalID, XXO("Zoom In\tLeft-Click/Left-Drag"), POPUP_MENU_FN( OnZoomInVertical ) ); - AppendItem( "Out", OnZoomOutVerticalID, XXO("Zoom Out\tShift-Left-Click"), POPUP_MENU_FN( OnZoomOutVertical ) ); + AppendItem( "In", OnZoomInVerticalID, + MakeLabel( XXO("Zoom In"), bVZoom, XXO("Left-Click/Left-Drag") ), + POPUP_MENU_FN( OnZoomInVertical ) ); + AppendItem( "Out", OnZoomOutVerticalID, + MakeLabel( XXO("Zoom Out"), bVZoom, XXO("Shift-Left-Click") ), + POPUP_MENU_FN( OnZoomOutVertical ) ); EndSection(); EndSection(); diff --git a/src/tracks/ui/CommonTrackControls.cpp b/src/tracks/ui/CommonTrackControls.cpp index c48e7d932..ff9646119 100644 --- a/src/tracks/ui/CommonTrackControls.cpp +++ b/src/tracks/ui/CommonTrackControls.cpp @@ -78,7 +78,9 @@ enum OnMoveBottomID, }; -class TrackMenuTable : public PopupMenuTable +class TrackMenuTable + : public PopupMenuTable + , private PrefsListener { TrackMenuTable() : PopupMenuTable{ "Track" } @@ -100,6 +102,12 @@ private: } CommonTrackControls::InitMenuData *mpData{}; + + void UpdatePrefs() override + { + // Because labels depend on keyboard preferences + PopupMenuTable::Clear(); + } }; TrackMenuTable &TrackMenuTable::Instance() diff --git a/src/tracks/ui/Scrubbing.cpp b/src/tracks/ui/Scrubbing.cpp index 58244ffae..df9856789 100644 --- a/src/tracks/ui/Scrubbing.cpp +++ b/src/tracks/ui/Scrubbing.cpp @@ -17,7 +17,6 @@ Paul Licameli split from TrackPanel.cpp #include "../../AudioIO.h" #include "../../CommonCommandFlags.h" -#include "../../Menus.h" #include "../../Project.h" #include "../../ProjectAudioIO.h" #include "../../ProjectAudioManager.h" diff --git a/src/widgets/PopupMenuTable.h b/src/widgets/PopupMenuTable.h index 3e102e4f4..22017796a 100644 --- a/src/widgets/PopupMenuTable.h +++ b/src/widgets/PopupMenuTable.h @@ -141,6 +141,11 @@ public: return mTop; } + void Clear() + { + mTop.reset(); + } + // Forms a computed item, which may be omitted when function returns null // and thus can be a conditional item template< typename Table > @@ -162,6 +167,16 @@ private: const Registry::Placement &placement, Registry::BaseItemPtr pItem ); protected: + // This convenience function composes a label, with the following optional + // part put in parentheses if useExtra is true + static TranslatableString MakeLabel( const TranslatableString &label, + bool useExtra, const TranslatableString &extra ) + { + return useExtra + ? XXO("%s (%s)").Format( label, extra ) + : label; + } + virtual void Populate() = 0; // To be used in implementations of Populate():