1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-19 00:51:12 +02:00
Files
audacity/src/menus/ToolbarMenus.cpp

348 lines
11 KiB
C++

#include "../Audacity.h"
#include "../Experimental.h"
#include "../Menus.h"
#include "../Project.h"
#include "../TrackPanel.h"
#include "../commands/CommandContext.h"
#include "../commands/CommandManager.h"
#include "../toolbars/ToolManager.h"
#include "../toolbars/ToolsToolBar.h"
// private helper classes and functions
namespace {
/// Called by handlers that set tools.
void SetTool(AudacityProject &project, int tool)
{
ToolsToolBar *toolbar = project.GetToolsToolBar();
if (toolbar) {
toolbar->SetCurrentTool(tool);
project.GetTrackPanel()->Refresh(false);
}
}
}
/// Namespace for functions for View Toolbar menu
namespace ToolbarActions {
// exported helper functions
// none
// Menu handler functions
struct Handler : CommandHandlerObject {
void OnResetToolBars(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->Reset();
GetMenuManager(project).ModifyToolbarMenus(project);
}
void OnShowTransportToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->ShowHide(TransportBarID);
GetMenuManager(project).ModifyToolbarMenus(project);
}
void OnShowToolsToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->ShowHide( ToolsBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
void OnShowRecordMeterToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
if( !toolManager->IsVisible( RecordMeterBarID ) )
{
toolManager->Expose( MeterBarID, false );
}
toolManager->ShowHide( RecordMeterBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
void OnShowPlayMeterToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
if( !toolManager->IsVisible( PlayMeterBarID ) )
{
toolManager->Expose( MeterBarID, false );
}
toolManager->ShowHide( PlayMeterBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
#if 0
void OnShowMeterToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
if( !toolManager->IsVisible( MeterBarID ) )
{
toolManager->Expose( PlayMeterBarID, false );
toolManager->Expose( RecordMeterBarID, false );
}
toolManager->ShowHide( MeterBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
#endif
void OnShowMixerToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->ShowHide( MixerBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
void OnShowEditToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->ShowHide( EditBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
void OnShowTranscriptionToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->ShowHide( TranscriptionBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
void OnShowScrubbingToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->ShowHide( ScrubbingBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
void OnShowDeviceToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->ShowHide( DeviceBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
void OnShowSelectionToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->ShowHide( SelectionBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
void OnShowSpectralSelectionToolBar(const CommandContext &context)
{
auto &project = context.project;
auto toolManager = project.GetToolManager();
toolManager->ShowHide( SpectralSelectionBarID );
GetMenuManager(project).ModifyToolbarMenus(project);
}
#endif
/// Handler to set the select tool active
void OnSelectTool(const CommandContext &context)
{
SetTool(context.project, selectTool);
}
/// Handler to set the Envelope tool active
void OnEnvelopeTool(const CommandContext &context)
{
SetTool(context.project, envelopeTool);
}
void OnDrawTool(const CommandContext &context)
{
SetTool(context.project, drawTool);
}
/// Handler to set the Zoom tool active
void OnZoomTool(const CommandContext &context)
{
SetTool(context.project, zoomTool);
}
/// Handler to set the Time shift tool active
void OnTimeShiftTool(const CommandContext &context)
{
SetTool(context.project, slideTool);
}
void OnMultiTool(const CommandContext &context)
{
SetTool(context.project, multiTool);
}
void OnPrevTool(const CommandContext &context)
{
auto &project = context.project;
auto toolbar = project.GetToolsToolBar();
auto trackPanel = project.GetTrackPanel();
if (toolbar) {
// Use GetDownTool() here since GetCurrentTool() can return a value that
// doesn't represent the real tool if the Multi-tool is being used.
toolbar->SetCurrentTool((toolbar->GetDownTool()+(numTools-1))%numTools);
trackPanel->Refresh(false);
}
}
void OnNextTool(const CommandContext &context)
{
auto &project = context.project;
auto toolbar = project.GetToolsToolBar();
auto trackPanel = project.GetTrackPanel();
if (toolbar) {
// Use GetDownTool() here since GetCurrentTool() can return a value that
// doesn't represent the real tool if the Multi-tool is being used.
toolbar->SetCurrentTool((toolbar->GetDownTool()+1)%numTools);
trackPanel->Refresh(false);
}
}
}; // struct Handler
} // namespace
static CommandHandlerObject &findCommandHandler(AudacityProject &) {
// Handler is not stateful. Doesn't need a factory registered with
// AudacityProject.
static ToolbarActions::Handler instance;
return instance;
};
// Menu definitions
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& ToolbarActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& )
{
using namespace MenuTable;
using Options = CommandManager::Options;
static const auto checkOff = Options{}.CheckState( false );
return Menu( _("&Toolbars"),
/* i18n-hint: (verb)*/
Command( wxT("ResetToolbars"), XXO("Reset Toolb&ars"),
FN(OnResetToolBars), AlwaysEnabledFlag ),
Separator(),
/* i18n-hint: Clicking this menu item shows the toolbar
with the big buttons on it (play record etc)*/
Command( wxT("ShowTransportTB"), XXO("&Transport Toolbar"),
FN(OnShowTransportToolBar), AlwaysEnabledFlag, checkOff ),
/* i18n-hint: Clicking this menu item shows a toolbar
that has some tools in it*/
Command( wxT("ShowToolsTB"), XXO("T&ools Toolbar"),
FN(OnShowToolsToolBar), AlwaysEnabledFlag, checkOff ),
/* i18n-hint: Clicking this menu item shows the toolbar
with the recording level meters*/
Command( wxT("ShowRecordMeterTB"), XXO("&Recording Meter Toolbar"),
FN(OnShowRecordMeterToolBar), AlwaysEnabledFlag, checkOff ),
/* i18n-hint: Clicking this menu item shows the toolbar
with the playback level meter*/
Command( wxT("ShowPlayMeterTB"), XXO("&Playback Meter Toolbar"),
FN(OnShowPlayMeterToolBar), AlwaysEnabledFlag, checkOff )
/* --i18nhint: Clicking this menu item shows the toolbar
which has sound level meters*/
//Command( wxT("ShowMeterTB"), XXO("Co&mbined Meter Toolbar"),
// FN(OnShowMeterToolBar), AlwaysEnabledFlag, checkOff ),
,
/* i18n-hint: Clicking this menu item shows the toolbar
with the mixer*/
Command( wxT("ShowMixerTB"), XXO("Mi&xer Toolbar"),
FN(OnShowMixerToolBar), AlwaysEnabledFlag, checkOff ),
/* i18n-hint: Clicking this menu item shows the toolbar for editing*/
Command( wxT("ShowEditTB"), XXO("&Edit Toolbar"),
FN(OnShowEditToolBar), AlwaysEnabledFlag, checkOff ),
/* i18n-hint: Clicking this menu item shows the toolbar
for transcription (currently just vary play speed)*/
Command( wxT("ShowTranscriptionTB"), XXO("Pla&y-at-Speed Toolbar"),
FN(OnShowTranscriptionToolBar), AlwaysEnabledFlag, checkOff ),
/* i18n-hint: Clicking this menu item shows the toolbar
that enables Scrub or Seek playback and Scrub Ruler*/
Command( wxT("ShowScrubbingTB"), XXO("Scru&b Toolbar"),
FN(OnShowScrubbingToolBar), AlwaysEnabledFlag, checkOff ),
/* i18n-hint: Clicking this menu item shows the toolbar
that manages devices*/
Command( wxT("ShowDeviceTB"), XXO("&Device Toolbar"),
FN(OnShowDeviceToolBar), AlwaysEnabledFlag, checkOff ),
/* i18n-hint: Clicking this menu item shows the toolbar
for selecting a time range of audio*/
Command( wxT("ShowSelectionTB"), XXO("&Selection Toolbar"),
FN(OnShowSelectionToolBar), AlwaysEnabledFlag, checkOff )
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
/* i18n-hint: Clicking this menu item shows the toolbar
for selecting a frequency range of audio*/
,
Command( wxT("ShowSpectralSelectionTB"),
XXO("Spe&ctral Selection Toolbar"),
FN(OnShowSpectralSelectionToolBar), AlwaysEnabledFlag, checkOff )
#endif
);
}
MenuTable::BaseItemPtr ExtraToolsMenu( AudacityProject & )
{
using namespace MenuTable;
return Menu( _("T&ools"),
Command( wxT("SelectTool"), XXO("&Selection Tool"), FN(OnSelectTool),
AlwaysEnabledFlag, wxT("F1") ),
Command( wxT("EnvelopeTool"), XXO("&Envelope Tool"),
FN(OnEnvelopeTool), AlwaysEnabledFlag, wxT("F2") ),
Command( wxT("DrawTool"), XXO("&Draw Tool"), FN(OnDrawTool),
AlwaysEnabledFlag, wxT("F3") ),
Command( wxT("ZoomTool"), XXO("&Zoom Tool"), FN(OnZoomTool),
AlwaysEnabledFlag, wxT("F4") ),
Command( wxT("TimeShiftTool"), XXO("&Time Shift Tool"),
FN(OnTimeShiftTool), AlwaysEnabledFlag, wxT("F5") ),
Command( wxT("MultiTool"), XXO("&Multi Tool"), FN(OnMultiTool),
AlwaysEnabledFlag, wxT("F6") ),
Command( wxT("PrevTool"), XXO("&Previous Tool"), FN(OnPrevTool),
AlwaysEnabledFlag, wxT("A") ),
Command( wxT("NextTool"), XXO("&Next Tool"), FN(OnNextTool),
AlwaysEnabledFlag, wxT("D") )
);
}
#undef XXO
#undef FN