27#include "../CommonCommandFlags.h"
30#include "../ProjectWindows.h"
33#include "../effects/EffectManager.h"
34#include "../widgets/Overlay.h"
36#include "../TrackPanel.h"
38#include "../tracks/playabletrack/wavetrack/ui/WaveformAppearance.h"
42#include "../LabelTrack.h"
51#include "../prefs/PrefsDialog.h"
54#include "../tracks/ui/ChannelView.h"
83 {
XO(
"Preferences") },
117 {
return VisitSettings<false>(
S); }
120 {
return VisitSettings<true>(
S); }
126 S.StartMultiColumn(2, wxALIGN_CENTER);
128 S.TieChoice(
XXO(
"Type:"),
130 S.TieChoice(
XXO(
"Format:"),
145 std::make_unique<LispifiedCommandOutputTargets>( *context.
pOutput.get() )
154 std::make_unique<BriefCommandOutputTargets>( *context.
pOutput.get() )
175 context.
Status(
"Command options not recognised" );
184 wxLogDebug(
"No menus");
188 size_t cnt = pBar->GetMenuCount();
194 Label = pBar->GetMenuLabelText( i );
198 context.
AddItem( Label,
"label" );
199 context.
AddItem(
"",
"accel" );
201 ExploreMenu( context, pBar->GetMenu( i ), pBar->GetId(), 1 );
220 wxCheckBox * TieCheckBox(
223 wxCheckBox * TieCheckBoxOnRight(
233 const std::vector<int> * pInternalChoices,
int iNoMatchSelector)
override;
235 wxTextCtrl * TieTextBox(
238 const int nChars)
override;
239 wxTextCtrl * TieIntegerTextBox(
242 const int nChars)
override;
243 wxTextCtrl * TieNumericTextBox(
246 const int nChars,
bool acceptEnter)
override;
247 wxSlider * TieSlider(
251 const int min = 0)
override;
252 wxSpinCtrl * TieSpinCtrl(
256 const int min)
override;
259ShuttleGuiGetDefinition::ShuttleGuiGetDefinition(
318 const std::vector<int> * pInternalChoices,
int iNoMatchSelector)
330 Prompt,
Setting, Choices, pInternalChoices, iNoMatchSelector );
364 const int nChars,
bool acceptEnter)
414 ShuttleGuiGetDefinition
S(pWin, *((context.
pOutput)->mStatusTarget) );
432 if (!command.empty()){
447 wxRect R = pWin->GetScreenRect();
454 context.
AddItem(
"Audacity Window",
"name" );
457 context.
AddItem( R.GetLeft() );
459 context.
AddItem( R.GetRight() );
460 context.
AddItem( R.GetBottom() );
465 ExploreAdornments( context, pWin->GetPosition()+wxSize( 6,-1), pWin, pWin->GetId(), 1 );
466 ExploreWindows( context, pWin->GetPosition()+wxSize( 6,-1), pWin, pWin->GetId(), 1 );
481 context.
AddItem( trk->GetName(),
"name" );
482 context.
AddBool( (trk == fTrack),
"focused");
483 context.
AddBool( trk->GetSelected(),
"selected" );
486 trk->TypeSwitch( [&] (
const WaveTrack &t) {
489 context.
AddItem(
"wave",
"kind" );
497 context.
AddItem( vzmin,
"VZoomMin");
498 context.
AddItem( vzmax,
"VZoomMax");
502 context.
AddItem(
"note",
"kind" );
506 context.
AddItem(
"label",
"kind" );
509 context.
AddItem(
"time",
"kind" );
524 t->TypeSwitch([&](
WaveTrack &waveTrack) {
525 for (
const auto pInterval : waveTrack.
Intervals()) {
526 context.StartStruct();
527 context.AddItem((double)i,
"track");
528 context.AddItem(pInterval->GetPlayStartTime(),
"start");
529 context.AddItem(pInterval->GetPlayEndTime(),
"end");
532 WaveColorAttachment::Get(**pInterval->Channels().begin());
533 context.AddItem(colors.GetColorIndex(),
"color");
534 context.AddItem(pInterval->GetName(),
"name");
553 t->TypeSwitch([&](
WaveTrack &waveTrack) {
556 for (
auto &pClip : ptrs) {
558 context.
AddItem((
double)i,
"track");
559 context.
AddItem((
double)j,
"clip");
560 context.
AddItem(pClip->GetPlayStartTime(),
"start");
561 const auto pEnv = &pClip->GetEnvelope();
564 double offset = pEnv->GetOffset();
565 for (
size_t k = 0; k < pEnv->GetNumberOfPoints(); k++)
568 context.
AddItem((*pEnv)[k].GetT() + offset,
"t");
569 context.
AddItem((*pEnv)[k].GetVal(),
"y");
574 context.
AddItem(pClip->GetPlayEndTime(),
"end");
595#ifdef VERBOSE_LABELS_FORMATTING
596 for (
int nn = 0; nn< (int)labelTrack->
mLabels.size(); nn++) {
599 context.
AddItem( (
double)i,
"track" );
634 static_cast<void>(Id);
640 wxMenuItemList list = pMenu->GetMenuItems();
641 size_t lcnt = list.size();
647 for (
size_t lndx = 0; lndx < lcnt; lndx++) {
648 item = list.Item(lndx)->GetData();
649 Label = item->GetItemLabelText();
650 Name = commandManager.GetNameFromNumericID( item->GetId() );
651 Accel = item->GetItemLabel();
652 if( Accel.Contains(
"\t") )
653 Accel = Accel.AfterLast(
'\t');
656 if( item->IsSeparator() )
659 if (item->IsSubMenu())
661 if (item->IsCheck() && item->IsChecked())
665 context.
AddItem( depth,
"depth" );
666 context.
AddItem( flags,
"flags" );
667 context.
AddItem( Label,
"label" );
668 context.
AddItem( Accel,
"accel" );
672 context.
AddItem( Name.GET(),
"id" );
675 if (item->IsSubMenu()) {
676 pMenu = item->GetSubMenu();
677 ExploreMenu( context, pMenu, item->GetId(), depth+1 );
683 wxPoint WXUNUSED(
P), wxWindow * pWin,
int WXUNUSED(Id),
int depth )
691 wxRect R1 = pWin->GetScreenRect();
692 wxSize s = pWin->GetWindowBorderSize();
693 wxRect R( 2,32, R1.GetWidth() - s.GetWidth() * 2 -16, 22 );
696 context.
AddItem( depth,
"depth" );
697 context.
AddItem(
"MenuBar",
"label" );
700 context.
AddItem( R.GetLeft() );
702 context.
AddItem( R.GetRight() );
703 context.
AddItem( R.GetBottom() );
710 wxPoint
P,
int depth )
714 wxRect panelRect{ {}, tp.GetSize() };
716 for (
auto pChannel : pTrack->Channels()) {
717 auto rulers = tp.FindRulerRects(*pChannel);
718 for (
auto &R : rulers) {
719 if (!R.Intersects(panelRect))
721 R.SetPosition( R.GetPosition() +
P );
723 context.
AddItem( depth,
"depth" );
724 context.
AddItem(
"VRuler",
"label" );
727 context.
AddItem( R.GetLeft() );
729 context.
AddItem( R.GetRight() );
730 context.
AddItem( R.GetBottom() );
741 wxPoint
P, wxWindow * pWin,
int Id,
int depth )
743 static_cast<void>(Id);
745 if( pWin->GetName() ==
"Track Panel" )
747 wxRect R = pWin->GetScreenRect();
748 ExploreTrackPanel( context, R.GetPosition()-
P, depth );
751 wxWindowList list = pWin->GetChildren();
752 size_t lcnt = list.size();
754 for (
size_t lndx = 0; lndx < lcnt; lndx++) {
755 wxWindow * item = list[lndx];
756 if( !item->IsShown() )
758 wxRect R = item->GetScreenRect();
759 R.SetPosition( R.GetPosition() -
P );
760 wxString Name = item->GetName();
762 if( Name.StartsWith(
"static" ) )
765 if( Name ==
"panel" )
768 Name = wxString(
"*") + item->GetToolTipText();
771 context.
AddItem( depth,
"depth" );
772 context.
AddItem( Name,
"label" );
773 context.
AddItem( item->GetId(),
"id" );
776 context.
AddItem( R.GetLeft() );
778 context.
AddItem( R.GetRight() );
779 context.
AddItem( R.GetBottom() );
784 ExploreWindows( context,
P, item, item->GetId(), depth+1 );
800 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)
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
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