Audacity 3.2.0
Public Member Functions | Private Member Functions | Private Attributes | List of all members
MacrosWindow Class Referencefinal

#include <BatchProcessDialog.h>

Inheritance diagram for MacrosWindow:
[legend]
Collaboration diagram for MacrosWindow:
[legend]

Public Member Functions

 MacrosWindow (wxWindow *parent, AudacityProject &project, bool bExpanded=true)
 Constructor. More...
 
 ~MacrosWindow ()
 
void UpdateDisplay (bool bExpanded)
 
- Public Member Functions inherited from ApplyMacroDialog
 ApplyMacroDialog (wxWindow *parent, AudacityProject &project, bool bInherited=false)
 
virtual ~ApplyMacroDialog ()
 
void Populate ()
 
void PopulateOrExchange (ShuttleGui &S)
 Defines the dialog and does data exchange with it. More...
 
virtual void OnApplyToProject (wxCommandEvent &event)
 
virtual void OnApplyToFiles (wxCommandEvent &event)
 
virtual void OnCancel (wxCommandEvent &event)
 
virtual void OnHelp (wxCommandEvent &event)
 
virtual ManualPageID GetHelpPageName ()
 
void PopulateMacros ()
 
void ApplyMacroToProject (int iMacro, bool bHasGui=true)
 
void ApplyMacroToProject (const CommandID &MacroID, bool bHasGui=true)
 
- Public Member Functions inherited from wxDialogWrapper
 wxDialogWrapper ()
 
 wxDialogWrapper (wxWindow *parent, wxWindowID id, const TranslatableString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE, const TranslatableString &name=XO("Dialog"))
 
bool Create (wxWindow *parent, wxWindowID id, const TranslatableString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE, const TranslatableString &name=XO("Dialog"))
 
void SetTitle (const TranslatableString &title)
 
void SetLabel (const TranslatableString &title)
 
void SetName (const TranslatableString &title)
 
void SetName ()
 
- Public Member Functions inherited from wxTabTraversalWrapper< wxDialog >
 wxTabTraversalWrapper (Args &&... args)
 
 wxTabTraversalWrapper (const wxTabTraversalWrapper &)=delete
 
 wxTabTraversalWrapper (wxTabTraversalWrapper &&)=delete
 
wxTabTraversalWrapperoperator= (const wxTabTraversalWrapper &)=delete
 
wxTabTraversalWrapperoperator= (wxTabTraversalWrapper &&)=delete
 
- Public Member Functions inherited from PrefsListener
 PrefsListener ()
 
virtual ~PrefsListener ()
 
virtual void UpdatePrefs ()=0
 

Private Member Functions

TranslatableString WindowTitle () const
 
void Populate ()
 Creates the dialog and its contents. More...
 
void PopulateOrExchange (ShuttleGui &S)
 Defines the dialog and does data exchange with it. More...
 
void OnApplyToProject (wxCommandEvent &event) override
 
void OnApplyToFiles (wxCommandEvent &event) override
 
void OnCancel (wxCommandEvent &event) override
 
virtual ManualPageID GetHelpPageName () override
 
void PopulateList ()
 This clears and updates the contents of mList, the commands for the current macro. More...
 
void AddItem (const CommandID &command, wxString const &params)
 Add one item into mList. More...
 
bool ChangeOK ()
 
void UpdateMenus ()
 
void ShowActiveMacro ()
 
void OnMacroSelected (wxListEvent &event)
 An item in the macros list has been selected. More...
 
void OnListSelected (wxListEvent &event)
 An item in the macros list has been selected. More...
 
void OnMacrosBeginEdit (wxListEvent &event)
 
void OnMacrosEndEdit (wxListEvent &event)
 
void OnAdd (wxCommandEvent &event)
 
void OnRemove (wxCommandEvent &event)
 
void OnRename (wxCommandEvent &event)
 
void OnRestore (wxCommandEvent &event)
 Reset a built in macro. More...
 
void OnImport (wxCommandEvent &event)
 
void OnExport (wxCommandEvent &event)
 
void OnSave (wxCommandEvent &event)
 
void OnExpand (wxCommandEvent &event)
 
void OnShrink (wxCommandEvent &event)
 
void OnSize (wxSizeEvent &event)
 The window has been resized. More...
 
void OnCommandActivated (wxListEvent &event)
 
void OnInsert (wxCommandEvent &event)
 
void OnEditCommandParams (wxCommandEvent &event)
 
void OnDelete (wxCommandEvent &event)
 
void OnUp (wxCommandEvent &event)
 
void OnDown (wxCommandEvent &event)
 
void OnOK (wxCommandEvent &event)
 Send changed values back to Prefs, and update Audacity. More...
 
void OnKeyDown (wxKeyEvent &event)
 
void FitColumns ()
 
void InsertCommandAt (int item)
 
bool SaveChanges ()
 
void UpdatePrefs () override
 

Private Attributes

AudacityProjectmProject
 
wxButton * mRemove
 
wxButton * mRename
 
wxButton * mRestore
 
wxButton * mImport
 
wxButton * mExport
 
wxButton * mSave
 
int mSelectedCommand
 
bool mChanged
 

Additional Inherited Members

- Static Public Member Functions inherited from ApplyMacroDialog
static CommandID MacroIdOfName (const wxString &MacroName)
 
- Static Public Member Functions inherited from PrefsListener
static void Broadcast (int id=0)
 Call this static function to notify all PrefsListener objects. More...
 
- Public Attributes inherited from ApplyMacroDialog
wxListCtrl * mList
 
wxListCtrl * mMacros
 
MacroCommands mMacroCommands
 
wxButton * mResize
 Provides list of available commands. More...
 
wxButton * mOK
 
wxButton * mCancel
 
wxTextCtrl * mResults
 
bool mAbort
 
bool mbExpanded
 
wxString mActiveMacro
 
wxString mMacroBeingRenamed
 
- Protected Member Functions inherited from PrefsListener
virtual void UpdateSelectedPrefs (int id)
 
- Protected Attributes inherited from ApplyMacroDialog
AudacityProjectmProject
 
const MacroCommandsCatalog mCatalog
 

Detailed Description

Definition at line 73 of file BatchProcessDialog.h.

