1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 16:10:06 +02:00

Change the menu labels in vertical rulers...

... and recompute popup menu tables that depend on preferences.

The code for labels in the rulers was unsatisfactory because

(1) rescanning and editing the post-translation strings is a hack to avoid, and
(2) separating the hints like "Shift-Left-Click" with a tab character made them
invisible on Mac.  So instead, append strings like " (Shift-Left-Click)"
This commit is contained in:
Paul Licameli 2020-05-03 16:46:00 -04:00
parent 7cf9263889
commit b81c03c194
9 changed files with 90 additions and 56 deletions

View File

@ -157,7 +157,9 @@ enum {
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Table class // Table class
class NoteTrackVRulerMenuTable : public PopupMenuTable class NoteTrackVRulerMenuTable
: public PopupMenuTable
, private PrefsListener
{ {
NoteTrackVRulerMenuTable() NoteTrackVRulerMenuTable()
: PopupMenuTable{ "NoteTrackVRuler" } : PopupMenuTable{ "NoteTrackVRuler" }
@ -205,6 +207,12 @@ private:
} }
void InitUserData(void *pUserData) override; void InitUserData(void *pUserData) override;
void UpdatePrefs() override
{
// Because labels depend on advanced vertical zoom setting
PopupMenuTable::Clear();
}
}; };
NoteTrackVRulerMenuTable &NoteTrackVRulerMenuTable::Instance() NoteTrackVRulerMenuTable &NoteTrackVRulerMenuTable::Instance()
@ -248,15 +256,25 @@ void NoteTrackVRulerMenuTable::OnZoom( int iZoomCode ){
BEGIN_POPUP_MENU(NoteTrackVRulerMenuTable) BEGIN_POPUP_MENU(NoteTrackVRulerMenuTable)
// Accelerators only if zooming enabled.
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
BeginSection( "Zoom" ); BeginSection( "Zoom" );
BeginSection( "Basic" ); 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 ) ); AppendItem( "Max", OnZoomMaxID, XXO("Max Zoom"), POPUP_MENU_FN( OnZoomMax ) );
EndSection(); EndSection();
BeginSection( "InOut" ); BeginSection( "InOut" );
AppendItem( "In", OnZoomInVerticalID, XXO("Zoom In\tLeft-Click/Left-Drag"), POPUP_MENU_FN( OnZoomInVertical ) ); AppendItem( "In", OnZoomInVerticalID,
AppendItem( "Out", OnZoomOutVerticalID, XXO("Zoom Out\tShift-Left-Click"), POPUP_MENU_FN( OnZoomOutVertical ) ); 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();
EndSection(); EndSection();
@ -285,9 +303,6 @@ UIHandle::Result NoteTrackVZoomHandle::Release
const bool rightUp = event.RightUp(); const bool rightUp = event.RightUp();
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
// Popup menu... // Popup menu...
if ( if (
rightUp && rightUp &&
@ -301,25 +316,13 @@ UIHandle::Result NoteTrackVZoomHandle::Release
(PopupMenuTable *) &NoteTrackVRulerMenuTable::Instance(); (PopupMenuTable *) &NoteTrackVRulerMenuTable::Instance();
auto pMenu = PopupMenuTable::BuildMenu(pParent, pTable, &data); 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); pParent->PopupMenu(pMenu.get(), event.m_x, event.m_y);
return data.result; return data.result;
} }
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
bVZoom &= event.GetId() != kCaptureLostEventId; bVZoom &= event.GetId() != kCaptureLostEventId;
if( !bVZoom ) if( !bVZoom )
return RefreshAll; return RefreshAll;

View File

