1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-03-09 07:55:42 +01:00
Files
audacity/src/Menus.h
Paul Licameli 906e55f047 Experimental.h in all .h or .cpp files that directly use EXPERIMENTALs...
... except Audacity.h; and in no others.

Do so even if Experimental.h gets multiply included, as in both the .h and
.cpp files.

This makes it easier to do a text scan to be sure there are no unintended quiet
changes of meaning because of omission of Experimental.h when the flag is
an enabled one.

Also move inclusions of Experimental.h earlier.

Also don't require Experimental.h to be preceded by Audacity.h to define
EXPERIMENTAL_MIDI_OUT correctly.
2019-03-17 22:54:00 -04:00

185 lines
5.2 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
Menus.h
Dominic Mazzoni
**********************************************************************/
#ifndef __AUDACITY_MENUS__
#define __AUDACITY_MENUS__
#include "audacity/Types.h"
#include <wx/arrstr.h>
class AudacityProject;
class CommandContext;
class CommandManager;
class LabelTrack;
class PluginDescriptor;
class Track;
class TrackList;
class ViewInfo;
class WaveClip;
class WaveTrack;
enum CommandFlag : unsigned long long;
enum EffectType : int;
typedef wxString PluginID;
typedef wxArrayString PluginIDs;
class PrefsListener
{
public:
virtual ~PrefsListener();
virtual void UpdatePrefs(); // default is no-op
};
class MenuCreator
{
public:
MenuCreator();
~MenuCreator();
void CreateMenusAndCommands(AudacityProject &project);
void RebuildMenuBar(AudacityProject &project);
static void RebuildAllMenuBars();
public:
CommandFlag mLastFlags;
// Last effect applied to this project
PluginID mLastEffect{};
};
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 );
private:
CommandFlag GetFocusedFrame(AudacityProject &project);
// 0 is grey out, 1 is Autoselect, 2 is Give warnings.
int mWhatIfNoSelection;
bool mStopIfWasPaused;
};
MenuManager &GetMenuManager(AudacityProject &project);
// Exported helper functions from various menu handling source files
/// Namespace for functions for File menu
namespace FileActions {
AudacityProject *DoImportMIDI(
AudacityProject *pProject, const FilePath &fileName );
}
/// Namespace for functions for Edit menu
namespace EditActions {
bool DoEditMetadata(
AudacityProject &project,
const wxString &title, const wxString &shortUndoDescription, bool force );
void DoReloadPreferences( AudacityProject & );
void DoUndo( AudacityProject &project );
}
/// Namespace for functions for Select menu
namespace SelectActions {
void DoListSelection(
AudacityProject &project, Track *t,
bool shift, bool ctrl, bool modifyState );
void DoSelectAll( AudacityProject &project );
void DoSelectSomething( AudacityProject &project );
}
/// Namespace for functions for View menu
namespace ViewActions {
double GetZoomOfToFit( const AudacityProject &project );
void DoZoomFit( AudacityProject &project );
void DoZoomFitV( AudacityProject &project );
}
/// Namespace for functions for Transport menu
namespace TransportActions {
bool DoPlayStopSelect( AudacityProject &project, bool click, bool shift );
void DoPlayStopSelect( AudacityProject &project );
void DoStop( AudacityProject & );
void DoPause( AudacityProject & );
void DoLockPlayRegion( AudacityProject & );
void DoUnlockPlayRegion( AudacityProject & );
void DoTogglePinnedHead( AudacityProject & );
void DoRecord( AudacityProject & );
}
/// Namespace for functions for Track menu
namespace TrackActions {
enum MoveChoice {
OnMoveUpID, OnMoveDownID, OnMoveTopID, OnMoveBottomID
};
/// Move a track up, down, to top or to bottom.
void DoMoveTrack( AudacityProject &project, Track* target, MoveChoice choice );
// "exclusive" mute means mute the chosen track and unmute all others.
void DoTrackMute( AudacityProject &project, Track *pTrack, bool exclusive );
// Type of solo (standard or simple) follows the set preference, unless
// exclusive == true, which causes the opposite behavior.
void DoTrackSolo( AudacityProject &project, Track *pTrack, bool exclusive );
void DoRemoveTrack( AudacityProject &project, Track * toRemove );
void DoRemoveTracks( AudacityProject & );
}
/// Namespace for helper functions to do with plug ins
namespace PluginActions {
enum : unsigned {
// No flags specified
kNone = 0x00,
// Flag used to disable prompting for configuration parameteres.
kConfigured = 0x01,
// Flag used to disable saving the state after processing.
kSkipState = 0x02,
// Flag used to disable "Repeat Last Effect"
kDontRepeatLast = 0x04,
};
bool DoEffect(
const PluginID & ID, const CommandContext & context, unsigned flags );
bool DoAudacityCommand(
const PluginID & ID, const CommandContext & context, unsigned flags );
}
/// Namespace for functions for Help menu
namespace HelpActions {
void DoHelpWelcome( AudacityProject & );
void DoShowLog( AudacityProject& );
}
#endif