mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-16 08:34:10 +02:00
Move TellUserWhyDisallowed into MenuManager...
... so we don't have MenuManager calling CommandManager which calls it back.
This commit is contained in:
parent
76996bf0cd
commit
f9b0281b47
@ -54,6 +54,7 @@
|
|||||||
#include "prefs/TracksPrefs.h"
|
#include "prefs/TracksPrefs.h"
|
||||||
#include "toolbars/ControlToolBar.h"
|
#include "toolbars/ControlToolBar.h"
|
||||||
#include "toolbars/ToolManager.h"
|
#include "toolbars/ToolManager.h"
|
||||||
|
#include "widgets/ErrorDialog.h"
|
||||||
|
|
||||||
#include <wx/menu.h>
|
#include <wx/menu.h>
|
||||||
#include <wx/windowptr.h>
|
#include <wx/windowptr.h>
|
||||||
@ -941,7 +942,7 @@ bool MenuManager::ReportIfActionNotAllowed(
|
|||||||
if( bAllowed )
|
if( bAllowed )
|
||||||
return true;
|
return true;
|
||||||
auto &cm = CommandManager::Get( project );
|
auto &cm = CommandManager::Get( project );
|
||||||
cm.TellUserWhyDisallowed( Name, flags & flagsRqd, flagsRqd);
|
TellUserWhyDisallowed( Name, flags & flagsRqd, flagsRqd);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -978,3 +979,70 @@ bool MenuManager::TryToMakeActionAllowed(
|
|||||||
}
|
}
|
||||||
return (flags & flagsRqd) == flagsRqd;
|
return (flags & flagsRqd) == flagsRqd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MenuManager::TellUserWhyDisallowed(
|
||||||
|
const wxString & Name, CommandFlag flagsGot, CommandFlag flagsRequired )
|
||||||
|
{
|
||||||
|
// The default string for 'reason' is a catch all. I hope it won't ever be seen
|
||||||
|
// and that we will get something more specific.
|
||||||
|
wxString reason = _("There was a problem with your last action. If you think\nthis is a bug, please tell us exactly where it occurred.");
|
||||||
|
// The default title string is 'Disallowed'.
|
||||||
|
wxString title = _("Disallowed");
|
||||||
|
wxString helpPage;
|
||||||
|
|
||||||
|
auto missingFlags = flagsRequired & ~flagsGot;
|
||||||
|
if( (missingFlags & AudioIONotBusyFlag).any() )
|
||||||
|
// This reason will not be shown, because options that require it will be greyed our.
|
||||||
|
reason = _("You can only do this when playing and recording are\nstopped. (Pausing is not sufficient.)");
|
||||||
|
else if( (missingFlags & StereoRequiredFlag).any() )
|
||||||
|
// This reason will not be shown, because the stereo-to-mono is greyed out if not allowed.
|
||||||
|
reason = _("You must first select some stereo audio to perform this\naction. (You cannot use this with mono.)");
|
||||||
|
// In reporting the issue with cut or copy, we don't tell the user they could also select some text in a label.
|
||||||
|
else if( (
|
||||||
|
( missingFlags & TimeSelectedFlag ) |
|
||||||
|
( missingFlags & CutCopyAvailableFlag )
|
||||||
|
).any() ){
|
||||||
|
title = _("No Audio Selected");
|
||||||
|
#ifdef EXPERIMENTAL_DA
|
||||||
|
// i18n-hint: %s will be replaced by the name of an action, such as Normalize, Cut, Fade.
|
||||||
|
reason = wxString::Format( _("You must first select some audio for '%s' to act on.\n\nCtrl + A selects all audio."), Name );
|
||||||
|
#else
|
||||||
|
#ifdef __WXMAC__
|
||||||
|
// i18n-hint: %s will be replaced by the name of an action, such as Normalize, Cut, Fade.
|
||||||
|
reason = wxString::Format( _("Select the audio for %s to use (for example, Cmd + A to Select All) then try again."
|
||||||
|
// No need to explain what a help button is for.
|
||||||
|
// "\n\nClick the Help button to learn more about selection methods."
|
||||||
|
), Name );
|
||||||
|
|
||||||
|
#else
|
||||||
|
// i18n-hint: %s will be replaced by the name of an action, such as Normalize, Cut, Fade.
|
||||||
|
reason = wxString::Format( _("Select the audio for %s to use (for example, Ctrl + A to Select All) then try again."
|
||||||
|
// No need to explain what a help button is for.
|
||||||
|
// "\n\nClick the Help button to learn more about selection methods."
|
||||||
|
), Name );
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
helpPage = "Selecting_Audio_-_the_basics";
|
||||||
|
}
|
||||||
|
else if( (missingFlags & WaveTracksSelectedFlag).any() )
|
||||||
|
reason = _("You must first select some audio to perform this action.\n(Selecting other kinds of track won't work.)");
|
||||||
|
else if ( (missingFlags & TracksSelectedFlag).any() )
|
||||||
|
// i18n-hint: %s will be replaced by the name of an action, such as "Remove Tracks".
|
||||||
|
reason = wxString::Format(_("\"%s\" requires one or more tracks to be selected."), Name);
|
||||||
|
// If the only thing wrong was no tracks, we do nothing and don't report a problem
|
||||||
|
else if( missingFlags == TracksExistFlag )
|
||||||
|
return;
|
||||||
|
// Likewise return if it was just no tracks, and track panel did not have focus. (e.g. up-arrow to move track)
|
||||||
|
else if( missingFlags == (TracksExistFlag | TrackPanelHasFocus) )
|
||||||
|
return;
|
||||||
|
// Likewise as above too...
|
||||||
|
else if( missingFlags == TrackPanelHasFocus )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Does not have the warning icon...
|
||||||
|
ShowErrorDialog(
|
||||||
|
NULL,
|
||||||
|
title,
|
||||||
|
reason,
|
||||||
|
helpPage);
|
||||||
|
}
|
||||||
|
@ -87,6 +87,9 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void TellUserWhyDisallowed(const wxString & Name, CommandFlag flagsGot,
|
||||||
|
CommandFlag flagsRequired);
|
||||||
|
|
||||||
void OnUndoRedo( wxCommandEvent &evt );
|
void OnUndoRedo( wxCommandEvent &evt );
|
||||||
|
|
||||||
AudacityProject &mProject;
|
AudacityProject &mProject;
|
||||||
|
@ -101,7 +101,6 @@ CommandManager. It holds the callback for one command.
|
|||||||
#include "../effects/EffectManager.h"
|
#include "../effects/EffectManager.h"
|
||||||
#include "../widgets/LinkingHtmlWindow.h"
|
#include "../widgets/LinkingHtmlWindow.h"
|
||||||
#include "../widgets/AudacityMessageBox.h"
|
#include "../widgets/AudacityMessageBox.h"
|
||||||
#include "../widgets/ErrorDialog.h"
|
|
||||||
#include "../widgets/HelpSystem.h"
|
#include "../widgets/HelpSystem.h"
|
||||||
|
|
||||||
|
|
||||||
@ -1021,73 +1020,6 @@ void CommandManager::SetKeyFromIndex(int i, const NormalizedKeyString &key)
|
|||||||
entry->key = key;
|
entry->key = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandManager::TellUserWhyDisallowed(
|
|
||||||
const wxString & Name, CommandFlag flagsGot, CommandFlag flagsRequired )
|
|
||||||
{
|
|
||||||
// The default string for 'reason' is a catch all. I hope it won't ever be seen
|
|
||||||
// and that we will get something more specific.
|
|
||||||
wxString reason = _("There was a problem with your last action. If you think\nthis is a bug, please tell us exactly where it occurred.");
|
|
||||||
// The default title string is 'Disallowed'.
|
|
||||||
wxString title = _("Disallowed");
|
|
||||||
wxString helpPage;
|
|
||||||
|
|
||||||
auto missingFlags = flagsRequired & ~flagsGot;
|
|
||||||
if( (missingFlags & AudioIONotBusyFlag).any() )
|
|
||||||
// This reason will not be shown, because options that require it will be greyed our.
|
|
||||||
reason = _("You can only do this when playing and recording are\nstopped. (Pausing is not sufficient.)");
|
|
||||||
else if( (missingFlags & StereoRequiredFlag).any() )
|
|
||||||
// This reason will not be shown, because the stereo-to-mono is greyed out if not allowed.
|
|
||||||
reason = _("You must first select some stereo audio to perform this\naction. (You cannot use this with mono.)");
|
|
||||||
// In reporting the issue with cut or copy, we don't tell the user they could also select some text in a label.
|
|
||||||
else if( (
|
|
||||||
( missingFlags & TimeSelectedFlag ) |
|
|
||||||
( missingFlags & CutCopyAvailableFlag )
|
|
||||||
).any() ){
|
|
||||||
title = _("No Audio Selected");
|
|
||||||
#ifdef EXPERIMENTAL_DA
|
|
||||||
// i18n-hint: %s will be replaced by the name of an action, such as Normalize, Cut, Fade.
|
|
||||||
reason = wxString::Format( _("You must first select some audio for '%s' to act on.\n\nCtrl + A selects all audio."), Name );
|
|
||||||
#else
|
|
||||||
#ifdef __WXMAC__
|
|
||||||
// i18n-hint: %s will be replaced by the name of an action, such as Normalize, Cut, Fade.
|
|
||||||
reason = wxString::Format( _("Select the audio for %s to use (for example, Cmd + A to Select All) then try again."
|
|
||||||
// No need to explain what a help button is for.
|
|
||||||
// "\n\nClick the Help button to learn more about selection methods."
|
|
||||||
), Name );
|
|
||||||
|
|
||||||
#else
|
|
||||||
// i18n-hint: %s will be replaced by the name of an action, such as Normalize, Cut, Fade.
|
|
||||||
reason = wxString::Format( _("Select the audio for %s to use (for example, Ctrl + A to Select All) then try again."
|
|
||||||
// No need to explain what a help button is for.
|
|
||||||
// "\n\nClick the Help button to learn more about selection methods."
|
|
||||||
), Name );
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
helpPage = "Selecting_Audio_-_the_basics";
|
|
||||||
}
|
|
||||||
else if( (missingFlags & WaveTracksSelectedFlag).any() )
|
|
||||||
reason = _("You must first select some audio to perform this action.\n(Selecting other kinds of track won't work.)");
|
|
||||||
else if ( (missingFlags & TracksSelectedFlag).any() )
|
|
||||||
// i18n-hint: %s will be replaced by the name of an action, such as "Remove Tracks".
|
|
||||||
reason = wxString::Format(_("\"%s\" requires one or more tracks to be selected."), Name);
|
|
||||||
// If the only thing wrong was no tracks, we do nothing and don't report a problem
|
|
||||||
else if( missingFlags == TracksExistFlag )
|
|
||||||
return;
|
|
||||||
// Likewise return if it was just no tracks, and track panel did not have focus. (e.g. up-arrow to move track)
|
|
||||||
else if( missingFlags == (TracksExistFlag | TrackPanelHasFocus) )
|
|
||||||
return;
|
|
||||||
// Likewise as above too...
|
|
||||||
else if( missingFlags == TrackPanelHasFocus )
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Does not have the warning icon...
|
|
||||||
ShowErrorDialog(
|
|
||||||
NULL,
|
|
||||||
title,
|
|
||||||
reason,
|
|
||||||
helpPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString CommandManager::DescribeCommandsAndShortcuts
|
wxString CommandManager::DescribeCommandsAndShortcuts
|
||||||
(const TranslatedInternalString commands[], size_t nCommands) const
|
(const TranslatedInternalString commands[], size_t nCommands) const
|
||||||
{
|
{
|
||||||
|
@ -286,7 +286,6 @@ class AUDACITY_DLL_API CommandManager final
|
|||||||
//
|
//
|
||||||
|
|
||||||
void WriteXML(XMLWriter &xmlFile) const /* not override */;
|
void WriteXML(XMLWriter &xmlFile) const /* not override */;
|
||||||
void TellUserWhyDisallowed(const wxString & Name, CommandFlag flagsGot, CommandFlag flagsRequired);
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Formatting summaries that include shortcut keys
|
/// Formatting summaries that include shortcut keys
|
||||||
|
Loading…
x
Reference in New Issue
Block a user