@ -290,14 +290,21 @@ EndSection();
BeginSection( "Zoom" ); BeginSection( "Zoom" );
// Accelerators only if zooming enabled.
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
AppendItem( "Reset", OnZoomResetID, XXO("Zoom Reset"), AppendItem( "Reset", OnZoomResetID, XXO("Zoom Reset"),
POPUP_MENU_FN( OnZoomReset ) ); POPUP_MENU_FN( OnZoomReset ) );
AppendItem( "Fit", OnZoomFitVerticalID, XXO("Zoom to Fit\tShift-Right-Click"), AppendItem( "Fit", OnZoomFitVerticalID,
POPUP_MENU_FN( OnZoomFitVertical ) ); MakeLabel( XXO("Zoom to Fit"), bVZoom, XXO("Shift-Right-Click") ),
AppendItem( "In", OnZoomInVerticalID, XXO("Zoom In\tLeft-Click/Left-Drag"), POPUP_MENU_FN( OnZoomFitVertical ) );
POPUP_MENU_FN( OnZoomInVertical ) ); AppendItem( "In", OnZoomInVerticalID,
AppendItem( "Out", OnZoomOutVerticalID, XXO("Zoom Out\tShift-Left-Click"), MakeLabel( XXO("Zoom In"), bVZoom, XXO("Left-Click/Left-Drag") ),
POPUP_MENU_FN( OnZoomOutVertical ) ); POPUP_MENU_FN( OnZoomInVertical ) );
AppendItem( "Out", OnZoomOutVerticalID,
MakeLabel( XXO("Zoom Out"), bVZoom, XXO("Shift-Left-Click") ),
POPUP_MENU_FN( OnZoomOutVertical ) );
EndSection(); EndSection();
END_POPUP_MENU() END_POPUP_MENU()

View File

@ -20,7 +20,6 @@ Paul Licameli split from TrackPanel.cpp
#include "WaveTrackViewConstants.h" #include "WaveTrackViewConstants.h"
#include "../../../../AudioIOBase.h" #include "../../../../AudioIOBase.h"
#include "../../../../CellularPanel.h" #include "../../../../CellularPanel.h"
#include "../../../../Menus.h"
#include "../../../../Project.h" #include "../../../../Project.h"
#include "../../../../ProjectAudioIO.h" #include "../../../../ProjectAudioIO.h"
#include "../../../../ProjectHistory.h" #include "../../../../ProjectHistory.h"

View File

