mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-22 06:22:58 +02:00
Locate and position the current Audacity source code, and clear a variety of old junk out of the way into junk-branches
This commit is contained in:
159
src/commands/Command.h
Normal file
159
src/commands/Command.h
Normal file
@@ -0,0 +1,159 @@
|
||||
/**********************************************************************
|
||||
|
||||
Audacity - A Digital Audio Editor
|
||||
Copyright 1999-2009 Audacity Team
|
||||
File License: wxWidgets
|
||||
|
||||
Dan Horgan
|
||||
|
||||
******************************************************************//**
|
||||
|
||||
\file Command.h
|
||||
\brief Contains declaration of Command base class.
|
||||
|
||||
\class CommandExecutionContext
|
||||
\brief Represents a context to which a command may be applied.
|
||||
|
||||
\class Command
|
||||
\brief Base class which encapsulates a process.
|
||||
|
||||
That process may depend on certain parameters (determined by the command's
|
||||
signature) and may produce output on various channels. Any process which is to
|
||||
be controlled by a script should be separated out into its own Command class.
|
||||
(And that class should be registered with the CommandDirectory).
|
||||
|
||||
*//*******************************************************************/
|
||||
|
||||
#ifndef __COMMAND__
|
||||
#define __COMMAND__
|
||||
|
||||
#include "CommandMisc.h"
|
||||
#include "CommandSignature.h"
|
||||
|
||||
class AudacityApp;
|
||||
class AudacityProject;
|
||||
class CommandOutputTarget;
|
||||
|
||||
class CommandExecutionContext
|
||||
{
|
||||
public:
|
||||
AudacityApp *app;
|
||||
AudacityProject *proj;
|
||||
CommandExecutionContext(AudacityApp *app, AudacityProject *proj)
|
||||
: app(app), proj(proj) {}
|
||||
};
|
||||
|
||||
// Interface
|
||||
class Command
|
||||
{
|
||||
public:
|
||||
virtual void Progress(double completed) = 0;
|
||||
virtual void Status(wxString message) = 0;
|
||||
virtual void Error(wxString message) = 0;
|
||||
virtual ~Command() { }
|
||||
virtual wxString GetName() = 0;
|
||||
virtual CommandSignature &GetSignature() = 0;
|
||||
virtual bool SetParameter(const wxString ¶mName, const wxVariant ¶mValue);
|
||||
virtual bool Apply(CommandExecutionContext context) = 0;
|
||||
};
|
||||
|
||||
// Command which wraps another command
|
||||
class DecoratedCommand : public Command
|
||||
{
|
||||
protected:
|
||||
Command *mCommand;
|
||||
public:
|
||||
virtual void Progress(double completed);
|
||||
virtual void Status(wxString message);
|
||||
virtual void Error(wxString message);
|
||||
|
||||
DecoratedCommand(Command *cmd)
|
||||
: mCommand(cmd)
|
||||
{
|
||||
wxASSERT(cmd != NULL);
|
||||
}
|
||||
virtual ~DecoratedCommand();
|
||||
virtual wxString GetName();
|
||||
virtual CommandSignature &GetSignature();
|
||||
virtual bool SetParameter(const wxString ¶mName, const wxVariant ¶mValue);
|
||||
virtual bool Apply(CommandExecutionContext context) = 0;
|
||||
};
|
||||
|
||||
// Decorator command that performs the given command and then outputs a status
|
||||
// message according to the result
|
||||
class ApplyAndSendResponse : public DecoratedCommand
|
||||
{
|
||||
public:
|
||||
ApplyAndSendResponse(Command *cmd)
|
||||
: DecoratedCommand(cmd)
|
||||
{ }
|
||||
|
||||
virtual bool Apply(CommandExecutionContext context);
|
||||
};
|
||||
|
||||
class CommandImplementation : public Command
|
||||
{
|
||||
private:
|
||||
CommandType &mType;
|
||||
ParamValueMap mParams;
|
||||
|
||||
/// Using the command signature, looks up a possible parameter value and
|
||||
/// checks whether it passes the validator.
|
||||
bool Valid(const wxString ¶mName, const wxVariant ¶mValue);
|
||||
|
||||
protected:
|
||||
CommandOutputTarget *mOutput;
|
||||
|
||||
// Convenience methods for allowing subclasses to access parameters
|
||||
void TypeCheck(const wxString &typeName,
|
||||
const wxString ¶mName,
|
||||
const wxVariant ¶m);
|
||||
void CheckParam(const wxString ¶mName);
|
||||
bool GetBool(const wxString ¶mName);
|
||||
long GetLong(const wxString ¶mName);
|
||||
double GetDouble(const wxString ¶mName);
|
||||
wxString GetString(const wxString ¶mName);
|
||||
|
||||
public:
|
||||
// Convenience methods for passing messages to the output target
|
||||
void Progress(double completed);
|
||||
void Status(wxString status);
|
||||
void Error(wxString message);
|
||||
|
||||
/// Constructor should not be called directly; only by a factory which
|
||||
/// ensures name and params are set appropriately for the command.
|
||||
CommandImplementation(CommandType &type,
|
||||
CommandOutputTarget *output);
|
||||
|
||||
virtual ~CommandImplementation();
|
||||
|
||||
/// An instance method for getting the command name (for consistency)
|
||||
wxString GetName();
|
||||
|
||||
/// Get the signature of the command
|
||||
CommandSignature &GetSignature();
|
||||
|
||||
/// Attempt to one of the command's parameters to a particular value.
|
||||
/// (Note: wxVariant is reference counted)
|
||||
bool SetParameter(const wxString ¶mName, const wxVariant ¶mValue);
|
||||
|
||||
// Subclasses should override the following:
|
||||
// =========================================
|
||||
|
||||
/// Actually carry out the command. Return true if successful and false
|
||||
/// otherwise.
|
||||
virtual bool Apply(CommandExecutionContext context);
|
||||
};
|
||||
|
||||
#endif /* End of include guard: __COMMAND__ */
|
||||
|
||||
// Indentation settings for Vim and Emacs and unique identifier for Arch, a
|
||||
// version control system. Please do not modify past this point.
|
||||
//
|
||||
// Local Variables:
|
||||
// c-basic-offset: 3
|
||||
// indent-tabs-mode: nil
|
||||
// End:
|
||||
//
|
||||
// vim: et sts=3 sw=3
|
||||
// arch-tag: TBD
|
Reference in New Issue
Block a user