From 00c7073096a7bf40cee7595d0d419b9feff1c120 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 18 May 2013 19:42:42 +0300 Subject: Add ability to call input action from commands. add new commands: /drop - drop from first slot. /dropn - drop fro any slots. /movetotarget - move to target position. /movetohome - move to home position. /sethome - set home position. --- src/commandhandler.cpp | 25 ++++++-- src/commandhandler.h | 8 ++- src/commands.h | 170 ++++++++++++++++++++++++++----------------------- 3 files changed, 117 insertions(+), 86 deletions(-) (limited to 'src') diff --git a/src/commandhandler.cpp b/src/commandhandler.cpp index a9b5672ee..d769f121f 100644 --- a/src/commandhandler.cpp +++ b/src/commandhandler.cpp @@ -22,6 +22,8 @@ #include "commandhandler.h" +#include "inputmanager.h" + #include "gui/widgets/chattab.h" #include "utils/gettext.h" @@ -37,7 +39,7 @@ CommandHandler::CommandHandler() : { const std::string name = commands[f].name; if (!name.empty()) - mCommands[name] = commands[f].func; + mCommands[name] = &commands[f]; } } @@ -68,7 +70,7 @@ void CommandHandler::invokeCommand(const std::string &type, const CommandsMapIter it = mCommands.find(type); if (it != mCommands.end()) { - ((*it).second)(args, tab); + callFunc(*(*it).second, args, tab); } else if (!tab->handleCommand(type, args)) { @@ -80,12 +82,23 @@ void CommandHandler::invokeCommand(const std::string &type, } } +void CommandHandler::callFunc(const CommandInfo &info, + const std::string &args, + ChatTab *const tab) +{ + CommandFuncPtr func = info.func; + if (func) + func(args, tab); + else + inputManager.executeAction(info.actionId); +} + void CommandHandler::invokeCommand(const int type, const bool warn) { if (type < 0 || type >= END_COMMANDS) return; - (commands[type].func)("", nullptr); + callFunc(commands[type], "", nullptr); } void CommandHandler::invokeCommand(const int type, @@ -94,7 +107,7 @@ void CommandHandler::invokeCommand(const int type, { if (type < 0 || type >= END_COMMANDS) return; - (commands[type].func)("", tab); + callFunc(commands[type], "", tab); } void CommandHandler::invokeCommand(const int type, @@ -103,7 +116,7 @@ void CommandHandler::invokeCommand(const int type, { if (type < 0 || type >= END_COMMANDS) return; - (commands[type].func)(args, nullptr); + callFunc(commands[type], args, nullptr); } void CommandHandler::invokeCommand(const int type, @@ -113,5 +126,5 @@ void CommandHandler::invokeCommand(const int type, { if (type < 0 || type >= END_COMMANDS) return; - (commands[type].func)(args, tab); + callFunc(commands[type], args, tab); } diff --git a/src/commandhandler.h b/src/commandhandler.h index 2bcd9e596..a655d8d32 100644 --- a/src/commandhandler.h +++ b/src/commandhandler.h @@ -33,7 +33,7 @@ class ChatTab; extern ChatTab *localChatTab; -typedef std::map CommandsMap; +typedef std::map CommandsMap; typedef CommandsMap::const_iterator CommandsMapIter; /** @@ -89,6 +89,12 @@ class CommandHandler final friend class ChatTab; friend class WhisperTab; CommandsMap mCommands; + + private: + void callFunc(const CommandInfo &info, + const std::string &args, + ChatTab *const tab); + }; extern CommandHandler *commandHandler; diff --git a/src/commands.h b/src/commands.h index f990ab69a..182faa895 100644 --- a/src/commands.h +++ b/src/commands.h @@ -24,6 +24,7 @@ #define COMMANDS_H #include "playerrelations.h" +#include "keydata.h" #include @@ -42,6 +43,7 @@ struct CommandInfo { const char *name; CommandFuncPtr func; + int actionId; }; namespace Commands @@ -204,91 +206,101 @@ enum COMMAND_REMOVENAME, COMMAND_DISABLEAWAY, COMMAND_ENABLEAWAY, + COMMAND_DROP, + COMMAND_DROPN, + COMMAND_MOVETOTARGET, + COMMAND_MOVETOHOME, + COMMAND_SETHOME, COMMAND_HACK, END_COMMANDS, }; static const CommandInfo commands[] = { - {"closeall", &Commands::closeAll}, - {"ignoreall", &Commands::ignoreAll}, - {"help", &Commands::help}, - {"announce", &Commands::announce}, - {"where", &Commands::where}, - {"who", &Commands::who}, - {"msg", Commands::msg}, - {"whisper", Commands::msg}, - {"w", &Commands::msg}, - {"query", Commands::query}, - {"q", &Commands::query}, - {"ignore", &Commands::ignore}, - {"unignore", &Commands::unignore}, - {"friend", Commands::beFriend}, - {"befriend", &Commands::beFriend}, - {"disregard", &Commands::disregard}, - {"neutral", &Commands::neutral}, - {"blacklist", &Commands::blackList}, - {"enemy", &Commands::enemy}, - {"erase", &Commands::erase}, - {"clear", &Commands::clear}, - {"cleangraphics", &Commands::cleanGraphics}, - {"cleanfonts", &Commands::cleanFonts}, - {"createparty", &Commands::createParty}, - {"createguild", &Commands::createGuild}, - {"party", &Commands::party}, - {"me", &Commands::me}, - {"toggle", &Commands::toggle}, - {"present", &Commands::present}, - {"quit", &Commands::quit}, - {"all", &Commands::showAll}, - {"move", &Commands::move}, - {"target", &Commands::target}, - {"atkhuman", &Commands::attackHuman}, - {"outfit", &Commands::outfit}, - {"emote", &Commands::emote}, - {"away", &Commands::away}, - {"pseudoaway", &Commands::pseudoAway}, - {"follow", &Commands::follow}, - {"heal", &Commands::heal}, - {"navigate", &Commands::navigate}, - {"imitation", &Commands::imitation}, - {"mail", &Commands::mail}, - {"trade", &Commands::trade}, - {"priceload", &Commands::priceLoad}, - {"pricesave", &Commands::priceSave}, - {"cacheinfo", &Commands::cacheInfo}, - {"disconnect", &Commands::disconnect}, - {"undress", &Commands::undress}, - {"attack", &Commands::attack}, - {"dirs", &Commands::dirs}, - {"info", &Commands::info}, - {"wait", &Commands::wait}, - {"uptime", &Commands::uptime}, - {"addpriorityattack", &Commands::addPriorityAttack}, - {"addattack", &Commands::addAttack}, - {"removeattack", Commands::removeAttack}, - {"removeignoreattack", &Commands::removeAttack}, - {"addignoreattack", &Commands::addIgnoreAttack}, - {"dump", &Commands::dump}, - {"serverignoreall", &Commands::serverIgnoreAll}, - {"serverunignoreall", &Commands::serverUnIgnoreAll}, - {"setdrop", &Commands::setDrop}, - {"error", &Commands::error}, - {"dumpg", &Commands::dumpGraphics}, - {"dumpe", &Commands::dumpEnvironment}, - {"dumpt", &Commands::dumpTests}, - {"dumpogl", &Commands::dumpOGL}, - {"url", &Commands::url}, - {"open", &Commands::open}, - {"execute", &Commands::execute}, - {"testsdlfont", &Commands::testsdlfont}, - {"enablehighlight", &Commands::enableHighlight}, - {"disablehighlight", &Commands::disableHighlight}, - {"", &Commands::dontRemoveName}, - {"", &Commands::removeName}, - {"disableaway", &Commands::disableAway}, - {"enableaway", &Commands::enableAway}, - {"hack", &Commands::hack} + {"closeall", &Commands::closeAll, -1}, + {"ignoreall", &Commands::ignoreAll, -1}, + {"help", &Commands::help, -1}, + {"announce", &Commands::announce, -1}, + {"where", &Commands::where, -1}, + {"who", &Commands::who, -1}, + {"msg", Commands::msg, -1}, + {"whisper", Commands::msg, -1}, + {"w", &Commands::msg, -1}, + {"query", Commands::query, -1}, + {"q", &Commands::query, -1}, + {"ignore", &Commands::ignore, -1}, + {"unignore", &Commands::unignore, -1}, + {"friend", Commands::beFriend, -1}, + {"befriend", &Commands::beFriend, -1}, + {"disregard", &Commands::disregard, -1}, + {"neutral", &Commands::neutral, -1}, + {"blacklist", &Commands::blackList, -1}, + {"enemy", &Commands::enemy, -1}, + {"erase", &Commands::erase, -1}, + {"clear", &Commands::clear, -1}, + {"cleangraphics", &Commands::cleanGraphics, -1}, + {"cleanfonts", &Commands::cleanFonts, -1}, + {"createparty", &Commands::createParty, -1}, + {"createguild", &Commands::createGuild, -1}, + {"party", &Commands::party, -1}, + {"me", &Commands::me, -1}, + {"toggle", &Commands::toggle, -1}, + {"present", &Commands::present, -1}, + {"quit", &Commands::quit, -1}, + {"all", &Commands::showAll, -1}, + {"move", &Commands::move, -1}, + {"target", &Commands::target, -1}, + {"atkhuman", &Commands::attackHuman, -1}, + {"outfit", &Commands::outfit, -1}, + {"emote", &Commands::emote, -1}, + {"away", &Commands::away, -1}, + {"pseudoaway", &Commands::pseudoAway, -1}, + {"follow", &Commands::follow, -1}, + {"heal", &Commands::heal, -1}, + {"navigate", &Commands::navigate, -1}, + {"imitation", &Commands::imitation, -1}, + {"mail", &Commands::mail, -1}, + {"trade", &Commands::trade, -1}, + {"priceload", &Commands::priceLoad, -1}, + {"pricesave", &Commands::priceSave, -1}, + {"cacheinfo", &Commands::cacheInfo, -1}, + {"disconnect", &Commands::disconnect, -1}, + {"undress", &Commands::undress, -1}, + {"attack", &Commands::attack, -1}, + {"dirs", &Commands::dirs, -1}, + {"info", &Commands::info, -1}, + {"wait", &Commands::wait, -1}, + {"uptime", &Commands::uptime, -1}, + {"addpriorityattack", &Commands::addPriorityAttack, -1}, + {"addattack", &Commands::addAttack, -1}, + {"removeattack", Commands::removeAttack, -1}, + {"removeignoreattack", &Commands::removeAttack, -1}, + {"addignoreattack", &Commands::addIgnoreAttack, -1}, + {"dump", &Commands::dump, -1}, + {"serverignoreall", &Commands::serverIgnoreAll, -1}, + {"serverunignoreall", &Commands::serverUnIgnoreAll, -1}, + {"setdrop", &Commands::setDrop, -1}, + {"error", &Commands::error, -1}, + {"dumpg", &Commands::dumpGraphics, -1}, + {"dumpe", &Commands::dumpEnvironment, -1}, + {"dumpt", &Commands::dumpTests, -1}, + {"dumpogl", &Commands::dumpOGL, -1}, + {"url", &Commands::url, -1}, + {"open", &Commands::open, -1}, + {"execute", &Commands::execute, -1}, + {"testsdlfont", &Commands::testsdlfont, -1}, + {"enablehighlight", &Commands::enableHighlight, -1}, + {"disablehighlight", &Commands::disableHighlight, -1}, + {"", &Commands::dontRemoveName, -1}, + {"", &Commands::removeName, -1}, + {"disableaway", &Commands::disableAway, -1}, + {"enableaway", &Commands::enableAway, -1}, + {"drop", nullptr, Input::KEY_QUICK_DROP}, + {"dropn", nullptr, Input::KEY_QUICK_DROPN}, + {"movetotarget", nullptr, Input::KEY_MOVE_TO_TARGET}, + {"movetohome", nullptr, Input::KEY_MOVE_TO_HOME}, + {"sethome", nullptr, Input::KEY_SET_HOME}, + {"hack", &Commands::hack, -1} }; #undef decHandler -- cgit v1.2.3-60-g2f50