/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ // Original file Copyright Crytek GMBH or its affiliates, used under license. #ifndef CRYINCLUDE_EDITOR_INCLUDE_ICOMMANDMANAGER_H #define CRYINCLUDE_EDITOR_INCLUDE_ICOMMANDMANAGER_H #pragma once #include "Command.h" #include "functor.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 Functor0& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor0wRet& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor1& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor1wRet& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor2& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor2wRet& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor3& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor3wRet& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor4& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor4wRet& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor5& functor); template bool RegisterCommand(ICommandManager* pCmdMgr, const char* module, const char* name, const char* description, const char* example, const Functor6& 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 Functor0& functor) { return Private::RegisterCommand(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 Functor0wRet& 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 Functor1& 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 Functor1wRet& 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 Functor2& 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 Functor2wRet& 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 Functor3& 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 Functor3wRet& 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 Functor4& 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 Functor4wRet& 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 Functor5& 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 Functor6& functor) { return Private::RegisterCommand, CCommand6 >(pCmdMgr, module, name, description, example, functor); } #endif // CRYINCLUDE_EDITOR_INCLUDE_ICOMMANDMANAGER_H