editor/libeditor/EditorCommands.h
author Nathan Froyd <froydnj@gmail.com>
Fri, 12 Aug 2016 22:43:49 -0400
changeset 400339 e3608df9fe09f509a8fe62be0cd6743151e4f7a3
parent 385976 42365e0caa72ba546d77f89349d30955f2a45e8c
child 404555 afaae749f78d2ef896c0a8fcc496a5bffe77f812
permissions -rw-r--r--
Bug 1294537 - introduce a non-null-checking placement operator new; r=sunfish,nbp The default placement operator new is defined to always require that its result be null-checked. A sufficiently smart compiler can remove this check, but not all compilers are sufficiently smart. Better to have a custom placement operator new that will remove null checks in a way defined by the standard.

/* -*- 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_

#include "nsIControllerCommand.h"
#include "nsISupportsImpl.h"
#include "nscore.h"

class nsICommandParams;
class nsISupports;

namespace mozilla {

/**
 * This is a virtual base class for commands registered with the editor
 * controller.  Note that such commands can be shared by more than on editor
 * instance, so MUST be stateless. Any state must be stored via the refCon
 * (an nsIEditor).
 */

class EditorCommandBase : public nsIControllerCommand
{
public:
  EditorCommandBase();

  NS_DECL_ISUPPORTS

  NS_IMETHOD IsCommandEnabled(const char* aCommandName,
                              nsISupports* aCommandRefCon,
                              bool* aIsEnabled) override = 0;
  NS_IMETHOD DoCommand(const char* aCommandName,
                       nsISupports* aCommandRefCon) override = 0;

protected:
  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;                      \
  NS_IMETHOD DoCommand(const char* aCommandName,                               \
                       nsISupports* aCommandRefCon) override;                  \
  NS_IMETHOD DoCommandParams(const char* aCommandName,                         \
                             nsICommandParams* aParams,                        \
                             nsISupports* aCommandRefCon) override;            \
  NS_IMETHOD GetCommandStateParams(const char* aCommandName,                   \
                                   nsICommandParams* aParams,                  \
                                   nsISupports* aCommandRefCon) override;      \
};

// basic editor commands
NS_DECL_EDITOR_COMMAND(UndoCommand)
NS_DECL_EDITOR_COMMAND(RedoCommand)
NS_DECL_EDITOR_COMMAND(ClearUndoCommand)

NS_DECL_EDITOR_COMMAND(CutCommand)
NS_DECL_EDITOR_COMMAND(CutOrDeleteCommand)
NS_DECL_EDITOR_COMMAND(CopyCommand)
NS_DECL_EDITOR_COMMAND(CopyOrDeleteCommand)
NS_DECL_EDITOR_COMMAND(CopyAndCollapseToEndCommand)
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)
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_