diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-04-11 13:31:52 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-04-11 13:31:52 +0000 |
commit | 4b9e2b6c41e740a3eac10078d5fa4fbc63788bbe (patch) | |
tree | 6b8aea437d454de40808a7f1289c264d7bd563e3 /src/gui | |
parent | f97ddedaa9672c78147fc13282bd14a5be46eb19 (diff) | |
download | mana-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')
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 |