mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-05 14:18:53 +02:00
Manage the members of CommandOutputTarget with smart pointers
This commit is contained in:
parent
e8ad90b3c9
commit
3481e678ea
@ -4634,7 +4634,7 @@ void AudacityProject::SafeDisplayStatusMessage(const wxChar *msg)
|
||||
{
|
||||
auto target
|
||||
= std::make_unique<CommandOutputTarget>(TargetFactory::ProgressDefault(),
|
||||
new StatusBarTarget(*mStatusBar),
|
||||
std::make_shared<StatusBarTarget>(*mStatusBar),
|
||||
TargetFactory::MessageDefault());
|
||||
CommandType *type = CommandDirectory::Get()->LookUp(wxT("Message"));
|
||||
wxASSERT_MSG(type != NULL, wxT("Message command not found!"));
|
||||
|
@ -257,9 +257,9 @@ std::unique_ptr<ScreenshotCommand> ScreenFrame::CreateCommand()
|
||||
{
|
||||
wxASSERT(mStatus != NULL);
|
||||
auto output =
|
||||
std::make_unique<CommandOutputTarget>(new NullProgressTarget(),
|
||||
new StatusBarTarget(*mStatus),
|
||||
new MessageBoxTarget());
|
||||
std::make_unique<CommandOutputTarget>(std::make_unique<NullProgressTarget>(),
|
||||
std::make_shared<StatusBarTarget>(*mStatus),
|
||||
std::make_shared<MessageBoxTarget>());
|
||||
CommandType *type = CommandDirectory::Get()->LookUp(wxT("Screenshot"));
|
||||
wxASSERT_MSG(type != NULL, wxT("Screenshot command doesn't exist!"));
|
||||
return std::make_unique<ScreenshotCommand>(*type, std::move(output), this);
|
||||
|
@ -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__ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user