summaryrefslogtreecommitdiff
path: root/src/gui/itemcontainer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/itemcontainer.h')
-rw-r--r--src/gui/itemcontainer.h94
1 files changed, 64 insertions, 30 deletions
diff --git a/src/gui/itemcontainer.h b/src/gui/itemcontainer.h
index fba4656f..38eaba01 100644
--- a/src/gui/itemcontainer.h
+++ b/src/gui/itemcontainer.h
@@ -1,9 +1,8 @@
/*
- * Aethyra
+ * The Mana World
* Copyright (C) 2004 The Mana World Development Team
*
- * This file is part of Aethyra based on original code
- * from The Mana World.
+ * This file is part of The Mana World.
*
* 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
@@ -25,9 +24,9 @@
#include <list>
+#include <guichan/keylistener.hpp>
#include <guichan/mouselistener.hpp>
#include <guichan/widget.hpp>
-#include <guichan/widgetlistener.hpp>
class Image;
class Inventory;
@@ -44,14 +43,19 @@ namespace gcn {
* \ingroup GUI
*/
class ItemContainer : public gcn::Widget,
- public gcn::MouseListener,
- public gcn::WidgetListener
+ public gcn::KeyListener,
+ public gcn::MouseListener
{
public:
/**
* Constructor. Initializes the graphic.
+ * @param inventory
+ * @param gridColumns Amount of columns in grid.
+ * @param gridRows Amount of rows in grid.
+ * @param offset Index offset
*/
- ItemContainer(Inventory *inventory, int offset);
+ ItemContainer(Inventory *inventory, int gridColumns, int gridRows,
+ int offset = 0);
/**
* Destructor.
@@ -59,19 +63,19 @@ class ItemContainer : public gcn::Widget,
virtual ~ItemContainer();
/**
- * Handles the logic of the ItemContainer
+ * Draws the items.
*/
- void logic();
+ void draw(gcn::Graphics *graphics);
/**
- * Draws the items.
+ * Handles the key presses.
*/
- void draw(gcn::Graphics *graphics);
+ void keyPressed(gcn::KeyEvent &event);
/**
- * Called whenever the widget changes size.
+ * Handles the key releases.
*/
- void widgetResized(const gcn::Event &event);
+ void keyReleased(gcn::KeyEvent &event);
/**
* Handles mouse click.
@@ -79,9 +83,20 @@ class ItemContainer : public gcn::Widget,
void mousePressed(gcn::MouseEvent &event);
/**
+ * Handles mouse dragged.
+ */
+ void mouseDragged(gcn::MouseEvent &event);
+
+ /**
+ * Handles mouse released.
+ */
+ void mouseReleased(gcn::MouseEvent &event);
+
+ /**
* Returns the selected item.
*/
- Item* getSelectedItem();
+ Item* getSelectedItem() const
+ { return mSelectedItem; }
/**
* Sets selected item to NULL.
@@ -94,7 +109,7 @@ class ItemContainer : public gcn::Widget,
*/
void addSelectionListener(gcn::SelectionListener *listener)
{
- mListeners.push_back(listener);
+ mSelectionListeners.push_back(listener);
}
/**
@@ -103,33 +118,50 @@ class ItemContainer : public gcn::Widget,
*/
void removeSelectionListener(gcn::SelectionListener *listener)
{
- mListeners.remove(listener);
+ mSelectionListeners.remove(listener);
}
+ enum {
+ MOVE_SELECTED_LEFT, // 0
+ MOVE_SELECTED_RIGHT, // 1
+ MOVE_SELECTED_UP, // 2
+ MOVE_SELECTED_DOWN // 3
+ };
private:
+ /**
+ * Execute all the functionality associated with the action key.
+ */
+ void keyAction();
+
void mouseExited(gcn::MouseEvent &event);
void mouseMoved(gcn::MouseEvent &event);
/**
+ * Moves the highlight in the direction specified.
+ *
+ * @param direction The move direction of the highlighter.
+ */
+ void moveHighlight(int direction);
- * Sets the currently selected item. Invalid (e.g., negative) indices set `no item'.
+ /**
+ * Sets the currently selected item.
*/
- void setSelectedItemIndex(int index);
+ void setSelectedItem(Item *item);
/**
* Find the current item index by the most recently used item ID
*/
- void refindSelectedItem(void);
+ void refindSelectedItem();
/**
* Determine and set the height of the container.
*/
- void recalculateHeight(void);
+ void recalculateHeight();
/**
* Sends out selection events to the list of selection listeners.
*/
- void distributeValueChangedEvent(void);
+ void distributeValueChangedEvent();
/**
* Gets the slot index based on the cursor position.
@@ -138,22 +170,24 @@ class ItemContainer : public gcn::Widget,
* @param posY The Y Coordinate position.
* @return The slot index on success, -1 on failure.
*/
- int getSlotIndex(const int posX, const int posY) const;
+ int getSlotIndex(int posX, int posY) const;
Inventory *mInventory;
- Image *mSelImg;
-
- int mSelectedItemIndex;
- int mLastSelectedItemId; // last selected item ID. If we lose the item, find again by ID.
- int mMaxItems;
+ int mGridColumns, mGridRows;
int mOffset;
+ Image *mSelImg;
+ Item *mSelectedItem, *mHighlightedItem;
+ int mSelectionStatus;
+ bool mSwapItems;
+ bool mDescItems;
+ int mDragPosX, mDragPosY;
ItemPopup *mItemPopup;
- std::list<gcn::SelectionListener*> mListeners;
+ typedef std::list<gcn::SelectionListener*> SelectionListenerList;
+ typedef SelectionListenerList::iterator SelectionListenerIterator;
- static const int gridWidth;
- static const int gridHeight;
+ SelectionListenerList mSelectionListeners;
};
#endif