summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/setupinputpages.cpp4
-rw-r--r--src/gui/widgets/tabs/setup_input.cpp6
-rw-r--r--src/gui/windows/inventorywindow.cpp32
-rw-r--r--src/gui/windows/inventorywindow.h4
-rw-r--r--src/gui/windows/npcdialog.h40
5 files changed, 68 insertions, 18 deletions
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;