Constructor & Destructor Documentation

◆ MacrosWindow()

MacrosWindow::MacrosWindow ( wxWindow *  parent,
AudacityProject project,
bool  bExpanded = true 
)

Constructor.

Definition at line 564 of file BatchProcessDialog.cpp.

565 :
566 ApplyMacroDialog(parent, project, true)
567 , mProject{ project }
568{
569 mbExpanded = bExpanded;
570 auto Title = WindowTitle();
571 SetLabel( Title ); // Provide visual label
572 SetName( Title ); // Provide audible label
573 SetTitle( Title );
574
575 mChanged = false;
577
578 if( mbExpanded )
579 Populate();
580 else
582}
const auto project
ApplyMacroDialog(wxWindow *parent, AudacityProject &project, bool bInherited=false)
TranslatableString WindowTitle() const
AudacityProject & mProject
void Populate()
Creates the dialog and its contents.
void SetTitle(const TranslatableString &title)
void SetLabel(const TranslatableString &title)

References ApplyMacroDialog::mbExpanded, mChanged, mSelectedCommand, ApplyMacroDialog::Populate(), Populate(), wxDialogWrapper::SetLabel(), wxDialogWrapper::SetName(), wxDialogWrapper::SetTitle(), and WindowTitle().

Here is the call graph for this function:

◆ ~MacrosWindow()

MacrosWindow::~MacrosWindow ( )

Definition at line 584 of file BatchProcessDialog.cpp.

585{
586}

Member Function Documentation

◆ AddItem()

void MacrosWindow::AddItem ( const CommandID command,
wxString const &  params 
)
private

Add one item into mList.

Definition at line 754 of file BatchProcessDialog.cpp.

755{
757 auto friendlyName = entry != mCatalog.end()
758 ? entry->name.StrippedTranslation()
759 :
760 // uh oh, using GET to expose an internal name to the user!
761 // in default of any better friendly name
762 Action.GET();
763
764 int i = mList->GetItemCount();
765
766 mList->InsertItem(i, wxString::Format(wxT(" %02i"), i + 1));
767 mList->SetItem(i, ActionColumn, friendlyName );
768 mList->SetItem(i, ParamsColumn, Params );
769}
wxT("CloseDown"))
@ ActionColumn
@ ParamsColumn
static ProjectFileIORegistry::AttributeWriterEntry entry
const MacroCommandsCatalog mCatalog
Entries::const_iterator ByCommandId(const CommandID &commandId) const
Entries::const_iterator end() const
Definition: BatchCommands.h:49
std::function< void()> Action
Definition: BasicUI.h:24

References ActionColumn, MacroCommandsCatalog::ByCommandId(), MacroCommandsCatalog::end(), entry, ApplyMacroDialog::mCatalog, ApplyMacroDialog::mList, ParamsColumn, and wxT().

Referenced by PopulateList().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ChangeOK()

bool MacrosWindow::ChangeOK ( )
private

Definition at line 828 of file BatchProcessDialog.cpp.

829{
830 if (mChanged) {
831 int id;
832
833 auto title = XO("%s changed").Format( mActiveMacro );
834 auto msg = XO("Do you want to save the changes?");
835
837 msg,
838 title,
839 wxYES_NO | wxCANCEL);
840 if (id == wxCANCEL) {
841 return false;
842 }
843
844 if (id == wxYES) {
846 return false;
847 }
848 }
849
850 mChanged = false;
851 mSave->Enable( mChanged );
852 }
853
854 return true;
855}
int AudacityMessageBox(const TranslatableString &message, const TranslatableString &caption, long style, wxWindow *parent, int x, int y)
XO("Cut/Copy/Paste")
static const auto title
int id
MacroCommands mMacroCommands
wxString WriteMacro(const wxString &macro, wxWindow *parent=nullptr)

References AudacityMessageBox(), id, ApplyMacroDialog::mActiveMacro, mChanged, ApplyMacroDialog::mMacroCommands, mSave, title, MacroCommands::WriteMacro(), and XO().

Referenced by OnAdd(), OnCancel(), OnImport(), OnMacroSelected(), and OnShrink().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ FitColumns()

void MacrosWindow::FitColumns ( )
private

Definition at line 906 of file BatchProcessDialog.cpp.

907{
908
909#if defined(__WXMAC__)
910 // wxMac uses a hard coded width of 150 when wxLIST_AUTOSIZE_USEHEADER
911 // is specified, so we calculate the width ourselves. This method may
912 // work equally well on other platforms.
913 for (size_t c = 0; c < mList->GetColumnCount(); c++) {
914 wxListItem info;
915 int width;
916
917 mList->SetColumnWidth(c, wxLIST_AUTOSIZE);
918 info.Clear();
919 info.SetId(c);
920 info.SetMask(wxLIST_MASK_TEXT | wxLIST_MASK_WIDTH);
921 mList->GetColumn(c, info);
922
923 mList->GetTextExtent(info.GetText(), &width, NULL);
924 width += 2 * 4; // 2 * kItemPadding - see listctrl_mac.cpp
925 width += 16; // kIconWidth - see listctrl_mac.cpp
926
927 mList->SetColumnWidth(c, wxMax(width, mList->GetColumnWidth(c)));
928 }
929
930 // Looks strange, but it forces the horizontal scrollbar to get
931 // drawn. If not done, strange column sizing can occur if the
932 // user attempts to resize the columns.
933 mList->SetClientSize(mList->GetClientSize());
934#else
935 mList->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER);
936 mList->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER);
937 mList->SetColumnWidth(2, wxLIST_AUTOSIZE);
938#endif
939
940 int bestfit = mList->GetColumnWidth(2);
941 int clientsize = mList->GetClientSize().GetWidth();
942 int col0 = mList->GetColumnWidth(0);
943 int col1 = mList->GetColumnWidth(1);
944 bestfit = (bestfit > clientsize-col0-col1)? bestfit : clientsize-col0-col1;
945 mList->SetColumnWidth(2, bestfit);
946
947}

References ApplyMacroDialog::mList.

Referenced by OnListSelected(), OnSize(), and Populate().

Here is the caller graph for this function:

◆ GetHelpPageName()

