/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #ifndef CRYINCLUDE_EDITOR_INCLUDE_ICOMMANDMANAGER_H #define CRYINCLUDE_EDITOR_INCLUDE_ICOMMANDMANAGER_H #pragma once #include "Command.h" typedef void (* TPfnDeleter)(void*); class ICommandManager { public: virtual ~ICommandManager() = default; virtual bool AddCommand(CCommand* pCommand, TPfnDeleter deleter = nullptr) = 0; virtual bool UnregisterCommand(const char* module, const char* name) = 0; virtual bool AttachUIInfo(const char* fullCmdName, const CCommand0::SUIInfo& uiInfo) = 0; virtual bool IsRegistered(const char* module, const char* name) const = 0; virtual bool IsRegistered(const char* cmdLine) const = 0; virtual bool IsRegistered(int commandId) const = 0; }; /// A set of helper template methods for an easy registration of commands namespace CommandManagerHelper { bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor); namespace Private { template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const FunctorType& functor); } }; template bool CommandManagerHelper::Private::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const FunctorType& functor) { assert(functor); if (!functor) { return false; } CommandType* pCommand = new CommandType(module, name, description, example, functor); if (pCmdMgr->AddCommand(pCommand) == false) { delete pCommand; return false; } return true; } inline bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand0>(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand0wRet >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand1 >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand1wRet >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand2 >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand2wRet >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand3 >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand3wRet >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand4 >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand4wRet >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand5 >(pCmdMgr, module, name, description, example, functor); } template bool CommandManagerHelper::RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const AZStd::function& functor) { return Private::RegisterCommand, CCommand6 >(pCmdMgr, module, name, description, example, functor); } #endif // CRYINCLUDE_EDITOR_INCLUDE_ICOMMANDMANAGER_H