summaryrefslogtreecommitdiff
path: root/src/dragdrop.h
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2013-06-02 22:14:54 +0300
committerAndrei Karas <akaras@inbox.ru>2013-06-02 22:14:54 +0300
commit65b614a0d142e229206fbde22a25f4a3b20b1dbc (patch)
treecb1f90dbbc8aedd3ef2dd7e2269a08b115d9fc7b /src/dragdrop.h
parentbead0d26642bbc0c5e570306c226676c66d18b86 (diff)
downloadmanaplus-65b614a0d142e229206fbde22a25f4a3b20b1dbc.tar.gz
manaplus-65b614a0d142e229206fbde22a25f4a3b20b1dbc.tar.bz2
manaplus-65b614a0d142e229206fbde22a25f4a3b20b1dbc.tar.xz
manaplus-65b614a0d142e229206fbde22a25f4a3b20b1dbc.zip
In drag and drop use ints and images but not pointer to item.
Diffstat (limited to 'src/dragdrop.h')
-rw-r--r--src/dragdrop.h88
1 files changed, 73 insertions, 15 deletions
diff --git a/src/dragdrop.h b/src/dragdrop.h
index a2c94facf..6d45a69e1 100644
--- a/src/dragdrop.h
+++ b/src/dragdrop.h
@@ -23,6 +23,8 @@
#include "item.h"
+#include "resources/image.h"
+
#include "localconsts.h"
enum DragDropSource
@@ -44,27 +46,64 @@ class DragDrop
{
public:
DragDrop(Item *const item, const DragDropSource source) :
- mItem(item),
- mSelItem(nullptr),
+ mItem(item ? item->getId() : 0),
+ mItemColor(item ? item->getColor() : 1),
+ mItemImage(item ? item->getImage() : nullptr),
+ mSelItem(0),
+ mSelItemColor(1),
mSource(source)
{
+ if (mItemImage)
+ mItemImage->incRef();
+ }
+
+ ~DragDrop()
+ {
+ if (mItemImage)
+ mItemImage->decRef();
}
- Item *getItem()
+ int getItem()
{ return mItem; }
+ int getItemColor()
+ { return mItemColor; }
+
+ Image *getItemImage()
+ { return mItemImage; }
+
DragDropSource getSource() const
{ return mSource; }
void dragItem(Item *const item, const DragDropSource source)
{
- mItem = item;
+ if (mItemImage)
+ mItemImage->decRef();
+
+ if (item)
+ {
+ mItem = item->getId();
+ mItemColor = item->getColor();
+ mItemImage = item->getImage();
+ if (mItemImage)
+ mItemImage->incRef();
+ }
+ else
+ {
+ mItem = 0;
+ mItemColor = 1;
+ mItemImage = nullptr;
+ }
mSource = source;
}
void clear()
{
- mItem = nullptr;
+ if (mItemImage)
+ mItemImage->decRef();
+ mItem = 0;
+ mItemColor = 1;
+ mItemImage = nullptr;
mSource = DRAGDROP_SOURCE_EMPTY;
}
@@ -72,25 +111,44 @@ class DragDrop
{ return mSource == DRAGDROP_SOURCE_EMPTY; }
void select(Item *const item)
- { mSelItem = item; }
+ {
+ if (item)
+ {
+ mSelItem = item->getId();
+ mSelItemColor = item->getColor();
+ }
+ else
+ {
+ mSelItem = 0;
+ mSelItemColor = 1;
+ }
+ }
void deselect()
- { mSelItem = nullptr; }
+ {
+ mSelItem = 0;
+ mSelItemColor = 1;
+ }
- Item *getSelected()
+ int getSelected()
{ return mSelItem; }
- void clearItem(const Item *const item)
+ int getSelectedColor()
+ { return mSelItemColor; }
+
+ bool isSelected()
+ { return mSelItem > 0; }
+
+ void clearItem(const Item *const item A_UNUSED)
{
- if (mItem == item)
- clear();
- if (mSelItem == item)
- mSelItem = nullptr;
}
private:
- Item *mItem;
- Item *mSelItem;
+ int mItem;
+ uint8_t mItemColor;
+ Image *mItemImage;
+ int mSelItem;
+ uint8_t mSelItemColor;
DragDropSource mSource;
};