virtual ManualPageID MacrosWindow::GetHelpPageName ( )
inlineoverrideprivatevirtual

Reimplemented from ApplyMacroDialog.

Definition at line 91 of file BatchProcessDialog.h.

91 {return
92 mbExpanded ? "Manage_Macros"
93 : "Apply_Macro";}

References ApplyMacroDialog::mbExpanded.

◆ InsertCommandAt()

void MacrosWindow::InsertCommandAt ( int  item)
private

Definition at line 1173 of file BatchProcessDialog.cpp.

1174{
1175 if (item == -1) {
1176 return;
1177 }
1178
1179 MacroCommandDialog d(this, wxID_ANY, mProject);
1180
1181 if (!d.ShowModal()) {
1182 Raise();
1183 return;
1184 }
1185 Raise();
1186
1187 if(!d.mSelectedCommand.empty())
1188 {
1189 mMacroCommands.AddToMacro(d.mSelectedCommand,
1190 d.mSelectedParameters,
1191 item);
1192 mChanged = true;
1193 mSave->Enable( mChanged );
1194
1195 mSelectedCommand = item + 1;
1196 PopulateList();
1197 }
1198
1199}
Provides a list of configurable commands for use with MacroCommands.
void AddToMacro(const CommandID &command, int before=-1)
void PopulateList()
This clears and updates the contents of mList, the commands for the current macro.

References MacroCommands::AddToMacro(), Identifier::empty(), mChanged, ApplyMacroDialog::mMacroCommands, mProject, mSave, MacroCommandDialog::mSelectedCommand, mSelectedCommand, MacroCommandDialog::mSelectedParameters, and PopulateList().

Referenced by OnEditCommandParams(), and OnInsert().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnAdd()

void MacrosWindow::OnAdd ( wxCommandEvent &  event)
private

Definition at line 987 of file BatchProcessDialog.cpp.

988{
989 // Similar to Bug 2284 we may need to save a changed macro.
990 if (!ChangeOK()) {
991 return;
992 }
993
994 while (true) {
996 XO("Enter name of new macro"),
997 XO("Name of new macro"));
998 d.SetName(d.GetTitle());
999 wxString name;
1000
1001 if (d.ShowModal() == wxID_CANCEL) {
1002 Raise();
1003 return;
1004 }
1005 Raise();
1006
1007 name = d.GetValue().Strip(wxString::both);
1008
1009 if (name.length() == 0) {
1011 XO("Name must not be blank"),
1012 WindowTitle(),
1013 wxOK | wxICON_ERROR,
1014 this);
1015 continue;
1016 }
1017
1018 if (name.Contains(wxFILE_SEP_PATH) ||
1019 name.Contains(wxFILE_SEP_PATH_UNIX)) {
1021 /*i18n-hint: The %c will be replaced with 'forbidden characters', like '/' and '\'.*/
1022 XO("Names may not contain '%c' and '%c'")
1023 .Format(wxFILE_SEP_PATH, wxFILE_SEP_PATH_UNIX),
1024 WindowTitle(),
1025 wxOK | wxICON_ERROR,
1026 this);
1027 continue;
1028 }
1029
1031
1033
1035 UpdateMenus();
1036
1037 break;
1038 }
1039}
const TranslatableString name
Definition: Distortion.cpp:76
Wrap wxTextEntryDialog so that caption IS translatable.
Abstract base class used in importing a file.
bool AddMacro(const wxString &macro)
TranslatableString & Strip(unsigned options=MenuCodes) &

References MacroCommands::AddMacro(), AudacityMessageBox(), ChangeOK(), ApplyMacroDialog::mActiveMacro, ApplyMacroDialog::mMacroCommands, name, ApplyMacroDialog::PopulateMacros(), UpdateMenus(), WindowTitle(), and XO().

Here is the call graph for this function:

◆ OnApplyToFiles()

void MacrosWindow::OnApplyToFiles ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from ApplyMacroDialog.

Definition at line 1313 of file BatchProcessDialog.cpp.

1314{
1315 if( !SaveChanges() )
1316 return;
1318}
virtual void OnApplyToFiles(wxCommandEvent &event)

References ApplyMacroDialog::OnApplyToFiles(), and SaveChanges().

Here is the call graph for this function:

◆ OnApplyToProject()

void MacrosWindow::OnApplyToProject ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from ApplyMacroDialog.

Definition at line 1306 of file BatchProcessDialog.cpp.

1307{
1308 if( !SaveChanges() )
1309 return;
1311}
virtual void OnApplyToProject(wxCommandEvent &event)

References ApplyMacroDialog::OnApplyToProject(), and SaveChanges().

Here is the call graph for this function:

◆ OnCancel()

void MacrosWindow::OnCancel ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from ApplyMacroDialog.

Definition at line 1347 of file BatchProcessDialog.cpp.

1348{
1349 bool bWasChanged = mChanged;
1350 if (!ChangeOK()) {
1351 return;
1352 }
1353 // If we've rejected a change, we need to restore the display
1354 // of the active macro.
1355 // That's because next time we open this dialog we want to see the
1356 // unedited macro.
1357 if( bWasChanged )
1359 Hide();
1360}

References ChangeOK(), mChanged, and ShowActiveMacro().

Here is the call graph for this function:

◆ OnCommandActivated()

void MacrosWindow::OnCommandActivated ( wxListEvent &  event)
private

An item in the list has been selected. Bring up a dialog to allow its parameters to be edited.

Definition at line 1155 of file BatchProcessDialog.cpp.

1156{
1157 wxCommandEvent dummy;
1158 OnEditCommandParams( dummy );
1159}
void OnEditCommandParams(wxCommandEvent &event)

References OnEditCommandParams().

Here is the call graph for this function:

◆ OnDelete()

void MacrosWindow::OnDelete ( wxCommandEvent &  event)
private

Definition at line 1241 of file BatchProcessDialog.cpp.

1242{
1243 long item = mList->GetNextItem(-1,
1244 wxLIST_NEXT_ALL,
1245 wxLIST_STATE_SELECTED);
1246 if (item == -1 || item + 1 == mList->GetItemCount()) {
1247 return;
1248 }
1249
1251
1252 mChanged = true;
1253 mSave->Enable( mChanged );
1254
1255 if (item >= (mList->GetItemCount() - 2) && item >= 0) {
1256 item--;
1257 }
1258 mSelectedCommand = item;
1259 PopulateList();
1260}
void DeleteFromMacro(int index)

