summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2008-04-11 13:31:52 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2008-04-11 13:31:52 +0000
commit4b9e2b6c41e740a3eac10078d5fa4fbc63788bbe (patch)
tree6b8aea437d454de40808a7f1289c264d7bd563e3 /src/gui
parentf97ddedaa9672c78147fc13282bd14a5be46eb19 (diff)
downloadmana-4b9e2b6c41e740a3eac10078d5fa4fbc63788bbe.tar.gz
mana-4b9e2b6c41e740a3eac10078d5fa4fbc63788bbe.tar.bz2
mana-4b9e2b6c41e740a3eac10078d5fa4fbc63788bbe.tar.xz
mana-4b9e2b6c41e740a3eac10078d5fa4fbc63788bbe.zip
Ported trunk over to Guichan 0.8.0. Based on merge from 0.0 branch, but because
of quite a bit of GUI differences there were additional changes and probably additional issues. You have been warned. ;) Merged revisions 4045-4049,4051-4059 via svnmerge from https://themanaworld.svn.sourceforge.net/svnroot/themanaworld/tmw/branches/0.0 ........ r4045 | b_lindeijer | 2008-04-07 17:23:07 +0200 (Mon, 07 Apr 2008) | 3 lines Upgraded to Guichan 0.8.0 (merge from guichan-0.8 branch, except for gcn::TabbedArea usage) ........ r4059 | b_lindeijer | 2008-04-09 16:25:42 +0200 (Wed, 09 Apr 2008) | 2 lines Fixed problem with row height in shop list box. ........
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/button.cpp2
-rw-r--r--src/gui/buy.cpp5
-rw-r--r--src/gui/buy.h9
-rw-r--r--src/gui/char_select.cpp7
-rw-r--r--src/gui/chat.cpp26
-rw-r--r--src/gui/checkbox.cpp6
-rw-r--r--src/gui/checkbox.h2
-rw-r--r--src/gui/guildlistbox.cpp19
-rw-r--r--src/gui/guildlistbox.h18
-rw-r--r--src/gui/guildwindow.cpp4
-rw-r--r--src/gui/inttextbox.cpp2
-rw-r--r--src/gui/inventorywindow.cpp2
-rw-r--r--src/gui/inventorywindow.h9
-rw-r--r--src/gui/itemcontainer.cpp17
-rw-r--r--src/gui/itemcontainer.h20
-rw-r--r--src/gui/itemshortcutwindow.cpp9
-rw-r--r--src/gui/itemshortcutwindow.h7
-rw-r--r--src/gui/listbox.cpp21
-rw-r--r--src/gui/listbox.h31
-rw-r--r--src/gui/login.cpp2
-rw-r--r--src/gui/playerbox.cpp8
-rw-r--r--src/gui/playerbox.h2
-rw-r--r--src/gui/quitdialog.cpp12
-rw-r--r--src/gui/radiobutton.cpp2
-rw-r--r--src/gui/scrollarea.cpp24
-rw-r--r--src/gui/scrollarea.h2
-rw-r--r--src/gui/selectionlistener.h68
-rw-r--r--src/gui/sell.cpp2
-rw-r--r--src/gui/sell.h7
-rw-r--r--src/gui/setup_audio.cpp4
-rw-r--r--src/gui/setup_joystick.cpp6
-rw-r--r--src/gui/setup_video.cpp18
-rw-r--r--src/gui/shoplistbox.cpp29
-rw-r--r--src/gui/shoplistbox.h28
-rw-r--r--src/gui/slider.cpp2
-rw-r--r--src/gui/tabbedcontainer.cpp4
-rw-r--r--src/gui/textbox.cpp4
-rw-r--r--src/gui/textfield.cpp8
-rw-r--r--src/gui/textfield.h2
-rw-r--r--src/gui/trade.cpp2
-rw-r--r--src/gui/trade.h6
-rw-r--r--src/gui/widgets/dropdown.cpp15
-rw-r--r--src/gui/widgets/dropdown.h2
-rw-r--r--src/gui/window.cpp117
-rw-r--r--src/gui/window.h77
-rw-r--r--src/gui/windowlistener.h86
46 files changed, 173 insertions, 582 deletions
diff --git a/src/gui/button.cpp b/src/gui/button.cpp
index e47f90f8..c6bc4ccb 100644
--- a/src/gui/button.cpp
+++ b/src/gui/button.cpp
@@ -82,7 +82,7 @@ Button::Button(const std::string& caption, const std::string &actionEventId,
void Button::init()
{
- setBorderSize(0);
+ setFrameSize(0);
if (mInstances == 0)
{
diff --git a/src/gui/buy.cpp b/src/gui/buy.cpp
index d2e12a85..49d19675 100644
--- a/src/gui/buy.cpp
+++ b/src/gui/buy.cpp
@@ -178,9 +178,8 @@ void BuyDialog::action(const gcn::ActionEvent &event)
}
}
-void BuyDialog::selectionChanged(const SelectionEvent &event)
+void BuyDialog::valueChanged(const gcn::SelectionEvent &event)
{
-
// Reset amount of items and update labels
mAmountItems = 1;
mSlider->setValue(1);
@@ -192,7 +191,7 @@ void BuyDialog::selectionChanged(const SelectionEvent &event)
void
BuyDialog::updateButtonsAndLabels()
{
- int selectedItem = mShopItemList->getSelected();
+ const int selectedItem = mShopItemList->getSelected();
int price = 0;
if (selectedItem > -1)
diff --git a/src/gui/buy.h b/src/gui/buy.h
index 4e129611..ec7419be 100644
--- a/src/gui/buy.h
+++ b/src/gui/buy.h
@@ -25,9 +25,9 @@
#define _TMW_BUY_H
#include <guichan/actionlistener.hpp>
+#include <guichan/selectionlistener.hpp>
#include "window.h"
-#include "selectionlistener.h"
#include "../guichanfwd.h"
@@ -40,7 +40,8 @@ class ListBox;
*
* \ingroup Interface
*/
-class BuyDialog : public Window, public gcn::ActionListener, SelectionListener
+class BuyDialog : public Window, public gcn::ActionListener,
+ gcn::SelectionListener
{
public:
/**
@@ -82,10 +83,8 @@ class BuyDialog : public Window, public gcn::ActionListener, SelectionListener
/**
* Updates the labels according to the selected item.
- *
- * @see SelectionListener::selectionChanged
*/
- void selectionChanged(const SelectionEvent &event);
+ void valueChanged(const gcn::SelectionEvent &event);
/**
* Returns the name of item number i in the shop inventory.
diff --git a/src/gui/char_select.cpp b/src/gui/char_select.cpp
index a691f4ec..b2d3b53e 100644
--- a/src/gui/char_select.cpp
+++ b/src/gui/char_select.cpp
@@ -323,7 +323,7 @@ CharCreateDialog::CharCreateDialog(Window *parent, int slot):
mFemale->setPosition( 100, 120 );
// Default to a Male character
- mMale->setMarked(true);
+ mMale->setSelected(true);
mMale->setActionEventId("gender");
mFemale->setActionEventId("gender");
@@ -375,13 +375,12 @@ CharCreateDialog::action(const gcn::ActionEvent &event)
mCreateButton->setEnabled(false);
unsigned int genderSelected;
- if( mMale->isMarked() ){
+ if (mMale->isSelected()) {
genderSelected = GENDER_MALE;
} else {
genderSelected = GENDER_FEMALE;
}
-
Net::AccountServer::Account::createCharacter(
getName(),
mPlayer->getHairStyle(),
@@ -418,7 +417,7 @@ CharCreateDialog::action(const gcn::ActionEvent &event)
UpdateSliders();
}
else if (event.getId() == "gender"){
- if( mMale->isMarked() ) {
+ if (mMale->isSelected()) {
mPlayer->setGender(GENDER_MALE);
} else {
mPlayer->setGender(GENDER_FEMALE);
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp
index f6b54d29..1efee8ed 100644
--- a/src/gui/chat.cpp
+++ b/src/gui/chat.cpp
@@ -67,14 +67,14 @@ ChatWindow::ChatWindow():
textOutput->setMaxRow((int) config.getValue("ChatLogLength", 0));
ScrollArea *scrollArea = new ScrollArea(textOutput);
scrollArea->setPosition(
- scrollArea->getBorderSize(), scrollArea->getBorderSize());
+ scrollArea->getFrameSize(), scrollArea->getFrameSize());
scrollArea->setScrollPolicy(
gcn::ScrollArea::SHOW_NEVER, gcn::ScrollArea::SHOW_ALWAYS);
scrollArea->setOpaque(false);
GCContainer *tab = new GCContainer();
- tab->setWidth(getWidth() - 2 * tab->getBorderSize());
- tab->setHeight(getHeight() - 2 * tab->getBorderSize());
+ tab->setWidth(getWidth() - 2 * tab->getFrameSize());
+ tab->setHeight(getHeight() - 2 * tab->getFrameSize());
tab->setOpaque(false);
tab->add(scrollArea);
@@ -109,15 +109,15 @@ ChatWindow::logic()
const gcn::Rectangle area = getChildrenArea();
- mChatInput->setPosition(mChatInput->getBorderSize(),
+ mChatInput->setPosition(mChatInput->getFrameSize(),
area.height - mChatInput->getHeight() -
- mChatInput->getBorderSize());
- mChatInput->setWidth(area.width - 2 * mChatInput->getBorderSize());
- mContainer->setWidth(area.width - 2 * mContainer->getBorderSize());
- mContainer->setHeight(area.height - 2 * mContainer->getBorderSize() -
+ mChatInput->getFrameSize());
+ mChatInput->setWidth(area.width - 2 * mChatInput->getFrameSize());
+ mContainer->setWidth(area.width - 2 * mContainer->getFrameSize());
+ mContainer->setHeight(area.height - 2 * mContainer->getFrameSize() -
mChatInput->getHeight() - 5);
- mScrollArea->setWidth(area.width - 2 * mScrollArea->getBorderSize());
- mScrollArea->setHeight(area.height - 2 * mScrollArea->getBorderSize() -
+ mScrollArea->setWidth(area.width - 2 * mScrollArea->getFrameSize());
+ mScrollArea->setHeight(area.height - 2 * mScrollArea->getFrameSize() -
mChatInput->getHeight() - 26);
Window::logic();
}
@@ -475,12 +475,12 @@ ChatWindow::createNewChannelTab(std::string channelName)
textOutput->setOpaque(false);
textOutput->disableLinksAndUserColors();
ScrollArea *scrollArea = new ScrollArea(textOutput);
- scrollArea->setPosition(scrollArea->getBorderSize(), scrollArea->getBorderSize());
+ scrollArea->setPosition(scrollArea->getFrameSize(), scrollArea->getFrameSize());
scrollArea->setScrollPolicy(gcn::ScrollArea::SHOW_NEVER, gcn::ScrollArea::SHOW_ALWAYS);
scrollArea->setOpaque(false);
GCContainer *tab = new GCContainer();
- tab->setWidth(getWidth() - 2 * tab->getBorderSize());
- tab->setHeight(getHeight() - 2 * tab->getBorderSize());
+ tab->setWidth(getWidth() - 2 * tab->getFrameSize());
+ tab->setHeight(getHeight() - 2 * tab->getFrameSize());
tab->add(scrollArea);
tab->setOpaque(false);
mContainer->addTab(tab, channelName);
diff --git a/src/gui/checkbox.cpp b/src/gui/checkbox.cpp
index fab4780c..5b300d33 100644
--- a/src/gui/checkbox.cpp
+++ b/src/gui/checkbox.cpp
@@ -34,8 +34,8 @@ Image *CheckBox::checkBoxChecked;
Image *CheckBox::checkBoxDisabled;
Image *CheckBox::checkBoxDisabledChecked;
-CheckBox::CheckBox(const std::string& caption, bool marked):
- gcn::CheckBox(caption, marked)
+CheckBox::CheckBox(const std::string& caption, bool selected):
+ gcn::CheckBox(caption, selected)
{
if (instances == 0)
{
@@ -68,7 +68,7 @@ void CheckBox::drawBox(gcn::Graphics* graphics)
{
Image *box;
- if (mMarked) {
+ if (isSelected()) {
if (isEnabled()) {
box = checkBoxChecked;
} else {
diff --git a/src/gui/checkbox.h b/src/gui/checkbox.h
index 468a7f38..262e63ae 100644
--- a/src/gui/checkbox.h
+++ b/src/gui/checkbox.h
@@ -40,7 +40,7 @@ class CheckBox : public gcn::CheckBox {
/**
* Constructor.
*/
- CheckBox(const std::string& caption, bool marked = false);
+ CheckBox(const std::string& caption, bool selected = false);
/**
* Destructor.
diff --git a/src/gui/guildlistbox.cpp b/src/gui/guildlistbox.cpp
index 1a392d2d..11661235 100644
--- a/src/gui/guildlistbox.cpp
+++ b/src/gui/guildlistbox.cpp
@@ -30,27 +30,26 @@
GuildListBox::GuildListBox():
ListBox(NULL)
{
-
}
void GuildListBox::draw(gcn::Graphics *graphics)
{
if (!mListModel)
return;
-
+
graphics->setColor(gcn::Color(110, 160, 255));
graphics->setFont(getFont());
-
+
int fontHeight = getFont()->getHeight();
-
+
// Draw rectangle below the selected list element
if (mSelected >= 0) {
graphics->fillRectangle(gcn::Rectangle(0, fontHeight * mSelected,
getWidth(), fontHeight));
}
-
+
// TODO: Add online status image
-
+
// Draw the list elements
for (int i = 0, y = 0;
i < mListModel->getNumberOfElements();
@@ -71,7 +70,7 @@ void GuildListBox::setSelected(int selected)
// Update mSelected with bounds checking
mSelected = std::min(mListModel->getNumberOfElements() - 1,
std::max(-1, selected));
-
+
gcn::Widget *parent;
parent = (gcn::Widget*)getParent();
if (parent)
@@ -82,8 +81,8 @@ void GuildListBox::setSelected(int selected)
parent->showWidgetPart(this, scroll);
}
}
-
- fireSelectionChangedEvent();
+
+ distributeValueChangedEvent();
}
void GuildListBox::mousePressed(gcn::MouseEvent &event)
@@ -93,6 +92,6 @@ void GuildListBox::mousePressed(gcn::MouseEvent &event)
// TODO: Add guild functions, ie private messaging
int y = event.getY();
setSelected(y / getFont()->getHeight());
- generateAction();
+ distributeActionEvent();
}
}
diff --git a/src/gui/guildlistbox.h b/src/gui/guildlistbox.h
index befaef1f..262012a4 100644
--- a/src/gui/guildlistbox.h
+++ b/src/gui/guildlistbox.h
@@ -50,24 +50,6 @@ public:
void mousePressed(gcn::MouseEvent &event);
/**
- * Adds a listener to the list that's notified each time a change to
- * the selection occurs.
- */
- void addSelectionListener(SelectionListener *listener)
- {
- mListeners.push_back(listener);
- }
-
- /**
- * Removes a listener from the list that's notified each time a change
- * to the selection occurs.
- */
- void removeSelectionListener(SelectionListener *listener)
- {
- mListeners.remove(listener);
- }
-
- /**
* Sets the index of the selected element.
*/
void setSelected(int selected);
diff --git a/src/gui/guildwindow.cpp b/src/gui/guildwindow.cpp
index 970c6ce1..eb0faa35 100644
--- a/src/gui/guildwindow.cpp
+++ b/src/gui/guildwindow.cpp
@@ -173,8 +173,8 @@ void GuildWindow::newGuildTab(const std::string &guildName)
// Create new tab
GCContainer *tab = new GCContainer();
- tab->setWidth(getWidth() - 2 * tab->getBorderSize());
- tab->setHeight(getHeight() - 2 * tab->getBorderSize());
+ tab->setWidth(getWidth() - 2 * tab->getFrameSize());
+ tab->setHeight(getHeight() - 2 * tab->getFrameSize());
tab->setOpaque(false);
ListBox *list = new ListBox();
list->setListModel(player_node->getGuild(guildName));
diff --git a/src/gui/inttextbox.cpp b/src/gui/inttextbox.cpp
index 5ae3dd93..17e87afd 100644
--- a/src/gui/inttextbox.cpp
+++ b/src/gui/inttextbox.cpp
@@ -51,7 +51,7 @@ IntTextBox::keyPressed(gcn::KeyEvent &event)
int i;
s >> i;
setInt(i);
- generateAction();
+ distributeActionEvent();
}
void IntTextBox::setRange(int min, int max)
diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp
index 0ef1ab35..bd224cf0 100644
--- a/src/gui/inventorywindow.cpp
+++ b/src/gui/inventorywindow.cpp
@@ -144,7 +144,7 @@ void InventoryWindow::action(const gcn::ActionEvent &event)
}
}
-void InventoryWindow::selectionChanged(const SelectionEvent &event)
+void InventoryWindow::valueChanged(const gcn::SelectionEvent &event)
{
Item *item = mItems->getItem();
ItemInfo const *info = item ? &item->getInfo() : NULL;
diff --git a/src/gui/inventorywindow.h b/src/gui/inventorywindow.h
index 34883c1c..01fb118c 100644
--- a/src/gui/inventorywindow.h
+++ b/src/gui/inventorywindow.h
@@ -26,10 +26,9 @@
#include <guichan/actionlistener.hpp>
#include <guichan/keylistener.hpp>
-
+#include <guichan/selectionlistener.hpp>
#include <guichan/widgets/checkbox.hpp>
-#include "selectionlistener.h"
#include "window.h"
#include "../guichanfwd.h"
@@ -45,7 +44,7 @@ class ItemContainer;
class InventoryWindow : public Window,
public gcn::ActionListener,
public gcn::KeyListener,
- public SelectionListener
+ public gcn::SelectionListener
{
public:
/**
@@ -82,10 +81,8 @@ class InventoryWindow : public Window,
/**
* Updates labels to currently selected item.
- *
- * @see SelectionListener::selectionChanged.
*/
- void selectionChanged(const SelectionEvent &event);
+ void valueChanged(const gcn::SelectionEvent &event);
private:
void updateButtons(); /**< Updates button states. */
diff --git a/src/gui/itemcontainer.cpp b/src/gui/itemcontainer.cpp
index 1abb8f0b..eddb6011 100644
--- a/src/gui/itemcontainer.cpp
+++ b/src/gui/itemcontainer.cpp
@@ -24,9 +24,9 @@
#include "itemcontainer.h"
#include <guichan/mouseinput.hpp>
+#include <guichan/selectionlistener.hpp>
#include "sdlinput.h"
-#include "selectionlistener.h"
#include "../graphics.h"
#include "../inventory.h"
@@ -159,20 +159,19 @@ void ItemContainer::setSelectedItem(Item *item)
if (mSelectedItem != item)
{
mSelectedItem = item;
- fireSelectionChangedEvent();
+ distributeValueChangedEvent();
}
}
-void
-ItemContainer::fireSelectionChangedEvent()
+void ItemContainer::distributeValueChangedEvent()
{
- SelectionEvent event(this);
- SelectionListeners::iterator i_end = mListeners.end();
- SelectionListeners::iterator i;
+ SelectionListenerIterator iter;
- for (i = mListeners.begin(); i != i_end; ++i)
+ for (iter = mSelectionListeners.begin(); iter != mSelectionListeners.end();
+ ++iter)
{
- (*i)->selectionChanged(event);
+ gcn::SelectionEvent event(this);
+ (*iter)->valueChanged(event);
}
}
diff --git a/src/gui/itemcontainer.h b/src/gui/itemcontainer.h
index 8be338dd..fad59171 100644
--- a/src/gui/itemcontainer.h
+++ b/src/gui/itemcontainer.h
@@ -34,7 +34,10 @@
class Image;
class Inventory;
class Item;
-class SelectionListener;
+
+namespace gcn {
+ class SelectionListener;
+}
/**
* An item container. Used to show items in inventory and trade dialog.
@@ -104,18 +107,18 @@ class ItemContainer : public gcn::Widget,
* Adds a listener to the list that's notified each time a change to
* the selection occurs.
*/
- void addSelectionListener(SelectionListener *listener)
+ void addSelectionListener(gcn::SelectionListener *listener)
{
- mListeners.push_back(listener);
+ mSelectionListeners.push_back(listener);
}
/**
* Removes a listener from the list that's notified each time a change
* to the selection occurs.
*/
- void removeSelectionListener(SelectionListener *listener)
+ void removeSelectionListener(gcn::SelectionListener *listener)
{
- mListeners.remove(listener);
+ mSelectionListeners.remove(listener);
}
enum {
@@ -145,7 +148,7 @@ class ItemContainer : public gcn::Widget,
/**
* Sends out selection events to the list of selection listeners.
*/
- void fireSelectionChangedEvent();
+ void distributeValueChangedEvent();
/**
* Gets the slot index based on the cursor position.
@@ -164,7 +167,10 @@ class ItemContainer : public gcn::Widget,
bool mSwapItems;
int mDragPosX, mDragPosY;
- std::list<SelectionListener*> mListeners;
+ typedef std::list<gcn::SelectionListener*> SelectionListenerList;
+ typedef SelectionListenerList::iterator SelectionListenerIterator;
+
+ SelectionListenerList mSelectionListeners;
};
#endif
diff --git a/src/gui/itemshortcutwindow.cpp b/src/gui/itemshortcutwindow.cpp
index cf266290..c7b2bd05 100644
--- a/src/gui/itemshortcutwindow.cpp
+++ b/src/gui/itemshortcutwindow.cpp
@@ -38,7 +38,7 @@ ItemShortcutWindow::ItemShortcutWindow()
mItems = new ItemShortcutContainer();
- int border = SCROLL_PADDING * 2 + getPadding() * 2;
+ const int border = SCROLL_PADDING * 2 + getPadding() * 2;
setMinWidth(mItems->getBoxWidth() + border);
setMinHeight(mItems->getBoxHeight() + border);
setMaxWidth(mItems->getBoxWidth() * mItems->getMaxItems() + border);
@@ -50,7 +50,6 @@ ItemShortcutWindow::ItemShortcutWindow()
add(mInvenScroll);
- addWindowListener(this);
loadWindowState("ItemShortcut");
}
@@ -65,9 +64,11 @@ void ItemShortcutWindow::logic()
Window::logic();
}
-void ItemShortcutWindow::windowResized(const WindowEvent &event)
+void ItemShortcutWindow::widgetResized(const gcn::Event &event)
{
- const gcn::Rectangle area = getChildrenArea();
+ Window::widgetResized(event);
+
+ const gcn::Rectangle &area = getChildrenArea();
mInvenScroll->setSize(
area.width - SCROLL_PADDING,
diff --git a/src/gui/itemshortcutwindow.h b/src/gui/itemshortcutwindow.h
index 1dde8686..51685e49 100644
--- a/src/gui/itemshortcutwindow.h
+++ b/src/gui/itemshortcutwindow.h
@@ -25,7 +25,6 @@
#define _TMW_ITEMSHORTCUTWINDOW_H
#include "window.h"
-#include "windowlistener.h"
#include "../guichanfwd.h"
@@ -36,7 +35,7 @@ class ItemShortcutContainer;
*
* \ingroup Interface
*/
-class ItemShortcutWindow : public Window, WindowListener
+class ItemShortcutWindow : public Window
{
public:
/**
@@ -55,9 +54,9 @@ class ItemShortcutWindow : public Window, WindowListener
void logic();
/**
- * Called whenever the window is resized.
+ * Called whenever the widget changes size.
*/
- void windowResized(const WindowEvent &event);
+ void widgetResized(const gcn::Event &event);
private:
ItemShortcutContainer *mItems;
diff --git a/src/gui/listbox.cpp b/src/gui/listbox.cpp
index 61c7e078..ac18c2cd 100644
--- a/src/gui/listbox.cpp
+++ b/src/gui/listbox.cpp
@@ -23,8 +23,6 @@
#include "listbox.h"
-#include "selectionlistener.h"
-
#include <guichan/font.hpp>
#include <guichan/graphics.hpp>
#include <guichan/listmodel.hpp>
@@ -68,28 +66,9 @@ void ListBox::draw(gcn::Graphics *graphics)
}
void
-ListBox::setSelected(int selected)
-{
- gcn::ListBox::setSelected(selected);
- fireSelectionChangedEvent();
-}
-
-void
ListBox::mouseDragged(gcn::MouseEvent &event)
{
// Pretend mouse is pressed continuously while dragged. Causes list
// selection to be updated as is default in many GUIs.
mousePressed(event);
}
-
-void ListBox::fireSelectionChangedEvent()
-{
- SelectionEvent event(this);
- SelectionListeners::iterator i_end = mListeners.end();
- SelectionListeners::iterator i;
-
- for (i = mListeners.begin(); i != i_end; ++i)
- {
- (*i)->selectionChanged(event);
- }
-}
diff --git a/src/gui/listbox.h b/src/gui/listbox.h
index 21172a22..03a8b541 100644
--- a/src/gui/listbox.h
+++ b/src/gui/listbox.h
@@ -50,37 +50,6 @@ class ListBox : public gcn::ListBox
void draw(gcn::Graphics *graphics);
void mouseDragged(gcn::MouseEvent &event);
-
- /**
- * Adds a listener to the list that's notified each time a change to
- * the selection occurs.
- */
- void addSelectionListener(SelectionListener *listener)
- {
- mListeners.push_back(listener);
- }
-
- /**
- * Removes a listener from the list that's notified each time a change
- * to the selection occurs.
- */
- void removeSelectionListener(SelectionListener *listener)
- {
- mListeners.remove(listener);
- }
-
- /**
- * Sets the index of the selected element.
- */
- virtual void setSelected(int selected);
-
- protected:
- /**
- * Sends out selection events to the list of selection listeners.
- */
- void fireSelectionChangedEvent();
-
- std::list<SelectionListener*> mListeners;
};
#endif
diff --git a/src/gui/login.cpp b/src/gui/login.cpp
index 57ad00c5..f1b32d48 100644
--- a/src/gui/login.cpp
+++ b/src/gui/login.cpp
@@ -94,7 +94,7 @@ LoginDialog::action(const gcn::ActionEvent &event)
{
mLoginData->username = mUserField->getText();
mLoginData->password = mPassField->getText();
- mLoginData->remember = mKeepCheck->isMarked();
+ mLoginData->remember = mKeepCheck->isSelected();
mLoginData->registerLogin = false;
mOkButton->setEnabled(false);
diff --git a/src/gui/playerbox.cpp b/src/gui/playerbox.cpp
index 8e5f1827..2c633b72 100644
--- a/src/gui/playerbox.cpp
+++ b/src/gui/playerbox.cpp
@@ -39,7 +39,7 @@ ImageRect PlayerBox::background;
PlayerBox::PlayerBox(const Player *player):
mPlayer(player)
{
- setBorderSize(2);
+ setFrameSize(2);
if (instances == 0)
{
@@ -83,7 +83,7 @@ PlayerBox::draw(gcn::Graphics *graphics)
{
// Draw character
int x, y, bs;
- bs = getBorderSize();
+ bs = getFrameSize();
x = getWidth() / 2 - 16 + bs;
y = getHeight() / 2 + bs;
mPlayer->draw(static_cast<Graphics*>(graphics), x, y);
@@ -91,10 +91,10 @@ PlayerBox::draw(gcn::Graphics *graphics)
}
void
-PlayerBox::drawBorder(gcn::Graphics *graphics)
+PlayerBox::drawFrame(gcn::Graphics *graphics)
{
int w, h, bs;
- bs = getBorderSize();
+ bs = getFrameSize();
w = getWidth() + bs * 2;
h = getHeight() + bs * 2;
diff --git a/src/gui/playerbox.h b/src/gui/playerbox.h
index 6bba1b51..c226e750 100644
--- a/src/gui/playerbox.h
+++ b/src/gui/playerbox.h
@@ -64,7 +64,7 @@ class PlayerBox : public gcn::ScrollArea
/**
* Draws the background and border of the scroll area.
*/
- void drawBorder(gcn::Graphics *graphics);
+ void drawFrame(gcn::Graphics *graphics);
private:
const Player *mPlayer; /**< The character used for display */
diff --git a/src/gui/quitdialog.cpp b/src/gui/quitdialog.cpp
index c9d974a6..7ed4f913 100644
--- a/src/gui/quitdialog.cpp
+++ b/src/gui/quitdialog.cpp
@@ -65,13 +65,13 @@ QuitDialog::QuitDialog(bool* quitGame, QuitDialog** pointerToMe):
state == STATE_LOGIN_ATTEMPT ||
state == STATE_UPDATE)
{
- mForceQuit->setMarked(true);
+ mForceQuit->setSelected(true);
add(mForceQuit);
}
else
{
// Only added if we are connected to an accountserver or gameserver
- mLogoutQuit->setMarked(true);
+ mLogoutQuit->setSelected(true);
add(mLogoutQuit);
add(mSwitchAccountServer);
@@ -104,11 +104,11 @@ QuitDialog::action(const gcn::ActionEvent &event)
{
if (event.getId() == "ok")
{
- if (mForceQuit->isMarked())
+ if (mForceQuit->isSelected())
{
state = STATE_FORCE_QUIT;
}
- else if (mLogoutQuit->isMarked())
+ else if (mLogoutQuit->isSelected())
{
if ((state == STATE_GAME) && (mQuitGame))
{
@@ -116,7 +116,7 @@ QuitDialog::action(const gcn::ActionEvent &event)
}
state = STATE_EXIT;
}
- else if (mSwitchAccountServer->isMarked())
+ else if (mSwitchAccountServer->isSelected())
{
if ((state == STATE_GAME) && (mQuitGame))
{
@@ -124,7 +124,7 @@ QuitDialog::action(const gcn::ActionEvent &event)
}
state = STATE_SWITCH_ACCOUNTSERVER_ATTEMPT;
}
- else if (mSwitchCharacter->isMarked())
+ else if (mSwitchCharacter->isSelected())
{
if (mQuitGame) *mQuitGame = true;
diff --git a/src/gui/radiobutton.cpp b/src/gui/radiobutton.cpp
index e318116a..0ac4dea8 100644
--- a/src/gui/radiobutton.cpp
+++ b/src/gui/radiobutton.cpp
@@ -67,7 +67,7 @@ void RadioButton::drawBox(gcn::Graphics* graphics)
{
Image *box = NULL;
- if (mMarked) {
+ if (isSelected()) {
if (isEnabled()) {
box = radioChecked;
} else {
diff --git a/src/gui/scrollarea.cpp b/src/gui/scrollarea.cpp
index cf555ef4..97384fa3 100644
--- a/src/gui/scrollarea.cpp
+++ b/src/gui/scrollarea.cpp
@@ -153,12 +153,12 @@ void ScrollArea::logic()
if (getHorizontalScrollPolicy() == gcn::ScrollArea::SHOW_NEVER)
{
content->setWidth(getChildrenArea().width -
- 2 * content->getBorderSize());
+ 2 * content->getFrameSize());
}
if (getVerticalScrollPolicy() == gcn::ScrollArea::SHOW_NEVER)
{
content->setHeight(getChildrenArea().height -
- 2 * content->getBorderSize());
+ 2 * content->getFrameSize());
}
}
}
@@ -204,15 +204,15 @@ void ScrollArea::draw(gcn::Graphics *graphics)
{
graphics->pushClipArea(getChildrenArea());
- if (content->getBorderSize() > 0)
+ if (content->getFrameSize() > 0)
{
gcn::Rectangle rec = content->getDimension();
- rec.x -= content->getBorderSize();
- rec.y -= content->getBorderSize();
- rec.width += 2 * content->getBorderSize();
- rec.height += 2 * content->getBorderSize();
+ rec.x -= content->getFrameSize();
+ rec.y -= content->getFrameSize();
+ rec.width += 2 * content->getFrameSize();
+ rec.height += 2 * content->getFrameSize();
graphics->pushClipArea(rec);
- content->drawBorder(graphics);
+ content->drawFrame(graphics);
graphics->popClipArea();
}
@@ -223,9 +223,9 @@ void ScrollArea::draw(gcn::Graphics *graphics)
}
}
-void ScrollArea::drawBorder(gcn::Graphics *graphics)
+void ScrollArea::drawFrame(gcn::Graphics *graphics)
{
- int bs = getBorderSize();
+ int bs = getFrameSize();
int w = getWidth() + bs * 2;
int h = getHeight() + bs * 2;
@@ -240,10 +240,10 @@ void ScrollArea::setOpaque(bool opaque)
mOpaque = opaque;
if (mOpaque) {
- setBorderSize(2);
+ setFrameSize(2);
}
else {
- setBorderSize(0);
+ setFrameSize(0);
}
}
diff --git a/src/gui/scrollarea.h b/src/gui/scrollarea.h
index 504842cc..9fb7093d 100644
--- a/src/gui/scrollarea.h
+++ b/src/gui/scrollarea.h
@@ -65,7 +65,7 @@ class ScrollArea : public gcn::ScrollArea {
/**
* Draws the background and border of the scroll area.
*/
- void drawBorder(gcn::Graphics *graphics);
+ void drawFrame(gcn::Graphics *graphics);
/**
* Sets whether the widget should draw its background or not.
diff --git a/src/gui/selectionlistener.h b/src/gui/selectionlistener.h
deleted file mode 100644
index 917a4871..00000000
--- a/src/gui/selectionlistener.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The Mana World
- * Copyright 2004 The Mana World Development Team
- *
- * This file is part of The Mana World.
- *
- * The Mana World 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.
- *
- * The Mana World 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 The Mana World; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id$
- */
-
-#ifndef _TMW_SELECTIONLISTENER_H__
-#define _TMW_SELECTIONLISTENER_H__
-
-#include <guichan/widget.hpp>
-#include <guichan/event.hpp>
-
-/**
- * An event that characterizes a change in the current selection.
- *
- * \ingroup GUI
- */
-class SelectionEvent : public gcn::Event
-{
- public:
- /**
- * Constructor.
- */
- SelectionEvent(gcn::Widget *source):
- gcn::Event(source)
- {
- }
-};
-
-/**
- * The listener that's notified when a selection value changes.
- *
- * \ingroup GUI
- */
-class SelectionListener
-{
- public:
- /**
- * Virtual destructor.
- */
- virtual ~SelectionListener() {}
-
- /**
- * Called whenever the value of the selection changes.
- */
- virtual void selectionChanged(const SelectionEvent &event) = 0;
-};
-
-typedef std::list<SelectionListener*> SelectionListeners;
-
-#endif
diff --git a/src/gui/sell.cpp b/src/gui/sell.cpp
index bc683c0b..e101ad39 100644
--- a/src/gui/sell.cpp
+++ b/src/gui/sell.cpp
@@ -182,7 +182,7 @@ void SellDialog::action(const gcn::ActionEvent &event)
}
}
-void SellDialog::selectionChanged(const SelectionEvent &event)
+void SellDialog::valueChanged(const gcn::SelectionEvent &event)
{
// Reset amount of items and update labels
mAmountItems = 1;
diff --git a/src/gui/sell.h b/src/gui/sell.h
index cde862d5..63a16770 100644
--- a/src/gui/sell.h
+++ b/src/gui/sell.h
@@ -25,10 +25,9 @@
#define _TMW_SELL_H
#include <guichan/actionlistener.hpp>
+#include <guichan/selectionlistener.hpp>
#include "window.h"
-#include "selectionlistener.h"
-#include "windowlistener.h"
#include "../guichanfwd.h"
@@ -41,7 +40,7 @@ class ShopListBox;
*
* \ingroup Interface
*/
-class SellDialog : public Window, gcn::ActionListener, SelectionListener
+class SellDialog : public Window, gcn::ActionListener, gcn::SelectionListener
{
public:
/**
@@ -76,7 +75,7 @@ class SellDialog : public Window, gcn::ActionListener, SelectionListener
*
* @see SelectionListener::selectionChanged
*/
- void selectionChanged(const SelectionEvent &event);
+ void valueChanged(const gcn::SelectionEvent &event);
/**
* Gives Player's Money amount
diff --git a/src/gui/setup_audio.cpp b/src/gui/setup_audio.cpp
index 89c21e2b..a02b3c20 100644
--- a/src/gui/setup_audio.cpp
+++ b/src/gui/setup_audio.cpp
@@ -72,7 +72,7 @@ Setup_Audio::Setup_Audio():
void Setup_Audio::apply()
{
- if (mSoundCheckBox->isMarked())
+ if (mSoundCheckBox->isSelected())
{
config.setValue("sound", 1);
try {
@@ -97,7 +97,7 @@ void Setup_Audio::apply()
void Setup_Audio::cancel()
{
- mSoundCheckBox->setMarked(mSoundEnabled);
+ mSoundCheckBox->setSelected(mSoundEnabled);
sound.setSfxVolume(mSfxVolume);
mSfxSlider->setValue(mSfxVolume);
diff --git a/src/gui/setup_joystick.cpp b/src/gui/setup_joystick.cpp
index 59cfefa4..dfa446ab 100644
--- a/src/gui/setup_joystick.cpp
+++ b/src/gui/setup_joystick.cpp
@@ -45,7 +45,7 @@ Setup_Joystick::Setup_Joystick():
mCalibrateButton->setPosition(10, 30 + mCalibrateLabel->getHeight());
mOriginalJoystickEnabled = (int)config.getValue("joystickEnabled", 0) != 0;
- mJoystickEnabled->setMarked(mOriginalJoystickEnabled);
+ mJoystickEnabled->setSelected(mOriginalJoystickEnabled);
mJoystickEnabled->addActionListener(this);
@@ -62,7 +62,7 @@ void Setup_Joystick::action(const gcn::ActionEvent &event)
if (event.getSource() == mJoystickEnabled)
{
- joystick->setEnabled(mJoystickEnabled->isMarked());
+ joystick->setEnabled(mJoystickEnabled->isSelected());
}
else
{
@@ -85,7 +85,7 @@ void Setup_Joystick::cancel()
{
joystick->setEnabled(mOriginalJoystickEnabled);
}
- mJoystickEnabled->setMarked(mOriginalJoystickEnabled);
+ mJoystickEnabled->setSelected(mOriginalJoystickEnabled);
}
void Setup_Joystick::apply()
diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp
index ee46396b..fcdb6c51 100644
--- a/src/gui/setup_video.cpp
+++ b/src/gui/setup_video.cpp
@@ -157,7 +157,7 @@ Setup_Video::Setup_Video():
mFpsField->setEnabled(mFps > 0);
mFpsSlider->setValue(mFps);
mFpsSlider->setEnabled(mFps > 0);
- mFpsCheckBox->setMarked(mFps > 0);
+ mFpsCheckBox->setSelected(mFps > 0);
mCustomCursorCheckBox->setActionEventId("customcursor");
mAlphaSlider->setActionEventId("guialpha");
@@ -245,7 +245,7 @@ Setup_Video::~Setup_Video()
void Setup_Video::apply()
{
// Full screen changes
- bool fullscreen = mFsCheckBox->isMarked();
+ bool fullscreen = mFsCheckBox->isSelected();
if (fullscreen != (config.getValue("screen", 0) == 1))
{
// checks for opengl usage
@@ -272,9 +272,9 @@ void Setup_Video::apply()
}
// OpenGL change
- if (mOpenGLCheckBox->isMarked() != mOpenGLEnabled)
+ if (mOpenGLCheckBox->isSelected() != mOpenGLEnabled)
{
- config.setValue("opengl", mOpenGLCheckBox->isMarked() ? 1 : 0);
+ config.setValue("opengl", mOpenGLCheckBox->isSelected() ? 1 : 0);
// OpenGL can currently only be changed by restarting, notify user.
new OkDialog(_("Changing OpenGL"),
@@ -315,9 +315,9 @@ Setup_Video::updateSlider(gcn::Slider *slider, gcn::TextField *field,
void Setup_Video::cancel()
{
- mFsCheckBox->setMarked(mFullScreenEnabled);
- mOpenGLCheckBox->setMarked(mOpenGLEnabled);
- mCustomCursorCheckBox->setMarked(mCustomCursorEnabled);
+ mFsCheckBox->setSelected(mFullScreenEnabled);
+ mOpenGLCheckBox->setSelected(mOpenGLEnabled);
+ mCustomCursorCheckBox->setSelected(mCustomCursorEnabled);
mAlphaSlider->setValue(mOpacity);
mOverlayDetailSlider->setValue(mOverlayDetail);
@@ -341,7 +341,7 @@ void Setup_Video::action(const gcn::ActionEvent &event)
else if (event.getId() == "customcursor")
{
config.setValue("customcursor",
- mCustomCursorCheckBox->isMarked() ? 1 : 0);
+ mCustomCursorCheckBox->isSelected() ? 1 : 0);
}
else if (event.getId() == "fpslimitslider")
{
@@ -379,7 +379,7 @@ void Setup_Video::action(const gcn::ActionEvent &event)
}
else if (event.getId() == "fpslimitcheckbox")
{
- if (mFpsCheckBox->isMarked())
+ if (mFpsCheckBox->isSelected())
{
mFps = (int) mFpsSlider->getValue();
}
diff --git a/src/gui/shoplistbox.cpp b/src/gui/shoplistbox.cpp
index e6d3c516..ba77be47 100644
--- a/src/gui/shoplistbox.cpp
+++ b/src/gui/shoplistbox.cpp
@@ -23,8 +23,6 @@
#include "shoplistbox.h"
-#include "selectionlistener.h"
-
#include <guichan/font.hpp>
#include <guichan/graphics.hpp>
#include <guichan/listmodel.hpp>
@@ -101,37 +99,12 @@ void ShopListBox::draw(gcn::Graphics *gcnGraphics)
}
}
-void ShopListBox::setSelected(int selected)
-{
- if (!mListModel)
- {
- mSelected = -1;
- }
- else
- {
- // Update mSelected with bounds checking
- mSelected = std::min(mListModel->getNumberOfElements() - 1,
- std::max(-1, selected));
-
- gcn::Widget *parent = getParent();
- if (parent && mSelected >= 0)
- {
- gcn::Rectangle scroll;
- scroll.y = mRowHeight * mSelected;
- scroll.height = mRowHeight;
- parent->showWidgetPart(this, scroll);
- }
- }
-
- fireSelectionChangedEvent();
-}
-
void ShopListBox::mousePressed(gcn::MouseEvent &event)
{
if (event.getButton() == gcn::MouseEvent::LEFT)
{
setSelected(event.getY() / mRowHeight);
- generateAction();
+ distributeActionEvent();
}
}
diff --git a/src/gui/shoplistbox.h b/src/gui/shoplistbox.h
index 44a68445..d5e2d836 100644
--- a/src/gui/shoplistbox.h
+++ b/src/gui/shoplistbox.h
@@ -27,8 +27,6 @@
#include "listbox.h"
#include "shop.h"
-class SelectionListener;
-
/**
* A list box, meant to be used inside a scroll area. Same as the Guichan list
* box except this one doesn't have a background, instead completely relying
@@ -54,30 +52,12 @@ class ShopListBox : public ListBox
*/
void draw(gcn::Graphics *graphics);
- void mousePressed(gcn::MouseEvent &event);
-
/**
- * Adds a listener to the list that's notified each time a change to
- * the selection occurs.
+ * Returns the height of a row.
*/
- void addSelectionListener(SelectionListener *listener)
- {
- mListeners.push_back(listener);
- }
+ unsigned int getRowHeight() const { return mRowHeight; }
- /**
- * Removes a listener from the list that's notified each time a change
- * to the selection occurs.
- */
- void removeSelectionListener(SelectionListener *listener)
- {
- mListeners.remove(listener);
- }
-
- /**
- * Sets the index of the selected element.
- */
- void setSelected(int selected);
+ void mousePressed(gcn::MouseEvent &event);
/**
* gives information about the current player's money
@@ -104,7 +84,7 @@ class ShopListBox : public ListBox
*/
ShopItems *mShopItems;
- int mRowHeight; /**< Row Height */
+ unsigned int mRowHeight; /**< Row Height */
bool mPriceCheck;
};
diff --git a/src/gui/slider.cpp b/src/gui/slider.cpp
index f0170a1b..c94c7bfb 100644
--- a/src/gui/slider.cpp
+++ b/src/gui/slider.cpp
@@ -64,7 +64,7 @@ Slider::~Slider()
void Slider::init()
{
int x, y, w, h,o1,o2;
- setBorderSize(0);
+ setFrameSize(0);
// Load resources
if (mInstances == 0)
diff --git a/src/gui/tabbedcontainer.cpp b/src/gui/tabbedcontainer.cpp
index 8fb2f598..d6267e65 100644
--- a/src/gui/tabbedcontainer.cpp
+++ b/src/gui/tabbedcontainer.cpp
@@ -82,8 +82,8 @@ void TabbedContainer::logic()
{
if (mActiveContent) {
mActiveContent->setSize(
- getWidth() - 2 * mActiveContent->getBorderSize(),
- getHeight() - TABHEIGHT - 2 * mActiveContent->getBorderSize());
+ getWidth() - 2 * mActiveContent->getFrameSize(),
+ getHeight() - TABHEIGHT - 2 * mActiveContent->getFrameSize());
}
Container::logic();
diff --git a/src/gui/textbox.cpp b/src/gui/textbox.cpp
index 329813e5..84c8ad4b 100644
--- a/src/gui/textbox.cpp
+++ b/src/gui/textbox.cpp
@@ -32,14 +32,14 @@ TextBox::TextBox():
gcn::TextBox()
{
setOpaque(false);
- setBorderSize(0);
+ setFrameSize(0);
}
TextBox::TextBox(const std::string& text):
gcn::TextBox(text)
{
setOpaque(false);
- setBorderSize(0);
+ setFrameSize(0);
}
void TextBox::setText(const std::string &text)
diff --git a/src/gui/textfield.cpp b/src/gui/textfield.cpp
index 11659b8b..4fd85d36 100644
--- a/src/gui/textfield.cpp
+++ b/src/gui/textfield.cpp
@@ -44,7 +44,7 @@ ImageRect TextField::skin;
TextField::TextField(const std::string& text):
gcn::TextField(text)
{
- setBorderSize(2);
+ setFrameSize(2);
if (instances == 0)
{
@@ -97,10 +97,10 @@ void TextField::draw(gcn::Graphics *graphics)
graphics->drawText(mText, 1 - mXScroll, 1);
}
-void TextField::drawBorder(gcn::Graphics *graphics)
+void TextField::drawFrame(gcn::Graphics *graphics)
{
int w, h, bs;
- bs = getBorderSize();
+ bs = getFrameSize();
w = getWidth() + bs * 2;
h = getHeight() + bs * 2;
@@ -184,7 +184,7 @@ void TextField::keyPressed(gcn::KeyEvent &keyEvent)
} break;
case Key::ENTER:
- generateAction();
+ distributeActionEvent();
break;
case Key::HOME:
diff --git a/src/gui/textfield.h b/src/gui/textfield.h
index e36380e3..36f921ac 100644
--- a/src/gui/textfield.h
+++ b/src/gui/textfield.h
@@ -53,7 +53,7 @@ class TextField : public gcn::TextField {
/**
* Draws the background and border.
*/
- void drawBorder(gcn::Graphics *graphics);
+ void drawFrame(gcn::Graphics *graphics);
/**
* Processes one keypress.
diff --git a/src/gui/trade.cpp b/src/gui/trade.cpp
index bb3d702f..c098c04c 100644
--- a/src/gui/trade.cpp
+++ b/src/gui/trade.cpp
@@ -147,7 +147,7 @@ void TradeWindow::tradeItem(Item *item, int quantity)
item->increaseQuantity(-quantity);
}
-void TradeWindow::selectionChanged(const SelectionEvent &event)
+void TradeWindow::valueChanged(const gcn::SelectionEvent &event)
{
Item *item;
diff --git a/src/gui/trade.h b/src/gui/trade.h
index 449de573..c8ece8d9 100644
--- a/src/gui/trade.h
+++ b/src/gui/trade.h
@@ -25,9 +25,9 @@
#define _TMW_TRADE_H
#include <guichan/actionlistener.hpp>
+#include <guichan/selectionlistener.hpp>
#include "window.h"
-#include "selectionlistener.h"
#include "../guichanfwd.h"
@@ -41,7 +41,7 @@ class ScrollArea;
*
* \ingroup Interface
*/
-class TradeWindow : public Window, gcn::ActionListener, SelectionListener
+class TradeWindow : public Window, gcn::ActionListener, gcn::SelectionListener
{
public:
/**
@@ -84,7 +84,7 @@ class TradeWindow : public Window, gcn::ActionListener, SelectionListener
* Updates the labels and makes sure only one item is selected in
* either my inventory or partner inventory.
*/
- void selectionChanged(const SelectionEvent &event);
+ void valueChanged(const gcn::SelectionEvent &event);
/**
* Called when receiving actions from the widgets.
diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp
index 6863aa01..b33a55cf 100644
--- a/src/gui/widgets/dropdown.cpp
+++ b/src/gui/widgets/dropdown.cpp
@@ -42,7 +42,7 @@ DropDown::DropDown(gcn::ListModel *listModel,
gcn::DropDown::DropDown(listModel,
scrollArea, listBox)
{
- setBorderSize(2);
+ setFrameSize(2);
// Initialize graphics
if (instances == 0)
@@ -103,7 +103,7 @@ void DropDown::draw(gcn::Graphics* graphics)
if (mDroppedDown)
{
- h = mOldH;
+ h = mFoldedUpHeight;
}
else
{
@@ -151,19 +151,18 @@ void DropDown::draw(gcn::Graphics* graphics)
}
}
-void DropDown::drawBorder(gcn::Graphics *graphics)
+void DropDown::drawFrame(gcn::Graphics *graphics)
{
- int w, h, bs;
- bs = getBorderSize();
- w = getWidth() + bs * 2;
- h = getHeight() + bs * 2;
+ const int bs = getFrameSize();
+ const int w = getWidth() + bs * 2;
+ const int h = getHeight() + bs * 2;
static_cast<Graphics*>(graphics)->drawImageRect(0, 0, w, h, skin);
}
void DropDown::drawButton(gcn::Graphics *graphics)
{
- int height = mDroppedDown ? mOldH : getHeight();
+ int height = mDroppedDown ? mFoldedUpHeight : getHeight();
static_cast<Graphics*>(graphics)->
drawImage(buttons[mDroppedDown][mPushed], getWidth() - height, 1);
diff --git a/src/gui/widgets/dropdown.h b/src/gui/widgets/dropdown.h
index 37e754af..d0dab7d2 100644
--- a/src/gui/widgets/dropdown.h
+++ b/src/gui/widgets/dropdown.h
@@ -64,7 +64,7 @@ class DropDown : public gcn::DropDown
void draw(gcn::Graphics* graphics);
- void drawBorder(gcn::Graphics* graphics);
+ void drawFrame(gcn::Graphics* graphics);
protected:
diff --git a/src/gui/window.cpp b/src/gui/window.cpp
index 7629e2e7..75288eb5 100644
--- a/src/gui/window.cpp
+++ b/src/gui/window.cpp
@@ -106,7 +106,7 @@ Window::Window(const std::string& caption, bool modal, Window *parent):
instances++;
- setBorderSize(0);
+ setFrameSize(0);
setPadding(3);
setTitleBarHeight(20);
@@ -121,6 +121,8 @@ Window::Window(const std::string& caption, bool modal, Window *parent):
// Windows are invisible by default
setVisible(false);
+
+ addWidgetListener(this);
}
Window::~Window()
@@ -202,84 +204,12 @@ void Window::draw(gcn::Graphics *graphics)
drawChildren(graphics);
}
-void Window::setContentWidth(int width)
-{
- setWidth(width + 2 * getPadding());
-}
-
-void Window::setContentHeight(int height)
-{
- setHeight(height + getPadding() + getTitleBarHeight());
-}
-
void Window::setContentSize(int width, int height)
{
setSize(width + 2 * getPadding(),
height + getPadding() + getTitleBarHeight());
}
-void Window::setSize(int width, int height)
-{
- if (width == mDimension.width && height == mDimension.height) return;
-
- // No call to ancestor! Infinite loop otherwise.
- mDimension.width = width;
- mDimension.height = height;
-
- if (mGrip)
- {
- gcn::Rectangle const &area = getChildrenArea();
- mGrip->setPosition(width - mGrip->getWidth() - area.x,
- height - mGrip->getHeight() - area.y);
- }
-
- if (mLayout)
- {
- int w = width - 2 * getPadding(),
- h = height - getPadding() - getTitleBarHeight();
- mLayout->reflow(w, h);
- }
-
- fireWindowEvent(WindowEvent(this, WindowEvent::WINDOW_RESIZED));
-}
-
-void Window::setWidth(int width)
-{
- setSize(width, mDimension.height);
-}
-
-void Window::setHeight(int height)
-{
- setSize(mDimension.width, height);
-}
-
-void Window::setPosition(int x, int y)
-{
- if (x == mDimension.x && y == mDimension.y) return;
-
- // No call to ancestor!
- mDimension.x = x;
- mDimension.y = y;
-
- fireWindowEvent(WindowEvent(this, WindowEvent::WINDOW_MOVED));
-}
-
-void Window::setDimension(const gcn::Rectangle &dimension)
-{
- setPosition(dimension.x, dimension.y);
- setSize(dimension.width, dimension.height);
-}
-
-void Window::setX(int x)
-{
- setPosition(x, mDimension.y);
-}
-
-void Window::setY(int y)
-{
- setPosition(mDimension.x, y);
-}
-
void Window::setLocationRelativeTo(gcn::Widget *widget)
{
int wx, wy;
@@ -331,6 +261,23 @@ void Window::setResizable(bool r)
}
}
+void Window::widgetResized(const gcn::Event &event)
+{
+ if (mGrip)
+ {
+ gcn::Rectangle const &area = getChildrenArea();
+ mGrip->setPosition(getWidth() - mGrip->getWidth() - area.x,
+ getHeight() - mGrip->getHeight() - area.y);
+ }
+
+ if (mLayout)
+ {
+ int w = getWidth() - 2 * getPadding();
+ int h = getHeight() - getPadding() - getTitleBarHeight();
+ mLayout->reflow(w, h);
+ }
+}
+
void Window::setCloseButton(bool flag)
{
mCloseButton = flag;
@@ -407,7 +354,7 @@ void Window::mouseReleased(gcn::MouseEvent &event)
}
// This should be the responsibility of Guichan (and is from 0.8.0 on)
- mIsMoving = false;
+ mMoved = false;
}
void Window::mouseExited(gcn::MouseEvent &event)
@@ -449,7 +396,7 @@ void Window::mouseDragged(gcn::MouseEvent &event)
gcn::Window::mouseDragged(event);
// Keep guichan window inside screen when it may be moved
- if (isMovable() && mIsMoving)
+ if (isMovable() && mMoved)
{
int newX = std::max(0, getX());
int newY = std::max(0, getY());
@@ -458,7 +405,7 @@ void Window::mouseDragged(gcn::MouseEvent &event)
setPosition(newX, newY);
}
- if (mouseResize && !mIsMoving)
+ if (mouseResize && !mMoved)
{
const int dx = event.getX() - mDragOffsetX;
const int dy = event.getY() - mDragOffsetY;
@@ -585,24 +532,6 @@ int Window::getResizeHandles(gcn::MouseEvent &event)
return resizeHandles;
}
-void Window::fireWindowEvent(const WindowEvent &event)
-{
- WindowListeners::iterator i_end = mListeners.end();
- WindowListeners::iterator i = mListeners.begin();
-
- switch (event.getType())
- {
- case WindowEvent::WINDOW_MOVED:
- for (; i != i_end; ++i)
- { (*i)->windowMoved(event); }
- break;
- case WindowEvent::WINDOW_RESIZED:
- for (; i != i_end; ++i)
- { (*i)->windowResized(event); }
- break;
- }
-}
-
Layout &Window::getLayout()
{
if (!mLayout) mLayout = new Layout;
diff --git a/src/gui/window.h b/src/gui/window.h
index df756be3..9f5969f0 100644
--- a/src/gui/window.h
+++ b/src/gui/window.h
@@ -25,11 +25,10 @@
#define _TMW_WINDOW_H__
#include <guichan/widgets/window.hpp>
+#include <guichan/widgetlistener.hpp>
#include "../guichanfwd.h"
-#include "windowlistener.h"
-
class ConfigListener;
class ContainerPlacer;
class Image;
@@ -45,7 +44,7 @@ class WindowContainer;
*
* \ingroup GUI
*/
-class Window : public gcn::Window
+class Window : public gcn::Window, gcn::WidgetListener
{
public:
friend class WindowConfigListener;
@@ -79,56 +78,11 @@ class Window : public gcn::Window
void draw(gcn::Graphics *graphics);
/**
- * Sets the width of the window contents.
- */
- void setContentWidth(int width);
-
- /**
- * Sets the height of the window contents.
- */
- void setContentHeight(int height);
-
- /**
* Sets the size of this window.
*/
void setContentSize(int width, int height);
/**
- * Sets the size of this window.
- */
- void setSize(int width, int height);
-
- /**
- * Sets the width of this window.
- */
- void setWidth(int width);
-
- /**
- * Sets the height of this window.
- */
- void setHeight(int height);
-
- /**
- * Sets the position and size of this window.
- */
- void setDimension(const gcn::Rectangle &dimension);
-
- /**
- * Sets the position of this window.
- */
- void setPosition(int x, int y);
-
- /**
- * Sets the window x coordinate.
- */
- void setX(int x);
-
- /**
- * Sets the window y coordinate.
- */
- void setY(int y);
-
- /**
* Sets the location relative to the given widget.
*/
void setLocationRelativeTo(gcn::Widget *widget);
@@ -139,6 +93,11 @@ class Window : public gcn::Window
void setResizable(bool resize);
/**
+ * Called whenever the widget changes size.
+ */
+ void widgetResized(const gcn::Event &event);
+
+ /**
* Sets whether or not the window has a close button.
*/
void setCloseButton(bool flag);
@@ -256,20 +215,6 @@ class Window : public gcn::Window
*/
void resetToDefaultSize();
- /**
- * Adds a listener to the list that's notified when the window is
- * moved or resized.
- */
- void addWindowListener(WindowListener *listener)
- { mListeners.push_back(listener); }
-
- /**
- * Removes a listener from the list that's notified when the window is
- * moved or resized.
- */
- void removeWindowListener(WindowListener *listener)
- { mListeners.remove(listener); }
-
enum ResizeHandles
{
TOP = 0x01,
@@ -349,14 +294,6 @@ class Window : public gcn::Window
* where two borders are moved at the same time.
*/
static const int resizeBorderWidth = 10;
-
- private:
- /**
- * Sends out a window event to the list of selection listeners.
- */
- void fireWindowEvent(const WindowEvent &event);
-
- WindowListeners mListeners;
};
#endif
diff --git a/src/gui/windowlistener.h b/src/gui/windowlistener.h
deleted file mode 100644
index 24f6a7b8..00000000
--- a/src/gui/windowlistener.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The Mana World
- * Copyright 2004 The Mana World Development Team
- *
- * This file is part of The Mana World.
- *
- * The Mana World 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.
- *
- * The Mana World 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 The Mana World; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id$
- */
-
-#ifndef _TMW_WINDOW_LISTENER_H_
-#define _TMW_WINDOW_LISTENER_H_
-
-#include <guichan/widgets/window.hpp>
-#include <guichan/event.hpp>
-
-/**
- * An event that characterizes a window move or resize.
- *
- * \ingroup GUI
- */
-class WindowEvent : public gcn::Event
-{
- public:
- /**
- * Constructor.
- */
- WindowEvent(gcn::Window *source, int type):
- gcn::Event(source)
- {
- mType = type;
- }
-
- /**
- * Returns the event type.
- */
- int getType() const
- { return mType; }
-
- enum WindowEventType
- {
- WINDOW_MOVED,
- WINDOW_RESIZED
- };
-};
-
-/**
- * The listener that's notified when a window is moved or resized.
- *
- * \ingroup GUI
- */
-class WindowListener
-{
- public:
- /**
- * Virtual destructor.
- */
- virtual ~WindowListener() {}
-
- /**
- * Called whenever the window is moved.
- */
- virtual void windowMoved(const WindowEvent &) {}
-
- /**
- * Called whenever the window is resized.
- */
- virtual void windowResized(const WindowEvent &) {}
-};
-
-typedef std::list<WindowListener*> WindowListeners;
-
-#endif