1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-25 08:38:39 +02:00

SetClip, SetLabel, SetProject added

- SetTrack also updated with more options.
This commit is contained in:
James Crook 2018-02-09 19:12:25 +00:00 committed by Paul Licameli
parent 1a7700af8a
commit 7fa73dbde7
33 changed files with 708 additions and 167 deletions

View File

@ -321,7 +321,8 @@ private:
protected: protected:
std::shared_ptr<TrackControls> GetControls() override; std::shared_ptr<TrackControls> GetControls() override;
std::shared_ptr<TrackVRulerControls> GetVRulerControls() override; std::shared_ptr<TrackVRulerControls> GetVRulerControls() override;
friend class GetInfoCommand; friend class GetInfoCommand; // to get labels.
friend class SetLabelCommand; // to set labels.
}; };
#endif #endif

View File

@ -1598,6 +1598,10 @@ void AudacityProject::CreateMenusAndCommands()
AudioIONotBusyFlag, AudioIONotBusyFlag); AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("CompareAudio"), _("Compare Audio..."), FN(OnAudacityCommand), c->AddItem(wxT("CompareAudio"), _("Compare Audio..."), FN(OnAudacityCommand),
AudioIONotBusyFlag, AudioIONotBusyFlag); AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("GetPreference"), _("Get Preference..."), FN(OnAudacityCommand),
AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("GetInfo"), _("Get Info..."), FN(OnAudacityCommand),
AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("SelectTime"), _("Select Time..."), FN(OnAudacityCommand), c->AddItem(wxT("SelectTime"), _("Select Time..."), FN(OnAudacityCommand),
AudioIONotBusyFlag, AudioIONotBusyFlag); AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("SelectTracks"), _("Select Tracks..."), FN(OnAudacityCommand), c->AddItem(wxT("SelectTracks"), _("Select Tracks..."), FN(OnAudacityCommand),
@ -1606,14 +1610,14 @@ void AudacityProject::CreateMenusAndCommands()
AudioIONotBusyFlag, AudioIONotBusyFlag); AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("SetPreference"), _("Set Preference..."), FN(OnAudacityCommand), c->AddItem(wxT("SetPreference"), _("Set Preference..."), FN(OnAudacityCommand),
AudioIONotBusyFlag, AudioIONotBusyFlag); AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("SetTrackInfo"), _("Set Track Info..."), FN(OnAudacityCommand), c->AddItem(wxT("SetClip"), _("Set Clip..."), FN(OnAudacityCommand),
AudioIONotBusyFlag, AudioIONotBusyFlag); AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("GetPreference"), _("Get Preference..."), FN(OnAudacityCommand), c->AddItem(wxT("SetLabel"), _("Set Label..."), FN(OnAudacityCommand),
AudioIONotBusyFlag, AudioIONotBusyFlag); AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("GetInfo"), _("Get Info..."), FN(OnAudacityCommand), c->AddItem(wxT("SetProject"), _("Set Project..."), FN(OnAudacityCommand),
AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("SetTrack"), _("Set Track..."), FN(OnAudacityCommand),
AudioIONotBusyFlag, AudioIONotBusyFlag); AudioIONotBusyFlag, AudioIONotBusyFlag);
// c->AddItem(wxT("GetTrackInfo"), _("Get Track Info..."), FN(OnAudacityCommand),
// AudioIONotBusyFlag, AudioIONotBusyFlag);
c->EndSubMenu(); c->EndSubMenu();
@ -6365,7 +6369,7 @@ int AudacityProject::FindClips(double t0, double t1, bool next, std::vector<Foun
std::vector<FoundClip> results; std::vector<FoundClip> results;
int nTracksSearched = 0; int nTracksSearched = 0;
int trackNumber = 1; int trackNum = 1;
while (track) { while (track) {
if (track->GetKind() == Track::Wave && (!anyWaveTracksSelected || track->GetSelected())) { if (track->GetKind() == Track::Wave && (!anyWaveTracksSelected || track->GetSelected())) {
auto waveTrack = static_cast<const WaveTrack*>(track); auto waveTrack = static_cast<const WaveTrack*>(track);
@ -6374,7 +6378,7 @@ int AudacityProject::FindClips(double t0, double t1, bool next, std::vector<Foun
auto result = next ? FindNextClip(waveTrack, t0, t1) : auto result = next ? FindNextClip(waveTrack, t0, t1) :
FindPrevClip(waveTrack, t0, t1); FindPrevClip(waveTrack, t0, t1);
if (result.found) { if (result.found) {
result.trackNumber = trackNumber; result.trackNum = trackNum;
result.channel = stereoAndDiff; result.channel = stereoAndDiff;
results.push_back(result); results.push_back(result);
} }
@ -6383,7 +6387,7 @@ int AudacityProject::FindClips(double t0, double t1, bool next, std::vector<Foun
auto result = next ? FindNextClip(waveTrack2, t0, t1) : auto result = next ? FindNextClip(waveTrack2, t0, t1) :
FindPrevClip(waveTrack2, t0, t1); FindPrevClip(waveTrack2, t0, t1);
if (result.found) { if (result.found) {
result.trackNumber = trackNumber; result.trackNum = trackNum;
result.channel = stereoAndDiff; result.channel = stereoAndDiff;
results.push_back(result); results.push_back(result);
} }
@ -6392,7 +6396,7 @@ int AudacityProject::FindClips(double t0, double t1, bool next, std::vector<Foun
nTracksSearched++; nTracksSearched++;
} }
trackNumber++; trackNum++;
track = iter.Next(true); track = iter.Next(true);
} }
@ -7451,7 +7455,7 @@ int AudacityProject::FindClipBoundaries(double time, bool next, std::vector<Foun
std::vector<FoundClipBoundary> results; std::vector<FoundClipBoundary> results;
int nTracksSearched = 0; int nTracksSearched = 0;
int trackNumber = 1; int trackNum = 1;
while (track) { while (track) {
if (track->GetKind() == Track::Wave && (!anyWaveTracksSelected || track->GetSelected())) { if (track->GetKind() == Track::Wave && (!anyWaveTracksSelected || track->GetSelected())) {
auto waveTrack = static_cast<const WaveTrack*>(track); auto waveTrack = static_cast<const WaveTrack*>(track);
@ -7460,7 +7464,7 @@ int AudacityProject::FindClipBoundaries(double time, bool next, std::vector<Foun
auto result = next ? FindNextClipBoundary(waveTrack, time) : auto result = next ? FindNextClipBoundary(waveTrack, time) :
FindPrevClipBoundary(waveTrack, time); FindPrevClipBoundary(waveTrack, time);
if (result.nFound > 0) { if (result.nFound > 0) {
result.trackNumber = trackNumber; result.trackNum = trackNum;
result.channel = stereoAndDiff; result.channel = stereoAndDiff;
results.push_back(result); results.push_back(result);
} }
@ -7469,7 +7473,7 @@ int AudacityProject::FindClipBoundaries(double time, bool next, std::vector<Foun
auto result = next ? FindNextClipBoundary(waveTrack2, time) : auto result = next ? FindNextClipBoundary(waveTrack2, time) :
FindPrevClipBoundary(waveTrack2, time); FindPrevClipBoundary(waveTrack2, time);
if (result.nFound > 0) { if (result.nFound > 0) {
result.trackNumber = trackNumber; result.trackNum = trackNum;
result.channel = stereoAndDiff; result.channel = stereoAndDiff;
results.push_back(result); results.push_back(result);
} }
@ -7478,7 +7482,7 @@ int AudacityProject::FindClipBoundaries(double time, bool next, std::vector<Foun
nTracksSearched++; nTracksSearched++;
} }
trackNumber++; trackNum++;
track = iter.Next(true); track = iter.Next(true);
} }
@ -7535,7 +7539,7 @@ wxString AudacityProject::FoundTrack::ComposeTrackName() const
auto name = waveTrack->GetName(); auto name = waveTrack->GetName();
auto shortName = name == waveTrack->GetDefaultName() auto shortName = name == waveTrack->GetDefaultName()
/* i18n-hint: compose a name identifying an unnamed track by number */ /* i18n-hint: compose a name identifying an unnamed track by number */
? wxString::Format( _("Track %d"), trackNumber ) ? wxString::Format( _("Track %d"), trackNum )
: name; : name;
auto longName = shortName; auto longName = shortName;
if (channel) { if (channel) {

View File

@ -312,7 +312,7 @@ void OnSelectCursorToNextClipBoundary(const CommandContext &context );
void OnSelectClipBoundary(bool next); void OnSelectClipBoundary(bool next);
struct FoundTrack { struct FoundTrack {
const WaveTrack* waveTrack{}; const WaveTrack* waveTrack{};
int trackNumber{}; int trackNum{};
bool channel{}; bool channel{};
wxString ComposeTrackName() const; wxString ComposeTrackName() const;

View File

@ -599,7 +599,7 @@ void MixerTrackCluster::UpdateMeter(const double t0, const double t1)
// rmsRight[i] *= gain; // rmsRight[i] *= gain;
// } // }
// if ( mMeter ) mMeter->UpdateDisplay( // if ( mMeter ) mMeter->UpdateDisplay(
// 2, // If mono, show left track values in both meters, as in MeterToolBar, rather than kNumChannels. // 2, // If mono, show left track values in both meters, as in MeterToolBar, rather than nChannels.
// kFramesPerBuffer, // kFramesPerBuffer,
// maxLeft, rmsLeft, // maxLeft, rmsLeft,
// maxRight, rmsRight, // maxRight, rmsRight,

View File

@ -222,7 +222,6 @@ public:
const wxChar *legacyT0Name = sDefaultT0Name, const wxChar *legacyT0Name = sDefaultT0Name,
const wxChar *legacyT1Name = sDefaultT1Name); const wxChar *legacyT1Name = sDefaultT1Name);
private:
bool ensureOrdering() bool ensureOrdering()
{ {
if (mT1 < mT0) { if (mT1 < mT0) {
@ -235,6 +234,8 @@ private:
return false; return false;
} }
private:
#ifdef EXPERIMENTAL_SPECTRAL_EDITING #ifdef EXPERIMENTAL_SPECTRAL_EDITING
bool ensureFrequencyOrdering() bool ensureFrequencyOrdering()
{ {

View File

@ -286,7 +286,11 @@ bool CommandImplementation::Apply(const CommandContext & WXUNUSED(context))
} }
// Hackery so that we don't have to update the makefiles on linux (yet) // Hackery so that we don't have to update the makefiles on linux (yet)
// When we do, these all can leave here.
#if defined( __LINUX__ ) #if defined( __LINUX__ )
#include "CommandTargets.cpp" #include "CommandTargets.cpp"
#include "SetClipCommand.cpp"
#include "SetLabelCommand.cpp"
#include "SetProjectCommand.cpp"
#endif #endif

View File

@ -38,10 +38,21 @@ This class now lists
#include "../ShuttleGui.h" #include "../ShuttleGui.h"
#include "CommandContext.h" #include "CommandContext.h"
const int nTypes =6; enum {
kCommands,
kCommandsPlus,
kMenus,
kTracks,
kClips,
kLabels,
kBoxes,
nTypes
};
static const wxString kTypes[nTypes] = static const wxString kTypes[nTypes] =
{ {
XO("Commands"), XO("Commands"),
XO("Commands+"),
XO("Menus"), XO("Menus"),
XO("Tracks"), XO("Tracks"),
XO("Clips"), XO("Clips"),
@ -50,16 +61,12 @@ static const wxString kTypes[nTypes] =
}; };
enum { enum {
kCommands, kJson,
kMenus, kLisp,
kTracks, kBrief,
kClips, nFormats
kLabels,
kBoxes
}; };
const int nFormats =3;
static const wxString kFormats[nFormats] = static const wxString kFormats[nFormats] =
{ {
XO("JSON"), XO("JSON"),
@ -67,11 +74,6 @@ static const wxString kFormats[nFormats] =
XO("Brief") XO("Brief")
}; };
enum {
kJson ,
kLisp,
kBrief
};
bool GetInfoCommand::DefineParams( ShuttleParams & S ){ bool GetInfoCommand::DefineParams( ShuttleParams & S ){
@ -125,12 +127,13 @@ bool GetInfoCommand::Apply(const CommandContext &context)
bool GetInfoCommand::ApplyInner(const CommandContext &context) bool GetInfoCommand::ApplyInner(const CommandContext &context)
{ {
switch( mInfoType ){ switch( mInfoType ){
case kCommands : return SendCommands( context ); case kCommands : return SendCommands( context, 0 );
case kMenus : return SendMenus( context ); case kCommandsPlus : return SendCommands( context, 1 );
case kTracks : return SendTracks( context ); case kMenus : return SendMenus( context );
case kClips : return SendClips( context ); case kTracks : return SendTracks( context );
case kLabels : return SendLabels( context ); case kClips : return SendClips( context );
case kBoxes : return SendBoxes( context ); case kLabels : return SendLabels( context );
case kBoxes : return SendBoxes( context );
default: default:
context.Status( "Command options not recognised" ); context.Status( "Command options not recognised" );
} }
@ -167,7 +170,7 @@ bool GetInfoCommand::SendMenus(const CommandContext &context)
/** /**
Send the list of commands. Send the list of commands.
*/ */
bool GetInfoCommand::SendCommands(const CommandContext &context ) bool GetInfoCommand::SendCommands(const CommandContext &context, int flags )
{ {
context.StartArray(); context.StartArray();
PluginManager & pm = PluginManager::Get(); PluginManager & pm = PluginManager::Get();
@ -178,7 +181,7 @@ bool GetInfoCommand::SendCommands(const CommandContext &context )
{ {
auto command = em.GetCommandIdentifier(plug->GetID()); auto command = em.GetCommandIdentifier(plug->GetID());
if (!command.IsEmpty()){ if (!command.IsEmpty()){
em.GetCommandDefinition( plug->GetID(), context ); em.GetCommandDefinition( plug->GetID(), context, flags );
} }
plug = pm.GetNextPlugin(PluginTypeEffect | PluginTypeAudacityCommand ); plug = pm.GetNextPlugin(PluginTypeEffect | PluginTypeAudacityCommand );
} }
@ -255,12 +258,13 @@ bool GetInfoCommand::SendClips(const CommandContext &context)
while (t) { while (t) {
if (t->GetKind() == Track::Wave) { if (t->GetKind() == Track::Wave) {
WaveTrack *waveTrack = static_cast<WaveTrack*>(t); WaveTrack *waveTrack = static_cast<WaveTrack*>(t);
for(const auto &clip : waveTrack->GetAllClips()) { WaveClipPointers ptrs( waveTrack->SortedClipArray());
for(WaveClip * pClip : ptrs ) {
context.StartStruct(); context.StartStruct();
context.AddItem( (double)i, "track" ); context.AddItem( (double)i, "track" );
context.AddItem( clip->GetStartTime(), "start" ); context.AddItem( pClip->GetStartTime(), "start" );
context.AddItem( clip->GetEndTime(), "end" ); context.AddItem( pClip->GetEndTime(), "end" );
context.AddItem( clip->GetColourIndex(), "color" ); context.AddItem( pClip->GetColourIndex(), "color" );
context.EndStruct(); context.EndStruct();
} }
} }

View File

@ -47,7 +47,7 @@ public:
int mFormat; int mFormat;
private: private:
bool SendCommands(const CommandContext & context); bool SendCommands(const CommandContext & context, int flags);
bool SendMenus(const CommandContext & context); bool SendMenus(const CommandContext & context);
bool SendTracks(const CommandContext & context); bool SendTracks(const CommandContext & context);
bool SendLabels(const CommandContext & context); bool SendLabels(const CommandContext & context);

View File

@ -43,7 +43,7 @@ bool HelpCommand::Apply(const CommandContext & context){
if( ID.IsEmpty() ) if( ID.IsEmpty() )
context.Status( "Command not found" ); context.Status( "Command not found" );
else else
em.GetCommandDefinition( ID, context); em.GetCommandDefinition( ID, context, 1);
return true; return true;
} }

View File

@ -32,6 +32,10 @@ modelled on BuiltinEffectsModule
#include "../commands/HelpCommand.h" #include "../commands/HelpCommand.h"
#include "../commands/ImportExportCommands.h" #include "../commands/ImportExportCommands.h"
#include "../commands/OpenSaveCommands.h" #include "../commands/OpenSaveCommands.h"
#include "../commands/SetLabelCommand.h"
#include "../commands/SetClipCommand.h"
#include "../commands/SetProjectCommand.h"
// //
// Define the list of COMMANDs that will be autoregistered and how to instantiate each // Define the list of COMMANDs that will be autoregistered and how to instantiate each
@ -40,7 +44,10 @@ modelled on BuiltinEffectsModule
COMMAND( DEMO, DemoCommand, () ) \ COMMAND( DEMO, DemoCommand, () ) \
COMMAND( SCREENSHOT, ScreenshotCommand, () ) \ COMMAND( SCREENSHOT, ScreenshotCommand, () ) \
COMMAND( COMPARE_AUDIO, CompareAudioCommand, () ) \ COMMAND( COMPARE_AUDIO, CompareAudioCommand, () ) \
COMMAND( SET_TRACK_INFO, SetTrackInfoCommand, () ) \ COMMAND( SET_TRACK, SetTrackCommand, () ) \
COMMAND( SET_CLIP, SetClipCommand, () ) \
COMMAND( SET_LABEL, SetLabelCommand, () ) \
COMMAND( SET_PROJECT, SetProjectCommand, () ) \
COMMAND( SELECT, SelectCommand, () ) \ COMMAND( SELECT, SelectCommand, () ) \
COMMAND( SELECT_TIME, SelectTimeCommand, () ) \ COMMAND( SELECT_TIME, SelectTimeCommand, () ) \
COMMAND( SELECT_TRACKS, SelectTracksCommand, () ) \ COMMAND( SELECT_TRACKS, SelectTracksCommand, () ) \

View File

@ -73,10 +73,10 @@ enum kCaptureTypes
ktracks, ktracks,
kfirsttrack, kfirsttrack,
ksecondtrack, ksecondtrack,
kNumCaptureWhats nCaptureWhats
}; };
static const wxString kCaptureWhatStrings[kNumCaptureWhats] = static const wxString kCaptureWhatStrings[nCaptureWhats] =
{ {
XO("Window"), XO("Window"),
XO("Full_Window"), XO("Full_Window"),
@ -111,10 +111,10 @@ enum kBackgrounds
kBlue, kBlue,
kWhite, kWhite,
kNone, kNone,
kNumBackgrounds nBackgrounds
}; };
static const wxString kBackgroundStrings[kNumBackgrounds] = static const wxString kBackgroundStrings[nBackgrounds] =
{ {
XO("Blue"), XO("Blue"),
XO("White"), XO("White"),
@ -123,9 +123,9 @@ static const wxString kBackgroundStrings[kNumBackgrounds] =
bool ScreenshotCommand::DefineParams( ShuttleParams & S ){ bool ScreenshotCommand::DefineParams( ShuttleParams & S ){
wxArrayString whats(kNumCaptureWhats, kCaptureWhatStrings); wxArrayString whats(nCaptureWhats, kCaptureWhatStrings);
wxArrayString backs(kNumBackgrounds, kBackgroundStrings); wxArrayString backs(nBackgrounds, kBackgroundStrings);
S.Define( mPath, wxT("Path"), wxT(""), wxT(""), wxT(""), wxT("")); S.Define( mPath, wxT("Path"), wxT(""), wxT(""), wxT(""), wxT(""));
S.DefineEnum( mWhat, wxT("CaptureWhat"), wxT("Window"), whats ); S.DefineEnum( mWhat, wxT("CaptureWhat"), wxT("Window"), whats );
S.DefineEnum( mBack, wxT("Background"), wxT("None"), backs ); S.DefineEnum( mBack, wxT("Background"), wxT("None"), backs );
return true; return true;
@ -133,8 +133,8 @@ bool ScreenshotCommand::DefineParams( ShuttleParams & S ){
void ScreenshotCommand::PopulateOrExchange(ShuttleGui & S) void ScreenshotCommand::PopulateOrExchange(ShuttleGui & S)
{ {
wxArrayString whats(kNumCaptureWhats, kCaptureWhatStrings); wxArrayString whats(nCaptureWhats, kCaptureWhatStrings);
wxArrayString backs(kNumBackgrounds, kBackgroundStrings); wxArrayString backs(nBackgrounds, kBackgroundStrings);
S.AddSpace(0, 5); S.AddSpace(0, 5);
S.StartMultiColumn(2, wxALIGN_CENTER); S.StartMultiColumn(2, wxALIGN_CENTER);

View File

@ -0,0 +1,123 @@
/**********************************************************************
Audacity - A Digital Audio Editor
Copyright 1999-2009 Audacity Team
License: wxwidgets
Dan Horgan
James Crook
******************************************************************//**
\file SetClipCommand.cpp
\brief Definitions for SetClipCommand
\class SetClipCommand
\brief Command that sets clip information
*//*******************************************************************/
#include "SetClipCommand.h"
#include "../Project.h"
#include "../Track.h"
#include "../TrackPanel.h"
#include "../WaveTrack.h"
#include "../ShuttleGui.h"
#include "CommandContext.h"
SetClipCommand::SetClipCommand()
{/*
mTrackIndex = 0;
mTrackName = "unnamed";
mPan = 0.0f;
mGain = 1.0f;
bSelected = false;
bFocused = false;
bSolo = false;
bMute = false;
*/
}
enum kColours
{
kColour0,
kColour1,
kColour2,
kColour3,
nColours
};
static const wxString kColourStrings[nColours] =
{
XO("Color0"),
XO("Color1"),
XO("Color2"),
XO("Color3"),
};
bool SetClipCommand::DefineParams( ShuttleParams & S ){
wxArrayString colours( nColours, kColourStrings );
S.Define( mClipIndex, wxT("ClipIndex"), 0, 0, 100 );
S.Optional( bHasColour ).DefineEnum( mColour, wxT("Color"), kColour0, colours );
// Allowing a negative start time is not a mistake.
// It will be used in demonstrating time before zero.
S.Optional( bHasT0 ).Define( mT0, wxT("Start"), -5.0, 0.0, 1000000.0);
return true;
};
void SetClipCommand::PopulateOrExchange(ShuttleGui & S)
{
wxArrayString colours( nColours, kColourStrings );
S.AddSpace(0, 5);
S.StartMultiColumn(2, wxALIGN_CENTER);
{
S.TieNumericTextBox( _("Clip Index"), mClipIndex );
}
S.EndMultiColumn();
S.StartMultiColumn(3, wxALIGN_CENTER);
{
S.Optional( bHasColour ).TieChoice( _("Colour:"), mColour, &colours );
S.Optional( bHasT0 ).TieNumericTextBox( _("Start:"), mT0 );
}
S.EndMultiColumn();
}
bool SetClipCommand::Apply(const CommandContext & context)
{
TrackList *tracks = context.GetProject()->GetTracks();
TrackListIterator iter(tracks);
Track *t = iter.First();
WaveClip * pClip = NULL;
int i=0;
while (t && i <= mClipIndex) {
if (t->GetKind() == Track::Wave) {
WaveTrack *waveTrack = static_cast<WaveTrack*>(t);
WaveClipPointers ptrs( waveTrack->SortedClipArray());
for(auto it = ptrs.begin(); (it != ptrs.end()) && (i<=mClipIndex); it++,i++ ){
pClip = *it;
}
}
t = iter.Next();
}
if (i <= mClipIndex || !pClip)
{
context.Error(wxT("ClipIndex was invalid."));
return false;
}
if( bHasColour )
pClip->SetColourIndex(mColour);
// No validation of overlap yet. We assume the user is sensible!
if( bHasT0 )
pClip->SetOffset(mT0);
// \todo Use SetClip to move a clip between tracks too.
return true;
}

View File

@ -0,0 +1,51 @@
/**********************************************************************
Audacity - A Digital Audio Editor
Copyright 1999-2009 Audacity Team
License: wxwidgets
Dan Horgan
James Crook
******************************************************************//**
\file SetClipCommand.h
\brief Declarations of SetClipCommand and SetClipCommandType classes
*//*******************************************************************/
#ifndef __SET_CLIP_COMMAND__
#define __SET_CLIP_COMMAND__
#include "Command.h"
#include "CommandType.h"
#define SET_CLIP_PLUGIN_SYMBOL XO("Set Clip")
class SetClipCommand : public AudacityCommand
{
public:
SetClipCommand();
// CommandDefinitionInterface overrides
wxString GetSymbol() override {return SET_CLIP_PLUGIN_SYMBOL;};
wxString GetDescription() override {return _("Sets various values for a clip.");};
bool DefineParams( ShuttleParams & S ) override;
void PopulateOrExchange(ShuttleGui & S) override;
// AudacityCommand overrides
wxString ManualPage() override {return wxT("Extra_Menu:_Tools#set_clip");};
bool Apply(const CommandContext & context) override;
public:
int mClipIndex;
int mColour;
double mT0;
// For tracking optional parameters.
bool bHasColour;
bool bHasT0;
};
#endif /* End of include guard: __SETTRACKINFOCOMMAND__ */

View File

@ -0,0 +1,104 @@
/**********************************************************************
Audacity - A Digital Audio Editor
Copyright 1999-2009 Audacity Team
License: wxwidgets
Dan Horgan
James Crook
******************************************************************//**
\file SetLabelCommand.cpp
\brief Definitions for SetLabelCommand
\class SetLabelCommand
\brief Command that sets label information
*//*******************************************************************/
#include "SetLabelCommand.h"
#include "../Project.h"
#include "../Track.h"
#include "../TrackPanel.h"
#include "../WaveTrack.h"
#include "../LabelTrack.h"
#include "../ShuttleGui.h"
#include "CommandContext.h"
SetLabelCommand::SetLabelCommand()
{
}
bool SetLabelCommand::DefineParams( ShuttleParams & S ){
S.Define( mLabelIndex, wxT("LabelIndex"), 0, 0, 100 );
S.Optional( bHasText ).Define( mText, wxT("Text"), wxT("empty") );
S.Optional( bHasT0 ).Define( mT0, wxT("Start"), 0.0, 0.0, 100000.0);
S.Optional( bHasT1 ).Define( mT1, wxT("End"), 0.0, 0.0, 100000.0);
return true;
};
void SetLabelCommand::PopulateOrExchange(ShuttleGui & S)
{
S.AddSpace(0, 5);
S.StartMultiColumn(2, wxALIGN_CENTER);
{
S.TieNumericTextBox( _("Label Index"), mLabelIndex );
}
S.EndMultiColumn();
S.StartMultiColumn(3, wxALIGN_CENTER);
{
S.Optional( bHasText ).TieTextBox( _("Text:"), mText );
S.Optional( bHasT0 ).TieNumericTextBox( _("Start:"), mT0 );
S.Optional( bHasT1 ).TieNumericTextBox( _("End:"), mT1 );
}
S.EndMultiColumn();
}
bool SetLabelCommand::Apply(const CommandContext & context)
{
// \todo we have similar code for finding the nth Label, Clip, Track etc.
// this code could be put in subroutines/reduced.
//wxString mode = GetString(wxT("Type"));
TrackList *tracks = context.GetProject()->GetTracks();
TrackListIterator iter(tracks);
Track *t = iter.First();
LabelStruct * pLabel = NULL;
int i=0;
while (t && i<=mLabelIndex) {
if (t->GetKind() == Track::Label) {
LabelTrack *labelTrack = static_cast<LabelTrack*>(t);
if( labelTrack )
{
for (int nn = 0;
(nn< (int)labelTrack->mLabels.size()) && i<=mLabelIndex;
nn++) {
i++;
pLabel = &labelTrack->mLabels[nn];
}
}
}
t = iter.Next();
}
if ( (i< mLabelIndex) || (pLabel == NULL))
{
context.Error(wxT("LabelIndex was invalid."));
return false;
}
if( bHasText )
pLabel->title = mText;
if( bHasT0 )
pLabel->selectedRegion.setT0(mT0, false);
if( bHasT1 )
pLabel->selectedRegion.setT1(mT1, false);
if( bHasT0 || bHasT1 )
pLabel->selectedRegion.ensureOrdering();
return true;
}

View File

@ -0,0 +1,53 @@
/**********************************************************************
Audacity - A Digital Audio Editor
Copyright 1999-2009 Audacity Team
License: wxwidgets
Dan Horgan
James Crook
******************************************************************//**
\file SetLabelCommand.h
\brief Declarations of SetLabelCommand and SetLabelCommandType classes
*//*******************************************************************/
#ifndef __SET_LABEL_COMMAND__
#define __SET_LABEL_COMMAND__
#include "Command.h"
#include "CommandType.h"
#define SET_LABEL_PLUGIN_SYMBOL XO("Set Label")
class SetLabelCommand : public AudacityCommand
{
public:
SetLabelCommand();
// CommandDefinitionInterface overrides
wxString GetSymbol() override {return SET_LABEL_PLUGIN_SYMBOL;};
wxString GetDescription() override {return _("Sets various values for a label.");};
bool DefineParams( ShuttleParams & S ) override;
void PopulateOrExchange(ShuttleGui & S) override;
// AudacityCommand overrides
wxString ManualPage() override {return wxT("Extra_Menu:_Tools#set_label");};
bool Apply(const CommandContext & context) override;
public:
int mLabelIndex;
wxString mText;
double mT0;
double mT1;
// For tracking optional parameters.
bool bHasText;
bool bHasT0;
bool bHasT1;
};
#endif /* End of include guard: __SETTRACKINFOCOMMAND__ */

View File

@ -0,0 +1,72 @@
/**********************************************************************
Audacity - A Digital Audio Editor
Copyright 1999-2009 Audacity Team
License: wxwidgets
Dan Horgan
James Crook
******************************************************************//**
\file SetProjectCommand.cpp
\brief Definitions for SetProjectCommand
\class SetProjectCommand
\brief Command that sets project information
*//*******************************************************************/
#include "SetProjectCommand.h"
#include "../Project.h"
#include "../Track.h"
#include "../TrackPanel.h"
#include "../WaveTrack.h"
#include "../ShuttleGui.h"
#include "CommandContext.h"
SetProjectCommand::SetProjectCommand()
{
}
bool SetProjectCommand::DefineParams( ShuttleParams & S ){
S.Optional( bHasName ).Define( mName, wxT("Name"), _("Project") );
S.Optional( bHasSizing ).Define( mPosX, wxT("X"), 10.0, 0.0, 2000.0);
S.Optional( bHasSizing ).Define( mPosY, wxT("Y"), 10.0, 0.0, 2000.0);
S.Optional( bHasSizing ).Define( mWidth, wxT("Width"), 1000.0, 200.0, 4000.0);
S.Optional( bHasSizing ).Define( mHeight, wxT("Height"), 900.0, 200.0, 4000.0);
return true;
};
void SetProjectCommand::PopulateOrExchange(ShuttleGui & S)
{
S.AddSpace(0, 5);
S.StartMultiColumn(3, wxALIGN_CENTER);
{
S.Optional( bHasName ).TieTextBox( _("Name:"), mName );
S.TieCheckBox( "Resize:", bHasSizing );
}
S.EndMultiColumn();
S.StartMultiColumn(2, wxALIGN_CENTER);
{
S.TieNumericTextBox( _("X:"), mPosX );
S.TieNumericTextBox( _("Y:"), mPosY );
S.TieNumericTextBox( _("Width:"), mWidth );
S.TieNumericTextBox( _("Height:"), mHeight );
}
S.EndMultiColumn();
}
bool SetProjectCommand::Apply(const CommandContext & context)
{
AudacityProject * pProj = context.GetProject();
if( bHasName )
pProj->SetLabel(mName);
if( bHasSizing )
{
pProj->SetPosition( wxPoint( mPosX, mPosY));
pProj->SetSize( wxSize( mWidth, mHeight ));
}
return true;
}

View File

@ -0,0 +1,54 @@
/**********************************************************************
Audacity - A Digital Audio Editor
Copyright 1999-2009 Audacity Team
License: wxwidgets
Dan Horgan
James Crook
******************************************************************//**
\file SetProjectCommand.h
\brief Declarations of SetProjectCommand and SetProjectCommandType classes
*//*******************************************************************/
#ifndef __SET_PROJECT_COMMAND__
#define __SET_PROJECT_COMMAND__
#include "Command.h"
#include "CommandType.h"
#define SET_PROJECT_PLUGIN_SYMBOL XO("Set Project")
class SetProjectCommand : public AudacityCommand
{
public:
SetProjectCommand();
// CommandDefinitionInterface overrides
wxString GetSymbol() override {return SET_PROJECT_PLUGIN_SYMBOL;};
wxString GetDescription() override {return _("Sets various values for a project.");};
bool DefineParams( ShuttleParams & S ) override;
void PopulateOrExchange(ShuttleGui & S) override;
// AudacityCommand overrides
wxString ManualPage() override {return wxT("Extra_Menu:_Tools#set_project");};
bool Apply(const CommandContext & context) override;
public:
wxString mName;
int mPosX;
int mPosY;
int mWidth;
int mHeight;
// For tracking optional parameters.
bool bHasName;
bool bHasSizing;
};
#endif /* End of include guard: __SETTRACKINFOCOMMAND__ */

View File

@ -9,11 +9,11 @@
******************************************************************//** ******************************************************************//**
\file SetTrackInfoCommand.cpp \file SetTrackCommand.cpp
\brief Definitions for SetTrackInfoCommand and SetTrackInfoCommandType classes \brief Definitions for SetTrackCommand
\class SetTrackInfoCommand \class SetTrackCommand
\brief Command that sets track information , name, mute/sol etc. \brief Command that sets track information, name, mute/solo etc.
*//*******************************************************************/ *//*******************************************************************/
@ -26,8 +26,8 @@
#include "../ShuttleGui.h" #include "../ShuttleGui.h"
#include "CommandContext.h" #include "CommandContext.h"
SetTrackInfoCommand::SetTrackInfoCommand() SetTrackCommand::SetTrackCommand()
{ {/*
mTrackIndex = 0; mTrackIndex = 0;
mTrackName = "unnamed"; mTrackName = "unnamed";
mPan = 0.0f; mPan = 0.0f;
@ -36,22 +36,45 @@ SetTrackInfoCommand::SetTrackInfoCommand()
bFocused = false; bFocused = false;
bSolo = false; bSolo = false;
bMute = false; bMute = false;
*/
} }
bool SetTrackInfoCommand::DefineParams( ShuttleParams & S ){ enum kColours
S.Define( mTrackIndex, wxT("TrackIndex"), 0, 0, 100 ); {
S.Optional( bHasTrackName ).Define( mTrackName, wxT("Name"), wxT("Unnamed") ); kColour0,
S.Optional( bHasPan ).Define( mPan, wxT("Pan"), 0.0, -1.0, 1.0); kColour1,
S.Optional( bHasGain ).Define( mGain, wxT("Gain"), 1.0, 0.0, 10.0); kColour2,
S.Optional( bHasSelected ).Define( bSelected, wxT("Selected"), false ); kColour3,
S.Optional( bHasFocused ).Define( bFocused, wxT("Focuseed"), false ); nColours
S.Optional( bHasSolo ).Define( bSolo, wxT("Solo"), false ); };
S.Optional( bHasMute ).Define( bMute, wxT("Mute"), false );
static const wxString kColourStrings[nColours] =
{
XO("Color0"),
XO("Color1"),
XO("Color2"),
XO("Color3"),
};
bool SetTrackCommand::DefineParams( ShuttleParams & S ){
wxArrayString colours( nColours, kColourStrings );
S.Define( mTrackIndex, wxT("TrackIndex"), 0, 0, 100 );
S.Optional( bHasTrackName ).Define( mTrackName, wxT("Name"), wxT("Unnamed") );
S.Optional( bHasPan ).Define( mPan, wxT("Pan"), 0.0, -1.0, 1.0);
S.Optional( bHasGain ).Define( mGain, wxT("Gain"), 1.0, 0.0, 10.0);
S.Optional( bHasHeight ).Define( mHeight, wxT("Height"), 120, 44, 700 );
S.Optional( bHasColour ).DefineEnum( mColour, wxT("Color"), kColour0, colours );
S.Optional( bHasSelected ).Define( bSelected, wxT("Selected"), false );
S.Optional( bHasFocused ).Define( bFocused, wxT("Focuseed"), false );
S.Optional( bHasSolo ).Define( bSolo, wxT("Solo"), false );
S.Optional( bHasMute ).Define( bMute, wxT("Mute"), false );
return true; return true;
}; };
void SetTrackInfoCommand::PopulateOrExchange(ShuttleGui & S) void SetTrackCommand::PopulateOrExchange(ShuttleGui & S)
{ {
wxArrayString colours( nColours, kColourStrings );
S.AddSpace(0, 5); S.AddSpace(0, 5);
S.StartMultiColumn(2, wxALIGN_CENTER); S.StartMultiColumn(2, wxALIGN_CENTER);
@ -61,22 +84,24 @@ void SetTrackInfoCommand::PopulateOrExchange(ShuttleGui & S)
S.EndMultiColumn(); S.EndMultiColumn();
S.StartMultiColumn(3, wxALIGN_CENTER); S.StartMultiColumn(3, wxALIGN_CENTER);
{ {
S.Optional( bHasTrackName ).TieTextBox( _("Name"), mTrackName ); S.Optional( bHasTrackName ).TieTextBox( _("Name:"), mTrackName );
S.Optional( bHasPan ).TieSlider( _("Pan"), mPan, 1.0, -1.0); S.Optional( bHasPan ).TieSlider( _("Pan:"), mPan, 1.0, -1.0);
S.Optional( bHasGain ).TieSlider( _("Gain"), mGain, 10.0, 0.0); S.Optional( bHasGain ).TieSlider( _("Gain:"), mGain, 10.0, 0.0);
S.Optional( bHasHeight ).TieNumericTextBox( _("Height:"), mHeight );
S.Optional( bHasColour ).TieChoice( _("Colour:"), mColour, &colours );
} }
S.EndMultiColumn(); S.EndMultiColumn();
S.StartMultiColumn(2, wxALIGN_CENTER); S.StartMultiColumn(2, wxALIGN_CENTER);
{ {
S.Optional( bHasSelected ).TieCheckBox( _("Selected"), bSelected ); S.Optional( bHasSelected ).TieCheckBox( _("Selected:"), bSelected );
S.Optional( bHasFocused ).TieCheckBox( _("Focused"), bFocused); S.Optional( bHasFocused ).TieCheckBox( _("Focused:"), bFocused);
S.Optional( bHasSolo ).TieCheckBox( _("Solo"), bSolo); S.Optional( bHasSolo ).TieCheckBox( _("Solo:"), bSolo);
S.Optional( bHasMute ).TieCheckBox( _("Mute"), bMute); S.Optional( bHasMute ).TieCheckBox( _("Mute:"), bMute);
} }
S.EndMultiColumn(); S.EndMultiColumn();
} }
bool SetTrackInfoCommand::Apply(const CommandContext & context) bool SetTrackCommand::Apply(const CommandContext & context)
{ {
//wxString mode = GetString(wxT("Type")); //wxString mode = GetString(wxT("Type"));
@ -104,6 +129,10 @@ bool SetTrackInfoCommand::Apply(const CommandContext & context)
wt->SetPan(mPan); wt->SetPan(mPan);
if( wt && bHasGain ) if( wt && bHasGain )
wt->SetGain(mGain); wt->SetGain(mGain);
if( wt && bHasColour )
wt->SetWaveColorIndex( mColour );
if( t && bHasHeight )
t->SetHeight( mHeight );
if( bHasSelected ) if( bHasSelected )
t->SetSelected(bSelected); t->SetSelected(bSelected);
if( bHasFocused ) if( bHasFocused )
@ -118,3 +147,5 @@ bool SetTrackInfoCommand::Apply(const CommandContext & context)
return true; return true;
} }

View File

@ -9,31 +9,31 @@
******************************************************************//** ******************************************************************//**
\file SetTrackInfoCommand.h \file SetTrackCommand.h
\brief Declarations of SetTrackInfoCommand and SetTrackInfoCommandType classes \brief Declarations of SetTrackCommand and SetTrackCommandType classes
*//*******************************************************************/ *//*******************************************************************/
#ifndef __SETTRACKINFOCOMMAND__ #ifndef __SET_TRACK_COMMAND__
#define __SETTRACKINFOCOMMAND__ #define __SET_TRACK_COMMAND__
#include "Command.h" #include "Command.h"
#include "CommandType.h" #include "CommandType.h"
#define SET_TRACK_INFO_PLUGIN_SYMBOL XO("Set Track Info") #define SET_TRACK_PLUGIN_SYMBOL XO("Set Track")
class SetTrackInfoCommand : public AudacityCommand class SetTrackCommand : public AudacityCommand
{ {
public: public:
SetTrackInfoCommand(); SetTrackCommand();
// CommandDefinitionInterface overrides // CommandDefinitionInterface overrides
wxString GetSymbol() override {return SET_TRACK_INFO_PLUGIN_SYMBOL;}; wxString GetSymbol() override {return SET_TRACK_PLUGIN_SYMBOL;};
wxString GetDescription() override {return _("Sets various values for a track.");}; wxString GetDescription() override {return _("Sets various values for a track.");};
bool DefineParams( ShuttleParams & S ) override; bool DefineParams( ShuttleParams & S ) override;
void PopulateOrExchange(ShuttleGui & S) override; void PopulateOrExchange(ShuttleGui & S) override;
// AudacityCommand overrides // AudacityCommand overrides
wxString ManualPage() override {return wxT("Extra_Menu:_Tools#set_track_info");}; wxString ManualPage() override {return wxT("Extra_Menu:_Tools#set_track");};
bool Apply(const CommandContext & context) override; bool Apply(const CommandContext & context) override;
@ -42,6 +42,8 @@ public:
wxString mTrackName; wxString mTrackName;
double mPan; double mPan;
double mGain; double mGain;
int mColour;
int mHeight;
bool bSelected; bool bSelected;
bool bFocused; bool bFocused;
bool bSolo; bool bSolo;
@ -51,6 +53,8 @@ public:
bool bHasTrackName; bool bHasTrackName;
bool bHasPan; bool bHasPan;
bool bHasGain; bool bHasGain;
bool bHasColour;
bool bHasHeight;
bool bHasSelected; bool bHasSelected;
bool bHasFocused; bool bHasFocused;
bool bHasSolo; bool bHasSolo;

View File

@ -397,7 +397,7 @@ bool EffectAutoDuck::Process()
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
Track *iterTrack = iter.First(); Track *iterTrack = iter.First();
int trackNumber = 0; int trackNum = 0;
while (iterTrack) while (iterTrack)
{ {
@ -406,7 +406,7 @@ bool EffectAutoDuck::Process()
for (size_t i = 0; i < regions.size(); i++) for (size_t i = 0; i < regions.size(); i++)
{ {
const AutoDuckRegion& region = regions[i]; const AutoDuckRegion& region = regions[i];
if (ApplyDuckFade(trackNumber, t, region.t0, region.t1)) if (ApplyDuckFade(trackNum, t, region.t0, region.t1))
{ {
cancel = true; cancel = true;
break; break;
@ -417,7 +417,7 @@ bool EffectAutoDuck::Process()
break; break;
iterTrack = iter.Next(); iterTrack = iter.Next();
trackNumber++; trackNum++;
} }
} }
@ -518,7 +518,7 @@ bool EffectAutoDuck::TransferDataFromWindow()
// EffectAutoDuck implementation // EffectAutoDuck implementation
// this currently does an exponential fade // this currently does an exponential fade
bool EffectAutoDuck::ApplyDuckFade(int trackNumber, WaveTrack* t, bool EffectAutoDuck::ApplyDuckFade(int trackNum, WaveTrack* t,
double t0, double t1) double t0, double t1)
{ {
bool cancel = false; bool cancel = false;
@ -571,7 +571,7 @@ bool EffectAutoDuck::ApplyDuckFade(int trackNumber, WaveTrack* t,
float curTime = t->LongSamplesToTime(pos); float curTime = t->LongSamplesToTime(pos);
float fractionFinished = (curTime - mT0) / (mT1 - mT0); float fractionFinished = (curTime - mT0) / (mT1 - mT0);
if (TotalProgress( (trackNumber + 1 + fractionFinished) / if (TotalProgress( (trackNum + 1 + fractionFinished) /
(GetNumWaveTracks() + 1) )) (GetNumWaveTracks() + 1) ))
{ {
cancel = true; cancel = true;

View File

@ -63,7 +63,7 @@ public:
private: private:
// EffectAutoDuck implementation // EffectAutoDuck implementation
bool ApplyDuckFade(int trackNumber, WaveTrack *t, double t0, double t1); bool ApplyDuckFade(int trackNum, WaveTrack *t, double t0, double t1);
void OnValueChanged(wxCommandEvent & evt); void OnValueChanged(wxCommandEvent & evt);

View File

@ -47,10 +47,10 @@ enum kVinyl
kVinyl_45, kVinyl_45,
kVinyl_78, kVinyl_78,
kVinyl_NA, kVinyl_NA,
kNumVinyl nVinyl
}; };
static const wxChar *kVinylStrings[kNumVinyl] = static const wxChar *kVinylStrings[nVinyl] =
{ {
wxT("33\u2153"), wxT("33\u2153"),
wxT("45"), wxT("45"),
@ -338,10 +338,10 @@ void EffectChangeSpeed::PopulateOrExchange(ShuttleGui & S)
/* i18n-hint: "rpm" is an English abbreviation meaning "revolutions per minute". */ /* i18n-hint: "rpm" is an English abbreviation meaning "revolutions per minute". */
S.AddUnits(_("Standard Vinyl rpm:")); S.AddUnits(_("Standard Vinyl rpm:"));
wxASSERT(kNumVinyl == WXSIZEOF(kVinylStrings)); wxASSERT(nVinyl == WXSIZEOF(kVinylStrings));
wxArrayString vinylChoices; wxArrayString vinylChoices;
for (int i = 0; i < kNumVinyl; i++) for (int i = 0; i < nVinyl; i++)
{ {
if (i == kVinyl_NA) if (i == kVinyl_NA)
{ {

View File

@ -54,10 +54,10 @@ enum kTableType
kLeveller, kLeveller,
kRectifier, kRectifier,
kHardLimiter, kHardLimiter,
kNumTableTypes nTableTypes
}; };
static const wxString kTableTypeStrings[kNumTableTypes] = static const wxString kTableTypeStrings[nTableTypes] =
{ {
XO("Hard Clipping"), XO("Hard Clipping"),
XO("Soft Clipping"), XO("Soft Clipping"),
@ -76,7 +76,7 @@ static const wxString kTableTypeStrings[kNumTableTypes] =
// (Note: 'Repeats' is the total number of times the effect is applied.) // (Note: 'Repeats' is the total number of times the effect is applied.)
// //
// Name Type Key Def Min Max Scale // Name Type Key Def Min Max Scale
Param( TableTypeIndx, int, wxT("Type"), 0, 0, kNumTableTypes-1, 1 ); Param( TableTypeIndx, int, wxT("Type"), 0, 0, nTableTypes-1, 1 );
Param( DCBlock, bool, wxT("DC Block"), false, false, true, 1 ); Param( DCBlock, bool, wxT("DC Block"), false, false, true, 1 );
Param( Threshold_dB, double, wxT("Threshold dB"), -6.0, -100.0, 0.0, 1000.0f ); Param( Threshold_dB, double, wxT("Threshold dB"), -6.0, -100.0, 0.0, 1000.0f );
Param( NoiseFloor, double, wxT("Noise Floor"), -70.0, -80.0, -20.0, 1 ); Param( NoiseFloor, double, wxT("Noise Floor"), -70.0, -80.0, -20.0, 1 );
@ -168,7 +168,7 @@ END_EVENT_TABLE()
EffectDistortion::EffectDistortion() EffectDistortion::EffectDistortion()
{ {
wxASSERT(kNumTableTypes == WXSIZEOF(kTableTypeStrings)); wxASSERT(nTableTypes == WXSIZEOF(kTableTypeStrings));
mParams.mTableChoiceIndx = DEF_TableTypeIndx; mParams.mTableChoiceIndx = DEF_TableTypeIndx;
mParams.mDCBlock = DEF_DCBlock; mParams.mDCBlock = DEF_DCBlock;
@ -280,7 +280,7 @@ size_t EffectDistortion::RealtimeProcess(int group,
return InstanceProcess(mSlaves[group], inbuf, outbuf, numSamples); return InstanceProcess(mSlaves[group], inbuf, outbuf, numSamples);
} }
bool EffectDistortion::DefineParams( ShuttleParams & S ){ bool EffectDistortion::DefineParams( ShuttleParams & S ){
wxArrayString tables( kNumTableTypes, kTableTypeStrings ); wxArrayString tables( nTableTypes, kTableTypeStrings );
S.SHUTTLE_ENUM_PARAM( mParams.mTableChoiceIndx, TableTypeIndx, tables ); S.SHUTTLE_ENUM_PARAM( mParams.mTableChoiceIndx, TableTypeIndx, tables );
S.SHUTTLE_PARAM( mParams.mDCBlock, DCBlock ); S.SHUTTLE_PARAM( mParams.mDCBlock, DCBlock );
S.SHUTTLE_PARAM( mParams.mThreshold_dB, Threshold_dB ); S.SHUTTLE_PARAM( mParams.mThreshold_dB, Threshold_dB );
@ -306,7 +306,7 @@ bool EffectDistortion::GetAutomationParameters(CommandAutomationParameters & par
bool EffectDistortion::SetAutomationParameters(CommandAutomationParameters & parms) bool EffectDistortion::SetAutomationParameters(CommandAutomationParameters & parms)
{ {
ReadAndVerifyEnum(TableTypeIndx, wxArrayString(kNumTableTypes, kTableTypeStrings)); ReadAndVerifyEnum(TableTypeIndx, wxArrayString(nTableTypes, kTableTypeStrings));
ReadAndVerifyBool(DCBlock); ReadAndVerifyBool(DCBlock);
ReadAndVerifyDouble(Threshold_dB); ReadAndVerifyDouble(Threshold_dB);
ReadAndVerifyDouble(NoiseFloor); ReadAndVerifyDouble(NoiseFloor);
@ -360,7 +360,7 @@ bool EffectDistortion::LoadFactoryPreset(int id)
void EffectDistortion::PopulateOrExchange(ShuttleGui & S) void EffectDistortion::PopulateOrExchange(ShuttleGui & S)
{ {
for (int i = 0; i < kNumTableTypes; i++) for (int i = 0; i < nTableTypes; i++)
{ {
mTableTypes.Add(wxGetTranslation(kTableTypeStrings[i])); mTableTypes.Add(wxGetTranslation(kTableTypeStrings[i]));
} }

View File

@ -190,7 +190,7 @@ wxString EffectManager::GetCommandDescription(const PluginID & ID)
return wxEmptyString; return wxEmptyString;
} }
void EffectManager::GetCommandDefinition(const PluginID & ID, const CommandContext & context) void EffectManager::GetCommandDefinition(const PluginID & ID, const CommandContext & context, int flags)
{ {
ParamsInterface *command; ParamsInterface *command;
command = GetEffect(ID); command = GetEffect(ID);
@ -201,7 +201,8 @@ void EffectManager::GetCommandDefinition(const PluginID & ID, const CommandConte
ShuttleParams NullShuttle; ShuttleParams NullShuttle;
// Test if it defines any parameters at all. // Test if it defines any parameters at all.
if( !command->DefineParams( NullShuttle ) ) bool bHasParams = command->DefineParams( NullShuttle );
if( (flags ==0) && !bHasParams )
return; return;
// This is capturing the output context into the shuttle. // This is capturing the output context into the shuttle.
@ -209,10 +210,12 @@ void EffectManager::GetCommandDefinition(const PluginID & ID, const CommandConte
S.StartStruct(); S.StartStruct();
S.AddItem( GetCommandIdentifier( ID ), "id" ); S.AddItem( GetCommandIdentifier( ID ), "id" );
S.AddItem( GetCommandName( ID ), "name" ); S.AddItem( GetCommandName( ID ), "name" );
S.AddField( "params" ); if( bHasParams ){
S.StartArray(); S.AddField( "params" );
command->DefineParams( S ); S.StartArray();
S.EndArray(); command->DefineParams( S );
S.EndArray();
}
S.EndStruct(); S.EndStruct();
} }

View File

@ -91,7 +91,8 @@ public:
wxString GetCommandName(const PluginID & ID); wxString GetCommandName(const PluginID & ID);
wxString GetCommandIdentifier(const PluginID & ID); wxString GetCommandIdentifier(const PluginID & ID);
wxString GetCommandDescription(const PluginID & ID); wxString GetCommandDescription(const PluginID & ID);
void GetCommandDefinition(const PluginID & ID, const CommandContext & context); // flags control which commands are included.
void GetCommandDefinition(const PluginID & ID, const CommandContext & context, int flags);
bool IsHidden(const PluginID & ID); bool IsHidden(const PluginID & ID);
/** Support for batch commands */ /** Support for batch commands */

View File

@ -136,7 +136,7 @@ enum kInterpolations
kBspline, kBspline,
kCosine, kCosine,
kCubic, kCubic,
kNumInterpolations nInterpolations
}; };
// Increment whenever EQCurves.xml is updated // Increment whenever EQCurves.xml is updated
@ -144,7 +144,7 @@ enum kInterpolations
#define EQCURVES_REVISION 0 #define EQCURVES_REVISION 0
#define UPDATE_ALL 0 // 0 = merge NEW presets only, 1 = Update all factory presets. #define UPDATE_ALL 0 // 0 = merge NEW presets only, 1 = Update all factory presets.
static const wxString kInterpStrings[kNumInterpolations] = static const wxString kInterpStrings[nInterpolations] =
{ {
/* i18n-hint: Technical term for a kind of curve.*/ /* i18n-hint: Technical term for a kind of curve.*/
XO("B-spline"), XO("B-spline"),
@ -229,7 +229,7 @@ EffectEqualization::EffectEqualization()
GetPrivateConfig(GetCurrentSettingsGroup(), wxT("DrawMode"), mDrawMode, DEF_DrawMode); GetPrivateConfig(GetCurrentSettingsGroup(), wxT("DrawMode"), mDrawMode, DEF_DrawMode);
GetPrivateConfig(GetCurrentSettingsGroup(), wxT("DrawGrid"), mDrawGrid, DEF_DrawGrid); GetPrivateConfig(GetCurrentSettingsGroup(), wxT("DrawGrid"), mDrawGrid, DEF_DrawGrid);
for (int i = 0; i < kNumInterpolations; i++) for (int i = 0; i < nInterpolations; i++)
{ {
mInterpolations.Add(wxGetTranslation(kInterpStrings[i])); mInterpolations.Add(wxGetTranslation(kInterpStrings[i]));
} }
@ -309,7 +309,7 @@ EffectType EffectEqualization::GetType()
// EffectClientInterface implementation // EffectClientInterface implementation
bool EffectEqualization::DefineParams( ShuttleParams & S ){ bool EffectEqualization::DefineParams( ShuttleParams & S ){
wxArrayString interp(kNumInterpolations, kInterpStrings); wxArrayString interp(nInterpolations, kInterpStrings);
S.SHUTTLE_PARAM( mM, FilterLength ); S.SHUTTLE_PARAM( mM, FilterLength );
S.SHUTTLE_PARAM( mCurveName, CurveName); S.SHUTTLE_PARAM( mCurveName, CurveName);
S.SHUTTLE_PARAM( mLin, InterpLin); S.SHUTTLE_PARAM( mLin, InterpLin);
@ -323,7 +323,7 @@ bool EffectEqualization::GetAutomationParameters(CommandAutomationParameters & p
parms.Write(KEY_FilterLength, (unsigned long)mM); parms.Write(KEY_FilterLength, (unsigned long)mM);
parms.Write(KEY_CurveName, mCurveName); parms.Write(KEY_CurveName, mCurveName);
parms.Write(KEY_InterpLin, mLin); parms.Write(KEY_InterpLin, mLin);
parms.WriteEnum(KEY_InterpMeth, mInterp, wxArrayString(kNumInterpolations, kInterpStrings)); parms.WriteEnum(KEY_InterpMeth, mInterp, wxArrayString(nInterpolations, kInterpStrings));
return true; return true;
} }
@ -333,7 +333,7 @@ bool EffectEqualization::SetAutomationParameters(CommandAutomationParameters & p
// Pretty sure the interpolation name shouldn't have been interpreted when // Pretty sure the interpolation name shouldn't have been interpreted when
// specified in chains, but must keep it that way for compatibility. // specified in chains, but must keep it that way for compatibility.
wxArrayString interpolations(mInterpolations); wxArrayString interpolations(mInterpolations);
for (int i = 0; i < kNumInterpolations; i++) for (int i = 0; i < nInterpolations; i++)
{ {
interpolations.Add(kInterpStrings[i]); interpolations.Add(kInterpStrings[i]);
} }
@ -348,9 +348,9 @@ bool EffectEqualization::SetAutomationParameters(CommandAutomationParameters & p
mLin = InterpLin; mLin = InterpLin;
mInterp = InterpMeth; mInterp = InterpMeth;
if (InterpMeth >= kNumInterpolations) if (InterpMeth >= nInterpolations)
{ {
InterpMeth -= kNumInterpolations; InterpMeth -= nInterpolations;
} }
mEnvelope = (mLin ? mLinEnvelope : mLogEnvelope).get(); mEnvelope = (mLin ? mLinEnvelope : mLogEnvelope).get();

View File

@ -32,10 +32,10 @@ enum kTypes
kWhite, kWhite,
kPink, kPink,
kBrownian, kBrownian,
kNumTypes nTypes
}; };
static const wxChar *kTypeStrings[kNumTypes] = static const wxChar *kTypeStrings[nTypes] =
{ {
XO("White"), XO("White"),
XO("Pink"), XO("Pink"),
@ -45,7 +45,7 @@ static const wxChar *kTypeStrings[kNumTypes] =
// Define keys, defaults, minimums, and maximums for the effect parameters // Define keys, defaults, minimums, and maximums for the effect parameters
// //
// Name Type Key Def Min Max Scale // Name Type Key Def Min Max Scale
Param( Type, int, wxT("Type"), kWhite, 0, kNumTypes - 1, 1 ); Param( Type, int, wxT("Type"), kWhite, 0, nTypes - 1, 1 );
Param( Amp, double, wxT("Amplitude"), 0.8, 0.0, 1.0, 1 ); Param( Amp, double, wxT("Amplitude"), 0.8, 0.0, 1.0, 1 );
// //
@ -162,7 +162,7 @@ size_t EffectNoise::ProcessBlock(float **WXUNUSED(inbuf), float **outbuf, size_t
return size; return size;
} }
bool EffectNoise::DefineParams( ShuttleParams & S ){ bool EffectNoise::DefineParams( ShuttleParams & S ){
wxArrayString types( kNumTypes, kTypeStrings ); wxArrayString types( nTypes, kTypeStrings );
S.SHUTTLE_ENUM_PARAM( mType, Type, types ); S.SHUTTLE_ENUM_PARAM( mType, Type, types );
S.SHUTTLE_PARAM( mAmp, Amp ); S.SHUTTLE_PARAM( mAmp, Amp );
return true; return true;
@ -178,7 +178,7 @@ bool EffectNoise::GetAutomationParameters(CommandAutomationParameters & parms)
bool EffectNoise::SetAutomationParameters(CommandAutomationParameters & parms) bool EffectNoise::SetAutomationParameters(CommandAutomationParameters & parms)
{ {
ReadAndVerifyEnum(Type, wxArrayString(kNumTypes, kTypeStrings)); ReadAndVerifyEnum(Type, wxArrayString(nTypes, kTypeStrings));
ReadAndVerifyDouble(Amp); ReadAndVerifyDouble(Amp);
mType = Type; mType = Type;
@ -219,10 +219,10 @@ bool EffectNoise::Startup()
void EffectNoise::PopulateOrExchange(ShuttleGui & S) void EffectNoise::PopulateOrExchange(ShuttleGui & S)
{ {
wxASSERT(kNumTypes == WXSIZEOF(kTypeStrings)); wxASSERT(nTypes == WXSIZEOF(kTypeStrings));
wxArrayString typeChoices; wxArrayString typeChoices;
for (int i = 0; i < kNumTypes; i++) for (int i = 0; i < nTypes; i++)
{ {
typeChoices.Add(wxGetTranslation(kTypeStrings[i])); typeChoices.Add(wxGetTranslation(kTypeStrings[i]));
} }

View File

@ -83,10 +83,10 @@ enum kTypes
kButterworth, kButterworth,
kChebyshevTypeI, kChebyshevTypeI,
kChebyshevTypeII, kChebyshevTypeII,
kNumTypes nTypes
}; };
static const wxChar *kTypeStrings[kNumTypes] = static const wxChar *kTypeStrings[nTypes] =
{ {
/*i18n-hint: Butterworth is the name of the person after whom the filter type is named.*/ /*i18n-hint: Butterworth is the name of the person after whom the filter type is named.*/
XO("Butterworth"), XO("Butterworth"),
@ -100,10 +100,10 @@ enum kSubTypes
{ {
kLowPass, kLowPass,
kHighPass, kHighPass,
kNumSubTypes nSubTypes
}; };
static const wxChar *kSubTypeStrings[kNumSubTypes] = static const wxChar *kSubTypeStrings[nSubTypes] =
{ {
XO("Lowpass"), XO("Lowpass"),
XO("Highpass") XO("Highpass")
@ -112,8 +112,8 @@ static const wxChar *kSubTypeStrings[kNumSubTypes] =
// Define keys, defaults, minimums, and maximums for the effect parameters // Define keys, defaults, minimums, and maximums for the effect parameters
// //
// Name Type Key Def Min Max Scale // Name Type Key Def Min Max Scale
Param( Type, int, wxT("FilterType"), kButterworth, 0, kNumTypes - 1, 1 ); Param( Type, int, wxT("FilterType"), kButterworth, 0, nTypes - 1, 1 );
Param( Subtype, int, wxT("FilterSubtype"), kLowPass, 0, kNumSubTypes - 1, 1 ); Param( Subtype, int, wxT("FilterSubtype"), kLowPass, 0, nSubTypes - 1, 1 );
Param( Order, int, wxT("Order"), 1, 1, 10, 1 ); Param( Order, int, wxT("Order"), 1, 1, 10, 1 );
Param( Cutoff, float, wxT("Cutoff"), 1000.0, 1.0, FLT_MAX, 1 ); Param( Cutoff, float, wxT("Cutoff"), 1000.0, 1.0, FLT_MAX, 1 );
Param( Passband, float, wxT("PassbandRipple"), 1.0, 0.0, 100.0, 1 ); Param( Passband, float, wxT("PassbandRipple"), 1.0, 0.0, 100.0, 1 );
@ -241,8 +241,8 @@ size_t EffectScienFilter::ProcessBlock(float **inBlock, float **outBlock, size_t
return blockLen; return blockLen;
} }
bool EffectScienFilter::DefineParams( ShuttleParams & S ){ bool EffectScienFilter::DefineParams( ShuttleParams & S ){
wxArrayString filters( kNumTypes, kTypeStrings ); wxArrayString filters( nTypes, kTypeStrings );
wxArrayString subtypes( kNumSubTypes, kSubTypeStrings ); wxArrayString subtypes( nSubTypes, kSubTypeStrings );
S.SHUTTLE_ENUM_PARAM( mFilterType, Type, filters ); S.SHUTTLE_ENUM_PARAM( mFilterType, Type, filters );
S.SHUTTLE_ENUM_PARAM( mFilterSubtype, Subtype, subtypes ); S.SHUTTLE_ENUM_PARAM( mFilterSubtype, Subtype, subtypes );
S.SHUTTLE_PARAM( mOrder, Order ); S.SHUTTLE_PARAM( mOrder, Order );
@ -266,8 +266,8 @@ bool EffectScienFilter::GetAutomationParameters(CommandAutomationParameters & pa
bool EffectScienFilter::SetAutomationParameters(CommandAutomationParameters & parms) bool EffectScienFilter::SetAutomationParameters(CommandAutomationParameters & parms)
{ {
ReadAndVerifyEnum(Type, wxArrayString(kNumTypes, kTypeStrings)); ReadAndVerifyEnum(Type, wxArrayString(nTypes, kTypeStrings));
ReadAndVerifyEnum(Subtype, wxArrayString(kNumSubTypes, kSubTypeStrings)); ReadAndVerifyEnum(Subtype, wxArrayString(nSubTypes, kSubTypeStrings));
ReadAndVerifyInt(Order); ReadAndVerifyInt(Order);
ReadAndVerifyFloat(Cutoff); ReadAndVerifyFloat(Cutoff);
ReadAndVerifyFloat(Passband); ReadAndVerifyFloat(Passband);
@ -467,10 +467,10 @@ void EffectScienFilter::PopulateOrExchange(ShuttleGui & S)
S.SetSizerProportion(0); S.SetSizerProportion(0);
S.StartMultiColumn(8, wxALIGN_CENTER); S.StartMultiColumn(8, wxALIGN_CENTER);
{ {
wxASSERT(kNumTypes == WXSIZEOF(kTypeStrings)); wxASSERT(nTypes == WXSIZEOF(kTypeStrings));
wxArrayString typeChoices; wxArrayString typeChoices;
for (int i = 0; i < kNumTypes; i++) for (int i = 0; i < nTypes; i++)
{ {
typeChoices.Add(wxGetTranslation(kTypeStrings[i])); typeChoices.Add(wxGetTranslation(kTypeStrings[i]));
} }
@ -499,10 +499,10 @@ void EffectScienFilter::PopulateOrExchange(ShuttleGui & S)
mRippleCtl->SetValidator(vldRipple); mRippleCtl->SetValidator(vldRipple);
mRippleCtlU = S.AddVariableText(_("dB"), false, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); mRippleCtlU = S.AddVariableText(_("dB"), false, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
wxASSERT(kNumSubTypes == WXSIZEOF(kSubTypeStrings)); wxASSERT(nSubTypes == WXSIZEOF(kSubTypeStrings));
wxArrayString subTypeChoices; wxArrayString subTypeChoices;
for (int i = 0; i < kNumSubTypes; i++) for (int i = 0; i < nSubTypes; i++)
{ {
subTypeChoices.Add(wxGetTranslation(kSubTypeStrings[i])); subTypeChoices.Add(wxGetTranslation(kSubTypeStrings[i]));
} }

View File

@ -36,10 +36,10 @@ enum kInterpolations
{ {
kLinear, kLinear,
kLogarithmic, kLogarithmic,
kNumInterpolations nInterpolations
}; };
static const wxString kInterStrings[kNumInterpolations] = static const wxString kInterStrings[nInterpolations] =
{ {
XO("Linear"), XO("Linear"),
XO("Logarithmic") XO("Logarithmic")
@ -51,10 +51,10 @@ enum kWaveforms
kSquare, kSquare,
kSawtooth, kSawtooth,
kSquareNoAlias, kSquareNoAlias,
kNumWaveforms nWaveforms
}; };
static const wxString kWaveStrings[kNumWaveforms] = static const wxString kWaveStrings[nWaveforms] =
{ {
XO("Sine"), XO("Sine"),
XO("Square"), XO("Square"),
@ -71,8 +71,8 @@ Param( StartAmp, double, wxT("StartAmp"), 0.8, 0.0, 1.0,
Param( EndAmp, double, wxT("EndAmp"), 0.1, 0.0, 1.0, 1 ); Param( EndAmp, double, wxT("EndAmp"), 0.1, 0.0, 1.0, 1 );
Param( Frequency, double, wxT("Frequency"), 440.0, 1.0, DBL_MAX, 1 ); Param( Frequency, double, wxT("Frequency"), 440.0, 1.0, DBL_MAX, 1 );
Param( Amplitude, double, wxT("Amplitude"), 0.8, 0.0, 1.0, 1 ); Param( Amplitude, double, wxT("Amplitude"), 0.8, 0.0, 1.0, 1 );
Param( Waveform, int, wxT("Waveform"), 0, 0, kNumWaveforms - 1, 1 ); Param( Waveform, int, wxT("Waveform"), 0, 0, nWaveforms - 1, 1 );
Param( Interp, int, wxT("Interpolation"), 0, 0, kNumInterpolations - 1, 1 ); Param( Interp, int, wxT("Interpolation"), 0, 0, nInterpolations - 1, 1 );
// //
// EffectToneGen // EffectToneGen
@ -84,8 +84,8 @@ END_EVENT_TABLE();
EffectToneGen::EffectToneGen(bool isChirp) EffectToneGen::EffectToneGen(bool isChirp)
{ {
wxASSERT(kNumWaveforms == WXSIZEOF(kWaveStrings)); wxASSERT(nWaveforms == WXSIZEOF(kWaveStrings));
wxASSERT(kNumInterpolations == WXSIZEOF(kInterStrings)); wxASSERT(nInterpolations == WXSIZEOF(kInterStrings));
mChirp = isChirp; mChirp = isChirp;
@ -96,12 +96,12 @@ EffectToneGen::EffectToneGen(bool isChirp)
mAmplitude[1] = DEF_EndAmp; mAmplitude[1] = DEF_EndAmp;
mInterpolation = DEF_Interp; mInterpolation = DEF_Interp;
for (int i = 0; i < kNumWaveforms; i++) for (int i = 0; i < nWaveforms; i++)
{ {
mWaveforms.Add(wxGetTranslation(kWaveStrings[i])); mWaveforms.Add(wxGetTranslation(kWaveStrings[i]));
} }
for (int i = 0; i < kNumInterpolations; i++) for (int i = 0; i < nInterpolations; i++)
{ {
mInterpolations.Add(wxGetTranslation(kInterStrings[i])); mInterpolations.Add(wxGetTranslation(kInterStrings[i]));
} }
@ -263,8 +263,8 @@ bool EffectToneGen::DefineParams( ShuttleParams & S ){
S.SHUTTLE_PARAM( mFrequency[0], Frequency ); S.SHUTTLE_PARAM( mFrequency[0], Frequency );
S.SHUTTLE_PARAM( mAmplitude[0], Amplitude ); S.SHUTTLE_PARAM( mAmplitude[0], Amplitude );
} }
wxArrayString waves( kNumWaveforms, kWaveStrings ); wxArrayString waves( nWaveforms, kWaveStrings );
wxArrayString interps( kNumInterpolations ,kInterStrings ); wxArrayString interps( nInterpolations ,kInterStrings );
S.SHUTTLE_ENUM_PARAM( mWaveform, Waveform, waves ); S.SHUTTLE_ENUM_PARAM( mWaveform, Waveform, waves );
S.SHUTTLE_ENUM_PARAM( mInterpolation, Interp, interps ); S.SHUTTLE_ENUM_PARAM( mInterpolation, Interp, interps );
@ -299,8 +299,8 @@ bool EffectToneGen::GetAutomationParameters(CommandAutomationParameters & parms)
bool EffectToneGen::SetAutomationParameters(CommandAutomationParameters & parms) bool EffectToneGen::SetAutomationParameters(CommandAutomationParameters & parms)
{ {
ReadAndVerifyEnum(Waveform, wxArrayString(kNumWaveforms, kWaveStrings)); ReadAndVerifyEnum(Waveform, wxArrayString(nWaveforms, kWaveStrings));
ReadAndVerifyEnum(Interp, wxArrayString(kNumInterpolations, kInterStrings)); ReadAndVerifyEnum(Interp, wxArrayString(nInterpolations, kInterStrings));
if (mChirp) if (mChirp)
{ {
ReadAndVerifyDouble(StartFreq); ReadAndVerifyDouble(StartFreq);

View File

@ -41,10 +41,10 @@ enum kActions
{ {
kTruncate, kTruncate,
kCompress, kCompress,
kNumActions nActions
}; };
static const wxChar *kActionStrings[kNumActions] = static const wxChar *kActionStrings[nActions] =
{ {
XO("Truncate Detected Silence"), XO("Truncate Detected Silence"),
XO("Compress Excess Silence") XO("Compress Excess Silence")
@ -60,7 +60,7 @@ static const wxChar *kActionStrings[kNumActions] =
// //
// Name Type Key Def Min Max Scale // Name Type Key Def Min Max Scale
Param( DbIndex, int, wxT("Db"), 0, 0, Enums::NumDbChoices - 1, 1 ); Param( DbIndex, int, wxT("Db"), 0, 0, Enums::NumDbChoices - 1, 1 );
Param( ActIndex, int, wxT("Action"), kTruncate, 0, kNumActions - 1, 1 ); Param( ActIndex, int, wxT("Action"), kTruncate, 0, nActions - 1, 1 );
Param( Minimum, double, wxT("Minimum"), 0.5, 0.001, 10000.0, 1 ); Param( Minimum, double, wxT("Minimum"), 0.5, 0.001, 10000.0, 1 );
Param( Truncate, double, wxT("Truncate"), 0.5, 0.0, 10000.0, 1 ); Param( Truncate, double, wxT("Truncate"), 0.5, 0.0, 10000.0, 1 );
Param( Compress, double, wxT("Compress"), 50.0, 0.0, 99.9, 1 ); Param( Compress, double, wxT("Compress"), 50.0, 0.0, 99.9, 1 );
@ -135,7 +135,7 @@ EffectType EffectTruncSilence::GetType()
// EffectClientInterface implementation // EffectClientInterface implementation
bool EffectTruncSilence::DefineParams( ShuttleParams & S ){ bool EffectTruncSilence::DefineParams( ShuttleParams & S ){
wxArrayString actions(kNumActions, kActionStrings); wxArrayString actions(nActions, kActionStrings);
//actions.Insert(wxT("0"), 0); // Compatible with 2.1.0 and before //actions.Insert(wxT("0"), 0); // Compatible with 2.1.0 and before
//actions.Insert(wxT("1"), 1); // Compatible with 2.1.0 and before //actions.Insert(wxT("1"), 1); // Compatible with 2.1.0 and before
@ -162,7 +162,7 @@ bool EffectTruncSilence::GetAutomationParameters(CommandAutomationParameters & p
bool EffectTruncSilence::SetAutomationParameters(CommandAutomationParameters & parms) bool EffectTruncSilence::SetAutomationParameters(CommandAutomationParameters & parms)
{ {
wxArrayString actions(kNumActions, kActionStrings); wxArrayString actions(nActions, kActionStrings);
actions.Insert(wxT("0"), 0); // Compatible with 2.1.0 and before actions.Insert(wxT("0"), 0); // Compatible with 2.1.0 and before
actions.Insert(wxT("1"), 1); // Compatible with 2.1.0 and before actions.Insert(wxT("1"), 1); // Compatible with 2.1.0 and before
@ -181,9 +181,9 @@ bool EffectTruncSilence::SetAutomationParameters(CommandAutomationParameters & p
mbIndependent = Independent; mbIndependent = Independent;
// Readjust for 2.1.0 or before // Readjust for 2.1.0 or before
if (mActionIndex >= kNumActions) if (mActionIndex >= nActions)
{ {
mActionIndex -= kNumActions; mActionIndex -= nActions;
} }
return true; return true;
@ -713,10 +713,10 @@ bool EffectTruncSilence::Analyze(RegionList& silenceList,
void EffectTruncSilence::PopulateOrExchange(ShuttleGui & S) void EffectTruncSilence::PopulateOrExchange(ShuttleGui & S)
{ {
wxASSERT(kNumActions == WXSIZEOF(kActionStrings)); wxASSERT(nActions == WXSIZEOF(kActionStrings));
wxArrayString actionChoices; wxArrayString actionChoices;
for (int i = 0; i < kNumActions; i++) for (int i = 0; i < nActions; i++)
{ {
actionChoices.Add(wxGetTranslation(kActionStrings[i])); actionChoices.Add(wxGetTranslation(kActionStrings[i]));
} }

View File

@ -26,7 +26,7 @@ updating the ODPCMAliasBlockFile and the GUI of the newly available data.
#include <wx/wx.h> #include <wx/wx.h>
//36 blockfiles > 3 minutes stereo 44.1kHz per ODTask::DoSome //36 blockfiles > 3 minutes stereo 44.1kHz per ODTask::DoSome
#define kNumBlockFilesPerDoSome 36 #define nBlockFilesPerDoSome 36
///Creates a NEW task that computes summaries for a wavetrack that needs to be specified through SetWaveTrack() ///Creates a NEW task that computes summaries for a wavetrack that needs to be specified through SetWaveTrack()
ODComputeSummaryTask::ODComputeSummaryTask() ODComputeSummaryTask::ODComputeSummaryTask()
@ -138,7 +138,7 @@ float ODComputeSummaryTask::ComputeNextWorkUntilPercentageComplete()
float nextPercent; float nextPercent;
mPercentCompleteMutex.Lock(); mPercentCompleteMutex.Lock();
nextPercent=mPercentComplete + ((float)kNumBlockFilesPerDoSome/(mMaxBlockFiles+1)); nextPercent=mPercentComplete + ((float)nBlockFilesPerDoSome/(mMaxBlockFiles+1));
mPercentCompleteMutex.Unlock(); mPercentCompleteMutex.Unlock();
return nextPercent; return nextPercent;

View File

@ -143,6 +143,9 @@
<ClCompile Include="..\..\..\src\commands\Demo.cpp" /> <ClCompile Include="..\..\..\src\commands\Demo.cpp" />
<ClCompile Include="..\..\..\src\commands\LoadCommands.cpp" /> <ClCompile Include="..\..\..\src\commands\LoadCommands.cpp" />
<ClCompile Include="..\..\..\src\commands\OpenSaveCommands.cpp" /> <ClCompile Include="..\..\..\src\commands\OpenSaveCommands.cpp" />
<ClCompile Include="..\..\..\src\commands\SetClipCommand.cpp" />
<ClCompile Include="..\..\..\src\commands\SetLabelCommand.cpp" />
<ClCompile Include="..\..\..\src\commands\SetProjectCommand.cpp" />
<ClCompile Include="..\..\..\src\Dependencies.cpp" /> <ClCompile Include="..\..\..\src\Dependencies.cpp" />
<ClCompile Include="..\..\..\src\DeviceChange.cpp" /> <ClCompile Include="..\..\..\src\DeviceChange.cpp" />
<ClCompile Include="..\..\..\src\DeviceManager.cpp" /> <ClCompile Include="..\..\..\src\DeviceManager.cpp" />
@ -481,6 +484,9 @@
<ClInclude Include="..\..\..\src\commands\Demo.h" /> <ClInclude Include="..\..\..\src\commands\Demo.h" />
<ClInclude Include="..\..\..\src\commands\LoadCommands.h" /> <ClInclude Include="..\..\..\src\commands\LoadCommands.h" />
<ClInclude Include="..\..\..\src\commands\OpenSaveCommands.h" /> <ClInclude Include="..\..\..\src\commands\OpenSaveCommands.h" />
<ClInclude Include="..\..\..\src\commands\SetClipCommand.h" />
<ClInclude Include="..\..\..\src\commands\SetLabelCommand.h" />
<ClInclude Include="..\..\..\src\commands\SetProjectCommand.h" />
<ClInclude Include="..\..\..\src\DeviceChange.h" /> <ClInclude Include="..\..\..\src\DeviceChange.h" />
<ClInclude Include="..\..\..\src\Diags.h" /> <ClInclude Include="..\..\..\src\Diags.h" />
<ClInclude Include="..\..\..\src\effects\Distortion.h" /> <ClInclude Include="..\..\..\src\effects\Distortion.h" />

View File

@ -1064,6 +1064,15 @@
<ClCompile Include="..\..\..\src\commands\CommandTargets.cpp"> <ClCompile Include="..\..\..\src\commands\CommandTargets.cpp">
<Filter>src\commands</Filter> <Filter>src\commands</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\src\commands\SetClipCommand.cpp">
<Filter>src\commands</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\commands\SetLabelCommand.cpp">
<Filter>src\commands</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\commands\SetProjectCommand.cpp">
<Filter>src\commands</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\..\src\AboutDialog.h"> <ClInclude Include="..\..\..\src\AboutDialog.h">
@ -2122,6 +2131,15 @@
<ClInclude Include="..\..\..\src\commands\SetTrackInfoCommand.h"> <ClInclude Include="..\..\..\src\commands\SetTrackInfoCommand.h">
<Filter>src\commands</Filter> <Filter>src\commands</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\src\commands\SetClipCommand.h">
<Filter>src\commands</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\commands\SetLabelCommand.h">
<Filter>src\commands</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\commands\SetProjectCommand.h">
<Filter>src\commands</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Image Include="..\..\audacity.ico"> <Image Include="..\..\audacity.ico">