nsBaseCommandController.cpp (4543B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "nsBaseCommandController.h" 8 9 #include "mozilla/ControllerCommand.h" 10 #include "nsControllerCommandTable.h" 11 #include "nsIWeakReferenceUtils.h" 12 #include "nsString.h" 13 14 NS_IMPL_ISUPPORTS(nsBaseCommandController, nsIController, nsICommandController, 15 nsBaseCommandController); 16 17 nsBaseCommandController::nsBaseCommandController( 18 nsControllerCommandTable* aControllerCommandTable) 19 : mCommandTable(aControllerCommandTable) {} 20 21 nsBaseCommandController::~nsBaseCommandController() = default; 22 23 /* ======================================================================= 24 * nsIController 25 * ======================================================================= */ 26 27 NS_IMETHODIMP 28 nsBaseCommandController::IsCommandEnabled(const char* aCommand, bool* aResult) { 29 NS_ENSURE_ARG_POINTER(aCommand); 30 NS_ENSURE_ARG_POINTER(aResult); 31 NS_ENSURE_STATE(mCommandTable); 32 nsCOMPtr<nsISupports> context = do_QueryReferent(mContext); 33 *aResult = 34 mCommandTable->IsCommandEnabled(nsDependentCString(aCommand), context); 35 return NS_OK; 36 } 37 38 NS_IMETHODIMP 39 nsBaseCommandController::SupportsCommand(const char* aCommand, bool* aResult) { 40 NS_ENSURE_ARG_POINTER(aCommand); 41 NS_ENSURE_ARG_POINTER(aResult); 42 NS_ENSURE_STATE(mCommandTable); 43 *aResult = mCommandTable->SupportsCommand(nsDependentCString(aCommand)); 44 return NS_OK; 45 } 46 47 NS_IMETHODIMP 48 nsBaseCommandController::DoCommand(const char* aCommand) { 49 NS_ENSURE_ARG_POINTER(aCommand); 50 NS_ENSURE_STATE(mCommandTable); 51 52 nsCOMPtr<nsISupports> context = do_QueryReferent(mContext); 53 RefPtr<nsControllerCommandTable> table = mCommandTable; 54 nsDependentCString command(aCommand); 55 if (RefPtr handler = table->FindCommandHandler(command)) { 56 return handler->DoCommand(command, nullptr, context); 57 } 58 return NS_OK; 59 } 60 61 NS_IMETHODIMP 62 nsBaseCommandController::DoCommandWithParams(const char* aCommand, 63 nsICommandParams* aParams) { 64 NS_ENSURE_ARG_POINTER(aCommand); 65 NS_ENSURE_STATE(mCommandTable); 66 67 nsCOMPtr<nsISupports> context = do_QueryReferent(mContext); 68 RefPtr<nsControllerCommandTable> table = mCommandTable; 69 nsDependentCString command(aCommand); 70 if (RefPtr handler = table->FindCommandHandler(command)) { 71 handler->DoCommand(command, aParams, context); 72 } 73 return NS_OK; 74 } 75 76 NS_IMETHODIMP 77 nsBaseCommandController::GetCommandStateWithParams(const char* aCommand, 78 nsICommandParams* aParams) { 79 NS_ENSURE_ARG_POINTER(aCommand); 80 NS_ENSURE_STATE(mCommandTable); 81 82 nsCOMPtr<nsISupports> context = do_QueryReferent(mContext); 83 nsDependentCString command(aCommand); 84 if (RefPtr handler = mCommandTable->FindCommandHandler(command)) { 85 handler->GetCommandStateParams(command, aParams, context); 86 } 87 return NS_OK; 88 } 89 90 NS_IMETHODIMP 91 nsBaseCommandController::OnEvent(const char* aEventName) { 92 NS_ENSURE_ARG_POINTER(aEventName); 93 return NS_OK; 94 } 95 96 NS_IMETHODIMP 97 nsBaseCommandController::GetSupportedCommands(nsTArray<nsCString>& aCommands) { 98 NS_ENSURE_STATE(mCommandTable); 99 mCommandTable->GetSupportedCommands(aCommands); 100 return NS_OK; 101 } 102 103 already_AddRefed<nsBaseCommandController> 104 nsBaseCommandController::CreateWindowController() { 105 return mozilla::MakeAndAddRef<nsBaseCommandController>( 106 nsControllerCommandTable::WindowCommandTable()); 107 } 108 109 already_AddRefed<nsBaseCommandController> 110 nsBaseCommandController::CreateEditorController() { 111 return mozilla::MakeAndAddRef<nsBaseCommandController>( 112 nsControllerCommandTable::EditorCommandTable()); 113 } 114 115 already_AddRefed<nsBaseCommandController> 116 nsBaseCommandController::CreateEditingController() { 117 return mozilla::MakeAndAddRef<nsBaseCommandController>( 118 nsControllerCommandTable::EditingCommandTable()); 119 } 120 121 already_AddRefed<nsBaseCommandController> 122 nsBaseCommandController::CreateHTMLEditorController() { 123 return mozilla::MakeAndAddRef<nsBaseCommandController>( 124 nsControllerCommandTable::HTMLEditorCommandTable()); 125 } 126 127 already_AddRefed<nsBaseCommandController> 128 nsBaseCommandController::CreateHTMLEditorDocStateController() { 129 return mozilla::MakeAndAddRef<nsBaseCommandController>( 130 nsControllerCommandTable::HTMLEditorDocStateCommandTable()); 131 }