From 3a19b08078d42837126cc585d2a9b6f5f61b2c2b Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 26 Jan 2016 21:40:24 +0300 Subject: Add quick shortcuts for add selected item to each craft inventory slot. Add craft tab with shortcuts in input tab. --- src/CMakeLists.txt | 2 + src/Makefile.am | 2 + src/actions/actions.cpp | 14 +++++ src/actions/actions.h | 1 + src/dyetool/actions/actions.cpp | 1 + src/enums/input/inputaction.h | 9 ++++ src/gui/setupinputpages.cpp | 4 ++ src/gui/widgets/tabs/setup_input.cpp | 6 +++ src/gui/windows/inventorywindow.cpp | 32 ++++++++++++ src/gui/windows/inventorywindow.h | 4 ++ src/gui/windows/npcdialog.h | 40 ++++++++------- src/input/inputactionmap.h | 99 ++++++++++++++++++++++++++++++++++++ src/input/pages/craft.cpp | 89 ++++++++++++++++++++++++++++++++ src/input/pages/craft.h | 28 ++++++++++ 14 files changed, 313 insertions(+), 18 deletions(-) create mode 100644 src/input/pages/craft.cpp create mode 100644 src/input/pages/craft.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e5398adb9..c11074d71 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -462,6 +462,8 @@ SET(SRCS input/pages/basic.h input/pages/chat.cpp input/pages/chat.h + input/pages/craft.cpp + input/pages/craft.h input/pages/emotes.cpp input/pages/emotes.h input/pages/gui.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 4e723484d..61ac91935 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1078,6 +1078,8 @@ manaplus_SOURCES += main.cpp \ input/pages/basic.h \ input/pages/chat.cpp \ input/pages/chat.h \ + input/pages/craft.cpp \ + input/pages/craft.h \ input/pages/emotes.cpp \ input/pages/emotes.h \ input/pages/gui.cpp \ diff --git a/src/actions/actions.cpp b/src/actions/actions.cpp index df4f23779..eb6404d37 100644 --- a/src/actions/actions.cpp +++ b/src/actions/actions.cpp @@ -1674,4 +1674,18 @@ impHandler0(testInfo) return false; } +impHandler(craftKey) +{ +#ifdef EATHENA_SUPPORT + const int slot = (event.action - InputAction::CRAFT_1); + if (slot >= 0 && slot < 9) + { + if (inventoryWindow) + inventoryWindow->moveItemToCraft(slot); + return true; + } +#endif + return false; +} + } // namespace Actions diff --git a/src/actions/actions.h b/src/actions/actions.h index cb382ddef..712017bd0 100644 --- a/src/actions/actions.h +++ b/src/actions/actions.h @@ -109,6 +109,7 @@ namespace Actions decHandler(kick); decHandler(clearDrop); decHandler(testInfo); + decHandler(craftKey); } // namespace Actions #undef decHandler diff --git a/src/dyetool/actions/actions.cpp b/src/dyetool/actions/actions.cpp index c7fb2d7f8..35c9d8d45 100644 --- a/src/dyetool/actions/actions.cpp +++ b/src/dyetool/actions/actions.cpp @@ -106,5 +106,6 @@ impHandlerVoid(unprotectItem) impHandlerVoid(kick) impHandlerVoid(clearDrop) impHandlerVoid(testInfo) +impHandlerVoid(craftKey) } // namespace Actions diff --git a/src/enums/input/inputaction.h b/src/enums/input/inputaction.h index 2c3827840..1b004f93b 100644 --- a/src/enums/input/inputaction.h +++ b/src/enums/input/inputaction.h @@ -607,6 +607,15 @@ enumStart(InputAction) SLIDE, SELECT_SKILL_LEVEL, SKILL, + CRAFT_1, + CRAFT_2, + CRAFT_3, + CRAFT_4, + CRAFT_5, + CRAFT_6, + CRAFT_7, + CRAFT_8, + CRAFT_9, TOTAL } enumEnd(InputAction); diff --git a/src/gui/setupinputpages.cpp b/src/gui/setupinputpages.cpp index 6f93c635e..32efcecdb 100644 --- a/src/gui/setupinputpages.cpp +++ b/src/gui/setupinputpages.cpp @@ -27,6 +27,7 @@ #include "input/pages/basic.h" #include "input/pages/chat.h" +#include "input/pages/craft.h" #include "input/pages/emotes.h" #include "input/pages/gui.h" #include "input/pages/move.h" @@ -48,6 +49,8 @@ const char *const pages[] = // TRANSLATORS: input tab sub tab name N_("Windows"), // TRANSLATORS: input tab sub tab name + N_("Craft"), + // TRANSLATORS: input tab sub tab name N_("Emotes"), // TRANSLATORS: input tab sub tab name N_("Outfits"), @@ -66,6 +69,7 @@ SetupActionData *const setupActionData[] = setupActionDataMove, setupActionDataShortcuts, setupActionDataWindows, + setupActionDataCraft, setupActionDataEmotes, setupActionDataOutfits, setupActionDataChat, diff --git a/src/gui/widgets/tabs/setup_input.cpp b/src/gui/widgets/tabs/setup_input.cpp index 4872821f7..50187cffd 100644 --- a/src/gui/widgets/tabs/setup_input.cpp +++ b/src/gui/widgets/tabs/setup_input.cpp @@ -29,6 +29,7 @@ #include "input/inputmanager.h" #include "input/keyboardconfig.h" +#include "input/pages/craft.h" #include "input/pages/emotes.h" #include "input/pages/move.h" #include "input/pages/outfits.h" @@ -381,6 +382,11 @@ void Setup_Input::fixTranslations() InputAction::EMOTE_48, "Emote Shortcut %d"); + fixTranslation(setupActionDataCraft, + InputAction::CRAFT_1, + InputAction::CRAFT_9, + "Craft shortcut %d"); + fixTranslation(setupActionDataOutfits, InputAction::OUTFIT_1, InputAction::OUTFIT_48, diff --git a/src/gui/windows/inventorywindow.cpp b/src/gui/windows/inventorywindow.cpp index eac1b692d..76dfef268 100644 --- a/src/gui/windows/inventorywindow.cpp +++ b/src/gui/windows/inventorywindow.cpp @@ -41,6 +41,7 @@ #include "gui/windows/confirmdialog.h" #include "gui/windows/itemamountwindow.h" +#include "gui/windows/npcdialog.h" #include "gui/windows/setupwindow.h" #include "gui/windows/tradewindow.h" @@ -59,6 +60,8 @@ #include "listeners/insertcardlistener.h" +#include "net/npchandler.h" + #include "resources/iteminfo.h" #include "resources/item/item.h" @@ -1056,4 +1059,33 @@ void InventoryWindow::combineItems(const int index1, insertCardListener.cardIndex = item1->getInvIndex(); confirmDlg->addActionListener(&insertCardListener); } + +void InventoryWindow::moveItemToCraft(const int craftSlot) +{ + if (!npcHandler) + return; + + Item *const item = mItems->getSelectedItem(); + if (!item) + return; + + NpcDialog *const dialog = npcHandler->getCurrentNpcDialog(); + if (dialog && + dialog->getInputState() == NpcDialog::NPC_INPUT_ITEM_CRAFT) + { + if (item->getQuantity() > 1 + && !inputManager.isActionActive(InputAction::STOP_ATTACK)) + { + ItemAmountWindow::showWindow(ItemAmountWindow::CraftAdd, + npcHandler->getCurrentNpcDialog(), + item, + 0, + craftSlot); + } + else + { + dialog->addCraftItem(item, 1, craftSlot); + } + } +} #endif diff --git a/src/gui/windows/inventorywindow.h b/src/gui/windows/inventorywindow.h index 6c02e4304..930ce9e72 100644 --- a/src/gui/windows/inventorywindow.h +++ b/src/gui/windows/inventorywindow.h @@ -156,9 +156,13 @@ class InventoryWindow final : public Window, const int oldVal, const int newVal) override final; +#ifdef EATHENA_SUPPORT void combineItems(const int index1, const int index2); + void moveItemToCraft(const int craftSlot); +#endif + static bool isAnyInputFocused(); static InventoryWindow *getFirstVisible(); diff --git a/src/gui/windows/npcdialog.h b/src/gui/windows/npcdialog.h index 29f728c91..524ae7bd8 100644 --- a/src/gui/windows/npcdialog.h +++ b/src/gui/windows/npcdialog.h @@ -77,6 +77,25 @@ class NpcDialog final : public Window, void postInit() override final; + enum NpcInputState + { + NPC_INPUT_NONE = 0, + NPC_INPUT_LIST, + NPC_INPUT_STRING, + NPC_INPUT_INTEGER, + NPC_INPUT_ITEM, + NPC_INPUT_ITEM_INDEX, + NPC_INPUT_ITEM_CRAFT + }; + + enum NpcActionState + { + NPC_ACTION_WAIT = 0, + NPC_ACTION_NEXT, + NPC_ACTION_INPUT, + NPC_ACTION_CLOSE + }; + /** * Called when receiving actions from the widgets. */ @@ -228,6 +247,9 @@ class NpcDialog final : public Window, const int amount, const int slot); + NpcInputState getInputState() + { return mInputState; } + static void copyToClipboard(const BeingId npcId, const int x, const int y); @@ -303,24 +325,6 @@ class NpcDialog final : public Window, ItemContainer *mItemContainer A_NONNULLPOINTER; ScrollArea *mItemScrollArea A_NONNULLPOINTER; - enum NpcInputState - { - NPC_INPUT_NONE = 0, - NPC_INPUT_LIST, - NPC_INPUT_STRING, - NPC_INPUT_INTEGER, - NPC_INPUT_ITEM, - NPC_INPUT_ITEM_INDEX, - NPC_INPUT_ITEM_CRAFT - }; - - enum NpcActionState - { - NPC_ACTION_WAIT = 0, - NPC_ACTION_NEXT, - NPC_ACTION_INPUT, - NPC_ACTION_CLOSE - }; NpcInputState mInputState; NpcActionState mActionState; diff --git a/src/input/inputactionmap.h b/src/input/inputactionmap.h index b187b63b0..f76e8cb53 100644 --- a/src/input/inputactionmap.h +++ b/src/input/inputactionmap.h @@ -5086,6 +5086,105 @@ static const InputActionData inputActionData "skill|useskill", UseArgs_true, Protected_false}, + {"keyCraftShortcut1", + emptyKey, + emptyKey, + Input::GRP_DEFAULT, + &Actions::craftKey, + InputAction::NO_VALUE, 100, + InputCondition::NOMODAL | InputCondition::NOAWAY + | InputCondition::NONPCINPUT, + "", + UseArgs_false, + Protected_true}, + {"keyCraftShortcut2", + emptyKey, + emptyKey, + Input::GRP_DEFAULT, + &Actions::craftKey, + InputAction::NO_VALUE, 100, + InputCondition::NOMODAL | InputCondition::NOAWAY + | InputCondition::NONPCINPUT, + "", + UseArgs_false, + Protected_true}, + {"keyCraftShortcut3", + emptyKey, + emptyKey, + Input::GRP_DEFAULT, + &Actions::craftKey, + InputAction::NO_VALUE, 100, + InputCondition::NOMODAL | InputCondition::NOAWAY + | InputCondition::NONPCINPUT, + "", + UseArgs_false, + Protected_true}, + {"keyCraftShortcut4", + emptyKey, + emptyKey, + Input::GRP_DEFAULT, + &Actions::craftKey, + InputAction::NO_VALUE, 100, + InputCondition::NOMODAL | InputCondition::NOAWAY + | InputCondition::NONPCINPUT, + "", + UseArgs_false, + Protected_true}, + {"keyCraftShortcut5", + emptyKey, + emptyKey, + Input::GRP_DEFAULT, + &Actions::craftKey, + InputAction::NO_VALUE, 100, + InputCondition::NOMODAL | InputCondition::NOAWAY + | InputCondition::NONPCINPUT, + "", + UseArgs_false, + Protected_true}, + {"keyCraftShortcut6", + emptyKey, + emptyKey, + Input::GRP_DEFAULT, + &Actions::craftKey, + InputAction::NO_VALUE, 100, + InputCondition::NOMODAL | InputCondition::NOAWAY + | InputCondition::NONPCINPUT, + "", + UseArgs_false, + Protected_true}, + {"keyCraftShortcut7", + emptyKey, + emptyKey, + Input::GRP_DEFAULT, + &Actions::craftKey, + InputAction::NO_VALUE, 100, + InputCondition::NOMODAL | InputCondition::NOAWAY + | InputCondition::NONPCINPUT, + "", + UseArgs_false, + Protected_true}, + {"keyCraftShortcut8", + emptyKey, + emptyKey, + Input::GRP_DEFAULT, + &Actions::craftKey, + InputAction::NO_VALUE, 100, + InputCondition::NOMODAL | InputCondition::NOAWAY + | InputCondition::NONPCINPUT, + "", + UseArgs_false, + Protected_true}, + {"keyCraftShortcut9", + emptyKey, + emptyKey, + Input::GRP_DEFAULT, + &Actions::craftKey, + InputAction::NO_VALUE, 100, + InputCondition::NOMODAL | InputCondition::NOAWAY + | InputCondition::NONPCINPUT, + "", + UseArgs_false, + Protected_true}, }; #undef defaultAction diff --git a/src/input/pages/craft.cpp b/src/input/pages/craft.cpp new file mode 100644 index 000000000..5b5bf0466 --- /dev/null +++ b/src/input/pages/craft.cpp @@ -0,0 +1,89 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "gui/setupactiondata.h" + +#include "utils/gettext.h" +#include "utils/stringutils.h" + +#include "debug.h" + +SetupActionData setupActionDataCraft[] = +{ + { + // TRANSLATORS: input action name + strprintf(N_("Craft shortcut %d"), 1), + InputAction::CRAFT_1, + "", + }, + { + // TRANSLATORS: input action name + strprintf(N_("Craft shortcut %d"), 2), + InputAction::CRAFT_2, + "", + }, + { + // TRANSLATORS: input action name + strprintf(N_("Craft shortcut %d"), 3), + InputAction::CRAFT_3, + "", + }, + { + // TRANSLATORS: input action name + strprintf(N_("Craft shortcut %d"), 4), + InputAction::CRAFT_4, + "", + }, + { + // TRANSLATORS: input action name + strprintf(N_("Craft shortcut %d"), 5), + InputAction::CRAFT_5, + "", + }, + { + // TRANSLATORS: input action name + strprintf(N_("Craft shortcut %d"), 6), + InputAction::CRAFT_6, + "", + }, + { + // TRANSLATORS: input action name + strprintf(N_("Craft shortcut %d"), 7), + InputAction::CRAFT_7, + "", + }, + { + // TRANSLATORS: input action name + strprintf(N_("Craft shortcut %d"), 8), + InputAction::CRAFT_8, + "", + }, + { + // TRANSLATORS: input action name + strprintf(N_("Craft shortcut %d"), 9), + InputAction::CRAFT_9, + "", + }, + { + "", + InputAction::NO_VALUE, + "" + }, +}; diff --git a/src/input/pages/craft.h b/src/input/pages/craft.h new file mode 100644 index 000000000..ef797f7a5 --- /dev/null +++ b/src/input/pages/craft.h @@ -0,0 +1,28 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef INPUT_PAGES_CRAFT_H +#define INPUT_PAGES_CRAFT_H + +#include "gui/setupactiondata.h" + +extern SetupActionData setupActionDataCraft[]; + +#endif // INPUT_PAGES_CRAFT_H -- cgit v1.2.3-60-g2f50