mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-13 08:06:32 +01:00
Manage the members of CommandOutputTarget with smart pointers
This commit is contained in:
@@ -81,9 +81,9 @@ void CommandBuilder::BuildCommand(const wxString &cmdName,
|
||||
{
|
||||
// Stage 1: create a Command object of the right type
|
||||
|
||||
CommandMessageTarget *scriptOutput = ScriptCommandRelay::GetResponseTarget();
|
||||
auto scriptOutput = ScriptCommandRelay::GetResponseTarget();
|
||||
auto output
|
||||
= std::make_unique<CommandOutputTarget>(new NullProgressTarget(),
|
||||
= std::make_unique<CommandOutputTarget>(std::make_unique<NullProgressTarget>(),
|
||||
scriptOutput,
|
||||
scriptOutput);
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ should be reference-counted.
|
||||
#ifndef __COMMANDTARGETS__
|
||||
#define __COMMANDTARGETS__
|
||||
|
||||
#include "../MemoryX.h"
|
||||
#include <wx/string.h>
|
||||
#include <wx/msgdlg.h>
|
||||
#include <wx/statusbr.h>
|
||||
@@ -170,28 +171,15 @@ public:
|
||||
class TargetFactory
|
||||
{
|
||||
public:
|
||||
static CommandProgressTarget *ProgressDefault()
|
||||
static std::unique_ptr<CommandProgressTarget> ProgressDefault()
|
||||
{
|
||||
return CreateProgressTarget<NullProgressTarget>();
|
||||
return std::make_unique<NullProgressTarget>();
|
||||
}
|
||||
|
||||
static CommandMessageTarget *MessageDefault()
|
||||
static std::shared_ptr<CommandMessageTarget> MessageDefault()
|
||||
{
|
||||
return CreateMessageTarget<MessageBoxTarget>();
|
||||
return std::make_shared<MessageBoxTarget>();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static CommandProgressTarget *CreateProgressTarget()
|
||||
{
|
||||
return (new T);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static CommandMessageTarget *CreateMessageTarget()
|
||||
{
|
||||
return (new T);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/// Used to aggregate the various output targets a command may have.
|
||||
@@ -199,21 +187,17 @@ public:
|
||||
class CommandOutputTarget
|
||||
{
|
||||
private:
|
||||
CommandProgressTarget *mProgressTarget;
|
||||
CommandMessageTarget *mStatusTarget;
|
||||
CommandMessageTarget *mErrorTarget;
|
||||
std::unique_ptr<CommandProgressTarget> mProgressTarget;
|
||||
std::shared_ptr<CommandMessageTarget> mStatusTarget;
|
||||
std::shared_ptr<CommandMessageTarget> mErrorTarget;
|
||||
public:
|
||||
CommandOutputTarget(CommandProgressTarget *pt = TargetFactory::ProgressDefault(),
|
||||
CommandMessageTarget *st = TargetFactory::MessageDefault(),
|
||||
CommandMessageTarget *et = TargetFactory::MessageDefault())
|
||||
: mProgressTarget(pt), mStatusTarget(st), mErrorTarget(et)
|
||||
CommandOutputTarget(std::unique_ptr<CommandProgressTarget> &&pt = TargetFactory::ProgressDefault(),
|
||||
std::shared_ptr<CommandMessageTarget> &&st = TargetFactory::MessageDefault(),
|
||||
std::shared_ptr<CommandMessageTarget> &&et = TargetFactory::MessageDefault())
|
||||
: mProgressTarget(std::move(pt)), mStatusTarget(st), mErrorTarget(et)
|
||||
{ }
|
||||
~CommandOutputTarget()
|
||||
{
|
||||
delete mProgressTarget;
|
||||
if (mErrorTarget != mStatusTarget)
|
||||
delete mStatusTarget;
|
||||
delete mErrorTarget;
|
||||
}
|
||||
void Progress(double completed)
|
||||
{
|
||||
|
||||
@@ -110,8 +110,8 @@ Response ScriptCommandRelay::ReceiveResponse()
|
||||
|
||||
/// Get a pointer to a message target which allows commands to send responses
|
||||
/// back to a script.
|
||||
ResponseQueueTarget *ScriptCommandRelay::GetResponseTarget()
|
||||
std::shared_ptr<ResponseQueueTarget> ScriptCommandRelay::GetResponseTarget()
|
||||
{
|
||||
// This should be deleted by a Command destructor
|
||||
return new ResponseQueueTarget(sResponseQueue);
|
||||
return std::make_shared<ResponseQueueTarget>(sResponseQueue);
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ class ScriptCommandRelay
|
||||
static void PostCommand(AudacityProject *project, const CommandHolder &cmd);
|
||||
static void SendResponse(const wxString &response);
|
||||
static Response ReceiveResponse();
|
||||
static ResponseQueueTarget *GetResponseTarget();
|
||||
static std::shared_ptr<ResponseQueueTarget> GetResponseTarget();
|
||||
};
|
||||
|
||||
#endif /* End of include guard: __SCRIPTCOMMANDRELAY__ */
|
||||
|
||||
Reference in New Issue
Block a user