References MacroCommands::DeleteFromMacro(), mChanged, ApplyMacroDialog::mList, ApplyMacroDialog::mMacroCommands, mSave, mSelectedCommand, and PopulateList().

Here is the call graph for this function:

◆ OnDown()

void MacrosWindow::OnDown ( wxCommandEvent &  event)
private

Definition at line 1285 of file BatchProcessDialog.cpp.

1286{
1287 long item = mList->GetNextItem(-1,
1288 wxLIST_NEXT_ALL,
1289 wxLIST_STATE_SELECTED);
1290 if (item == -1 || item + 2 >= mList->GetItemCount()) {
1291 return;
1292 }
1293
1296 item + 2);
1298
1299 mChanged = true;
1300 mSave->Enable( mChanged );
1301
1302 mSelectedCommand = item + 1;
1303 PopulateList();
1304}
wxString GetParams(int index)
CommandID GetCommand(int index)

References MacroCommands::AddToMacro(), MacroCommands::DeleteFromMacro(), MacroCommands::GetCommand(), MacroCommands::GetParams(), mChanged, ApplyMacroDialog::mList, ApplyMacroDialog::mMacroCommands, mSave, mSelectedCommand, and PopulateList().

Here is the call graph for this function:

◆ OnEditCommandParams()

void MacrosWindow::OnEditCommandParams ( wxCommandEvent &  event)
private

Definition at line 1201 of file BatchProcessDialog.cpp.

1202{
1203 int item = mList->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
1204
1205 // LAST command in list is END.
1206 // If nothing selected, add at END.
1207 // If END selected, add at END.
1208 // When adding at end we use InsertCommandAt, so that a new command
1209 // can be chosen.
1210 int lastItem = mList->GetItemCount()-1;
1211 if( (item<0) || (item+1) == mList->GetItemCount() )
1212 {
1213 InsertCommandAt( lastItem );
1214 return;
1215 }
1216
1217 // Just edit the parameters, and not the command.
1218 auto command = mMacroCommands.GetCommand(item);
1219 wxString params = mMacroCommands.GetParams(item);
1220 wxString oldParams = params;
1221
1222 params = MacroCommands::PromptForParamsFor(command, params, *this).Trim();
1223 Raise();
1224
1225 if (oldParams == params)
1226 return; // They did not actually make any changes..
1227
1229 mMacroCommands.AddToMacro(command,
1230 params,
1231 item);
1232
1233 mChanged = true;
1234 mSave->Enable( mChanged );
1235
1236 mSelectedCommand = item;
1237 PopulateList();
1238}
EffectDistortionSettings params
Definition: Distortion.cpp:77
static wxString PromptForParamsFor(const CommandID &command, const wxString &params, wxWindow &parent)
void InsertCommandAt(int item)

References MacroCommands::AddToMacro(), MacroCommands::DeleteFromMacro(), MacroCommands::GetCommand(), MacroCommands::GetParams(), InsertCommandAt(), mChanged, ApplyMacroDialog::mList, ApplyMacroDialog::mMacroCommands, mSave, mSelectedCommand, params, PopulateList(), and MacroCommands::PromptForParamsFor().

Referenced by OnCommandActivated().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnExpand()

void MacrosWindow::OnExpand ( wxCommandEvent &  event)
private

Definition at line 818 of file BatchProcessDialog.cpp.

819{ UpdateDisplay( true );}
void UpdateDisplay(bool bExpanded)

References UpdateDisplay().

Here is the call graph for this function:

◆ OnExport()

void MacrosWindow::OnExport ( wxCommandEvent &  event)
private

Definition at line 1135 of file BatchProcessDialog.cpp.

1136{
1137 long item = mMacros->GetNextItem(-1,
1138 wxLIST_NEXT_ALL,
1139 wxLIST_STATE_SELECTED);
1140 if (item == -1) {
1141 return;
1142 }
1143
1144 mMacroCommands.WriteMacro(mMacros->GetItemText(item), this);
1145}
wxListCtrl * mMacros

References ApplyMacroDialog::mMacroCommands, ApplyMacroDialog::mMacros, and MacroCommands::WriteMacro().

Here is the call graph for this function:

◆ OnImport()

void MacrosWindow::OnImport ( wxCommandEvent &  event)
private

Definition at line 1108 of file BatchProcessDialog.cpp.

1109{
1110 if (!ChangeOK()) {
1111 return;
1112 }
1113
1114 long item = mMacros->GetNextItem(-1,
1115 wxLIST_NEXT_ALL,
1116 wxLIST_STATE_SELECTED);
1117 if (item == -1) {
1118 return;
1119 }
1120
1121 wxString name = mMacros->GetItemText(item);
1122
1123 name = mMacroCommands.ReadMacro({}, this);
1124 if (name == wxEmptyString) {
1125 return;
1126 }
1127
1129
1131 UpdateMenus();
1132}
wxString ReadMacro(const wxString &macro, wxWindow *parent=nullptr)

References ChangeOK(), ApplyMacroDialog::mActiveMacro, ApplyMacroDialog::mMacroCommands, ApplyMacroDialog::mMacros, name, ApplyMacroDialog::PopulateMacros(), MacroCommands::ReadMacro(), and UpdateMenus().

Here is the call graph for this function:

◆ OnInsert()

void MacrosWindow::OnInsert ( wxCommandEvent &  event)
private

Definition at line 1162 of file BatchProcessDialog.cpp.

1163{
1164 long item = mList->GetNextItem(-1,
1165 wxLIST_NEXT_ALL,
1166 wxLIST_STATE_SELECTED);
1167 if (item == -1) {
1168 item = mList->GetItemCount()-1;
1169 }
1170 InsertCommandAt( item );
1171}

References InsertCommandAt(), and ApplyMacroDialog::mList.

Here is the call graph for this function:

◆ OnKeyDown()

void MacrosWindow::OnKeyDown ( wxKeyEvent &  event)
private

