2016-06-24 05:45:22 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#ifndef EditorCommands_h_
|
|
|
|
#define EditorCommands_h_
|
|
|
|
|
2019-04-15 10:49:46 +03:00
|
|
|
#include "mozilla/StaticPtr.h"
|
2016-06-24 05:45:22 +03:00
|
|
|
#include "nsIControllerCommand.h"
|
|
|
|
#include "nsISupportsImpl.h"
|
|
|
|
#include "nscore.h"
|
|
|
|
|
|
|
|
class nsICommandParams;
|
|
|
|
class nsISupports;
|
|
|
|
|
|
|
|
namespace mozilla {
|
|
|
|
|
|
|
|
/**
|
2019-04-15 10:49:46 +03:00
|
|
|
* This is a base class for commands registered with the editor controller.
|
|
|
|
* Note that such commands are designed as singleton classes. So, MUST be
|
|
|
|
* stateless. Any state must be stored via the refCon (an nsIEditor).
|
2016-06-24 05:45:22 +03:00
|
|
|
*/
|
|
|
|
|
|
|
|
class EditorCommandBase : public nsIControllerCommand {
|
|
|
|
public:
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
|
|
|
|
NS_IMETHOD IsCommandEnabled(const char* aCommandName,
|
|
|
|
nsISupports* aCommandRefCon,
|
|
|
|
bool* aIsEnabled) override = 0;
|
2019-03-12 04:55:03 +03:00
|
|
|
MOZ_CAN_RUN_SCRIPT
|
2016-06-24 05:45:22 +03:00
|
|
|
NS_IMETHOD DoCommand(const char* aCommandName,
|
|
|
|
nsISupports* aCommandRefCon) override = 0;
|
|
|
|
|
|
|
|
protected:
|
2019-04-15 10:49:46 +03:00
|
|
|
EditorCommandBase();
|
2016-06-24 05:45:22 +03:00
|
|
|
virtual ~EditorCommandBase() {}
|
|
|
|
};
|
|
|
|
|
|
|
|
#define NS_DECL_EDITOR_COMMAND(_cmd) \
|
|
|
|
class _cmd final : public EditorCommandBase { \
|
|
|
|
public: \
|
|
|
|
NS_IMETHOD IsCommandEnabled(const char* aCommandName, \
|
|
|
|
nsISupports* aCommandRefCon, \
|
|
|
|
bool* aIsEnabled) override; \
|
2019-03-12 04:55:03 +03:00
|
|
|
MOZ_CAN_RUN_SCRIPT \
|
2016-06-24 05:45:22 +03:00
|
|
|
NS_IMETHOD DoCommand(const char* aCommandName, \
|
|
|
|
nsISupports* aCommandRefCon) override; \
|
2019-03-12 04:55:03 +03:00
|
|
|
MOZ_CAN_RUN_SCRIPT \
|
2016-06-24 05:45:22 +03:00
|
|
|
NS_IMETHOD DoCommandParams(const char* aCommandName, \
|
|
|
|
nsICommandParams* aParams, \
|
|
|
|
nsISupports* aCommandRefCon) override; \
|
|
|
|
NS_IMETHOD GetCommandStateParams(const char* aCommandName, \
|
|
|
|
nsICommandParams* aParams, \
|
|
|
|
nsISupports* aCommandRefCon) override; \
|
2019-04-15 10:49:46 +03:00
|
|
|
static _cmd* GetInstance() { \
|
|
|
|
if (!sInstance) { \
|
|
|
|
sInstance = new _cmd(); \
|
|
|
|
} \
|
|
|
|
return sInstance; \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
static void Shutdown() { sInstance = nullptr; } \
|
|
|
|
\
|
|
|
|
protected: \
|
|
|
|
_cmd() = default; \
|
|
|
|
virtual ~_cmd() = default; \
|
|
|
|
\
|
|
|
|
private: \
|
|
|
|
static StaticRefPtr<_cmd> sInstance; \
|
2016-06-24 05:45:22 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
// basic editor commands
|
|
|
|
NS_DECL_EDITOR_COMMAND(UndoCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(RedoCommand)
|
|
|
|
|
|
|
|
NS_DECL_EDITOR_COMMAND(CutCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(CutOrDeleteCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(CopyCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(CopyOrDeleteCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(PasteCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(PasteTransferableCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(SwitchTextDirectionCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(DeleteCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(SelectAllCommand)
|
|
|
|
|
|
|
|
NS_DECL_EDITOR_COMMAND(SelectionMoveCommands)
|
|
|
|
|
|
|
|
// Insert content commands
|
|
|
|
NS_DECL_EDITOR_COMMAND(InsertPlaintextCommand)
|
2016-08-21 16:33:07 +03:00
|
|
|
NS_DECL_EDITOR_COMMAND(InsertParagraphCommand)
|
|
|
|
NS_DECL_EDITOR_COMMAND(InsertLineBreakCommand)
|
2016-06-24 05:45:22 +03:00
|
|
|
NS_DECL_EDITOR_COMMAND(PasteQuotationCommand)
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
// template for new command
|
|
|
|
NS_IMETHODIMP
|
|
|
|
FooCommand::IsCommandEnabled(const char* aCommandName,
|
|
|
|
nsISupports* aCommandRefCon,
|
|
|
|
bool* aIsEnabled)
|
|
|
|
{
|
|
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
FooCommand::DoCommand(const char* aCommandName,
|
|
|
|
const nsAString& aCommandParams,
|
|
|
|
nsISupports* aCommandRefCon)
|
|
|
|
{
|
|
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
} // namespace mozilla
|
|
|
|
|
|
|
|
#endif // #ifndef EditorCommands_h_
|