28#include "../CommonCommandFlags.h"
31#include "../ProjectWindows.h"
34#include "../effects/EffectManager.h"
35#include "../widgets/Overlay.h"
37#include "../TrackPanel.h"
39#include "../tracks/playabletrack/wavetrack/ui/WaveformAppearance.h"
43#include "../LabelTrack.h"
54#include "../prefs/PrefsDialog.h"
57#include "../tracks/ui/ChannelView.h"
87 {
XO(
"Preferences") },
122 {
return VisitSettings<false>(
S); }
125 {
return VisitSettings<true>(
S); }
131 S.StartMultiColumn(2, wxALIGN_CENTER);
133 S.TieChoice(
XXO(
"Type:"),
135 S.TieChoice(
XXO(
"Format:"),
150 std::make_unique<LispifiedCommandOutputTargets>( *context.
pOutput.get() )
159 std::make_unique<BriefCommandOutputTargets>( *context.
pOutput.get() )
181 context.
Status(
"Command options not recognised" );
190 wxLogDebug(
"No menus");
194 size_t cnt = pBar->GetMenuCount();
200 Label = pBar->GetMenuLabelText( i );
204 context.
AddItem( Label,
"label" );
205 context.
AddItem(
"",
"accel" );
207 ExploreMenu( context, pBar->GetMenu( i ), pBar->GetId(), 1 );
226 wxCheckBox * TieCheckBox(
229 wxCheckBox * TieCheckBoxOnRight(
239 const std::vector<int> * pInternalChoices,
int iNoMatchSelector)
override;
241 wxTextCtrl * TieTextBox(
244 const int nChars)
override;
245 wxTextCtrl * TieIntegerTextBox(
248 const int nChars)
override;
249 wxTextCtrl * TieNumericTextBox(
252 const int nChars,
bool acceptEnter)
override;
253 wxSlider * TieSlider(
257 const int min = 0)
override;
258 wxSpinCtrl * TieSpinCtrl(
262 const int min)
override;
265ShuttleGuiGetDefinition::ShuttleGuiGetDefinition(
324 const std::vector<int> * pInternalChoices,
int iNoMatchSelector)
336 Prompt,
Setting, Choices, pInternalChoices, iNoMatchSelector );
370 const int nChars,
bool acceptEnter)
420 ShuttleGuiGetDefinition
S(pWin, *((context.
pOutput)->mStatusTarget) );
438 if (!command.empty()){
453 wxRect R = pWin->GetScreenRect();
460 context.
AddItem(
"Audacity Window",
"name" );
463 context.
AddItem( R.GetLeft() );
465 context.
AddItem( R.GetRight() );
466 context.
AddItem( R.GetBottom() );
471 ExploreAdornments( context, pWin->GetPosition()+wxSize( 6,-1), pWin, pWin->GetId(), 1 );
472 ExploreWindows( context, pWin->GetPosition()+wxSize( 6,-1), pWin, pWin->GetId(), 1 );
487 context.
AddItem( trk->GetName(),
"name" );
488 context.
AddBool( (trk == fTrack),
"focused");
489 context.
AddBool( trk->GetSelected(),
"selected" );
492 trk->TypeSwitch( [&] (
const WaveTrack &t) {
495 context.
AddItem(
"wave",
"kind" );
503 context.
AddItem( vzmin,
"VZoomMin");
504 context.
AddItem( vzmax,
"VZoomMax");
508 context.
AddItem(
"note",
"kind" );
512 context.
AddItem(
"label",
"kind" );
515 context.
AddItem(
"time",
"kind" );
530 t->TypeSwitch([&](
WaveTrack &waveTrack) {
531 for (
const auto pInterval : waveTrack.
Intervals()) {
532 context.StartStruct();
533 context.AddItem((double)i,
"track");
534 context.AddItem(pInterval->GetPlayStartTime(),
"start");
535 context.AddItem(pInterval->GetPlayEndTime(),
"end");
538 WaveColorAttachment::Get(**pInterval->Channels().begin());
539 context.AddItem(colors.GetColorIndex(),
"color");
540 context.AddItem(pInterval->GetName(),
"name");
559 t->TypeSwitch([&](
WaveTrack &waveTrack) {
562 for (
auto &pClip : ptrs) {
564 context.
AddItem((
double)i,
"track");
565 context.
AddItem((
double)j,
"clip");
566 context.
AddItem(pClip->GetPlayStartTime(),
"start");
567 const auto pEnv = &pClip->GetEnvelope();
570 double offset = pEnv->GetOffset();
571 for (
size_t k = 0; k < pEnv->GetNumberOfPoints(); k++)
574 context.
AddItem((*pEnv)[k].GetT() + offset,
"t");
575 context.
AddItem((*pEnv)[k].GetVal(),
"y");
580 context.
AddItem(pClip->GetPlayEndTime(),
"end");
601#ifdef VERBOSE_LABELS_FORMATTING
602 for (
int nn = 0; nn< (int)labelTrack->
mLabels.size(); nn++) {
605 context.
AddItem( (
double)i,
"track" );
640 context.
AddItem(selectedRegion.t0(),
"Start");
641 context.
AddItem(selectedRegion.t1(),
"End");
654 static_cast<void>(Id);
660 wxMenuItemList list = pMenu->GetMenuItems();
661 size_t lcnt = list.size();
667 for (
size_t lndx = 0; lndx < lcnt; lndx++) {
668 item = list.Item(lndx)->GetData();
669 Label = item->GetItemLabelText();
670 Name = commandManager.GetNameFromNumericID( item->GetId() );
671 Accel = item->GetItemLabel();
672 if( Accel.Contains(
"\t") )
673 Accel = Accel.AfterLast(
'\t');
676 if( item->IsSeparator() )
679 if (item->IsSubMenu())
681 if (item->IsCheck() && item->IsChecked())
685 context.
AddItem( depth,
"depth" );
686 context.
AddItem( flags,
"flags" );
687 context.
AddItem( Label,
"label" );
688 context.
AddItem( Accel,
"accel" );
692 context.
AddItem( Name.GET(),
"id" );
695 if (item->IsSubMenu()) {
696 pMenu = item->GetSubMenu();
697 ExploreMenu( context, pMenu, item->GetId(), depth+1 );
703 wxPoint WXUNUSED(
P), wxWindow * pWin,
int WXUNUSED(Id),
int depth )
711 wxRect R1 = pWin->GetScreenRect();
712 wxSize s = pWin->GetWindowBorderSize();
713 wxRect R( 2,32, R1.GetWidth() - s.GetWidth() * 2 -16, 22 );
716 context.
AddItem( depth,
"depth" );
717 context.
AddItem(
"MenuBar",
"label" );
720 context.
AddItem( R.GetLeft() );
722 context.
AddItem( R.GetRight() );
723 context.
AddItem( R.GetBottom() );
730 wxPoint
P,
int depth )
734 wxRect panelRect{ {}, tp.GetSize() };
736 for (
auto pChannel : pTrack->Channels()) {
737 auto rulers = tp.FindRulerRects(*pChannel);
738 for (
auto &R : rulers) {
739 if (!R.Intersects(panelRect))
741 R.SetPosition( R.GetPosition() +
P );
743 context.
AddItem( depth,
"depth" );
744 context.
AddItem(
"VRuler",
"label" );
747 context.
AddItem( R.GetLeft() );
749 context.
AddItem( R.GetRight() );
750 context.
AddItem( R.GetBottom() );
761 wxPoint
P, wxWindow * pWin,
int Id,
int depth )
763 static_cast<void>(Id);
765 if( pWin->GetName() ==
"Track Panel" )
767 wxRect R = pWin->GetScreenRect();
768 ExploreTrackPanel( context, R.GetPosition()-
P, depth );
771 wxWindowList list = pWin->GetChildren();
772 size_t lcnt = list.size();
774 for (
size_t lndx = 0; lndx < lcnt; lndx++) {
775 wxWindow * item = list[lndx];
776 if( !item->IsShown() )
778 wxRect R = item->GetScreenRect();
779 R.SetPosition( R.GetPosition() -
P );
780 wxString Name = item->GetName();
782 if( Name.StartsWith(
"static" ) )
785 if( Name ==
"panel" )
788 Name = wxString(
"*") + item->GetToolTipText();
791 context.
AddItem( depth,
"depth" );
792 context.
AddItem( Name,
"label" );
793 context.
AddItem( item->GetId(),
"id" );
796 context.
AddItem( R.GetLeft() );
798 context.
AddItem( R.GetRight() );
799 context.
AddItem( R.GetBottom() );
804 ExploreWindows( context,
P, item, item->GetId(), depth+1 );
820 wxT(
"Optional/Extra/Part2/Scriptables2")
const ReservedCommandFlag & AudioIONotBusyFlag()
XXO("&Cut/Copy/Paste Toolbar")
static const EnumValueSymbol kTypes[nTypes]
static const EnumValueSymbol kFormats[nFormats]
Contains declaration of GetInfoCommand class.
@ PluginTypeAudacityCommand
AUDACITY_DLL_API wxFrame & GetProjectFrame(AudacityProject &project)
Get the top-level window associated with the project (as a wxFrame only, when you do not need to use ...
Declarations for SelectCommand and SelectCommandType classes.
TranslatableStrings Msgids(const EnumValueSymbol strings[], size_t nStrings)
Convenience function often useful when adding choice controls.
for(int ii=0, nn=names.size();ii< nn;++ii)
std::vector< TranslatableString > TranslatableStrings
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
This specialization of Setting for bool adds a Toggle method to negate the saved value.
const wxString & Key() const
const EnumValueSymbols & GetSymbols() const
const EnumValueSymbol & Default() const
Subclass & Get(const RegisteredFactory &key)
Get reference to an attachment, creating on demand if not present, down-cast it to Subclass.
CommandContext provides additional information to an 'Apply()' command. It provides the project,...
virtual void Status(const wxString &message, bool bFlush=false) const
void AddBool(const bool value, const wxString &name={}) const
void StartField(const wxString &name) const
void AddItem(const wxString &value, const wxString &name={}) const
AudacityProject & project
std::unique_ptr< CommandOutputTargets > pOutput
static CommandManager & Get(AudacityProject &project)
CommandMessageTargetDecorator is a CommandOutputTarget that forwards its work on to another one....
void AddBool(const bool value, const wxString &name={}) override
void StartStruct() override
void StartField(const wxString &name={}) override
void AddItem(const wxString &value, const wxString &name={}) override
void EndStruct() override
void StartArray() override
Interface for objects that can receive (string) messages from a command.
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
const wxString & Internal() const
Specialization of Setting for double.
EffectManager is the class that handles effects and effect categories.
CommandID GetCommandIdentifier(const PluginID &ID)
void GetCommandDefinition(const PluginID &ID, const CommandContext &context, int flags)
static EffectManager & Get()
const wxArrayStringEx & GetInternals() const
void ExploreWindows(const CommandContext &context, wxPoint P, wxWindow *pWin, int Id, int depth)
bool Apply(const CommandContext &context) override
bool SendClips(const CommandContext &context)
bool SendCommands(const CommandContext &context, int flags)
bool SendEnvelopes(const CommandContext &context)
bool SendLabels(const CommandContext &context)
void ExploreMenu(const CommandContext &context, wxMenu *pMenu, int Id, int depth)
bool VisitSettings(SettingsVisitorBase< Const > &S)
void PopulateOrExchange(ShuttleGui &S) override
static const ComponentInterfaceSymbol Symbol
void ExploreTrackPanel(const CommandContext &context, wxPoint P, int depth)
bool ApplyInner(const CommandContext &context)
bool SendTracks(const CommandContext &context)
bool SendBoxes(const CommandContext &context)
bool SendMenus(const CommandContext &context)
bool SendPreferences(const CommandContext &context)
void ExploreAdornments(const CommandContext &context, wxPoint P, wxWindow *pWin, int Id, int depth)
bool SendSelection(const CommandContext &context)
Specialization of Setting for int.
A LabelTrack is a Track that holds labels (LabelStruct).
const LabelArray & GetLabels() const
A Track that is used for Midi notes. (Somewhat old code).
PluginManager maintains a list of all plug ins. That covers modules, effects, generators,...
Range PluginsOfType(int type)
static PluginManager & Get()
void ShuttleAll(ShuttleGui &S)
Generates classes whose instances register items at construction.
const SettingPath & GetPath() const
const T & GetDefault() const
Visitor of effect or command parameters. This is a base class with lots of virtual functions that do ...
virtual wxTextCtrl * TieIntegerTextBox(const TranslatableString &Prompt, const IntSetting &Setting, const int nChars)
wxChoice * TieChoice(const TranslatableString &Prompt, TranslatableString &Selected, const TranslatableStrings &choices)
wxCheckBox * TieCheckBox(const TranslatableString &Prompt, bool &Var)
virtual wxChoice * TieNumberAsChoice(const TranslatableString &Prompt, IntSetting &Setting, const TranslatableStrings &Choices, const std::vector< int > *pInternalChoices=nullptr, int iNoMatchSelector=0)
wxCheckBox * TieCheckBoxOnRight(const TranslatableString &Prompt, bool &Var)
wxTextCtrl * TieNumericTextBox(const TranslatableString &Prompt, int &Value, const int nChars=0, bool acceptEnter=false)
wxSpinCtrl * TieSpinCtrl(const TranslatableString &Prompt, int &Value, const int max, const int min=0)
wxTextCtrl * TieTextBox(const TranslatableString &Caption, wxString &Value, const int nChars=0)
wxSlider * TieSlider(const TranslatableString &Prompt, int &pos, const int max, const int min=0)
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Specialization of Setting for strings.
A kind of Track used to 'warp time'.
Abstract base class for an object holding data associated with points on a time axis.
static TrackList & Get(AudacityProject &project)
static TrackPanel & Get(AudacityProject &project)
Holds a msgid for the translation catalog; may also bind format arguments.
wxString Translation() const
NotifyingSelectedRegion selectedRegion
static ViewInfo & Get(AudacityProject &project)
A Track that contains audio waveform data.
bool GetMute() const override
May vary asynchronously.
double GetStartTime() const override
Implement WideSampleSequence.
IntervalHolders SortedIntervalArray()
Return all WaveClips sorted by clip play start time.
double GetEndTime() const override
Implement WideSampleSequence.
bool GetSolo() const override
May vary asynchronously.
size_t NChannels() const override
A constant property.
Shuttle that retrieves a JSON format definition of a command's parameters.
wxChoice * TieChoice(const TranslatableString &Prompt, ChoiceSetting &choiceSetting) override
virtual ~ShuttleGuiGetDefinition()
wxSpinCtrl * TieSpinCtrl(const TranslatableString &Prompt, const IntSetting &Setting, const int max, const int min) override
wxCheckBox * TieCheckBoxOnRight(const TranslatableString &Prompt, const BoolSetting &Setting) override
wxTextCtrl * TieIntegerTextBox(const TranslatableString &Prompt, const IntSetting &Setting, const int nChars) override
wxCheckBox * TieCheckBox(const TranslatableString &Prompt, const BoolSetting &Setting) override
wxTextCtrl * TieTextBox(const TranslatableString &Prompt, const StringSetting &Setting, const int nChars) override
wxChoice * TieNumberAsChoice(const TranslatableString &Prompt, IntSetting &Setting, const TranslatableStrings &Choices, const std::vector< int > *pInternalChoices, int iNoMatchSelector) override
wxTextCtrl * TieNumericTextBox(const TranslatableString &Prompt, const DoubleSetting &Setting, const int nChars, bool acceptEnter) override
wxSlider * TieSlider(const TranslatableString &Prompt, const IntSetting &Setting, const int max, const int min=0) override
AUDACITY_DLL_API void OnAudacityCommand(const CommandContext &ctx)
BuiltinCommandsModule::Registration< GetInfoCommand > reg