Definition at line 1363 of file BatchProcessDialog.cpp.

1364{
1365 if (event.GetKeyCode() == WXK_DELETE) {
1366 wxLogDebug(wxT("wxKeyEvent"));
1367 }
1368
1369 event.Skip();
1370}

References wxT().

Here is the call graph for this function:

◆ OnListSelected()

void MacrosWindow::OnListSelected ( wxListEvent &  event)
private

An item in the macros list has been selected.

Definition at line 891 of file BatchProcessDialog.cpp.

892{
893 FitColumns();
894}

References FitColumns().

Here is the call graph for this function:

◆ OnMacrosBeginEdit()

void MacrosWindow::OnMacrosBeginEdit ( wxListEvent &  event)
private

Definition at line 950 of file BatchProcessDialog.cpp.

951{
952 int itemNo = event.GetIndex();
953
954 wxString macro = mMacros->GetItemText(itemNo);
955
956 if (mMacroCommands.IsFixed(macro)) {
957 wxBell();
958 event.Veto();
959 }
960 if( mMacroBeingRenamed.IsEmpty())
961 mMacroBeingRenamed = macro;
962}
bool IsFixed(const wxString &name)

References MacroCommands::IsFixed(), ApplyMacroDialog::mMacroBeingRenamed, ApplyMacroDialog::mMacroCommands, and ApplyMacroDialog::mMacros.

Here is the call graph for this function:

◆ OnMacroSelected()

void MacrosWindow::OnMacroSelected ( wxListEvent &  event)
private

An item in the macros list has been selected.

Definition at line 857 of file BatchProcessDialog.cpp.

858{
859 if (!ChangeOK()) {
860 event.Veto();
861 return;
862 }
863
864 int item = event.GetIndex();
865
866 mActiveMacro = mMacros->GetItemText(item);
868}

References ChangeOK(), ApplyMacroDialog::mActiveMacro, ApplyMacroDialog::mMacros, and ShowActiveMacro().

Here is the call graph for this function:

◆ OnMacrosEndEdit()

void MacrosWindow::OnMacrosEndEdit ( wxListEvent &  event)
private

Definition at line 965 of file BatchProcessDialog.cpp.

966{
967 if (event.IsEditCancelled()) {
969 return;
970 }
971
972 if( mMacroBeingRenamed.IsEmpty())
973 return;
974
975 wxString newname = event.GetLabel();
976
979 mActiveMacro = newname;
982 UpdateMenus();
983 event.Veto();
984}
bool RenameMacro(const wxString &oldmacro, const wxString &newmacro)

References ApplyMacroDialog::mActiveMacro, ApplyMacroDialog::mMacroBeingRenamed, ApplyMacroDialog::mMacroCommands, ApplyMacroDialog::PopulateMacros(), MacroCommands::RenameMacro(), and UpdateMenus().

Here is the call graph for this function:

◆ OnOK()

void MacrosWindow::OnOK ( wxCommandEvent &  event)
private

Send changed values back to Prefs, and update Audacity.

Definition at line 1338 of file BatchProcessDialog.cpp.

1339{
1340 if( !SaveChanges() )
1341 return;
1342 Hide();
1343 //EndModal(true);
1344}

References SaveChanges().

Here is the call graph for this function:

◆ OnRemove()

void MacrosWindow::OnRemove ( wxCommandEvent &  event)
private

Definition at line 1042 of file BatchProcessDialog.cpp.

1043{
1044 long item = mMacros->GetNextItem(-1,
1045 wxLIST_NEXT_ALL,
1046 wxLIST_STATE_SELECTED);
1047 if (item == -1) {
1048 return;
1049 }
1050
1051 wxString name = mMacros->GetItemText(item);
1053 this,
1054 /*i18n-hint: %s will be replaced by the name of a file.*/
1055 XO("Are you sure you want to delete %s?").Format( name ),
1056 Verbatim( GetTitle() ),
1057 wxYES_NO | wxICON_QUESTION );
1058 if (m.ShowModal() == wxID_NO) {
1059 Raise();
1060 return;
1061 }
1062 Raise();
1063
1065
1066 item++;
1067 if (item >= (mMacros->GetItemCount() - 1) && item >= 0) {
1068 item--;
1069 }
1070
1071 // Bug 2284. The macro we have just removed might have been
1072 // changed. Since we've just deleted the macro, we should
1073 // forget about that change.
1074 mChanged = false;
1075 mSave->Enable( mChanged );
1076 mActiveMacro = mMacros->GetItemText(item);
1077
1079 UpdateMenus();
1080}
TranslatableString Verbatim(wxString str)
Require calls to the one-argument constructor to go through this distinct global function name.
Wrap wxMessageDialog so that caption IS translatable.
bool DeleteMacro(const wxString &name)

References MacroCommands::DeleteMacro(), ApplyMacroDialog::mActiveMacro, mChanged, ApplyMacroDialog::mMacroCommands, ApplyMacroDialog::mMacros, mSave, name, ApplyMacroDialog::PopulateMacros(), UpdateMenus(), Verbatim(), and XO().

Here is the call graph for this function:

◆ OnRename()

void MacrosWindow::OnRename ( wxCommandEvent &  event)
private

Definition at line 1083 of file BatchProcessDialog.cpp.

1084{
1085 long item = mMacros->GetNextItem(-1,
1086 wxLIST_NEXT_ALL,
1087 wxLIST_STATE_SELECTED);
1088 if (item == -1) {
1089 return;
1090 }
1091
1092 mMacros->EditLabel(item);
1093 UpdateMenus();
1094}

References ApplyMacroDialog::mMacros, and UpdateMenus().

Here is the call graph for this function:

◆ OnRestore()

void MacrosWindow::OnRestore ( wxCommandEvent &  event)
private

Reset a built in macro.

Definition at line 1097 of file BatchProcessDialog.cpp.

1098{
1100
1101 mChanged = true;
1102 mSave->Enable( mChanged );
1103
1104 PopulateList();
1105}
void RestoreMacro(const wxString &name)

References ApplyMacroDialog::mActiveMacro, mChanged, ApplyMacroDialog::mMacroCommands, mSave, PopulateList(), and MacroCommands::RestoreMacro().

