mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-05 06:09:47 +02:00
Split MenuCommandHandler into three classes.
Menus.cpp is over 10,000 lines. The main point of the split is to make possible a new .cpp file for MenuCreator, which is responsible for the creation of the menu bar, and which contains the near 2,000 line function MenuCreator::CreateMenusAndCommands() The menu handlers are also (better) separated from the menu management.
This commit is contained in:
parent
529e1e2afb
commit
26086a4142
106
src/Menus.cpp
106
src/Menus.cpp
@ -28,6 +28,22 @@ Implements AudacityProjectCommandFunctor.
|
||||
\brief AudacityProjectCommandFunctor, derived from CommandFunctor,
|
||||
simplifies construction of menu items.
|
||||
|
||||
*//****************************************************************//**
|
||||
|
||||
\class MenuCommandHandler
|
||||
\brief MenuCommandHandler contains many command handlers for individual
|
||||
menu items.
|
||||
|
||||
*//****************************************************************//**
|
||||
|
||||
\class MenuCreator
|
||||
\brief MenuCreator is responsible for creating the main menu bar.
|
||||
|
||||
*//****************************************************************//**
|
||||
|
||||
\class MenuManager
|
||||
\brief MenuManager handles updates to menu state.
|
||||
|
||||
*//*******************************************************************/
|
||||
|
||||
#include "Audacity.h"
|
||||
@ -142,7 +158,7 @@ simplifies construction of menu items.
|
||||
#include "./commands/AudacityCommand.h"
|
||||
#include "commands/CommandContext.h"
|
||||
|
||||
MenuCommandHandler &GetMenuCommandHandler(AudacityProject &project)
|
||||
MenuManager &GetMenuCommandHandler(AudacityProject &project)
|
||||
{ return *project.mMenuCommandHandler; }
|
||||
|
||||
MenuCommandHandler::MenuCommandHandler()
|
||||
@ -152,6 +168,13 @@ MenuCommandHandler::MenuCommandHandler()
|
||||
}
|
||||
|
||||
MenuCommandHandler::~MenuCommandHandler()
|
||||
{
|
||||
}
|
||||
|
||||
MenuCreator::MenuCreator(){
|
||||
}
|
||||
|
||||
MenuCreator::~MenuCreator()
|
||||
{
|
||||
if (wxGetApp().GetRecentFiles())
|
||||
{
|
||||
@ -307,7 +330,7 @@ static bool SortEffectsByType(const PluginDescriptor *a, const PluginDescriptor
|
||||
return akey.CmpNoCase(bkey) < 0;
|
||||
}
|
||||
|
||||
void MenuCommandHandler::UpdatePrefs()
|
||||
void MenuManager::UpdatePrefs()
|
||||
{
|
||||
bool bSelectAllIfNone;
|
||||
gPrefs->Read(wxT("/GUI/SelectAllOnNone"), &bSelectAllIfNone, false);
|
||||
@ -340,7 +363,7 @@ static CommandHandlerObject &findMenuCommandHandler(AudacityProject &project)
|
||||
static_cast<CommandFunctorPointer>(& MenuCommandHandler :: X)
|
||||
#define XXO(X) _(X), wxString{X}.Contains("...")
|
||||
|
||||
void MenuCommandHandler::CreateMenusAndCommands(AudacityProject &project)
|
||||
void MenuCreator::CreateMenusAndCommands(AudacityProject &project)
|
||||
{
|
||||
CommandManager *c = project.GetCommandManager();
|
||||
wxArrayString names;
|
||||
@ -501,7 +524,7 @@ void MenuCommandHandler::CreateMenusAndCommands(AudacityProject &project)
|
||||
AudioIONotBusyFlag | RedoAvailableFlag,
|
||||
AudioIONotBusyFlag | RedoAvailableFlag);
|
||||
|
||||
ModifyUndoMenuItems(project);
|
||||
MenuManager::ModifyUndoMenuItems(project);
|
||||
|
||||
c->AddSeparator();
|
||||
|
||||
@ -1804,7 +1827,7 @@ void MenuCommandHandler::CreateMenusAndCommands(AudacityProject &project)
|
||||
|
||||
|
||||
|
||||
void MenuCommandHandler::PopulateMacrosMenu( CommandManager* c, CommandFlag flags )
|
||||
void MenuCreator::PopulateMacrosMenu( CommandManager* c, CommandFlag flags )
|
||||
{
|
||||
wxArrayString names = MacroCommands::GetNames();
|
||||
int i;
|
||||
@ -1822,7 +1845,7 @@ void MenuCommandHandler::PopulateMacrosMenu( CommandManager* c, CommandFlag flag
|
||||
/// The effects come from a plug in list
|
||||
/// This code iterates through the list, adding effects into
|
||||
/// the menu.
|
||||
void MenuCommandHandler::PopulateEffectsMenu(CommandManager* c,
|
||||
void MenuCreator::PopulateEffectsMenu(CommandManager* c,
|
||||
EffectType type,
|
||||
CommandFlag batchflags,
|
||||
CommandFlag realflags)
|
||||
@ -1884,7 +1907,7 @@ void MenuCommandHandler::PopulateEffectsMenu(CommandManager* c,
|
||||
return;
|
||||
}
|
||||
|
||||
void MenuCommandHandler::AddEffectMenuItems(CommandManager *c,
|
||||
void MenuCreator::AddEffectMenuItems(CommandManager *c,
|
||||
std::vector<const PluginDescriptor*> & plugs,
|
||||
CommandFlag batchflags,
|
||||
CommandFlag realflags,
|
||||
@ -2025,7 +2048,7 @@ void MenuCommandHandler::AddEffectMenuItems(CommandManager *c,
|
||||
return;
|
||||
}
|
||||
|
||||
void MenuCommandHandler::AddEffectMenuItemGroup(CommandManager *c,
|
||||
void MenuCreator::AddEffectMenuItemGroup(CommandManager *c,
|
||||
const wxArrayString & names,
|
||||
const std::vector<bool> &vHasDialog,
|
||||
const PluginIDList & plugs,
|
||||
@ -2130,7 +2153,7 @@ void MenuCommandHandler::AddEffectMenuItemGroup(CommandManager *c,
|
||||
|
||||
#undef FN
|
||||
|
||||
void MenuCommandHandler::CreateRecentFilesMenu(CommandManager *c)
|
||||
void MenuCreator::CreateRecentFilesMenu(CommandManager *c)
|
||||
{
|
||||
// Recent Files and Recent Projects menus
|
||||
|
||||
@ -2149,7 +2172,8 @@ void MenuCommandHandler::CreateRecentFilesMenu(CommandManager *c)
|
||||
|
||||
}
|
||||
|
||||
void MenuCommandHandler::ModifyUndoMenuItems(AudacityProject &project)
|
||||
// TODO: This surely belongs in CommandManager?
|
||||
void MenuManager::ModifyUndoMenuItems(AudacityProject &project)
|
||||
{
|
||||
wxString desc;
|
||||
auto &undoManager = *project.GetUndoManager();
|
||||
@ -2182,7 +2206,7 @@ void MenuCommandHandler::ModifyUndoMenuItems(AudacityProject &project)
|
||||
}
|
||||
}
|
||||
|
||||
void MenuCommandHandler::RebuildMenuBar(AudacityProject &project)
|
||||
void MenuCreator::RebuildMenuBar(AudacityProject &project)
|
||||
{
|
||||
// On OSX, we can't rebuild the menus while a modal dialog is being shown
|
||||
// since the enabled state for menus like Quit and Preference gets out of
|
||||
@ -2247,7 +2271,7 @@ CommandFlag MenuCommandHandler::GetFocusedFrame(AudacityProject &project)
|
||||
return AlwaysEnabledFlag;
|
||||
}
|
||||
|
||||
CommandFlag MenuCommandHandler::GetUpdateFlags
|
||||
CommandFlag MenuManager::GetUpdateFlags
|
||||
(AudacityProject &project, bool checkActive)
|
||||
{
|
||||
// This method determines all of the flags that determine whether
|
||||
@ -2431,7 +2455,7 @@ void AudacityProject::StopIfPaused()
|
||||
GetMenuCommandHandler(*this).OnStop(*this);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::ModifyAllProjectToolbarMenus()
|
||||
void MenuManager::ModifyAllProjectToolbarMenus()
|
||||
{
|
||||
AProjectArray::iterator i;
|
||||
for (i = gAudacityProjects.begin(); i != gAudacityProjects.end(); ++i) {
|
||||
@ -2440,7 +2464,7 @@ void MenuCommandHandler::ModifyAllProjectToolbarMenus()
|
||||
}
|
||||
}
|
||||
|
||||
void MenuCommandHandler::ModifyToolbarMenus(AudacityProject &project)
|
||||
void MenuManager::ModifyToolbarMenus(AudacityProject &project)
|
||||
{
|
||||
// Refreshes can occur during shutdown and the toolmanager may already
|
||||
// be deleted, so protect against it.
|
||||
@ -2513,7 +2537,7 @@ void MenuCommandHandler::ModifyToolbarMenus(AudacityProject &project)
|
||||
|
||||
// checkActive is a temporary hack that should be removed as soon as we
|
||||
// get multiple effect preview working
|
||||
void MenuCommandHandler::UpdateMenus(AudacityProject &project, bool checkActive)
|
||||
void MenuManager::UpdateMenus(AudacityProject &project, bool checkActive)
|
||||
{
|
||||
//ANSWER-ME: Why UpdateMenus only does active project?
|
||||
//JKC: Is this test fixing a bug when multiple projects are open?
|
||||
@ -2521,7 +2545,7 @@ void MenuCommandHandler::UpdateMenus(AudacityProject &project, bool checkActive)
|
||||
if (&project != GetActiveProject())
|
||||
return;
|
||||
|
||||
auto flags = GetUpdateFlags(project, checkActive);
|
||||
auto flags = GetMenuCommandHandler(project).GetUpdateFlags(project, checkActive);
|
||||
auto flags2 = flags;
|
||||
|
||||
// We can enable some extra items if we have select-all-on-none.
|
||||
@ -2592,7 +2616,7 @@ void MenuCommandHandler::UpdateMenus(AudacityProject &project, bool checkActive)
|
||||
}
|
||||
#endif
|
||||
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
//
|
||||
@ -3158,7 +3182,7 @@ void MenuCommandHandler::OnToggleSoundActivated(const CommandContext &WXUNUSED(c
|
||||
gPrefs->Read(wxT("/AudioIO/SoundActivatedRecord"), &pause, false);
|
||||
gPrefs->Write(wxT("/AudioIO/SoundActivatedRecord"), !pause);
|
||||
gPrefs->Flush();
|
||||
ModifyAllProjectToolbarMenus();
|
||||
MenuManager::ModifyAllProjectToolbarMenus();
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnTogglePinnedHead(const CommandContext &context)
|
||||
@ -3167,7 +3191,7 @@ void MenuCommandHandler::OnTogglePinnedHead(const CommandContext &context)
|
||||
|
||||
bool value = !TracksPrefs::GetPinnedHeadPreference();
|
||||
TracksPrefs::SetPinnedHeadPreference(value, true);
|
||||
ModifyAllProjectToolbarMenus();
|
||||
MenuManager::ModifyAllProjectToolbarMenus();
|
||||
|
||||
// Change what happens in case transport is in progress right now
|
||||
auto ctb = GetActiveProject()->GetControlToolBar();
|
||||
@ -3194,7 +3218,7 @@ void MenuCommandHandler::OnTogglePlayRecording(const CommandContext &WXUNUSED(co
|
||||
#endif
|
||||
gPrefs->Write(wxT("/AudioIO/Duplex"), !Duplex);
|
||||
gPrefs->Flush();
|
||||
ModifyAllProjectToolbarMenus();
|
||||
MenuManager::ModifyAllProjectToolbarMenus();
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnToggleSWPlaythrough(const CommandContext &WXUNUSED(context) )
|
||||
@ -3203,7 +3227,7 @@ void MenuCommandHandler::OnToggleSWPlaythrough(const CommandContext &WXUNUSED(co
|
||||
gPrefs->Read(wxT("/AudioIO/SWPlaythrough"), &SWPlaythrough, false);
|
||||
gPrefs->Write(wxT("/AudioIO/SWPlaythrough"), !SWPlaythrough);
|
||||
gPrefs->Flush();
|
||||
ModifyAllProjectToolbarMenus();
|
||||
MenuManager::ModifyAllProjectToolbarMenus();
|
||||
}
|
||||
|
||||
#ifdef EXPERIMENTAL_AUTOMATED_INPUT_LEVEL_ADJUSTMENT
|
||||
@ -3214,7 +3238,7 @@ void AudacityProject::OnToggleAutomatedInputLevelAdjustment(
|
||||
gPrefs->Read(wxT("/AudioIO/AutomatedInputLevelAdjustment"), &AVEnabled, false);
|
||||
gPrefs->Write(wxT("/AudioIO/AutomatedInputLevelAdjustment"), !AVEnabled);
|
||||
gPrefs->Flush();
|
||||
ModifyAllProjectToolbarMenus();
|
||||
MenuManager::ModifyAllProjectToolbarMenus();
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -4830,7 +4854,7 @@ bool MenuCommandHandler::DoEffect(
|
||||
// For now, we're limiting realtime preview to a single effect, so
|
||||
// make sure the menus reflect that fact that one may have just been
|
||||
// opened.
|
||||
UpdateMenus(project, false);
|
||||
GetMenuCommandHandler(project).UpdateMenus(project, false);
|
||||
}
|
||||
|
||||
} );
|
||||
@ -5443,7 +5467,7 @@ void MenuCommandHandler::OnUndo(const CommandContext &context)
|
||||
// Mixer board may need to change for selection state and pan/gain
|
||||
mixerBoard->Refresh();
|
||||
|
||||
ModifyUndoMenuItems(project);
|
||||
MenuManager::ModifyUndoMenuItems(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnRedo(const CommandContext &context)
|
||||
@ -5478,7 +5502,7 @@ void MenuCommandHandler::OnRedo(const CommandContext &context)
|
||||
// Mixer board may need to change for selection state and pan/gain
|
||||
mixerBoard->Refresh();
|
||||
|
||||
ModifyUndoMenuItems(project);
|
||||
MenuManager::ModifyUndoMenuItems(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::FinishCopy
|
||||
@ -7408,7 +7432,7 @@ void MenuCommandHandler::OnApplyMacroDirectly(const CommandContext &context )
|
||||
#else
|
||||
dlg.ApplyMacroToProject( Name, false );
|
||||
#endif
|
||||
ModifyUndoMenuItems( project );
|
||||
MenuManager::ModifyUndoMenuItems( project );
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnApplyMacrosPalette(const CommandContext &context )
|
||||
@ -7485,7 +7509,7 @@ void MenuCommandHandler::OnShowTransportToolBar(const CommandContext &context)
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->ShowHide(TransportBarID);
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnShowDeviceToolBar(const CommandContext &context)
|
||||
@ -7494,7 +7518,7 @@ void MenuCommandHandler::OnShowDeviceToolBar(const CommandContext &context)
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->ShowHide( DeviceBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnShowEditToolBar(const CommandContext &context)
|
||||
@ -7503,7 +7527,7 @@ void MenuCommandHandler::OnShowEditToolBar(const CommandContext &context)
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->ShowHide( EditBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnShowMeterToolBar(const CommandContext &context)
|
||||
@ -7517,7 +7541,7 @@ void MenuCommandHandler::OnShowMeterToolBar(const CommandContext &context)
|
||||
toolManager->Expose( RecordMeterBarID, false );
|
||||
}
|
||||
toolManager->ShowHide( MeterBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnShowRecordMeterToolBar(const CommandContext &context)
|
||||
@ -7530,7 +7554,7 @@ void MenuCommandHandler::OnShowRecordMeterToolBar(const CommandContext &context)
|
||||
toolManager->Expose( MeterBarID, false );
|
||||
}
|
||||
toolManager->ShowHide( RecordMeterBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnShowPlayMeterToolBar(const CommandContext &context)
|
||||
@ -7544,7 +7568,7 @@ void MenuCommandHandler::OnShowPlayMeterToolBar(const CommandContext &context)
|
||||
}
|
||||
|
||||
toolManager->ShowHide( PlayMeterBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnShowMixerToolBar(const CommandContext &context)
|
||||
@ -7553,7 +7577,7 @@ void MenuCommandHandler::OnShowMixerToolBar(const CommandContext &context)
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->ShowHide( MixerBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnShowScrubbingToolBar(const CommandContext &context)
|
||||
@ -7562,7 +7586,7 @@ void MenuCommandHandler::OnShowScrubbingToolBar(const CommandContext &context)
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->ShowHide( ScrubbingBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnShowSelectionToolBar(const CommandContext &context)
|
||||
@ -7571,7 +7595,7 @@ void MenuCommandHandler::OnShowSelectionToolBar(const CommandContext &context)
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->ShowHide( SelectionBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
|
||||
@ -7581,7 +7605,7 @@ void MenuCommandHandler::OnShowSpectralSelectionToolBar(const CommandContext &co
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->ShowHide( SpectralSelectionBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -7591,7 +7615,7 @@ void MenuCommandHandler::OnShowToolsToolBar(const CommandContext &context)
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->ShowHide( ToolsBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnShowTranscriptionToolBar(const CommandContext &context)
|
||||
@ -7600,7 +7624,7 @@ void MenuCommandHandler::OnShowTranscriptionToolBar(const CommandContext &contex
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->ShowHide( TranscriptionBarID );
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnResetToolBars(const CommandContext &context)
|
||||
@ -7609,7 +7633,7 @@ void MenuCommandHandler::OnResetToolBars(const CommandContext &context)
|
||||
auto toolManager = project.GetToolManager();
|
||||
|
||||
toolManager->Reset();
|
||||
ModifyToolbarMenus(project);
|
||||
MenuManager::ModifyToolbarMenus(project);
|
||||
}
|
||||
|
||||
#if defined(EXPERIMENTAL_EFFECTS_RACK)
|
||||
@ -9198,7 +9222,7 @@ void MenuCommandHandler::OnSyncLock(const CommandContext &context)
|
||||
gPrefs->Flush();
|
||||
|
||||
// Toolbar, project sync-lock handled within
|
||||
ModifyAllProjectToolbarMenus();
|
||||
MenuManager::ModifyAllProjectToolbarMenus();
|
||||
|
||||
trackPanel->Refresh(false);
|
||||
}
|
||||
@ -9258,7 +9282,7 @@ void MenuCommandHandler::OnToggleTypeToCreateLabel(const CommandContext &WXUNUSE
|
||||
gPrefs->Read(wxT("/GUI/TypeToCreateLabel"), &typeToCreateLabel, true);
|
||||
gPrefs->Write(wxT("/GUI/TypeToCreateLabel"), !typeToCreateLabel);
|
||||
gPrefs->Flush();
|
||||
ModifyAllProjectToolbarMenus();
|
||||
MenuManager::ModifyAllProjectToolbarMenus();
|
||||
}
|
||||
|
||||
void MenuCommandHandler::OnRemoveTracks(const CommandContext &context)
|
||||
|
120
src/Menus.h
120
src/Menus.h
@ -14,51 +14,13 @@
|
||||
#include "Experimental.h"
|
||||
|
||||
|
||||
|
||||
struct MenuCommandHandler : public wxEvtHandler {
|
||||
MenuCommandHandler();
|
||||
~MenuCommandHandler();
|
||||
|
||||
// Formerly members of AudacityProject, now members of MenuCommandHandler
|
||||
|
||||
|
||||
// Command Handling
|
||||
bool ReportIfActionNotAllowed
|
||||
( AudacityProject &project,
|
||||
const wxString & Name, CommandFlag & flags, CommandFlag flagsRqd, CommandFlag mask );
|
||||
bool TryToMakeActionAllowed
|
||||
( AudacityProject &project,
|
||||
CommandFlag & flags, CommandFlag flagsRqd, CommandFlag mask );
|
||||
|
||||
void UpdatePrefs();
|
||||
|
||||
void CreateMenusAndCommands(AudacityProject &project);
|
||||
void PopulateMacrosMenu( CommandManager* c, CommandFlag flags );
|
||||
|
||||
void PopulateEffectsMenu(CommandManager *c, EffectType type,
|
||||
CommandFlag batchflags, CommandFlag realflags);
|
||||
void AddEffectMenuItems(CommandManager *c,
|
||||
std::vector<const PluginDescriptor*> & plugs,
|
||||
CommandFlag batchflags, CommandFlag realflags, bool isDefault);
|
||||
void AddEffectMenuItemGroup(CommandManager *c, const wxArrayString & names,
|
||||
const std::vector<bool> &vHasDialog,
|
||||
const PluginIDList & plugs,
|
||||
const std::vector<CommandFlag> & flags, bool isDefault);
|
||||
void CreateRecentFilesMenu(CommandManager *c);
|
||||
void ModifyUndoMenuItems(AudacityProject &project);
|
||||
void ModifyToolbarMenus(AudacityProject &project);
|
||||
void RebuildMenuBar(AudacityProject &project);
|
||||
// Calls ModifyToolbarMenus() on all projects
|
||||
void ModifyAllProjectToolbarMenus();
|
||||
|
||||
// checkActive is a temporary hack that should be removed as soon as we
|
||||
// get multiple effect preview working
|
||||
void UpdateMenus(AudacityProject &project, bool checkActive = true);
|
||||
|
||||
CommandFlag GetFocusedFrame(AudacityProject &project);
|
||||
|
||||
// If checkActive, do not do complete flags testing on an
|
||||
// inactive project as it is needlessly expensive.
|
||||
CommandFlag GetUpdateFlags(AudacityProject &project, bool checkActive = false);
|
||||
|
||||
|
||||
//Adds label and returns index of label in labeltrack.
|
||||
@ -619,30 +581,80 @@ double OffsetTime(const CommandContext &context,
|
||||
// Helper for moving by keyboard with snap-to-grid enabled
|
||||
double GridMove(AudacityProject &project, double t, int minPix);
|
||||
|
||||
// Last effect applied to this project
|
||||
PluginID mLastEffect{};
|
||||
|
||||
// Recent files
|
||||
wxMenu *mRecentFilesMenu;
|
||||
|
||||
CommandFlag mLastFlags;
|
||||
|
||||
|
||||
public:
|
||||
// Last effect applied to this project
|
||||
PluginID mLastEffect{};
|
||||
CommandFlag mLastFlags;
|
||||
// 0 is grey out, 1 is Autoselect, 2 is Give warnings.
|
||||
int mWhatIfNoSelection;
|
||||
int mWhatIfNoSelection;
|
||||
bool mStopIfWasPaused;
|
||||
double mSeekShort;
|
||||
double mSeekLong;
|
||||
bool mCircularTrackNavigation{};
|
||||
wxLongLong mLastSelectionAdjustment;
|
||||
|
||||
bool mStopIfWasPaused;
|
||||
|
||||
bool mCircularTrackNavigation{};
|
||||
|
||||
double mSeekShort;
|
||||
double mSeekLong;
|
||||
|
||||
wxLongLong mLastSelectionAdjustment;
|
||||
|
||||
};
|
||||
|
||||
class MenuCreator : public MenuCommandHandler
|
||||
{
|
||||
public:
|
||||
MenuCreator();
|
||||
~MenuCreator();
|
||||
void CreateMenusAndCommands(AudacityProject &project);
|
||||
void RebuildMenuBar(AudacityProject &project);
|
||||
|
||||
MenuCommandHandler &GetMenuCommandHandler(AudacityProject &project);
|
||||
void PopulateMacrosMenu( CommandManager* c, CommandFlag flags );
|
||||
|
||||
void PopulateEffectsMenu(CommandManager *c, EffectType type,
|
||||
CommandFlag batchflags, CommandFlag realflags);
|
||||
void AddEffectMenuItems(CommandManager *c,
|
||||
std::vector<const PluginDescriptor*> & plugs,
|
||||
CommandFlag batchflags, CommandFlag realflags, bool isDefault);
|
||||
void AddEffectMenuItemGroup(CommandManager *c, const wxArrayString & names,
|
||||
const std::vector<bool> &vHasDialog,
|
||||
const PluginIDList & plugs,
|
||||
const std::vector<CommandFlag> & flags, bool isDefault);
|
||||
void CreateRecentFilesMenu(CommandManager *c);
|
||||
|
||||
public:
|
||||
// Recent files
|
||||
wxMenu *mRecentFilesMenu;
|
||||
|
||||
};
|
||||
|
||||
class MenuManager : public MenuCreator
|
||||
{
|
||||
public:
|
||||
static void ModifyUndoMenuItems(AudacityProject &project);
|
||||
static void ModifyToolbarMenus(AudacityProject &project);
|
||||
// Calls ModifyToolbarMenus() on all projects
|
||||
static void ModifyAllProjectToolbarMenus();
|
||||
|
||||
// checkActive is a temporary hack that should be removed as soon as we
|
||||
// get multiple effect preview working
|
||||
void UpdateMenus(AudacityProject &project, bool checkActive = true);
|
||||
|
||||
// If checkActive, do not do complete flags testing on an
|
||||
// inactive project as it is needlessly expensive.
|
||||
CommandFlag GetUpdateFlags(AudacityProject &project, bool checkActive = false);
|
||||
void UpdatePrefs();
|
||||
|
||||
// Command Handling
|
||||
bool ReportIfActionNotAllowed
|
||||
( AudacityProject &project,
|
||||
const wxString & Name, CommandFlag & flags, CommandFlag flagsRqd, CommandFlag mask );
|
||||
bool TryToMakeActionAllowed
|
||||
( AudacityProject &project,
|
||||
CommandFlag & flags, CommandFlag flagsRqd, CommandFlag mask );
|
||||
};
|
||||
|
||||
|
||||
MenuManager &GetMenuCommandHandler(AudacityProject &project);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -979,7 +979,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
|
||||
// Initialize view info (shared with TrackPanel)
|
||||
//
|
||||
|
||||
mMenuCommandHandler = std::make_unique<MenuCommandHandler>();
|
||||
mMenuCommandHandler = std::make_unique<MenuManager>();
|
||||
|
||||
UpdatePrefs();
|
||||
|
||||
@ -2268,7 +2268,7 @@ void AudacityProject::DoScroll()
|
||||
GetTrackPanel()->HandleCursorForPresentMouseState(); } );
|
||||
}
|
||||
|
||||
bool MenuCommandHandler::ReportIfActionNotAllowed
|
||||
bool MenuManager::ReportIfActionNotAllowed
|
||||
( AudacityProject &project,
|
||||
const wxString & Name, CommandFlag & flags, CommandFlag flagsRqd, CommandFlag mask )
|
||||
{
|
||||
@ -2285,14 +2285,14 @@ bool MenuCommandHandler::ReportIfActionNotAllowed
|
||||
/// Determines if flags for command are compatible with current state.
|
||||
/// If not, then try some recovery action to make it so.
|
||||
/// @return whether compatible or not after any actions taken.
|
||||
bool MenuCommandHandler::TryToMakeActionAllowed
|
||||
bool MenuManager::TryToMakeActionAllowed
|
||||
( AudacityProject &project,
|
||||
CommandFlag & flags, CommandFlag flagsRqd, CommandFlag mask )
|
||||
{
|
||||
bool bAllowed;
|
||||
|
||||
if( !flags )
|
||||
flags = GetUpdateFlags(project);
|
||||
flags = GetMenuCommandHandler(project).GetUpdateFlags(project);
|
||||
|
||||
bAllowed = ((flags & mask) == (flagsRqd & mask));
|
||||
if( bAllowed )
|
||||
@ -2305,7 +2305,7 @@ bool MenuCommandHandler::TryToMakeActionAllowed
|
||||
if( mStopIfWasPaused && (MissingFlags & AudioIONotBusyFlag ) ){
|
||||
project.StopIfPaused();
|
||||
// Hope this will now reflect stopped audio.
|
||||
flags = GetUpdateFlags(project);
|
||||
flags = GetMenuCommandHandler(project).GetUpdateFlags(project);
|
||||
bAllowed = ((flags & mask) == (flagsRqd & mask));
|
||||
if( bAllowed )
|
||||
return true;
|
||||
@ -2335,7 +2335,7 @@ bool MenuCommandHandler::TryToMakeActionAllowed
|
||||
// This was 'OnSelectAll'. Changing it to OnSelectSomething means if
|
||||
// selecting all tracks is enough, we just do that.
|
||||
GetMenuCommandHandler(project).OnSelectSomething(project);
|
||||
flags = GetUpdateFlags(project);
|
||||
flags = GetMenuCommandHandler(project).GetUpdateFlags(project);
|
||||
bAllowed = ((flags & mask) == (flagsRqd & mask));
|
||||
return bAllowed;
|
||||
}
|
||||
|
@ -811,10 +811,10 @@ private:
|
||||
#endif
|
||||
|
||||
private:
|
||||
std::unique_ptr<MenuCommandHandler> mMenuCommandHandler;
|
||||
std::unique_ptr<MenuManager> mMenuCommandHandler;
|
||||
|
||||
public:
|
||||
friend MenuCommandHandler &GetMenuCommandHandler(AudacityProject &project);
|
||||
friend MenuManager &GetMenuCommandHandler(AudacityProject &project);
|
||||
|
||||
class PlaybackScroller final : public wxEvtHandler
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user