@ -52,6 +52,12 @@ void WaveTrackVRulerMenuTable::OnZoom(
mpData->result = UpdateVRuler | RefreshAll; mpData->result = UpdateVRuler | RefreshAll;
} }
void WaveTrackVRulerMenuTable::UpdatePrefs()
{
// Because labels depend on advanced vertical zoom setting
PopupMenuTable::Clear();
}
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
HitTestPreview WaveTrackVZoomHandle::HitPreview(const wxMouseState &state) HitTestPreview WaveTrackVZoomHandle::HitPreview(const wxMouseState &state)
@ -105,10 +111,7 @@ UIHandle::Result WaveTrackVZoomHandle::DoRelease(
const bool rightUp = event.RightUp(); const bool rightUp = event.RightUp();
bool bVZoom; // Popup menu...
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
// Popup menu...
using namespace WaveTrackViewConstants; using namespace WaveTrackViewConstants;
if ( if (
rightUp && rightUp &&
@ -119,27 +122,13 @@ UIHandle::Result WaveTrackVZoomHandle::DoRelease(
pTrack, rect, RefreshCode::RefreshNone, event.m_y, doZoom }; pTrack, rect, RefreshCode::RefreshNone, event.m_y, doZoom };
auto pMenu = PopupMenuTable::BuildMenu(pParent, &table, &data); 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); pParent->PopupMenu(pMenu.get(), event.m_x, event.m_y);
return data.result; return data.result;
} }
else{ else{
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
// Ignore Capture Lost event // Ignore Capture Lost event
bVZoom &= event.GetId() != kCaptureLostEventId; bVZoom &= event.GetId() != kCaptureLostEventId;
// shiftDown | rightUp | ZoomKind // shiftDown | rightUp | ZoomKind

View File

@ -16,7 +16,7 @@ class PopupMenuTable;
class WaveTrack; class WaveTrack;
#include "WaveTrackViewConstants.h" #include "WaveTrackViewConstants.h"
#include "../../../../UIHandle.h" #include "../../../../UIHandle.h"
#include "../../../../Prefs.h"
namespace WaveTrackVZoomHandle namespace WaveTrackVZoomHandle
{ {
@ -53,7 +53,9 @@ namespace WaveTrackVZoomHandle
#include "../../../../widgets/PopupMenuTable.h" // to inherit #include "../../../../widgets/PopupMenuTable.h" // to inherit
class WaveTrackVRulerMenuTable : public PopupMenuTable class WaveTrackVRulerMenuTable
: public PopupMenuTable
, private PrefsListener
{ {
public: public:
struct InitMenuData struct InitMenuData
@ -98,6 +100,8 @@ protected:
{ OnZoom( WaveTrackViewConstants::kZoomIn );}; { OnZoom( WaveTrackViewConstants::kZoomIn );};
void OnZoomOutVertical(wxCommandEvent&) void OnZoomOutVertical(wxCommandEvent&)
{ OnZoom( WaveTrackViewConstants::kZoomOut );}; { OnZoom( WaveTrackViewConstants::kZoomOut );};
void UpdatePrefs() override;
}; };
enum { enum {

View File

@ -265,6 +265,9 @@ PopupMenuTable &WaveformVRulerMenuTable::Instance()
} }
BEGIN_POPUP_MENU(WaveformVRulerMenuTable) BEGIN_POPUP_MENU(WaveformVRulerMenuTable)
// Accelerators only if zooming enabled.
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
BeginSection( "Scales" ); BeginSection( "Scales" );
{ {
@ -289,8 +292,11 @@ BEGIN_POPUP_MENU(WaveformVRulerMenuTable)
BeginSection( "Zoom" ); BeginSection( "Zoom" );
BeginSection( "Basic" ); BeginSection( "Basic" );
AppendItem( "Reset", OnZoomFitVerticalID, XXO("Zoom Reset\tShift-Right-Click"), POPUP_MENU_FN( OnZoomReset ) ); AppendItem( "Reset", OnZoomFitVerticalID,
AppendItem( "TimesHalf", OnZoomDiv2ID, XXO("Zoom x1/2"), POPUP_MENU_FN( OnZoomDiv2Vertical ) ); 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 ) ); AppendItem( "TimesTwo", OnZoomTimes2ID, XXO("Zoom x2"), POPUP_MENU_FN( OnZoomTimes2Vertical ) );
#ifdef EXPERIMENTAL_HALF_WAVE #ifdef EXPERIMENTAL_HALF_WAVE
@ -299,8 +305,12 @@ BEGIN_POPUP_MENU(WaveformVRulerMenuTable)
EndSection(); EndSection();
BeginSection( "InOut" ); BeginSection( "InOut" );
AppendItem( "In", OnZoomInVerticalID, XXO("Zoom In\tLeft-Click/Left-Drag"), POPUP_MENU_FN( OnZoomInVertical ) ); AppendItem( "In", OnZoomInVerticalID,
AppendItem( "Out", OnZoomOutVerticalID, XXO("Zoom Out\tShift-Left-Click"), POPUP_MENU_FN( OnZoomOutVertical ) ); 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();
EndSection(); EndSection();

View File

@ -78,7 +78,9 @@ enum
OnMoveBottomID, OnMoveBottomID,
}; };
class TrackMenuTable : public PopupMenuTable class TrackMenuTable
: public PopupMenuTable
, private PrefsListener
{ {
TrackMenuTable() TrackMenuTable()
: PopupMenuTable{ "Track" } : PopupMenuTable{ "Track" }
@ -100,6 +102,12 @@ private:
} }
CommonTrackControls::InitMenuData *mpData{}; CommonTrackControls::InitMenuData *mpData{};
void UpdatePrefs() override
{
// Because labels depend on keyboard preferences
PopupMenuTable::Clear();
}
}; };
TrackMenuTable &TrackMenuTable::Instance() TrackMenuTable &TrackMenuTable::Instance()

View File

@ -17,7 +17,6 @@ Paul Licameli split from TrackPanel.cpp
#include "../../AudioIO.h" #include "../../AudioIO.h"
#include "../../CommonCommandFlags.h" #include "../../CommonCommandFlags.h"
#include "../../Menus.h"
#include "../../Project.h" #include "../../Project.h"
#include "../../ProjectAudioIO.h" #include "../../ProjectAudioIO.h"
#include "../../ProjectAudioManager.h" #include "../../ProjectAudioManager.h"

View File

@ -141,6 +141,11 @@ public:
return mTop; return mTop;
} }
void Clear()
{
mTop.reset();
}
// Forms a computed item, which may be omitted when function returns null // Forms a computed item, which may be omitted when function returns null
// and thus can be a conditional item // and thus can be a conditional item
template< typename Table > template< typename Table >
@ -162,6 +167,16 @@ private:
const Registry::Placement &placement, Registry::BaseItemPtr pItem ); const Registry::Placement &placement, Registry::BaseItemPtr pItem );
protected: 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; virtual void Populate() = 0;
// To be used in implementations of Populate(): // To be used in implementations of Populate():