Here is the call graph for this function:

◆ OnSave()

void MacrosWindow::OnSave ( wxCommandEvent &  event)
private

Definition at line 1147 of file BatchProcessDialog.cpp.

1148{
1149 SaveChanges();
1150}

References SaveChanges().

Here is the call graph for this function:

◆ OnShrink()

void MacrosWindow::OnShrink ( wxCommandEvent &  event)
private

Definition at line 821 of file BatchProcessDialog.cpp.

822{
823 if( ChangeOK() )
824 UpdateDisplay( false );
825}

References ChangeOK(), and UpdateDisplay().

Here is the call graph for this function:

◆ OnSize()

void MacrosWindow::OnSize ( wxSizeEvent &  event)
private

The window has been resized.

Definition at line 897 of file BatchProcessDialog.cpp.

898{
899 // Refresh the layout and re-fit the columns.
900 Layout();
901 if( !mbExpanded )
902 return;
903 FitColumns();
904}

References FitColumns(), and ApplyMacroDialog::mbExpanded.

Here is the call graph for this function:

◆ OnUp()

void MacrosWindow::OnUp ( wxCommandEvent &  event)
private

Definition at line 1263 of file BatchProcessDialog.cpp.

1264{
1265 long item = mList->GetNextItem(-1,
1266 wxLIST_NEXT_ALL,
1267 wxLIST_STATE_SELECTED);
1268 if (item == -1 || item == 0 || item + 1 == mList->GetItemCount()) {
1269 return;
1270 }
1271
1274 item - 1);
1276
1277 mChanged = true;
1278 mSave->Enable( mChanged );
1279
1280 mSelectedCommand = item - 1;
1281 PopulateList();
1282}

References MacroCommands::AddToMacro(), MacroCommands::DeleteFromMacro(), MacroCommands::GetCommand(), MacroCommands::GetParams(), mChanged, ApplyMacroDialog::mList, ApplyMacroDialog::mMacroCommands, mSave, mSelectedCommand, and PopulateList().

Here is the call graph for this function:

◆ Populate()

void MacrosWindow::Populate ( )
private

Creates the dialog and its contents.

Definition at line 589 of file BatchProcessDialog.cpp.

590{
591 //------------------------- Main section --------------------
592 ShuttleGui S(this, eIsCreating);
594 // ----------------------- End of main section --------------
595
596 // Get and validate the currently active macro
597 mActiveMacro = gPrefs->Read(wxT("/Batch/ActiveMacro"), wxT(""));
598 // Go populate the macros list.
600
601 // We have a bare list. We need to add columns and content.
602 PopulateList();
603
604 // Layout and set minimum size of window
605 Layout();
606 Fit();
607 SetSizeHints(GetSize());
608
609 // Size and place window
610 SetSize(std::min(wxSystemSettings::GetMetric(wxSYS_SCREEN_X) * 3 / 4, 800),
611 std::min(wxSystemSettings::GetMetric(wxSYS_SCREEN_Y) * 4 / 5, 400));
612 Center();
613
614 // Set the column size for the macros list.
615 wxSize sz = mMacros->GetClientSize();
616 mMacros->SetColumnWidth(0, sz.x);
617
618 // Size columns properly
619 FitColumns();
620}
int min(int a, int b)
audacity::BasicSettings * gPrefs
Definition: Prefs.cpp:68
@ eIsCreating
Definition: ShuttleGui.h:37
#define S(N)
Definition: ToChars.cpp:64
void PopulateOrExchange(ShuttleGui &S)
Defines the dialog and does data exchange with it.
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Definition: ShuttleGui.h:640
virtual bool Read(const wxString &key, bool *value) const =0

References eIsCreating, FitColumns(), gPrefs, ApplyMacroDialog::mActiveMacro, min(), ApplyMacroDialog::mMacros, PopulateList(), ApplyMacroDialog::PopulateMacros(), PopulateOrExchange(), audacity::BasicSettings::Read(), S, and wxT().

Referenced by MacrosWindow(), and UpdateDisplay().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PopulateList()

void MacrosWindow::PopulateList ( )
private

This clears and updates the contents of mList, the commands for the current macro.

Definition at line 721 of file BatchProcessDialog.cpp.

722{
723 int topItem = mList->GetTopItem();
724 mList->DeleteAllItems();
725
726 for (int i = 0; i < mMacroCommands.GetCount(); i++) {
729 }
730 /*i18n-hint: This is the last item in a list.*/
731 AddItem(_("- END -"), wxT(""));
732
733 // Select the name in the list...this will fire an event.
734 if (mSelectedCommand >= (int)mList->GetItemCount()) {
736 }
737 mList->SetItemState(mSelectedCommand,
738 wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED,
739 wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED);
740 if( 0 <= topItem && topItem < (int)mList->GetItemCount())
741 {
742 // Workaround for scrolling being windows only.
743 // Try to scroll back to where we once were...
744 mList->EnsureVisible( (int)mList->GetItemCount() -1 );
745 mList->EnsureVisible( topItem );
746 // And then make sure whatever is selected is still visible...
747 if (mSelectedCommand >= 0) {
748 mList->EnsureVisible( mSelectedCommand );
749 }
750 }
751}
#define _(s)
Definition: Internat.h:73
void AddItem(const CommandID &command, wxString const &params)
Add one item into mList.

References _, AddItem(), MacroCommands::GetCommand(), MacroCommands::GetCount(), MacroCommands::GetParams(), ApplyMacroDialog::mList, ApplyMacroDialog::mMacroCommands, mSelectedCommand, and wxT().

Referenced by InsertCommandAt(), OnDelete(), OnDown(), OnEditCommandParams(), OnRestore(), OnUp(), Populate(), and ShowActiveMacro().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PopulateOrExchange()

void MacrosWindow::PopulateOrExchange ( ShuttleGui S)
private

Defines the dialog and does data exchange with it.

Definition at line 623 of file BatchProcessDialog.cpp.

