summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-08-20 19:02:40 +0300
committerAndrei Karas <akaras@inbox.ru>2015-08-20 19:02:40 +0300
commit2b0936e4eafee4da5e2ff3c0a7b7fd0df8a9f5c4 (patch)
tree2f6157ee1268ea2ea978e8949126ef010ff682ff /src/gui
parentd7f5bf6c2ad9fdcf2308b1c9d3a70e0f17b30adf (diff)
downloadmanaverse-2b0936e4eafee4da5e2ff3c0a7b7fd0df8a9f5c4.tar.gz
manaverse-2b0936e4eafee4da5e2ff3c0a7b7fd0df8a9f5c4.tar.bz2
manaverse-2b0936e4eafee4da5e2ff3c0a7b7fd0df8a9f5c4.tar.xz
manaverse-2b0936e4eafee4da5e2ff3c0a7b7fd0df8a9f5c4.zip
Add ability for insert cards into items by dragging.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/widgets/itemcontainer.cpp13
-rw-r--r--src/gui/windows/inventorywindow.cpp41
-rw-r--r--src/gui/windows/inventorywindow.h3
3 files changed, 57 insertions, 0 deletions
diff --git a/src/gui/widgets/itemcontainer.cpp b/src/gui/widgets/itemcontainer.cpp
index e728cb3a4..b533aadd3 100644
--- a/src/gui/widgets/itemcontainer.cpp
+++ b/src/gui/widgets/itemcontainer.cpp
@@ -36,6 +36,7 @@
#include "gui/popups/itempopup.h"
#include "gui/windows/chatwindow.h"
+#include "gui/windows/inventorywindow.h"
#include "gui/windows/shopwindow.h"
#include "gui/windows/shortcutwindow.h"
@@ -579,6 +580,18 @@ void ItemContainer::mouseReleased(MouseEvent &event)
dstContainer = InventoryType::CART;
inventory = PlayerInfo::getInventory();
}
+ if (src == DRAGDROP_SOURCE_INVENTORY
+ && dst == DRAGDROP_SOURCE_INVENTORY)
+ {
+ const int index = getSlotIndex(event.getX(), event.getY());
+ if (index == Inventory::NO_SLOT_INDEX)
+ return;
+ if (index == mSelectedIndex || mSelectedIndex == -1)
+ return;
+ if (inventoryWindow)
+ inventoryWindow->combineItems(index, mSelectedIndex);
+ return;
+ }
else if (src == DRAGDROP_SOURCE_CART
&& dst == DRAGDROP_SOURCE_INVENTORY)
{
diff --git a/src/gui/windows/inventorywindow.cpp b/src/gui/windows/inventorywindow.cpp
index d4f27fd74..931acdf4a 100644
--- a/src/gui/windows/inventorywindow.cpp
+++ b/src/gui/windows/inventorywindow.cpp
@@ -40,11 +40,13 @@
#include "gui/popups/popupmenu.h"
#include "gui/popups/textpopup.h"
+#include "gui/windows/confirmdialog.h"
#include "gui/windows/itemamountwindow.h"
#include "gui/windows/setupwindow.h"
#include "gui/windows/tradewindow.h"
#include "gui/widgets/button.h"
+#include "gui/widgets/createwidget.h"
#include "gui/widgets/containerplacer.h"
#include "gui/widgets/dropdown.h"
#include "gui/widgets/itemcontainer.h"
@@ -56,6 +58,8 @@
#include "gui/widgets/textfield.h"
#include "gui/widgets/windowcontainer.h"
+#include "listeners/insertcardlistener.h"
+
#include "net/inventoryhandler.h"
#include "resources/iteminfo.h"
@@ -70,6 +74,7 @@ InventoryWindow *storageWindow = nullptr;
InventoryWindow *cartWindow = nullptr;
#endif
InventoryWindow::WindowList InventoryWindow::invInstances;
+InsertCardListener insertCardListener;
InventoryWindow::InventoryWindow(Inventory *const inventory) :
Window("Inventory", Modal_false, nullptr, "inventory.xml"),
@@ -1004,3 +1009,39 @@ void InventoryWindow::attributeChanged(const AttributesT id,
updateWeight();
}
}
+
+#ifdef EATHENA_SUPPORT
+void InventoryWindow::combineItems(const int index1,
+ const int index2)
+{
+ if (!mInventory)
+ return;
+ const Item *item1 = mInventory->getItem(index1);
+ if (!item1)
+ return;
+ const Item *item2 = mInventory->getItem(index2);
+ if (!item2)
+ return;
+
+ if (item1->getType() != ItemType::CARD)
+ {
+ const Item *tmpItem = item1;
+ item1 = item2;
+ item2 = tmpItem;
+ }
+
+ ConfirmDialog *const confirmDlg = CREATEWIDGETR(ConfirmDialog,
+ // TRANSLATORS: question dialog title
+ _("Insert card request"),
+ // TRANSLATORS: question dialog message
+ strprintf(_("Insert %s into %s?"),
+ item1->getName().c_str(),
+ item2->getName().c_str()),
+ SOUND_REQUEST,
+ false,
+ Modal_true);
+ insertCardListener.itemIndex = item2->getInvIndex();
+ insertCardListener.cardIndex = item1->getInvIndex();
+ confirmDlg->addActionListener(&insertCardListener);
+}
+#endif
diff --git a/src/gui/windows/inventorywindow.h b/src/gui/windows/inventorywindow.h
index 790593b6f..a579373e3 100644
--- a/src/gui/windows/inventorywindow.h
+++ b/src/gui/windows/inventorywindow.h
@@ -156,6 +156,9 @@ class InventoryWindow final : public Window,
const int oldVal,
const int newVal) override final;
+ void combineItems(const int index1,
+ const int index2);
+
static bool isAnyInputFocused();
static InventoryWindow *getFirstVisible();