mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Lift a call to GetActiveProject into ScriptCommandRelay...
... Don't do it at the low level of construction of a command object. Do it only at the highest possible level, where an external scripting module or Nyquist calls into the command framework. Pass the project pointer down where it is needed.
This commit is contained in:
parent
1e3779c2f3
commit
a1eeb528b7
@ -39,9 +39,10 @@ void BatchEvalCommandType::BuildSignature(CommandSignature &signature)
|
|||||||
signature.AddParameter(wxT("MacroName"), wxT(""), std::move(macroValidator));
|
signature.AddParameter(wxT("MacroName"), wxT(""), std::move(macroValidator));
|
||||||
}
|
}
|
||||||
|
|
||||||
OldStyleCommandPointer BatchEvalCommandType::Create(std::unique_ptr<CommandOutputTargets> && WXUNUSED(target))
|
OldStyleCommandPointer BatchEvalCommandType::Create( AudacityProject *project,
|
||||||
|
std::unique_ptr<CommandOutputTargets> && WXUNUSED(target))
|
||||||
{
|
{
|
||||||
return std::make_shared<BatchEvalCommand>(*GetActiveProject(), *this);
|
return std::make_shared<BatchEvalCommand>(*project, *this);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BatchEvalCommand::Apply(const CommandContext & context)
|
bool BatchEvalCommand::Apply(const CommandContext & context)
|
||||||
|
@ -33,7 +33,8 @@ class BatchEvalCommandType final : public OldStyleCommandType
|
|||||||
public:
|
public:
|
||||||
ComponentInterfaceSymbol BuildName() override;
|
ComponentInterfaceSymbol BuildName() override;
|
||||||
void BuildSignature(CommandSignature &signature) override;
|
void BuildSignature(CommandSignature &signature) override;
|
||||||
OldStyleCommandPointer Create(std::unique_ptr<CommandOutputTargets> &&target) override;
|
OldStyleCommandPointer Create( AudacityProject *project,
|
||||||
|
std::unique_ptr<CommandOutputTargets> &&target) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BatchEvalCommand final : public CommandImplementation
|
class BatchEvalCommand final : public CommandImplementation
|
||||||
|
@ -30,16 +30,18 @@ system by constructing BatchCommandEval objects.
|
|||||||
#include "CommandTargets.h"
|
#include "CommandTargets.h"
|
||||||
#include "../Shuttle.h"
|
#include "../Shuttle.h"
|
||||||
|
|
||||||
CommandBuilder::CommandBuilder(const wxString &cmdString)
|
CommandBuilder::CommandBuilder(
|
||||||
|
AudacityProject *project, const wxString &cmdString)
|
||||||
: mValid(false)
|
: mValid(false)
|
||||||
{
|
{
|
||||||
BuildCommand(cmdString);
|
BuildCommand(project, cmdString);
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandBuilder::CommandBuilder(const wxString &cmdName, const wxString ¶ms)
|
CommandBuilder::CommandBuilder(AudacityProject *project,
|
||||||
|
const wxString &cmdName, const wxString ¶ms)
|
||||||
: mValid(false)
|
: mValid(false)
|
||||||
{
|
{
|
||||||
BuildCommand(cmdName, params);
|
BuildCommand(project, cmdName, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandBuilder::~CommandBuilder()
|
CommandBuilder::~CommandBuilder()
|
||||||
@ -77,7 +79,8 @@ void CommandBuilder::Success(const OldStyleCommandPointer &cmd)
|
|||||||
mValid = true;
|
mValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandBuilder::BuildCommand(const wxString &cmdName,
|
void CommandBuilder::BuildCommand(AudacityProject *project,
|
||||||
|
const wxString &cmdName,
|
||||||
const wxString &cmdParamsArg)
|
const wxString &cmdParamsArg)
|
||||||
{
|
{
|
||||||
// Stage 1: create a Command object of the right type
|
// Stage 1: create a Command object of the right type
|
||||||
@ -97,7 +100,7 @@ void CommandBuilder::BuildCommand(const wxString &cmdName,
|
|||||||
#endif
|
#endif
|
||||||
OldStyleCommandType *type = CommandDirectory::Get()->LookUp(wxT("BatchCommand"));
|
OldStyleCommandType *type = CommandDirectory::Get()->LookUp(wxT("BatchCommand"));
|
||||||
wxASSERT(type != NULL);
|
wxASSERT(type != NULL);
|
||||||
mCommand = type->Create(nullptr);
|
mCommand = type->Create(project, nullptr);
|
||||||
mCommand->SetParameter(wxT("CommandName"), cmdName);
|
mCommand->SetParameter(wxT("CommandName"), cmdName);
|
||||||
mCommand->SetParameter(wxT("ParamString"), cmdParamsArg);
|
mCommand->SetParameter(wxT("ParamString"), cmdParamsArg);
|
||||||
auto aCommand = std::make_shared<ApplyAndSendResponse>(mCommand, output);
|
auto aCommand = std::make_shared<ApplyAndSendResponse>(mCommand, output);
|
||||||
@ -181,7 +184,8 @@ void CommandBuilder::BuildCommand(const wxString &cmdName,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandBuilder::BuildCommand(const wxString &cmdStringArg)
|
void CommandBuilder::BuildCommand(
|
||||||
|
AudacityProject *project, const wxString &cmdStringArg)
|
||||||
{
|
{
|
||||||
wxString cmdString(cmdStringArg);
|
wxString cmdString(cmdStringArg);
|
||||||
|
|
||||||
@ -205,5 +209,5 @@ void CommandBuilder::BuildCommand(const wxString &cmdStringArg)
|
|||||||
cmdName.Trim(true);
|
cmdName.Trim(true);
|
||||||
cmdParams.Trim(false);
|
cmdParams.Trim(false);
|
||||||
|
|
||||||
BuildCommand(cmdName, cmdParams);
|
BuildCommand(project, cmdName, cmdParams);
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "../MemoryX.h"
|
#include "../MemoryX.h"
|
||||||
|
|
||||||
|
class AudacityProject;
|
||||||
class OldStyleCommand;
|
class OldStyleCommand;
|
||||||
using OldStyleCommandPointer = std::shared_ptr<OldStyleCommand>;
|
using OldStyleCommandPointer = std::shared_ptr<OldStyleCommand>;
|
||||||
class wxString;
|
class wxString;
|
||||||
@ -34,11 +35,12 @@ class CommandBuilder
|
|||||||
|
|
||||||
void Failure(const wxString &msg = {});
|
void Failure(const wxString &msg = {});
|
||||||
void Success(const OldStyleCommandPointer &cmd);
|
void Success(const OldStyleCommandPointer &cmd);
|
||||||
void BuildCommand(const wxString &cmdName, const wxString &cmdParams);
|
void BuildCommand( AudacityProject *project,
|
||||||
void BuildCommand(const wxString &cmdString);
|
const wxString &cmdName, const wxString &cmdParams);
|
||||||
|
void BuildCommand( AudacityProject *project, const wxString &cmdString);
|
||||||
public:
|
public:
|
||||||
CommandBuilder(const wxString &cmdString);
|
CommandBuilder(AudacityProject *project, const wxString &cmdString);
|
||||||
CommandBuilder(const wxString &cmdName,
|
CommandBuilder(AudacityProject *project, const wxString &cmdName,
|
||||||
const wxString &cmdParams);
|
const wxString &cmdParams);
|
||||||
~CommandBuilder();
|
~CommandBuilder();
|
||||||
bool WasValid();
|
bool WasValid();
|
||||||
|
@ -63,7 +63,8 @@ public:
|
|||||||
virtual void BuildSignature(CommandSignature &signature) = 0;
|
virtual void BuildSignature(CommandSignature &signature) = 0;
|
||||||
|
|
||||||
// Create a command instance with the specified output target
|
// Create a command instance with the specified output target
|
||||||
virtual OldStyleCommandPointer Create(std::unique_ptr<CommandOutputTargets> &&target) = 0;
|
virtual OldStyleCommandPointer Create(
|
||||||
|
AudacityProject *project, std::unique_ptr<CommandOutputTargets> &&target) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* End of include guard: __COMMANDTYPE__ */
|
#endif /* End of include guard: __COMMANDTYPE__ */
|
||||||
|
@ -24,6 +24,7 @@ code out of ModuleManager.
|
|||||||
#include "CommandTargets.h"
|
#include "CommandTargets.h"
|
||||||
#include "CommandBuilder.h"
|
#include "CommandBuilder.h"
|
||||||
#include "AppCommandEvent.h"
|
#include "AppCommandEvent.h"
|
||||||
|
#include "../Project.h"
|
||||||
#include <wx/app.h>
|
#include <wx/app.h>
|
||||||
#include <wx/window.h>
|
#include <wx/window.h>
|
||||||
#include <wx/string.h>
|
#include <wx/string.h>
|
||||||
@ -70,7 +71,7 @@ void ScriptCommandRelay::PostCommand(
|
|||||||
int ExecCommand(wxString *pIn, wxString *pOut)
|
int ExecCommand(wxString *pIn, wxString *pOut)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
CommandBuilder builder(*pIn);
|
CommandBuilder builder(::GetActiveProject(), *pIn);
|
||||||
if (builder.WasValid())
|
if (builder.WasValid())
|
||||||
{
|
{
|
||||||
OldStyleCommandPointer cmd = builder.GetCommand();
|
OldStyleCommandPointer cmd = builder.GetCommand();
|
||||||
@ -105,7 +106,7 @@ int ExecCommand(wxString *pIn, wxString *pOut)
|
|||||||
int ExecCommand2(wxString *pIn, wxString *pOut)
|
int ExecCommand2(wxString *pIn, wxString *pOut)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
CommandBuilder builder(*pIn);
|
CommandBuilder builder(::GetActiveProject(), *pIn);
|
||||||
if (builder.WasValid())
|
if (builder.WasValid())
|
||||||
{
|
{
|
||||||
OldStyleCommandPointer cmd = builder.GetCommand();
|
OldStyleCommandPointer cmd = builder.GetCommand();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user