624{
625 S.StartHorizontalLay(wxEXPAND, 1);
626 {
627 S.StartStatic(XO("Select Macro"),0);
628 {
629 S.StartHorizontalLay(wxEXPAND,1);
630 {
631 mMacros = S.Id(MacrosListID).Prop(1)
632 .Style(wxSUNKEN_BORDER | wxLC_REPORT | wxLC_HRULES
633 | wxLC_SINGLE_SEL | wxLC_EDIT_LABELS)
634 // i18n-hint: This is the heading for a column in the edit macros dialog
635 .AddListControlReportMode( { XO("Macro") } );
636 S.StartVerticalLay(wxALIGN_TOP, 0);
637 {
638 S.Id(AddButtonID).AddButton(XXO("&New"), wxALIGN_LEFT);
639 mRemove = S.Id(RemoveButtonID).AddButton(XXO("Remo&ve"), wxALIGN_LEFT);
640 mRename = S.Id(RenameButtonID).AddButton(XXO("&Rename..."), wxALIGN_LEFT);
641 mRestore = S.Id(RestoreButtonID).AddButton(XXO("Re&store"), wxALIGN_LEFT);
642 mImport = S.Id(ImportButtonID).AddButton(XO("I&mport..."), wxALIGN_LEFT);
643 mExport = S.Id(ExportButtonID).AddButton(XO("E&xport..."), wxALIGN_LEFT);
644 }
645 S.EndVerticalLay();
646 }
647 S.EndHorizontalLay();
648 }
649 S.EndStatic();
650
651 S.StartStatic(XO("Edit Steps"), true);
652 {
653 S.StartHorizontalLay(wxEXPAND,1);
654 {
656 .Style(wxSUNKEN_BORDER | wxLC_REPORT | wxLC_HRULES | wxLC_VRULES |
657 wxLC_SINGLE_SEL)
658 .AddListControlReportMode({
659 /* i18n-hint: This is the number of the command in the list */
660 { XO("Num"), wxLIST_FORMAT_RIGHT },
661 { XO("Command "), wxLIST_FORMAT_RIGHT },
662 { XO("Parameters"), wxLIST_FORMAT_LEFT }
663 });
664
665 S.StartVerticalLay(wxALIGN_TOP, 0);
666 {
667 S.Id(InsertButtonID).AddButton(XXO("&Insert"), wxALIGN_LEFT);
668 S.Id(EditButtonID).AddButton(XXO("&Edit..."), wxALIGN_LEFT);
669 S.Id(DeleteButtonID).AddButton(XXO("De&lete"), wxALIGN_LEFT);
670 S.Id(UpButtonID).AddButton(XXO("Move &Up"), wxALIGN_LEFT);
671 S.Id(DownButtonID).AddButton(XXO("Move &Down"), wxALIGN_LEFT);
672 mSave = S.Id(SaveButtonID).AddButton(XO("&Save"), wxALIGN_LEFT);
673 mSave->Enable( mChanged );
674 }
675 S.EndVerticalLay();
676 }
677 S.EndHorizontalLay();
678 }
679 S.EndStatic();
680 }
681 S.EndHorizontalLay();
682
683 S.StartHorizontalLay(wxEXPAND, 0);
684 {
685 /* i18n-hint: The Shrink button makes the dialog smaller, with less in it */
686 mResize = S.Id(ShrinkID).AddButton(XXO("Shrin&k"));
687 // Using variable text just to get the positioning options.
688 S.Prop(0).AddVariableText(
689 XO("Apply Macro to:"), false, wxALL | wxALIGN_CENTRE_VERTICAL );
690 wxButton* btn = S.Id(ApplyToProjectID)
691 .Name(XO("Apply macro to project"))
692 .AddButton(XXO("&Project"));
693#if wxUSE_ACCESSIBILITY
694 // so that name can be set on a standard control
695 btn->SetAccessible(safenew WindowAccessible(btn));
696#endif
697
698 btn = S.Id(ApplyToFilesID)
699 .Name(XO("Apply macro to files..."))
700 .AddButton(XXO("&Files..."));
701#if wxUSE_ACCESSIBILITY
702 // so that name can be set on a standard control
703 btn->SetAccessible(safenew WindowAccessible(btn));
704#endif
705 S.AddSpace( 10,10,1 );
706 // Bug 2524 OK button does much the same as cancel, so remove it.
707 // OnCancel prompts you if there has been a change.
708 // OnOK saves without prompting.
709 // That difference is too slight to merit a button, and with the OK
710 // button, people might expect the dialog to apply the macro too.
711 S.AddStandardButtons( /*eOkButton |*/ eCloseButton | eHelpButton);
712 }
713
714 S.EndHorizontalLay();
715
716
717 return;
718}
#define ApplyToFilesID
#define MacrosListID
#define CommandsListID
#define ApplyToProjectID
#define ShrinkID
@ SaveButtonID
@ UpButtonID
@ ImportButtonID
@ DownButtonID
@ RestoreButtonID
@ RenameButtonID
@ AddButtonID
@ EditButtonID
@ RemoveButtonID
@ DeleteButtonID
@ InsertButtonID
@ ExportButtonID
XXO("&Cut/Copy/Paste Toolbar")
#define safenew
Definition: MemoryX.h:9
@ eCloseButton
Definition: ShuttleGui.h:619
@ eHelpButton
Definition: ShuttleGui.h:613
wxButton * mResize
Provides list of available commands.
wxButton * mRemove
wxButton * mRestore
wxButton * mImport
wxButton * mRename
wxButton * mExport
An alternative to using wxWindowAccessible, which in wxWidgets 3.1.1 contained GetParent() which was ...

References AddButtonID, ApplyToFilesID, ApplyToProjectID, CommandsListID, DeleteButtonID, DownButtonID, eCloseButton, EditButtonID, eHelpButton, ExportButtonID, ImportButtonID, InsertButtonID, MacrosListID, mChanged, mExport, mImport, ApplyMacroDialog::mList, ApplyMacroDialog::mMacros, mRemove, mRename, ApplyMacroDialog::mResize, mRestore, mSave, RemoveButtonID, RenameButtonID, RestoreButtonID, S, safenew, SaveButtonID, ShrinkID, UpButtonID, XO(), and XXO().

Referenced by Populate().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SaveChanges()

bool MacrosWindow::SaveChanges ( )
private

Definition at line 1320 of file BatchProcessDialog.cpp.

1320 {
1321 gPrefs->Write(wxT("/Batch/ActiveMacro"), mActiveMacro);
1322 gPrefs->Flush();
1323
1324 if (mChanged) {
1326 return false;
1327 }
1328 }
1329
1330 mChanged = false;
1331 if( mSave )
1332 mSave->Enable( mChanged );
1333
1334 return true;
1335}
virtual bool Flush() noexcept=0
virtual bool Write(const wxString &key, bool value)=0

References audacity::BasicSettings::Flush(), gPrefs, ApplyMacroDialog::mActiveMacro, mChanged, ApplyMacroDialog::mMacroCommands, mSave, audacity::BasicSettings::Write(), MacroCommands::WriteMacro(), and wxT().

Referenced by OnApplyToFiles(), OnApplyToProject(), OnOK(), OnSave(), and UpdateDisplay().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ShowActiveMacro()

void MacrosWindow::ShowActiveMacro ( )
private

Definition at line 870 of file BatchProcessDialog.cpp.

871{
873 if( !mbExpanded )
874 return;
875
877 mRemove->Disable();
878 mRename->Disable();
879 mRestore->Enable();
880 }
881 else {
882 mRemove->Enable();
883 mRename->Enable();
884 mRestore->Disable();
885 }
886
887 PopulateList();
888}

References MacroCommands::IsFixed(), ApplyMacroDialog::mActiveMacro, ApplyMacroDialog::mbExpanded, ApplyMacroDialog::mMacroCommands, mRemove, mRename, mRestore, PopulateList(), and MacroCommands::ReadMacro().

Referenced by OnCancel(), and OnMacroSelected().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateDisplay()

void MacrosWindow::UpdateDisplay ( bool  bExpanded)

Definition at line 778 of file BatchProcessDialog.cpp.

779{
780 // If we failed to save changes, we abandon the attempt to
781 // change the expand/shrink state of the GUI.
782 if( !SaveChanges() )
783 return;
784
785 mbExpanded = bExpanded;
786
787 mChanged = false;
788 // if we try to access the about to be destroyed mSave button
789 // inappropriately, we need to crash rather than (sometimes) silently
790 // succeed.
791 mSave = nullptr;
792
793 DestroyChildren();
794 SetSizer( nullptr );
795
797 SetMinSize( wxSize( 200,200 ));
798
799 // Get and set position for optical stability.
800 // Expanded and shrunk dialogs 'stay where they were'.
801 // That's OK , and what we want, even if we exapnd off-screen.
802 // We won't shrink to being off-screen, since the shrink button
803 // was clicked, so must have been on screen.
804 wxPoint p = GetPosition( );
805 if( mbExpanded )
806 Populate();
807 else
809 SetPosition( p );
810 mResize->SetFocus();
811
812 auto Title = WindowTitle();
813 SetLabel( Title ); // Provide visual label
814 SetName( Title ); // Provide audible label
815 SetTitle( Title );
816}

References ApplyMacroDialog::mbExpanded, mChanged, ApplyMacroDialog::mResize, mSave, mSelectedCommand, ApplyMacroDialog::Populate(), Populate(), SaveChanges(), wxDialogWrapper::SetLabel(), wxDialogWrapper::SetName(), wxDialogWrapper::SetTitle(), and WindowTitle().

Referenced by anonymous_namespace{BatchProcessDialog.cpp}::OnApplyMacrosPalette(), OnExpand(), anonymous_namespace{BatchProcessDialog.cpp}::OnManageMacros(), OnShrink(), and UpdatePrefs().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateMenus()

void MacrosWindow::UpdateMenus ( )
private

Definition at line 771 of file BatchProcessDialog.cpp.

772{
773 // OK even on mac, as dialog is modal.
774 auto p = &mProject;
776}
void RebuildMenuBar()
static MenuCreator & Get(AudacityProject &project)
Definition: MenuCreator.cpp:91

References MenuCreator::Get(), mProject, and MenuCreator::RebuildMenuBar().

Referenced by OnAdd(), OnImport(), OnMacrosEndEdit(), OnRemove(), and OnRename().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdatePrefs()

void MacrosWindow::UpdatePrefs ( )
overrideprivatevirtual

Implements PrefsListener.

Definition at line 1378 of file BatchProcessDialog.cpp.

1379{
1381}

References ApplyMacroDialog::mbExpanded, and UpdateDisplay().

Here is the call graph for this function:

◆ WindowTitle()

TranslatableString MacrosWindow::WindowTitle ( ) const
private

Definition at line 1372 of file BatchProcessDialog.cpp.

1373{
1375}
#define MacrosPaletteTitle
#define ManageMacrosTitle

References MacrosPaletteTitle, ManageMacrosTitle, and ApplyMacroDialog::mbExpanded.

Referenced by MacrosWindow(), OnAdd(), and UpdateDisplay().

Here is the caller graph for this function:

Member Data Documentation

◆ mChanged

bool MacrosWindow::mChanged
private

◆ mExport

wxButton* MacrosWindow::mExport
private

Definition at line 141 of file BatchProcessDialog.h.

Referenced by PopulateOrExchange().

◆ mImport

wxButton* MacrosWindow::mImport
private

Definition at line 140 of file BatchProcessDialog.h.

Referenced by PopulateOrExchange().

◆ mProject

AudacityProject& MacrosWindow::mProject
private

Definition at line 135 of file BatchProcessDialog.h.

Referenced by InsertCommandAt(), and UpdateMenus().

◆ mRemove

wxButton* MacrosWindow::mRemove
private

Definition at line 137 of file BatchProcessDialog.h.

Referenced by PopulateOrExchange(), and ShowActiveMacro().

◆ mRename

wxButton* MacrosWindow::mRename
private

Definition at line 138 of file BatchProcessDialog.h.

Referenced by PopulateOrExchange(), and ShowActiveMacro().

◆ mRestore

wxButton* MacrosWindow::mRestore
private

Definition at line 139 of file BatchProcessDialog.h.

Referenced by PopulateOrExchange(), and ShowActiveMacro().

◆ mSave

wxButton* MacrosWindow::mSave
private

◆ mSelectedCommand

int MacrosWindow::mSelectedCommand
private

The documentation for this class was generated from the following files: