From 46308b7e9d65dd734664f903a09c3210f1684a6c Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Thu, 2 Nov 2006 21:46:36 +0000 Subject: Merged trunk changes from revision 2757 to 2800 into the 0.1.0 branch. --- src/gui/browserbox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/gui/browserbox.cpp') diff --git a/src/gui/browserbox.cpp b/src/gui/browserbox.cpp index 06660cd5..2aec84a5 100644 --- a/src/gui/browserbox.cpp +++ b/src/gui/browserbox.cpp @@ -56,7 +56,7 @@ BrowserBox::BrowserBox(unsigned int mode): " abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567" "89:@!\"$%&/=?^+*#[]{}()<>_;'.,\\|-~`" - "øåáÁéÉíÍóÓúÚç륣¢¡¿àãõêñÑöüäÖÜÄß"); + "øåáÁéÉíÍóÓúÚç륣¢¡¿àãõêñÑöüäÖÜÄßèÈÅ"); } setFont(browserFont); instances++; -- cgit v1.2.3-70-g09d2 From d1395845cdc678db2a71326f2e6f20253ed14cac Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Sun, 14 Jan 2007 16:45:13 +0000 Subject: Merged 0.0 changes from revision 2988 to 3035 to trunk. --- ChangeLog | 86 ++++++++++++++++++++++-- src/game.cpp | 19 +++--- src/gui/browserbox.cpp | 15 +++-- src/gui/browserbox.h | 10 +-- src/gui/buddywindow.cpp | 8 +-- src/gui/buddywindow.h | 2 +- src/gui/button.cpp | 9 +-- src/gui/button.h | 2 +- src/gui/buy.cpp | 16 ++--- src/gui/buy.h | 2 +- src/gui/buysell.cpp | 8 +-- src/gui/buysell.h | 2 +- src/gui/char_select.cpp | 40 +++++------ src/gui/char_select.h | 4 +- src/gui/chat.cpp | 15 +++-- src/gui/chat.h | 11 +-- src/gui/chatinput.cpp | 2 +- src/gui/chatinput.h | 2 +- src/gui/confirm_dialog.cpp | 7 +- src/gui/confirm_dialog.h | 2 +- src/gui/connection.cpp | 8 ++- src/gui/debugwindow.cpp | 16 +++-- src/gui/debugwindow.h | 2 +- src/gui/gccontainer.cpp | 6 +- src/gui/gccontainer.h | 9 ++- src/gui/help.cpp | 4 +- src/gui/help.h | 2 +- src/gui/inttextbox.cpp | 7 +- src/gui/inttextbox.h | 3 +- src/gui/inventorywindow.cpp | 20 +++--- src/gui/inventorywindow.h | 6 +- src/gui/item_amount.cpp | 20 +++--- src/gui/item_amount.h | 2 +- src/gui/itemcontainer.cpp | 35 ++++++---- src/gui/itemcontainer.h | 2 +- src/gui/listbox.cpp | 33 ++------- src/gui/listbox.h | 6 +- src/gui/login.cpp | 16 ++--- src/gui/login.h | 4 +- src/gui/menuwindow.cpp | 14 ++-- src/gui/newskill.cpp | 24 +++---- src/gui/newskill.h | 2 +- src/gui/npc_text.cpp | 4 +- src/gui/npc_text.h | 2 +- src/gui/npclistdialog.cpp | 8 +-- src/gui/npclistdialog.h | 2 +- src/gui/ok_dialog.cpp | 6 +- src/gui/ok_dialog.h | 2 +- src/gui/playerbox.cpp | 1 - src/gui/register.cpp | 6 +- src/gui/register.h | 2 +- src/gui/sell.cpp | 18 ++--- src/gui/sell.h | 2 +- src/gui/serverdialog.cpp | 23 ++++--- src/gui/serverdialog.h | 5 +- src/gui/setup.cpp | 8 +-- src/gui/setup.h | 2 +- src/gui/setup_audio.cpp | 10 +-- src/gui/setup_audio.h | 2 +- src/gui/setup_joystick.cpp | 5 +- src/gui/setup_joystick.h | 2 +- src/gui/setup_video.cpp | 49 +++++++------- src/gui/setup_video.h | 5 +- src/gui/shoplistbox.cpp | 6 +- src/gui/shoplistbox.h | 2 +- src/gui/skill.cpp | 10 +-- src/gui/skill.h | 2 +- src/gui/status.cpp | 4 +- src/gui/status.h | 2 +- src/gui/tabbedcontainer.cpp | 4 +- src/gui/tabbedcontainer.h | 2 +- src/gui/trade.cpp | 10 +-- src/gui/trade.h | 2 +- src/gui/updatewindow.cpp | 6 +- src/gui/updatewindow.h | 2 +- src/gui/viewport.cpp | 28 ++++---- src/gui/viewport.h | 28 ++++++-- src/gui/window.cpp | 121 +++++++++++---------------------- src/gui/window.h | 19 +++--- src/main.cpp | 10 +-- src/net/playerhandler.cpp | 4 +- src/net/tradehandler.cpp | 4 +- tools/Purger.java | 159 -------------------------------------------- 83 files changed, 495 insertions(+), 597 deletions(-) delete mode 100644 tools/Purger.java (limited to 'src/gui/browserbox.cpp') diff --git a/ChangeLog b/ChangeLog index 0cbbb214..d091a061 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,53 @@ +2007-01-14 Bjørn Lindeijer + + * src/game.cpp, src/main.cpp, src/gui/trade.cpp, src/gui/sell.cpp, + src/gui/connection.cpp, src/gui/buddywindow.cpp, src/gui/browserbox.h, + src/gui/char_server.cpp, src/gui/window.cpp, src/gui/login.cpp, + src/gui/inttextbox.h, src/gui/viewport.cpp, src/gui/button.h, + src/gui/shoplistbox.h, src/gui/skill.h, src/gui/item_amount.h, + src/gui/setup_audio.h, src/gui/newskill.cpp, src/gui/listbox.h, + src/gui/register.h, src/gui/setup.cpp, src/gui/npclistdialog.h, + src/gui/updatewindow.cpp, src/gui/button.cpp, src/gui/char_select.cpp, + src/gui/login.h, src/gui/setup_audio.cpp, src/gui/item_amount.cpp, + src/gui/setup_joystick.h, src/gui/chat.h, src/gui/npc_text.cpp, + src/gui/setup_video.cpp, src/gui/ok_dialog.cpp, + src/gui/inventorywindow.h, src/gui/gccontainer.cpp, + src/gui/newskill.h, src/gui/buy.h, src/gui/setup.h, + src/gui/itemcontainer.h, src/gui/confirm_dialog.cpp, + src/gui/debugwindow.cpp, src/gui/chat.cpp, src/gui/setup_joystick.cpp, + src/gui/updatewindow.h, src/gui/char_select.h, src/gui/buysell.h, + src/gui/tabbedcontainer.cpp, src/gui/inventorywindow.cpp, + src/gui/help.cpp, src/gui/status.h, src/gui/npc_text.h, + src/gui/setup_video.h, src/gui/menuwindow.cpp, src/gui/browserbox.cpp, + src/gui/ok_dialog.h, src/gui/buy.cpp, src/gui/itemcontainer.cpp, + src/gui/gccontainer.h, src/gui/buddywindow.h, src/gui/sell.h, + src/gui/trade.h, src/gui/inttextbox.cpp, src/gui/char_server.h, + src/gui/window.h, src/gui/shoplistbox.cpp, src/gui/skill.cpp, + src/gui/buysell.cpp, src/gui/confirm_dialog.h, src/gui/debugwindow.h, + src/gui/status.cpp, src/gui/listbox.cpp, src/gui/register.cpp, + src/gui/viewport.h, src/gui/tabbedcontainer.h, + src/gui/npclistdialog.cpp, src/gui/help.h, src/gui/chatinput.h, + src/gui/chatinput.cpp, src/net/tradehandler.cpp, + src/net/playerhandler.cpp: Upgraded to Guichan 0.6.0 (merge from + guichan-0.6.0 branch). + +2007-01-13 Bjørn Lindeijer + + * data/graphics/sprites/Makefile.am, + data/graphics/sprites/CMakeLists.txt: Updated with regard to renaming + of cotton equipment. + +2006-01-13 Eugenio Favalli + + * src/gui/debugwindow.cpp, src/gui/viewport.h: Fixed mouse coordinates + display in debug window. + +2007-01-12 Bjørn Lindeijer + + * src/gui/viewport.cpp: Fixed initialization of mPlayerFollowMouse, + the lack of which sometimes caused the player to start walking when + clicking on the GUI. + 2007-01-11 Björn Steinbrink * data/graphics/images/ambient/CMakeLists.txt, @@ -7,23 +57,43 @@ 2007-01-11 Rogier Polak * src/gui/char_select.cpp, src/net/accountserver/account.h, - src/net/accountserver/account.cpp, src/player.cpp: Fixedd issues + src/net/accountserver/account.cpp, src/player.cpp: Fixed issues with out of range hair style and color, as well as their ordering. * data/graphics/gui/Makefile.am, data/graphics/images/ambient/Makefile.am, data/graphics/sprites/Makefile.am: Some corrections to installed files. +2007-01-09 Philipp Sehmisch + + * data/graphics/icecave.png: Added new tiles and fixes by Nickman and + made some other cosmetical corrections. + 2007-01-07 Bjørn Lindeijer + * data/graphics/sprites/monster-mountsnake.xml, + data/graphics/sprites/monster-mountsnake.png, data/monsters.xml: Added + brown snake by Pauan. * src/gui/status.h, src/gui/status.cpp, src/localplayer.h: Synchronized player attributes with Attributes page on the wiki. Removed job xp bar. +2007-01-07 Philipp Sehmisch + + * data/graphics/chest-cottonshirt-male.png, + data/graphics/chest-cottonshirt-male.xml, + data/graphics/chest-cottonshirt-female.png, + data/graphics/chest-cottonshirt-female.xml, + data/graphics/item001.png, data/equipment.xml: Added female + cottonshirt sprites. + * data/equipment.xml: Fixed some wrong armor values. + 2007-01-05 Björn Steinbrink * src/CMakeLists.txt, data/graphics/sprites/CMakeLists.txt: Fixed installation when using CMake. + * src/CMakeLists.txt, data/graphics/images/ambient/Makefile.am, + data/graphics/sprites/CMakeLists.txt: Synchronized build files. 2007-01-05 Guillaume Melquiond @@ -36,6 +106,10 @@ * src/map.cpp, src/map.h: Declared some methods const. +2007-01-04 Eugenio Favalli + + * tools/Purger.java: Removed purger tool. + 2007-01-03 Guillaume Melquiond * src/resources/mapreader.cpp: Fixed memory leak on error. @@ -285,11 +359,11 @@ 2006-12-09 Bjørn Lindeijer * src/sprite.h, src/gui/playerbox.h, src/gui/char_select.cpp, - src/gui/playerbox.cpp, src/gui/passwordfield.h,src/gui/char_select.h, - src/gui/textfield.h, src/main.cpp, src/being.cpp, src/player.h, - src/floor_item.h, src/being.h: Use new animation system in character - selection/creation. Shows equipment and allowed for some cleanup. Had - a bit of help from the patch by VictorSan. + src/gui/playerbox.cpp, src/gui/passwordfield.h, src/gui/char_select.h, + src/main.cpp, src/being.cpp, src/player.h, src/floor_item.h, + src/being.h: Use new animation system in character selection/creation. + Shows equipment and allowed for some cleanup. Had a bit of help from + the patch by VictorSan. 2006-12-08 Bjørn Lindeijer diff --git a/src/game.cpp b/src/game.cpp index 2af13146..40d78248 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -124,9 +124,11 @@ const int MAX_TIME = 10000; * Listener used for exitting handling. */ namespace { - struct ExitListener : public gcn::ActionListener { - void action(const std::string &eventId, gcn::Widget *widget) { - if (eventId == "yes") { + struct ExitListener : public gcn::ActionListener + { + void action(const gcn::ActionEvent &event) + { + if (event.getId() == "yes") { done = true; } exitConfirm = NULL; @@ -386,10 +388,6 @@ void Game::logic() void Game::handleInput() { - // Get the state of the keyboard keys - Uint8* keys; - keys = SDL_GetKeyState(NULL); - if (joystick != NULL) { joystick->update(); @@ -455,7 +453,7 @@ void Game::handleInput() // Close the config window, cancelling changes if opened else if (setupWindow->isVisible()) { - setupWindow->action("cancel", NULL); + setupWindow->action(gcn::ActionEvent(NULL, "cancel")); } // Else, open the chat edit box else @@ -633,7 +631,12 @@ void Game::handleInput() current_npc == 0 && !chatWindow->isFocused()) { + // Get the state of the keyboard keys + Uint8* keys; + keys = SDL_GetKeyState(NULL); + Uint16 x = player_node->mX / 32, y = player_node->mY / 32; + unsigned char direction = 0; // Translate pressed keys to movement and direction diff --git a/src/gui/browserbox.cpp b/src/gui/browserbox.cpp index 2aec84a5..65fdde64 100644 --- a/src/gui/browserbox.cpp +++ b/src/gui/browserbox.cpp @@ -98,7 +98,7 @@ void BrowserBox::disableLinksAndUserColors() mUseLinksAndUserColors = false; } -void BrowserBox::addRow(const std::string& row) +void BrowserBox::addRow(const std::string &row) { std::string tmp = row; std::string newRow; @@ -238,25 +238,28 @@ struct MouseOverLink int mX, mY; }; -void BrowserBox::mousePress(int mx, int my, int button) +void +BrowserBox::mousePressed(gcn::MouseEvent &event) { LinkIterator i = find_if(mLinks.begin(), mLinks.end(), - MouseOverLink(mx, my)); + MouseOverLink(event.getX(), event.getY())); if (i != mLinks.end()) { mLinkHandler->handleLink(i->link); } } -void BrowserBox::mouseMotion(int mx, int my) +void +BrowserBox::mouseMoved(gcn::MouseEvent &event) { LinkIterator i = find_if(mLinks.begin(), mLinks.end(), - MouseOverLink(mx, my)); + MouseOverLink(event.getX(), event.getY())); mSelectedLink = (i != mLinks.end()) ? (i - mLinks.begin()) : -1; } -void BrowserBox::draw(gcn::Graphics* graphics) +void +BrowserBox::draw(gcn::Graphics *graphics) { if (mOpaque) { diff --git a/src/gui/browserbox.h b/src/gui/browserbox.h index a2c9dd9b..666a7754 100644 --- a/src/gui/browserbox.h +++ b/src/gui/browserbox.h @@ -61,7 +61,7 @@ class BrowserBox : public gcn::Widget, public gcn::MouseListener /** * Sets the handler for links. */ - void setLinkHandler(LinkHandler* linkHandler); + void setLinkHandler(LinkHandler *linkHandler); /** * Sets the BrowserBox opacity. @@ -81,7 +81,7 @@ class BrowserBox : public gcn::Widget, public gcn::MouseListener /** * Adds a text row to the browser. */ - void addRow(const std::string& row); + void addRow(const std::string &row); /** * Remove all rows. @@ -91,13 +91,13 @@ class BrowserBox : public gcn::Widget, public gcn::MouseListener /** * Handles mouse actions. */ - void mousePress(int mx, int my, int button); - void mouseMotion(int mx, int my); + void mousePressed(gcn::MouseEvent &event); + void mouseMoved(gcn::MouseEvent &event); /** * Draws the browser box. */ - void draw(gcn::Graphics* graphics); + void draw(gcn::Graphics *graphics); /** * BrowserBox modes. diff --git a/src/gui/buddywindow.cpp b/src/gui/buddywindow.cpp index 145f0ad2..0ed383ce 100644 --- a/src/gui/buddywindow.cpp +++ b/src/gui/buddywindow.cpp @@ -61,9 +61,9 @@ BuddyWindow::BuddyWindow(): add(cancel); } -void BuddyWindow::action(const std::string &eventId, gcn::Widget *widget) +void BuddyWindow::action(const gcn::ActionEvent &event) { - if (eventId == "Talk") { + if (event.getId() == "Talk") { int selected = mListbox->getSelected(); if ( selected > -1 ) { @@ -71,7 +71,7 @@ void BuddyWindow::action(const std::string &eventId, gcn::Widget *widget) chatWindow->setInputText(who +": "); } } - else if (eventId == "Remove") { + else if (event.getId() == "Remove") { int selected = mListbox->getSelected(); if ( selected > -1 ) { @@ -79,7 +79,7 @@ void BuddyWindow::action(const std::string &eventId, gcn::Widget *widget) mBuddyList->removeBuddy(who); } } - else if (eventId == "Cancel") { + else if (event.getId() == "Cancel") { setVisible(false); } } diff --git a/src/gui/buddywindow.h b/src/gui/buddywindow.h index 8764d008..a3ca4de2 100644 --- a/src/gui/buddywindow.h +++ b/src/gui/buddywindow.h @@ -48,7 +48,7 @@ class BuddyWindow : public Window, public gcn::ActionListener /** * Performs action. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); private: BuddyList *mBuddyList; diff --git a/src/gui/button.cpp b/src/gui/button.cpp index 31f38593..0055c89a 100644 --- a/src/gui/button.cpp +++ b/src/gui/button.cpp @@ -37,7 +37,7 @@ ImageRect Button::button[4]; int Button::mInstances = 0; -Button::Button(const std::string& caption, const std::string &eventId, +Button::Button(const std::string& caption, const std::string &actionEventId, gcn::ActionListener *listener): gcn::Button(caption) { @@ -73,7 +73,7 @@ Button::Button(const std::string& caption, const std::string &eventId, } mInstances++; - setEventId(eventId); + setActionEventId(actionEventId); if (listener) { addActionListener(listener); } @@ -92,7 +92,8 @@ Button::~Button() } } -void Button::draw(gcn::Graphics* graphics) +void +Button::draw(gcn::Graphics *graphics) { int mode; @@ -102,7 +103,7 @@ void Button::draw(gcn::Graphics* graphics) else if (isPressed()) { mode = 2; } - else if (hasMouse()) { + else if (mHasMouse) { mode = 1; } else { diff --git a/src/gui/button.h b/src/gui/button.h index 36d8f7a1..1c2ec41b 100644 --- a/src/gui/button.h +++ b/src/gui/button.h @@ -40,7 +40,7 @@ class Button : public gcn::Button { /** * Constructor, sets the caption of the button to the given string. */ - Button(const std::string& caption, const std::string &eventId, + Button(const std::string& caption, const std::string &actionEventId, gcn::ActionListener *listener); /** diff --git a/src/gui/buy.cpp b/src/gui/buy.cpp index 102dd49e..cb07da22 100644 --- a/src/gui/buy.cpp +++ b/src/gui/buy.cpp @@ -82,8 +82,8 @@ BuyDialog::BuyDialog(): mItemEffectLabel->setDimension(gcn::Rectangle(5, 150, 240, 14)); mItemDescLabel->setDimension(gcn::Rectangle(5, 169, 240, 14)); - mShopItemList->setEventId("item"); - mSlider->setEventId("slider"); + mShopItemList->setActionEventId("item"); + mSlider->setActionEventId("slider"); mShopItemList->addSelectionListener(this); mSlider->addActionListener(this); @@ -140,11 +140,11 @@ void BuyDialog::addItem(short id, int price) mShopItemList->adjustSize(); } -void BuyDialog::action(const std::string &eventId, gcn::Widget *widget) +void BuyDialog::action(const gcn::ActionEvent &event) { int selectedItem = mShopItemList->getSelected(); - if (eventId == "quit") + if (event.getId() == "quit") { setVisible(false); current_npc = 0; @@ -158,12 +158,12 @@ void BuyDialog::action(const std::string &eventId, gcn::Widget *widget) bool updateButtonsAndLabels = false; - if (eventId == "slider") + if (event.getId() == "slider") { mAmountItems = (int)(mSlider->getValue() * mMaxItems); updateButtonsAndLabels = true; } - else if (eventId == "+") + else if (event.getId() == "+") { if (mAmountItems < mMaxItems) { mAmountItems++; @@ -174,7 +174,7 @@ void BuyDialog::action(const std::string &eventId, gcn::Widget *widget) mSlider->setValue(double(mAmountItems)/double(mMaxItems)); updateButtonsAndLabels = true; } - else if (eventId == "-") + else if (event.getId() == "-") { if (mAmountItems > 0) { mAmountItems--; @@ -188,7 +188,7 @@ void BuyDialog::action(const std::string &eventId, gcn::Widget *widget) // TODO: Actually we'd have a bug elsewhere if this check for the number // of items to be bought ever fails, Bertram removed the assertions, is // there a better way to ensure this fails in an _obivous_ way in C++? - else if (eventId == "buy" && (mAmountItems > 0 && + else if (event.getId() == "buy" && (mAmountItems > 0 && mAmountItems <= mMaxItems)) { // XXX Convert for new server diff --git a/src/gui/buy.h b/src/gui/buy.h index b83b6f2f..13116b6e 100644 --- a/src/gui/buy.h +++ b/src/gui/buy.h @@ -73,7 +73,7 @@ class BuyDialog : public Window, public gcn::ActionListener, SelectionListener /** * Called when receiving actions from the widgets. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); /** * Returns the number of items in the shop inventory. diff --git a/src/gui/buysell.cpp b/src/gui/buysell.cpp index 4bbbb2ff..ae5c7358 100644 --- a/src/gui/buysell.cpp +++ b/src/gui/buysell.cpp @@ -52,13 +52,13 @@ BuySellDialog::BuySellDialog(): requestFocus(); } -void BuySellDialog::action(const std::string &eventId, gcn::Widget *widget) +void BuySellDialog::action(const gcn::ActionEvent &event) { - if (eventId == "Buy") { + if (event.getId() == "Buy") { current_npc->buy(); - } else if (eventId == "Sell") { + } else if (event.getId() == "Sell") { current_npc->sell(); - } else if (eventId == "Cancel") { + } else if (event.getId() == "Cancel") { current_npc = 0; } setVisible(false); diff --git a/src/gui/buysell.h b/src/gui/buysell.h index 7a90a869..97caf34b 100644 --- a/src/gui/buysell.h +++ b/src/gui/buysell.h @@ -47,7 +47,7 @@ class BuySellDialog : public Window, public gcn::ActionListener /** * Called when receiving actions from the widgets. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); }; #endif diff --git a/src/gui/char_select.cpp b/src/gui/char_select.cpp index ec4dad2e..4c4b99e5 100644 --- a/src/gui/char_select.cpp +++ b/src/gui/char_select.cpp @@ -48,7 +48,7 @@ class CharDeleteConfirm : public ConfirmDialog { public: CharDeleteConfirm(CharSelectDialog *master); - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); private: CharSelectDialog *master; }; @@ -60,13 +60,13 @@ CharDeleteConfirm::CharDeleteConfirm(CharSelectDialog *m): { } -void CharDeleteConfirm::action(const std::string &eventId, gcn::Widget *widget) +void CharDeleteConfirm::action(const gcn::ActionEvent &event) { - //ConfirmDialog::action(eventId); - if (eventId == "yes") { + //ConfirmDialog::action(event); + if (event.getId() == "yes") { master->attemptCharDelete(); } - ConfirmDialog::action(eventId, widget); + ConfirmDialog::action(event); } CharSelectDialog::CharSelectDialog(LockedArray *charInfo): @@ -122,9 +122,9 @@ CharSelectDialog::CharSelectDialog(LockedArray *charInfo): updatePlayerInfo(); } -void CharSelectDialog::action(const std::string &eventId, gcn::Widget *widget) +void CharSelectDialog::action(const gcn::ActionEvent &event) { - if (eventId == "ok" && n_character > 0) + if (event.getId() == "ok" && n_character > 0) { // Start game mNewCharButton->setEnabled(false); @@ -136,11 +136,11 @@ void CharSelectDialog::action(const std::string &eventId, gcn::Widget *widget) Net::AccountServer::Account::selectCharacter(mCharInfo->getPos()); mCharInfo->lock(); } - else if (eventId == "cancel") + else if (event.getId() == "cancel") { state = STATE_EXIT; } - else if (eventId == "new") + else if (event.getId() == "new") { if (n_character < MAX_SLOT + 1) { @@ -150,7 +150,7 @@ void CharSelectDialog::action(const std::string &eventId, gcn::Widget *widget) mCharInfo->unlock(); } } - else if (eventId == "delete") + else if (event.getId() == "delete") { // Delete character if (mCharInfo->getEntry()) @@ -158,11 +158,11 @@ void CharSelectDialog::action(const std::string &eventId, gcn::Widget *widget) new CharDeleteConfirm(this); } } - else if (eventId == "previous") + else if (event.getId() == "previous") { mCharInfo->prev(); } - else if (eventId == "next") + else if (event.getId() == "next") { mCharInfo->next(); } @@ -253,7 +253,7 @@ CharCreateDialog::CharCreateDialog(Window *parent, int slot): mCancelButton = new Button("Cancel", "cancel", this); mPlayerBox = new PlayerBox(mPlayer); - mNameField->setEventId("create"); + mNameField->setActionEventId("create"); int w = 200; int h = 150; @@ -298,9 +298,9 @@ CharCreateDialog::~CharCreateDialog() delete mPlayer; } -void CharCreateDialog::action(const std::string &eventId, gcn::Widget *widget) +void CharCreateDialog::action(const gcn::ActionEvent &event) { - if (eventId == "create") { + if (event.getId() == "create") { if (getName().length() >= 4) { // Attempt to create the character mCreateButton->setEnabled(false); @@ -322,20 +322,20 @@ void CharCreateDialog::action(const std::string &eventId, gcn::Widget *widget) "Your name needs to be at least 4 characters.", this); } } - else if (eventId == "cancel") { + else if (event.getId() == "cancel") { scheduleDelete(); } - else if (eventId == "nextcolor") { + else if (event.getId() == "nextcolor") { mPlayer->setHairColor((mPlayer->getHairColor() + 1) % NR_HAIR_COLORS); } - else if (eventId == "prevcolor") { + else if (event.getId() == "prevcolor") { int prevColor = mPlayer->getHairColor() + NR_HAIR_COLORS - 1; mPlayer->setHairColor(prevColor % NR_HAIR_COLORS); } - else if (eventId == "nextstyle") { + else if (event.getId() == "nextstyle") { mPlayer->setHairStyle((mPlayer->getHairStyle() + 1) % NR_HAIR_STYLES); } - else if (eventId == "prevstyle") { + else if (event.getId() == "prevstyle") { int prevStyle = mPlayer->getHairStyle() + NR_HAIR_STYLES - 1; mPlayer->setHairStyle(prevStyle % NR_HAIR_STYLES); } diff --git a/src/gui/char_select.h b/src/gui/char_select.h index 9d2d77da..d6dee8b5 100644 --- a/src/gui/char_select.h +++ b/src/gui/char_select.h @@ -49,7 +49,7 @@ class CharSelectDialog : public Window, public gcn::ActionListener */ CharSelectDialog(LockedArray *charInfo); - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); void updatePlayerInfo(); @@ -109,7 +109,7 @@ class CharCreateDialog : public Window, public gcn::ActionListener */ ~CharCreateDialog(); - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); std::string getName(); diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index 3dc252ab..d992c6dd 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -53,7 +53,7 @@ ChatWindow::ChatWindow(): loadWindowState(); mChatInput = new ChatInput(); - mChatInput->setEventId("chatinput"); + mChatInput->setActionEventId("chatinput"); mChatInput->addActionListener(this); mTextOutput = new BrowserBox(BrowserBox::AUTO_WRAP); @@ -180,9 +180,9 @@ ChatWindow::chatLog(CHATSKILL act) } void -ChatWindow::action(const std::string &eventId, gcn::Widget *widget) +ChatWindow::action(const gcn::ActionEvent &event) { - if (eventId == "chatinput") + if (event.getId() == "chatinput") { std::string message = mChatInput->getText(); @@ -360,9 +360,10 @@ ChatWindow::const_msg(CHATSKILL act) } void -ChatWindow::keyPress(const gcn::Key &key) +ChatWindow::keyPressed(gcn::KeyEvent &event) { - if (key.getValue() == key.DOWN && mCurHist != mHistory.end()) + if (event.getKey().getValue() == gcn::Key::DOWN && + mCurHist != mHistory.end()) { // Move forward through the history HistoryIterator prevHist = mCurHist++; @@ -374,8 +375,8 @@ ChatWindow::keyPress(const gcn::Key &key) mCurHist = prevHist; } } - else if (key.getValue() == key.UP && mCurHist != mHistory.begin() && - mHistory.size() > 0) + else if (event.getKey().getValue() == gcn::Key::UP && + mCurHist != mHistory.begin() && mHistory.size() > 0) { // Move backward through the history mCurHist--; diff --git a/src/gui/chat.h b/src/gui/chat.h index a0a3d1ec..963e5e98 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -138,7 +138,7 @@ class ChatWindow : public Window, public gcn::ActionListener, /** * Performs action. */ - void action(const std::string& actionId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); /** * Request focus for typing chat message. @@ -178,13 +178,16 @@ class ChatWindow : public Window, public gcn::ActionListener, chatSend(const std::string &nick, std::string msg); /** Called when key is pressed */ - void keyPress(const gcn::Key& key); + void + keyPressed(gcn::KeyEvent &event); /** Called to set current text */ - void setInputText(std::string input_str); + void + setInputText(std::string input_str); /** Override to reset mTmpVisible */ - void setVisible(bool visible); + void + setVisible(bool visible); private: bool mTmpVisible; diff --git a/src/gui/chatinput.cpp b/src/gui/chatinput.cpp index 52e91f3a..2aa5a159 100644 --- a/src/gui/chatinput.cpp +++ b/src/gui/chatinput.cpp @@ -28,7 +28,7 @@ ChatInput::ChatInput() setVisible(false); } -void ChatInput::lostFocus() +void ChatInput::focusLost() { setVisible(false); } diff --git a/src/gui/chatinput.h b/src/gui/chatinput.h index 9f543e24..59d0daf3 100644 --- a/src/gui/chatinput.h +++ b/src/gui/chatinput.h @@ -41,7 +41,7 @@ class ChatInput : public TextField * Called if the chat input loses focus. It will set itself to * invisible as result. */ - void lostFocus(); + void focusLost(); }; #endif diff --git a/src/gui/confirm_dialog.cpp b/src/gui/confirm_dialog.cpp index 5a70544f..0ff8be17 100644 --- a/src/gui/confirm_dialog.cpp +++ b/src/gui/confirm_dialog.cpp @@ -65,17 +65,18 @@ ConfirmDialog::ConfirmDialog(const std::string &title, const std::string &msg, yesButton->requestFocus(); } -void ConfirmDialog::action(const std::string &eventId, gcn::Widget *widget) +void ConfirmDialog::action(const gcn::ActionEvent &event) { // Proxy button events to our listeners ActionListenerIterator i; for (i = mActionListeners.begin(); i != mActionListeners.end(); ++i) { - (*i)->action(eventId, widget); + (*i)->action(event); } // Can we receive anything else anyway? - if (eventId == "yes" || eventId == "no") { + if (event.getId() == "yes" || event.getId() == "no") + { scheduleDelete(); } } diff --git a/src/gui/confirm_dialog.h b/src/gui/confirm_dialog.h index 771ecc36..8728f83f 100644 --- a/src/gui/confirm_dialog.h +++ b/src/gui/confirm_dialog.h @@ -47,7 +47,7 @@ class ConfirmDialog : public Window, public gcn::ActionListener { /** * Called when receiving actions from the widgets. */ - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); }; #endif diff --git a/src/gui/connection.cpp b/src/gui/connection.cpp index 7e977f1f..3627689a 100644 --- a/src/gui/connection.cpp +++ b/src/gui/connection.cpp @@ -38,7 +38,7 @@ namespace { ConnectionActionListener(unsigned char previousState): mPreviousState(previousState) {}; - void action(const std::string &eventId, gcn::Widget *widget) { + void action(const gcn::ActionEvent &event) { state = mPreviousState; } @@ -51,9 +51,11 @@ ConnectionDialog::ConnectionDialog(unsigned char previousState): { setContentSize(200, 100); - ConnectionActionListener *connectionListener = new ConnectionActionListener(previousState); + ConnectionActionListener *connectionListener = + new ConnectionActionListener(previousState); - Button *cancelButton = new Button("Cancel", "cancelButton", connectionListener); + Button *cancelButton = new Button("Cancel", "cancelButton", + connectionListener); mProgressBar = new ProgressBar(0.0, 200 - 10, 20, 128, 128, 128); gcn::Label *label = new gcn::Label("Connecting..."); diff --git a/src/gui/debugwindow.cpp b/src/gui/debugwindow.cpp index f8a4154e..563f380f 100644 --- a/src/gui/debugwindow.cpp +++ b/src/gui/debugwindow.cpp @@ -28,6 +28,8 @@ #include #include "button.h" +#include "gui.h" +#include "viewport.h" #include "../game.h" #include "../engine.h" @@ -72,15 +74,15 @@ DebugWindow::logic() // Get the current mouse position int mouseX, mouseY; SDL_GetMouseState(&mouseX, &mouseY); - //int mouseTileX = mouseX / 32 + camera_x; - //int mouseTileY = mouseY / 32 + camera_y; + int mouseTileX = mouseX / 32 + viewport->getCameraX(); + int mouseTileY = mouseY / 32 + viewport->getCameraY(); mFPSLabel->setCaption("[" + toString(fps) + " FPS"); mFPSLabel->adjustSize(); - //mTileMouseLabel->setCaption("[Mouse: " + - // toString(mouseTileX) + ", " + toString(mouseTileY) + "]"); - //mTileMouseLabel->adjustSize(); + mTileMouseLabel->setCaption("[Mouse: " + + toString(mouseTileX) + ", " + toString(mouseTileY) + "]"); + mTileMouseLabel->adjustSize(); Map *currentMap = engine->getCurrentMap(); if (currentMap != NULL) @@ -98,9 +100,9 @@ DebugWindow::logic() } void -DebugWindow::action(const std::string &eventId, gcn::Widget *widget) +DebugWindow::action(const gcn::ActionEvent &event) { - if (eventId == "close") + if (event.getId() == "close") { setVisible(false); } diff --git a/src/gui/debugwindow.h b/src/gui/debugwindow.h index 61ef44e6..4fd33d83 100644 --- a/src/gui/debugwindow.h +++ b/src/gui/debugwindow.h @@ -53,7 +53,7 @@ class DebugWindow : public Window, public gcn::ActionListener /** * Performs action. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); private: gcn::Label *mMusicFileLabel, *mMapFileLabel; diff --git a/src/gui/gccontainer.cpp b/src/gui/gccontainer.cpp index 3b574622..c22ddfc9 100644 --- a/src/gui/gccontainer.cpp +++ b/src/gui/gccontainer.cpp @@ -55,8 +55,8 @@ void GCContainer::add(gcn::Widget *w, int x, int y, bool delChild) Container::add(w, x, y); } -void GCContainer::_announceDeath(gcn::Widget *w) +void GCContainer::death(const gcn::Event &event) { - mDeathList.remove(w); - Container::_announceDeath(w); + mDeathList.remove(event.getSource()); + Container::death(event); } diff --git a/src/gui/gccontainer.h b/src/gui/gccontainer.h index 46ebfefa..e27eaa96 100644 --- a/src/gui/gccontainer.h +++ b/src/gui/gccontainer.h @@ -32,9 +32,12 @@ class GCContainer : public gcn::Container { public: virtual ~GCContainer(); - virtual void add(gcn::Widget *w, bool delChild=true); - virtual void add(gcn::Widget *w, int x, int y, bool delChild=true); - virtual void _announceDeath(gcn::Widget *w); + + virtual void add(gcn::Widget *w, bool delChild = true); + + virtual void add(gcn::Widget *w, int x, int y, bool delChild = true); + + virtual void death(const gcn::Event &event); protected: typedef std::list Widgets; diff --git a/src/gui/help.cpp b/src/gui/help.cpp index e7429b29..0b010253 100644 --- a/src/gui/help.cpp +++ b/src/gui/help.cpp @@ -54,9 +54,9 @@ HelpWindow::HelpWindow(): setLocationRelativeTo(getParent()); } -void HelpWindow::action(const std::string &eventId, gcn::Widget *widget) +void HelpWindow::action(const gcn::ActionEvent &event) { - if (eventId == "close") + if (event.getId() == "close") { setVisible(false); } diff --git a/src/gui/help.h b/src/gui/help.h index 539ab31b..3c3715a0 100644 --- a/src/gui/help.h +++ b/src/gui/help.h @@ -48,7 +48,7 @@ class HelpWindow : public Window, public LinkHandler, /** * Called when receiving actions from the widgets. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); /** * Handles link action. diff --git a/src/gui/inttextbox.cpp b/src/gui/inttextbox.cpp index 92f21e5f..2a09f255 100644 --- a/src/gui/inttextbox.cpp +++ b/src/gui/inttextbox.cpp @@ -32,12 +32,15 @@ IntTextBox::IntTextBox(int i): { } -void IntTextBox::keyPress(const gcn::Key &key) +void +IntTextBox::keyPressed(gcn::KeyEvent &event) { + const gcn::Key &key = event.getKey(); + if (key.isNumber() || key.getValue() == gcn::Key::BACKSPACE || key.getValue() == gcn::Key::DELETE) { - gcn::TextBox::keyPress(key); + gcn::TextBox::keyPressed(event); } std::stringstream s(gcn::TextBox::getText()); diff --git a/src/gui/inttextbox.h b/src/gui/inttextbox.h index b199cb2f..b5d339ac 100644 --- a/src/gui/inttextbox.h +++ b/src/gui/inttextbox.h @@ -55,7 +55,8 @@ class IntTextBox : public TextBox /** * Responds to key presses. */ - void keyPress(const gcn::Key &key); + void + keyPressed(gcn::KeyEvent &event); private: int mMin; /**< Minimum value */ diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp index 7f9ba3b9..e533c16c 100644 --- a/src/gui/inventorywindow.cpp +++ b/src/gui/inventorywindow.cpp @@ -99,7 +99,7 @@ void InventoryWindow::logic() mWeightLabel->adjustSize(); } -void InventoryWindow::action(const std::string &eventId, gcn::Widget *widget) +void InventoryWindow::action(const gcn::ActionEvent &event) { Item *item = mItems->getItem(); @@ -107,7 +107,7 @@ void InventoryWindow::action(const std::string &eventId, gcn::Widget *widget) return; } - if (eventId == "use") { + if (event.getId() == "use") { if (item->isEquipment()) { if (item->isEquipped()) { player_node->unequipItem(item); @@ -120,7 +120,7 @@ void InventoryWindow::action(const std::string &eventId, gcn::Widget *widget) player_node->useItem(item); } } - else if (eventId == "drop") + else if (event.getId() == "drop") { // Choose amount of items to drop new ItemAmountWindow(AMOUNT_ITEM_DROP, this, item); @@ -155,11 +155,11 @@ void InventoryWindow::selectionChanged(const SelectionEvent &event) } } -void InventoryWindow::mouseClick(int x, int y, int button, int count) +void InventoryWindow::mouseClicked(gcn::MouseEvent &event) { - Window::mouseClick(x, y, button, count); + Window::mouseClicked(event); - if (button == gcn::MouseInput::RIGHT) + if (event.getButton() == gcn::MouseEvent::RIGHT) { Item *item = mItems->getItem(); @@ -168,16 +168,16 @@ void InventoryWindow::mouseClick(int x, int y, int button, int count) /* Convert relative to the window coordinates to * absolute screen coordinates. */ - int mx = x + getX(); - int my = y + getY(); + int mx = event.getX() + getX(); + int my = event.getY() + getY(); viewport->showPopup(mx, my, item); } } -void InventoryWindow::mouseMotion(int mx, int my) +void InventoryWindow::mouseDragged(gcn::MouseEvent &event) { int tmpWidth = getWidth(), tmpHeight = getHeight(); - Window::mouseMotion(mx, my); + Window::mouseDragged(event); if (getWidth() != tmpWidth || getHeight() != tmpHeight) { updateWidgets(); } diff --git a/src/gui/inventorywindow.h b/src/gui/inventorywindow.h index d46e91e7..5ee89fef 100644 --- a/src/gui/inventorywindow.h +++ b/src/gui/inventorywindow.h @@ -55,11 +55,11 @@ class InventoryWindow : public Window, gcn::ActionListener, SelectionListener /** * Called when receiving actions from the widgets. */ - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); - void mouseClick(int x, int y, int button, int count); + void mouseClicked(gcn::MouseEvent &event); - void mouseMotion(int mx, int my); + void mouseDragged(gcn::MouseEvent &event); Item* getItem(); diff --git a/src/gui/item_amount.cpp b/src/gui/item_amount.cpp index 5ebc0213..f72462f9 100644 --- a/src/gui/item_amount.cpp +++ b/src/gui/item_amount.cpp @@ -49,7 +49,7 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item): mItemAmountSlide->setDimension(gcn::Rectangle(5, 120, 180, 10)); // Set button events Id - mItemAmountSlide->setEventId("Slide"); + mItemAmountSlide->setActionEventId("Slide"); // Set position mItemAmountTextBox->setPosition(35, 10); @@ -75,11 +75,11 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item): switch (usage) { case AMOUNT_TRADE_ADD: setCaption("Select amount of items to trade."); - okButton->setEventId("AddTrade"); + okButton->setActionEventId("AddTrade"); break; case AMOUNT_ITEM_DROP: setCaption("Select amount of items to drop."); - okButton->setEventId("Drop"); + okButton->setActionEventId("Drop"); break; default: break; @@ -95,33 +95,33 @@ void ItemAmountWindow::resetAmount() mItemAmountTextBox->setInt(1); } -void ItemAmountWindow::action(const std::string &eventId, gcn::Widget *widget) +void ItemAmountWindow::action(const gcn::ActionEvent &event) { int amount = mItemAmountTextBox->getInt(); - if (eventId == "Cancel") + if (event.getId() == "Cancel") { scheduleDelete(); } - else if (eventId == "Drop") + else if (event.getId() == "Drop") { player_node->dropItem(mItem, mItemAmountTextBox->getInt()); scheduleDelete(); } - else if (eventId == "AddTrade") + else if (event.getId() == "AddTrade") { tradeWindow->tradeItem(mItem, mItemAmountTextBox->getInt()); scheduleDelete(); } - else if (eventId == "Plus") + else if (event.getId() == "Plus") { amount++; } - else if (eventId == "Minus") + else if (event.getId() == "Minus") { amount--; } - else if (eventId == "Slide") + else if (event.getId() == "Slide") { amount = static_cast(mItemAmountSlide->getValue()); } diff --git a/src/gui/item_amount.h b/src/gui/item_amount.h index a2a17575..01319012 100644 --- a/src/gui/item_amount.h +++ b/src/gui/item_amount.h @@ -54,7 +54,7 @@ class ItemAmountWindow : public Window, public gcn::ActionListener /** * Called when receiving actions from widget. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); /** * Sets default amount value. diff --git a/src/gui/itemcontainer.cpp b/src/gui/itemcontainer.cpp index 2c84b19b..308311b7 100644 --- a/src/gui/itemcontainer.cpp +++ b/src/gui/itemcontainer.cpp @@ -58,7 +58,8 @@ ItemContainer::~ItemContainer() mSelImg->decRef(); } -void ItemContainer::logic() +void +ItemContainer::logic() { gcn::Widget::logic(); @@ -70,7 +71,8 @@ void ItemContainer::logic() } } -void ItemContainer::draw(gcn::Graphics* graphics) +void +ItemContainer::draw(gcn::Graphics *graphics) { int gridWidth = 36; //(item icon width + 4) int gridHeight = 42; //(item icon height + 10) @@ -124,7 +126,8 @@ void ItemContainer::draw(gcn::Graphics* graphics) } } -void ItemContainer::setWidth(int width) +void +ItemContainer::setWidth(int width) { gcn::Widget::setWidth(width); @@ -140,17 +143,20 @@ void ItemContainer::setWidth(int width) setHeight((mMaxItems + columns - 1) / columns * gridHeight); } -Item* ItemContainer::getItem() +Item* +ItemContainer::getItem() { return mSelectedItem; } -void ItemContainer::selectNone() +void +ItemContainer::selectNone() { setSelectedItem(NULL); } -void ItemContainer::setSelectedItem(Item *item) +void +ItemContainer::setSelectedItem(Item *item) { if (mSelectedItem != item) { @@ -159,7 +165,8 @@ void ItemContainer::setSelectedItem(Item *item) } } -void ItemContainer::fireSelectionChangedEvent() +void +ItemContainer::fireSelectionChangedEvent() { SelectionEvent event(this); SelectionListeners::iterator i_end = mListeners.end(); @@ -171,14 +178,18 @@ void ItemContainer::fireSelectionChangedEvent() } } -void ItemContainer::mousePress(int mx, int my, int button) +void +ItemContainer::mousePressed(gcn::MouseEvent &event) { - int gridWidth = 36; //(item icon width + 4) - int gridHeight = 42; //(item icon height + 10) - int columns = getWidth() / gridWidth; + int button = event.getButton(); - if (button == gcn::MouseInput::LEFT || gcn::MouseInput::RIGHT) + if (button == gcn::MouseEvent::LEFT || button == gcn::MouseEvent::RIGHT) { + int gridWidth = 36; //(item icon width + 4) + int gridHeight = 42; //(item icon height + 10) + int columns = getWidth() / gridWidth; + int mx = event.getX(); + int my = event.getY(); int index = mx / gridWidth + ((my / gridHeight) * columns); if (index > INVENTORY_SIZE) { diff --git a/src/gui/itemcontainer.h b/src/gui/itemcontainer.h index a2d5f0f7..8c548fcd 100644 --- a/src/gui/itemcontainer.h +++ b/src/gui/itemcontainer.h @@ -71,7 +71,7 @@ class ItemContainer : public gcn::Widget, public gcn::MouseListener /** * Handles mouse click. */ - void mousePress(int mx, int my, int button); + void mousePressed(gcn::MouseEvent &event); /** * Returns the selected item. diff --git a/src/gui/listbox.cpp b/src/gui/listbox.cpp index d4a2c6cb..a7f6df8d 100644 --- a/src/gui/listbox.cpp +++ b/src/gui/listbox.cpp @@ -31,8 +31,7 @@ #include ListBox::ListBox(gcn::ListModel *listModel): - gcn::ListBox(listModel), - mMousePressed(false) + gcn::ListBox(listModel) { } @@ -61,39 +60,19 @@ void ListBox::draw(gcn::Graphics *graphics) } } -void ListBox::setSelected(int selected) +void +ListBox::setSelected(int selected) { gcn::ListBox::setSelected(selected); fireSelectionChangedEvent(); } -void ListBox::mousePress(int x, int y, int button) +void +ListBox::mouseDragged(gcn::MouseEvent &event) { - gcn::ListBox::mousePress(x, y, button); - - if (button == gcn::MouseInput::LEFT && hasMouse()) - { - mMousePressed = true; - } -} - -void ListBox::mouseRelease(int x, int y, int button) -{ - gcn::ListBox::mouseRelease(x, y, button); - - mMousePressed = false; -} - -void ListBox::mouseMotion(int x, int y) -{ - gcn::ListBox::mouseMotion(x, y); - // Pretend mouse is pressed continuously while dragged. Causes list // selection to be updated as is default in many GUIs. - if (mMousePressed) - { - mousePress(x, y, gcn::MouseInput::LEFT); - } + mousePressed(event); } void ListBox::fireSelectionChangedEvent() diff --git a/src/gui/listbox.h b/src/gui/listbox.h index deca07cf..1d480eb1 100644 --- a/src/gui/listbox.h +++ b/src/gui/listbox.h @@ -48,9 +48,7 @@ class ListBox : public gcn::ListBox */ void draw(gcn::Graphics *graphics); - void mousePress(int x, int y, int button); - void mouseRelease(int x, int y, int button); - void mouseMotion(int x, int y); + void mouseDragged(gcn::MouseEvent &event); /** * Adds a listener to the list that's notified each time a change to @@ -81,8 +79,6 @@ class ListBox : public gcn::ListBox */ void fireSelectionChangedEvent(); - bool mMousePressed; /**< Keeps track of mouse pressed status. */ - std::list mListeners; }; diff --git a/src/gui/login.cpp b/src/gui/login.cpp index b8d4df2b..664074aa 100644 --- a/src/gui/login.cpp +++ b/src/gui/login.cpp @@ -43,9 +43,9 @@ WrongDataNoticeListener::setTarget(gcn::TextField *textField) } void -WrongDataNoticeListener::action(const std::string &eventId, gcn::Widget *widget) +WrongDataNoticeListener::action(const gcn::ActionEvent &event) { - if (eventId == "ok") + if (event.getId() == "ok") { // Reset the field mTarget->setText(""); @@ -85,8 +85,8 @@ LoginDialog::LoginDialog(LoginData *loginData): mKeepCheck->getX() + mKeepCheck->getWidth() + 10, 91 - mRegisterButton->getHeight() - 5); - mUserField->setEventId("ok"); - mPassField->setEventId("ok"); + mUserField->setActionEventId("ok"); + mPassField->setActionEventId("ok"); mUserField->addActionListener(this); mPassField->addActionListener(this); @@ -119,9 +119,9 @@ LoginDialog::~LoginDialog() } void -LoginDialog::action(const std::string &eventId, gcn::Widget *widget) +LoginDialog::action(const gcn::ActionEvent &event) { - if (eventId == "ok") + if (event.getId() == "ok") { // Check login if (mUserField->getText().empty()) @@ -142,11 +142,11 @@ LoginDialog::action(const std::string &eventId, gcn::Widget *widget) state = STATE_LOGIN_ATTEMPT; } } - else if (eventId == "cancel") + else if (event.getId() == "cancel") { state = STATE_EXIT; } - else if (eventId == "register") + else if (event.getId() == "register") { state = STATE_REGISTER; } diff --git a/src/gui/login.h b/src/gui/login.h index 6d510da7..05c0da31 100644 --- a/src/gui/login.h +++ b/src/gui/login.h @@ -38,7 +38,7 @@ class LoginData; class WrongDataNoticeListener : public gcn::ActionListener { public: void setTarget(gcn::TextField *textField); - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); private: gcn::TextField *mTarget; }; @@ -65,7 +65,7 @@ class LoginDialog : public Window, public gcn::ActionListener { /** * Called when receiving actions from the widgets. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); private: gcn::TextField *mUserField; diff --git a/src/gui/menuwindow.cpp b/src/gui/menuwindow.cpp index a1b342f0..ba4c8e94 100644 --- a/src/gui/menuwindow.cpp +++ b/src/gui/menuwindow.cpp @@ -39,7 +39,7 @@ namespace { /** * Called when receiving actions from widget. */ - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); } listener; } @@ -75,26 +75,26 @@ void MenuWindow::draw(gcn::Graphics *graphics) } -void MenuWindowListener::action(const std::string &eventId, gcn::Widget *widget) +void MenuWindowListener::action(const gcn::ActionEvent &event) { Window *window = NULL; - if (eventId == "Status") + if (event.getId() == "Status") { window = statusWindow; } - else if (eventId == "Equipment") + else if (event.getId() == "Equipment") { window = equipmentWindow; } - else if (eventId == "Inventory") + else if (event.getId() == "Inventory") { window = inventoryWindow; } - else if (eventId == "Skills") + else if (event.getId() == "Skills") { window = skillDialog; } - else if (eventId == "Setup") + else if (event.getId() == "Setup") { window = setupWindow; } diff --git a/src/gui/newskill.cpp b/src/gui/newskill.cpp index 7f5de543..6783a546 100644 --- a/src/gui/newskill.cpp +++ b/src/gui/newskill.cpp @@ -121,46 +121,46 @@ NewSkillDialog::NewSkillDialog(): setLocationRelativeTo(getParent()); } -void NewSkillDialog::action(const std::string &eventId, gcn::Widget *widget) +void NewSkillDialog::action(const gcn::ActionEvent &event) { - int osp = startPoint; - if (eventId == "close") + int osp = startPoint; + if (event.getId() == "close") { setVisible(false); } - else if (eventId == "g1") // weapons group 0-9 + else if (event.getId() == "g1") // weapons group 0-9 { startPoint =0; } - else if (eventId == "g2") // magic group 10-19 + else if (event.getId() == "g2") // magic group 10-19 { startPoint =10; } - else if (eventId == "g3") // craft group 20-29 + else if (event.getId() == "g3") // craft group 20-29 { startPoint =20; } - else if (eventId == "g4") // general group 30-39 + else if (event.getId() == "g4") // general group 30-39 { startPoint =30; } - else if (eventId == "g5") // combat group 40-49 + else if (event.getId() == "g5") // combat group 40-49 { startPoint =40; } - else if (eventId == "g6") // e. resist group 50-59 + else if (event.getId() == "g6") // e. resist group 50-59 { startPoint =50; } - else if (eventId == "g7") // s resist group 60-69 + else if (event.getId() == "g7") // s resist group 60-69 { startPoint =60; } - else if (eventId == "g8") // hunting group 70-79 + else if (event.getId() == "g8") // hunting group 70-79 { startPoint =70; } - else if (eventId == "g9") // stats group 80-89 + else if (event.getId() == "g9") // stats group 80-89 { startPoint =80; } diff --git a/src/gui/newskill.h b/src/gui/newskill.h index 224574bd..6e12169f 100644 --- a/src/gui/newskill.h +++ b/src/gui/newskill.h @@ -55,7 +55,7 @@ class NewSkillDialog : public Window, public gcn::ActionListener NewSkillDialog(); // action listener - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); private: void resetNSD(); // updates the values in the dialog box diff --git a/src/gui/npc_text.cpp b/src/gui/npc_text.cpp index 5b7ca439..2dd223bd 100644 --- a/src/gui/npc_text.cpp +++ b/src/gui/npc_text.cpp @@ -67,9 +67,9 @@ NpcTextDialog::addText(const std::string &text) } void -NpcTextDialog::action(const std::string &eventId, gcn::Widget *widget) +NpcTextDialog::action(const gcn::ActionEvent &event) { - if (eventId == "ok") + if (event.getId() == "ok") { setText(""); setVisible(false); diff --git a/src/gui/npc_text.h b/src/gui/npc_text.h index 3ce1215d..869661c4 100644 --- a/src/gui/npc_text.h +++ b/src/gui/npc_text.h @@ -49,7 +49,7 @@ class NpcTextDialog : public Window, public gcn::ActionListener * Called when receiving actions from the widgets. */ void - action(const std::string& eventId, gcn::Widget* widget); + action(const gcn::ActionEvent &event); /** * Sets the text shows in the dialog. diff --git a/src/gui/npclistdialog.cpp b/src/gui/npclistdialog.cpp index d1c3ddcb..1bcdc8ff 100644 --- a/src/gui/npclistdialog.cpp +++ b/src/gui/npclistdialog.cpp @@ -50,7 +50,7 @@ NpcListDialog::NpcListDialog(): cancelButton->getX() - 5 - okButton->getWidth(), cancelButton->getY()); - mItemList->setEventId("item"); + mItemList->setActionEventId("item"); mItemList->addActionListener(this); @@ -91,11 +91,11 @@ NpcListDialog::reset() } void -NpcListDialog::action(const std::string &eventId, gcn::Widget *widget) +NpcListDialog::action(const gcn::ActionEvent &event) { int choice = 0; - if (eventId == "ok") + if (event.getId() == "ok") { // Send the selected index back to the server int selectedIndex = mItemList->getSelected(); @@ -104,7 +104,7 @@ NpcListDialog::action(const std::string &eventId, gcn::Widget *widget) choice = selectedIndex + 1; } } - else if (eventId == "cancel") + else if (event.getId() == "cancel") { choice = 0xff; // 0xff means cancel } diff --git a/src/gui/npclistdialog.h b/src/gui/npclistdialog.h index 03b76681..c09b0a8c 100644 --- a/src/gui/npclistdialog.h +++ b/src/gui/npclistdialog.h @@ -54,7 +54,7 @@ class NpcListDialog : public Window, public gcn::ActionListener, * Called when receiving actions from the widgets. */ void - action(const std::string& eventId, gcn::Widget* widget); + action(const gcn::ActionEvent &event); /** * Returns the number of items in the choices list. diff --git a/src/gui/ok_dialog.cpp b/src/gui/ok_dialog.cpp index 4f9623d7..ca9d2a7b 100644 --- a/src/gui/ok_dialog.cpp +++ b/src/gui/ok_dialog.cpp @@ -55,17 +55,17 @@ OkDialog::OkDialog(const std::string &title, const std::string &msg, okButton->requestFocus(); } -void OkDialog::action(const std::string &eventId, gcn::Widget *widget) +void OkDialog::action(const gcn::ActionEvent &event) { // Proxy button events to our listeners ActionListenerIterator i; for (i = mActionListeners.begin(); i != mActionListeners.end(); ++i) { - (*i)->action(eventId, widget); + (*i)->action(event); } // Can we receive anything else anyway? - if (eventId == "ok") { + if (event.getId() == "ok") { scheduleDelete(); } } diff --git a/src/gui/ok_dialog.h b/src/gui/ok_dialog.h index 8ae08955..a7b24a90 100644 --- a/src/gui/ok_dialog.h +++ b/src/gui/ok_dialog.h @@ -46,7 +46,7 @@ class OkDialog : public Window, public gcn::ActionListener { /** * Called when receiving actions from the widgets. */ - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); }; #endif diff --git a/src/gui/playerbox.cpp b/src/gui/playerbox.cpp index 5fbe79b7..fad156f1 100644 --- a/src/gui/playerbox.cpp +++ b/src/gui/playerbox.cpp @@ -28,7 +28,6 @@ #include "../resources/image.h" #include "../resources/resourcemanager.h" -#include "../resources/spriteset.h" #include "../utils/dtor.h" diff --git a/src/gui/register.cpp b/src/gui/register.cpp index 70cd6dc4..4539e48e 100644 --- a/src/gui/register.cpp +++ b/src/gui/register.cpp @@ -108,13 +108,13 @@ RegisterDialog::~RegisterDialog() } void -RegisterDialog::action(const std::string &eventId, gcn::Widget *widget) +RegisterDialog::action(const gcn::ActionEvent &event) { - if (eventId == "cancel") + if (event.getId() == "cancel") { state = STATE_LOGIN; } - else if (eventId == "register") + else if (event.getId() == "register") { const std::string user = mUserField->getText(); logger->log("RegisterDialog::register Username is %s", user.c_str()); diff --git a/src/gui/register.h b/src/gui/register.h index 4c98788f..4ffe451f 100644 --- a/src/gui/register.h +++ b/src/gui/register.h @@ -56,7 +56,7 @@ class RegisterDialog : public Window, public gcn::ActionListener { /** * Called when receiving actions from the widgets. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); // Made them public to have the possibility to request focus // from external functions. diff --git a/src/gui/sell.cpp b/src/gui/sell.cpp index b0957f9e..c9878c84 100644 --- a/src/gui/sell.cpp +++ b/src/gui/sell.cpp @@ -87,8 +87,8 @@ SellDialog::SellDialog(): quitButton->setPosition(208, 186); - mShopItemList->setEventId("item"); - mSlider->setEventId("mSlider"); + mShopItemList->setActionEventId("item"); + mSlider->setActionEventId("mSlider"); mShopItemList->setPriceCheck(false); @@ -154,11 +154,11 @@ void SellDialog::addItem(Item *item, int price) mShopItemList->adjustSize(); } -void SellDialog::action(const std::string &eventId, gcn::Widget *widget) +void SellDialog::action(const gcn::ActionEvent &event) { int selectedItem = mShopItemList->getSelected(); - if (eventId == "item") + if (event.getId() == "item") { mAmountItems = 0; mSlider->setValue(0); @@ -182,7 +182,7 @@ void SellDialog::action(const std::string &eventId, gcn::Widget *widget) } mQuantityLabel->adjustSize(); } - else if (eventId == "quit") + else if (event.getId() == "quit") { setVisible(false); current_npc = 0; @@ -195,13 +195,13 @@ void SellDialog::action(const std::string &eventId, gcn::Widget *widget) bool updateButtonsAndLabels = false; - if (eventId == "mSlider") + if (event.getId() == "mSlider") { mAmountItems = (int)(mSlider->getValue() * mMaxItems); updateButtonsAndLabels = true; } - else if (eventId == "+") + else if (event.getId() == "+") { assert(mAmountItems < mMaxItems); mAmountItems++; @@ -209,7 +209,7 @@ void SellDialog::action(const std::string &eventId, gcn::Widget *widget) updateButtonsAndLabels = true; } - else if (eventId == "-") + else if (event.getId() == "-") { assert(mAmountItems > 0); mAmountItems--; @@ -218,7 +218,7 @@ void SellDialog::action(const std::string &eventId, gcn::Widget *widget) updateButtonsAndLabels = true; } - else if (eventId == "sell") + else if (event.getId() == "sell") { // Attempt sell assert(mAmountItems > 0 && mAmountItems <= mMaxItems); diff --git a/src/gui/sell.h b/src/gui/sell.h index ba324576..68bd7b8b 100644 --- a/src/gui/sell.h +++ b/src/gui/sell.h @@ -68,7 +68,7 @@ class SellDialog : public Window, gcn::ActionListener, SelectionListener /** * Called when receiving actions from the widgets. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); /** * Updates labels according to selected item. diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp index bd17bff7..bf29f0d3 100644 --- a/src/gui/serverdialog.cpp +++ b/src/gui/serverdialog.cpp @@ -44,9 +44,9 @@ const short MAX_SERVERLIST = 5; void -DropDownListener::action(const std::string &eventId, gcn::Widget *widget) +DropDownListener::action(const gcn::ActionEvent &event) { - if (eventId == "ok") + if (event.getId() == "ok") { // Reset the text fields and give back the server dialog. mServerNameField->setText(""); @@ -56,13 +56,14 @@ DropDownListener::action(const std::string &eventId, gcn::Widget *widget) mServerNameField->requestFocus(); } - else if (eventId == "changeSelection") + else if (event.getId() == "changeSelection") { // Change the textField Values according to new selection if (currentSelectedIndex != mServersListBox->getSelected()) { Server myServer; - myServer = mServersListModel->getServer(mServersListBox->getSelected()); + myServer = mServersListModel->getServer( + mServersListBox->getSelected()); mServerNameField->setText(myServer.serverName); mServerPortField->setText(toString(myServer.port)); currentSelectedIndex = mServersListBox->getSelected(); @@ -131,7 +132,7 @@ ServerDialog::ServerDialog(LoginData *loginData): mMostUsedServersScrollArea, mMostUsedServersListBox); mDropDownListener = new DropDownListener(mServerNameField, mPortField, - mMostUsedServersListModel, mMostUsedServersListBox); + mMostUsedServersListModel, mMostUsedServersListBox); mOkButton = new Button("OK", "ok", this); mCancelButton = new Button("Cancel", "cancel", this); @@ -157,9 +158,9 @@ ServerDialog::ServerDialog(LoginData *loginData): mCancelButton->getX() - mOkButton->getWidth() - 5, 100 - mOkButton->getHeight() - 5); - mServerNameField->setEventId("ok"); - mPortField->setEventId("ok"); - mMostUsedServersDropDown->setEventId("changeSelection"); + mServerNameField->setActionEventId("ok"); + mPortField->setActionEventId("ok"); + mMostUsedServersDropDown->setActionEventId("changeSelection"); mServerNameField->addActionListener(this); mPortField->addActionListener(this); @@ -193,9 +194,9 @@ ServerDialog::~ServerDialog() } void -ServerDialog::action(const std::string &eventId, gcn::Widget *widget) +ServerDialog::action(const gcn::ActionEvent &event) { - if (eventId == "ok") + if (event.getId() == "ok") { // Check login if (mServerNameField->getText().empty() || mPortField->getText().empty()) @@ -240,7 +241,7 @@ ServerDialog::action(const std::string &eventId, gcn::Widget *widget) state = STATE_CONNECT_ACCOUNT; } } - else if (eventId == "cancel") + else if (event.getId() == "cancel") { state = STATE_EXIT; } diff --git a/src/gui/serverdialog.h b/src/gui/serverdialog.h index d907f340..2bb0609f 100644 --- a/src/gui/serverdialog.h +++ b/src/gui/serverdialog.h @@ -98,8 +98,7 @@ class DropDownListener : public gcn::ActionListener mServerPortField(serverPortField), mServersListModel(serversListModel), mServersListBox(serversListBox) {}; - void action(const std::string& eventId, - gcn::Widget* widget); + void action(const gcn::ActionEvent &event); private: short currentSelectedIndex; gcn::TextField *mServerNameField; @@ -132,7 +131,7 @@ class ServerDialog : public Window, public gcn::ActionListener /** * Called when receiving actions from the widgets. */ - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); private: gcn::TextField *mServerNameField; diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp index 78b10498..3add3a18 100644 --- a/src/gui/setup.cpp +++ b/src/gui/setup.cpp @@ -85,19 +85,19 @@ Setup::~Setup() for_each(mTabs.begin(), mTabs.end(), make_dtor(mTabs)); } -void Setup::action(const std::string& event, gcn::Widget *widget) +void Setup::action(const gcn::ActionEvent &event) { - if (event == "Apply") + if (event.getId() == "Apply") { setVisible(false); for_each(mTabs.begin(), mTabs.end(), std::mem_fun(&SetupTab::apply)); } - else if (event == "Cancel") + else if (event.getId() == "Cancel") { setVisible(false); for_each(mTabs.begin(), mTabs.end(), std::mem_fun(&SetupTab::cancel)); } - else if (event == "Reset Windows") + else if (event.getId() == "Reset Windows") { statusWindow->resetToDefaultSize(); minimap->resetToDefaultSize(); diff --git a/src/gui/setup.h b/src/gui/setup.h index 6601ce3d..77173367 100644 --- a/src/gui/setup.h +++ b/src/gui/setup.h @@ -54,7 +54,7 @@ class Setup : public Window, public gcn::ActionListener * Event handling method. */ void - action(const std::string& eventId, gcn::Widget* widget); + action(const gcn::ActionEvent &event); private: std::list mTabs; diff --git a/src/gui/setup_audio.cpp b/src/gui/setup_audio.cpp index db88ff64..e5aadf80 100644 --- a/src/gui/setup_audio.cpp +++ b/src/gui/setup_audio.cpp @@ -46,8 +46,8 @@ Setup_Audio::Setup_Audio(): gcn::Label *sfxLabel = new gcn::Label("Sfx volume"); gcn::Label *musicLabel = new gcn::Label("Music volume"); - mSfxSlider->setEventId("sfx"); - mMusicSlider->setEventId("music"); + mSfxSlider->setActionEventId("sfx"); + mMusicSlider->setActionEventId("music"); mSfxSlider->addActionListener(this); mMusicSlider->addActionListener(this); @@ -108,14 +108,14 @@ void Setup_Audio::cancel() config.setValue("musicVolume", mMusicVolume); } -void Setup_Audio::action(const std::string& event, gcn::Widget *widget) +void Setup_Audio::action(const gcn::ActionEvent &event) { - if (event == "sfx") + if (event.getId() == "sfx") { config.setValue("sfxVolume", (int)mSfxSlider->getValue()); sound.setSfxVolume((int)mSfxSlider->getValue()); } - else if (event == "music") + else if (event.getId() == "music") { config.setValue("musicVolume", (int)mMusicSlider->getValue()); sound.setMusicVolume((int)mMusicSlider->getValue()); diff --git a/src/gui/setup_audio.h b/src/gui/setup_audio.h index f09f62da..6e722f74 100644 --- a/src/gui/setup_audio.h +++ b/src/gui/setup_audio.h @@ -38,7 +38,7 @@ class Setup_Audio : public SetupTab, public gcn::ActionListener void apply(); void cancel(); - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); private: int mMusicVolume, mSfxVolume; diff --git a/src/gui/setup_joystick.cpp b/src/gui/setup_joystick.cpp index 685d88cf..56f411d7 100644 --- a/src/gui/setup_joystick.cpp +++ b/src/gui/setup_joystick.cpp @@ -45,7 +45,6 @@ Setup_Joystick::Setup_Joystick(): mOriginalJoystickEnabled = (int)config.getValue("joystickEnabled", 0) != 0; mJoystickEnabled->setMarked(mOriginalJoystickEnabled); - mJoystickEnabled->setEventId("joystickEnabled"); mJoystickEnabled->addActionListener(this); add(mCalibrateLabel); @@ -53,13 +52,13 @@ Setup_Joystick::Setup_Joystick(): add(mJoystickEnabled); } -void Setup_Joystick::action(const std::string &event, gcn::Widget *widget) +void Setup_Joystick::action(const gcn::ActionEvent &event) { if (!joystick) { return; } - if (event == "joystickEnabled") + if (event.getSource() == mJoystickEnabled) { joystick->setEnabled(mJoystickEnabled->isMarked()); } diff --git a/src/gui/setup_joystick.h b/src/gui/setup_joystick.h index 4cc2b3d9..6d3ad129 100644 --- a/src/gui/setup_joystick.h +++ b/src/gui/setup_joystick.h @@ -38,7 +38,7 @@ class Setup_Joystick : public SetupTab, public gcn::ActionListener void apply(); void cancel(); - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); private: gcn::Label *mCalibrateLabel; diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp index 7a4aae03..8930af3e 100644 --- a/src/gui/setup_video.cpp +++ b/src/gui/setup_video.cpp @@ -158,16 +158,16 @@ Setup_Video::Setup_Video(): mFpsSlider->setEnabled(mFps > 0); mFpsCheckBox->setMarked(mFps > 0); - mCustomCursorCheckBox->setEventId("customcursor"); - mAlphaSlider->setEventId("guialpha"); - mFpsCheckBox->setEventId("fpslimitcheckbox"); - mFpsSlider->setEventId("fpslimitslider"); - mScrollRadiusSlider->setEventId("scrollradiusslider"); - mScrollRadiusField->setEventId("scrollradiusfield"); - mScrollLazinessSlider->setEventId("scrolllazinessslider"); - mScrollLazinessField->setEventId("scrolllazinessfield"); - mOverlayDetailSlider->setEventId("overlaydetailslider"); - mOverlayDetailField->setEventId("overlaydetailfield"); + mCustomCursorCheckBox->setActionEventId("customcursor"); + mAlphaSlider->setActionEventId("guialpha"); + mFpsCheckBox->setActionEventId("fpslimitcheckbox"); + mFpsSlider->setActionEventId("fpslimitslider"); + mScrollRadiusSlider->setActionEventId("scrollradiusslider"); + mScrollRadiusField->setActionEventId("scrollradiusfield"); + mScrollLazinessSlider->setActionEventId("scrolllazinessslider"); + mScrollLazinessField->setActionEventId("scrolllazinessfield"); + mOverlayDetailSlider->setActionEventId("overlaydetailslider"); + mOverlayDetailField->setActionEventId("overlaydetailfield"); mCustomCursorCheckBox->addActionListener(this); mAlphaSlider->addActionListener(this); @@ -331,37 +331,37 @@ void Setup_Video::cancel() config.setValue("opengl", mOpenGLEnabled ? 1 : 0); } -void Setup_Video::action(const std::string &event, gcn::Widget *widget) +void Setup_Video::action(const gcn::ActionEvent &event) { - if (event == "guialpha") + if (event.getId() == "guialpha") { config.setValue("guialpha", mAlphaSlider->getValue()); } - else if (event == "customcursor") + else if (event.getId() == "customcursor") { config.setValue("customcursor", mCustomCursorCheckBox->isMarked() ? 1 : 0); } - else if (event == "fpslimitslider") + else if (event.getId() == "fpslimitslider") { - mFps = (int)mFpsSlider->getValue(); + mFps = (int) mFpsSlider->getValue(); mFpsField->setText(toString(mFps)); } - else if (event == "scrollradiusslider") + else if (event.getId() == "scrollradiusslider") { - int val = (int)mScrollRadiusSlider->getValue(); + int val = (int) mScrollRadiusSlider->getValue(); mScrollRadiusField->setText(toString(val)); config.setValue("ScrollRadius", val); } - else if (event == "scrolllazinessslider") + else if (event.getId() == "scrolllazinessslider") { - int val = (int)mScrollLazinessSlider->getValue(); + int val = (int) mScrollLazinessSlider->getValue(); mScrollLazinessField->setText(toString(val)); config.setValue("ScrollLaziness", val); } - else if (event == "overlaydetailslider") + else if (event.getId() == "overlaydetailslider") { - int val = (int)mOverlayDetailSlider->getValue(); + int val = (int) mOverlayDetailSlider->getValue(); switch (val) { case 0: @@ -376,11 +376,11 @@ void Setup_Video::action(const std::string &event, gcn::Widget *widget) } config.setValue("OverlayDetail", val); } - else if (event == "fpslimitcheckbox") + else if (event.getId() == "fpslimitcheckbox") { if (mFpsCheckBox->isMarked()) { - mFps = (int)mFpsSlider->getValue(); + mFps = (int) mFpsSlider->getValue(); } else { @@ -393,7 +393,8 @@ void Setup_Video::action(const std::string &event, gcn::Widget *widget) } } -void Setup_Video::keyPress(const gcn::Key &key) +void +Setup_Video::keyPressed(gcn::KeyEvent &event) { std::stringstream tempFps(mFpsField->getText()); diff --git a/src/gui/setup_video.h b/src/gui/setup_video.h index 482d1c65..095fdbd6 100644 --- a/src/gui/setup_video.h +++ b/src/gui/setup_video.h @@ -41,10 +41,11 @@ class Setup_Video : public SetupTab, public gcn::ActionListener, void apply(); void cancel(); - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); /** Called when key is pressed */ - void keyPress(const gcn::Key& key); + void + keyPressed(gcn::KeyEvent &event); private: bool mFullScreenEnabled; diff --git a/src/gui/shoplistbox.cpp b/src/gui/shoplistbox.cpp index 4821067c..8cf0b639 100644 --- a/src/gui/shoplistbox.cpp +++ b/src/gui/shoplistbox.cpp @@ -125,11 +125,12 @@ void ShopListBox::setSelected(int selected) fireSelectionChangedEvent(); } -void ShopListBox::mousePress(int x, int y, int button) +void ShopListBox::mousePressed(gcn::MouseEvent &event) { - if (button == gcn::MouseInput::LEFT && hasMouse()) + if (event.getButton() == gcn::MouseEvent::LEFT) { bool enoughMoney = false; + int y = event.getY(); if (mShopItems && mPriceCheck) { @@ -145,7 +146,6 @@ void ShopListBox::mousePress(int x, int y, int button) { setSelected(y / mRowHeight); generateAction(); - mMousePressed = true; } } } diff --git a/src/gui/shoplistbox.h b/src/gui/shoplistbox.h index 476564b2..1cfb183b 100644 --- a/src/gui/shoplistbox.h +++ b/src/gui/shoplistbox.h @@ -54,7 +54,7 @@ class ShopListBox : public ListBox */ void draw(gcn::Graphics *graphics); - void mousePress(int x, int y, int button); + void mousePressed(gcn::MouseEvent &event); /** * Adds a listener to the list that's notified each time a change to diff --git a/src/gui/skill.cpp b/src/gui/skill.cpp index 4f552fd7..1b00a732 100644 --- a/src/gui/skill.cpp +++ b/src/gui/skill.cpp @@ -74,7 +74,7 @@ SkillDialog::SkillDialog(): mUseButton->setEnabled(false); mCloseButton = new Button("Close", "close", this); - mSkillListBox->setEventId("skill"); + mSkillListBox->setActionEventId("skill"); skillScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER); skillScrollArea->setDimension(gcn::Rectangle(5, 5, 230, 180)); @@ -103,9 +103,9 @@ SkillDialog::~SkillDialog() cleanList(); } -void SkillDialog::action(const std::string &eventId, gcn::Widget *widget) +void SkillDialog::action(const gcn::ActionEvent &event) { - if (eventId == "inc") + if (event.getId() == "inc") { // Increment skill int selectedSkill = mSkillListBox->getSelected(); @@ -114,13 +114,13 @@ void SkillDialog::action(const std::string &eventId, gcn::Widget *widget) player_node->raiseSkill(mSkillList[selectedSkill]->id); } } - else if (eventId == "skill") + else if (event.getId() == "skill") { mIncButton->setEnabled( mSkillListBox->getSelected() > -1 && player_node->mSkillPoint > 0); } - else if (eventId == "close") + else if (event.getId() == "close") { setVisible(false); } diff --git a/src/gui/skill.h b/src/gui/skill.h index 5555fec4..ed1257b0 100644 --- a/src/gui/skill.h +++ b/src/gui/skill.h @@ -57,7 +57,7 @@ class SkillDialog : public Window, public gcn::ActionListener, */ ~SkillDialog(); - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); void update(); diff --git a/src/gui/status.cpp b/src/gui/status.cpp index bba9f045..9c60752d 100644 --- a/src/gui/status.cpp +++ b/src/gui/status.cpp @@ -338,8 +338,10 @@ void StatusWindow::draw(gcn::Graphics *g) Window::draw(g); } -void StatusWindow::action(const std::string &eventId, gcn::Widget *widget) +void StatusWindow::action(const gcn::ActionEvent &event) { + const std::string &eventId = event.getId(); + // Stats Part if (eventId.length() == 3) { diff --git a/src/gui/status.h b/src/gui/status.h index 43dfe8c2..37f8a648 100644 --- a/src/gui/status.h +++ b/src/gui/status.h @@ -51,7 +51,7 @@ class StatusWindow : public Window, public gcn::ActionListener { /** * Called when receiving actions from widget. */ - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); /** * Draw this window diff --git a/src/gui/tabbedcontainer.cpp b/src/gui/tabbedcontainer.cpp index e3d2527b..75f9f3cf 100644 --- a/src/gui/tabbedcontainer.cpp +++ b/src/gui/tabbedcontainer.cpp @@ -78,9 +78,9 @@ void TabbedContainer::logic() Container::logic(); } -void TabbedContainer::action(const std::string &event, gcn::Widget *widget) +void TabbedContainer::action(const gcn::ActionEvent &event) { - std::stringstream ss(event); + std::stringstream ss(event.getId()); int tabNo; ss >> tabNo; diff --git a/src/gui/tabbedcontainer.h b/src/gui/tabbedcontainer.h index 453d8374..2dc017ae 100644 --- a/src/gui/tabbedcontainer.h +++ b/src/gui/tabbedcontainer.h @@ -43,7 +43,7 @@ class TabbedContainer : public gcn::Container, public gcn::ActionListener void logic(); - void action(const std::string &event, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); void setOpaque(bool opaque); diff --git a/src/gui/trade.cpp b/src/gui/trade.cpp index 82262563..14b1afa6 100644 --- a/src/gui/trade.cpp +++ b/src/gui/trade.cpp @@ -256,11 +256,11 @@ void TradeWindow::selectionChanged(const SelectionEvent &event) } } -void TradeWindow::action(const std::string &eventId, gcn::Widget *widget) +void TradeWindow::action(const gcn::ActionEvent &event) { Item *item = inventoryWindow->getItem(); - if (eventId == "add") + if (event.getId() == "add") { if (!item) { @@ -286,14 +286,14 @@ void TradeWindow::action(const std::string &eventId, gcn::Widget *widget) new ItemAmountWindow(AMOUNT_TRADE_ADD, this, item); } } - else if (eventId == "cancel") + else if (event.getId() == "cancel") { // XXX Convert for new server /* MessageOut outMsg(CMSG_TRADE_CANCEL_REQUEST); */ } - else if (eventId == "ok") + else if (event.getId() == "ok") { std::stringstream tempMoney(mMoneyField->getText()); int tempInt; @@ -317,7 +317,7 @@ void TradeWindow::action(const std::string &eventId, gcn::Widget *widget) MessageOut outMsg(CMSG_TRADE_ADD_COMPLETE); */ } - else if (eventId == "trade") + else if (event.getId() == "trade") { // XXX Convert for new server /* diff --git a/src/gui/trade.h b/src/gui/trade.h index ebd05a52..1c64c255 100644 --- a/src/gui/trade.h +++ b/src/gui/trade.h @@ -111,7 +111,7 @@ class TradeWindow : public Window, gcn::ActionListener, SelectionListener /** * Called when receiving actions from the widgets. */ - void action(const std::string &eventId, gcn::Widget *widget); + void action(const gcn::ActionEvent &event); private: typedef std::auto_ptr InventoryPtr; diff --git a/src/gui/updatewindow.cpp b/src/gui/updatewindow.cpp index 73e4489e..d41dfe13 100644 --- a/src/gui/updatewindow.cpp +++ b/src/gui/updatewindow.cpp @@ -132,9 +132,9 @@ void UpdaterWindow::enable() mPlayButton->requestFocus(); } -void UpdaterWindow::action(const std::string &eventId, gcn::Widget *widget) +void UpdaterWindow::action(const gcn::ActionEvent &event) { - if (eventId == "cancel") + if (event.getId() == "cancel") { // Register the user cancel mUserCancel=true; @@ -148,7 +148,7 @@ void UpdaterWindow::action(const std::string &eventId, gcn::Widget *widget) mDownloadStatus = UPDATE_ERROR; } } - else if (eventId == "play") + else if (event.getId() == "play") { state = STATE_LOGIN; } diff --git a/src/gui/updatewindow.h b/src/gui/updatewindow.h index 0d1493ee..8c54be27 100644 --- a/src/gui/updatewindow.h +++ b/src/gui/updatewindow.h @@ -79,7 +79,7 @@ class UpdaterWindow : public Window, public gcn::ActionListener */ void loadNews(); - void action(const std::string& eventId, gcn::Widget* widget); + void action(const gcn::ActionEvent &event); void logic(); diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp index 75a16865..671ababa 100644 --- a/src/gui/viewport.cpp +++ b/src/gui/viewport.cpp @@ -47,6 +47,7 @@ Viewport::Viewport(): mCameraX(0), mCameraY(0), mShowDebugPath(false), + mPlayerFollowMouse(false), mPopupActive(false) { setOpaque(false); @@ -243,7 +244,7 @@ Viewport::logic() } void -Viewport::mousePress(int mx, int my, int button) +Viewport::mousePressed(gcn::MouseEvent &event) { // Check if we are alive and kickin' if (!mMap || !player_node || player_node->mAction == Being::DEAD) @@ -255,11 +256,11 @@ Viewport::mousePress(int mx, int my, int button) mPlayerFollowMouse = false; - int tilex = (mx + mCameraX) / 32; - int tiley = (my + mCameraY) / 32; + int tilex = (event.getX() + mCameraX) / 32; + int tiley = (event.getY() + mCameraY) / 32; // Right click might open a popup - if (button == gcn::MouseInput::RIGHT) + if (event.getButton() == gcn::MouseEvent::RIGHT) { Being *being; FloorItem *floorItem; @@ -267,12 +268,12 @@ Viewport::mousePress(int mx, int my, int button) if ((being = beingManager->findBeing(tilex, tiley)) && being->getType() != Being::LOCALPLAYER) { - showPopup(mx, my, being); + showPopup(event.getX(), event.getY(), being); return; } else if((floorItem = floorItemManager->findByCoordinates(tilex, tiley))) { - showPopup(mx, my, floorItem); + showPopup(event.getX(), event.getY(), floorItem); return; } } @@ -286,7 +287,7 @@ Viewport::mousePress(int mx, int my, int button) } // Left click can cause different actions - if (button == gcn::MouseInput::LEFT) + if (event.getButton() == gcn::MouseEvent::LEFT) { FloorItem *item; @@ -302,13 +303,13 @@ Viewport::mousePress(int mx, int my, int button) Uint8 *keys = SDL_GetKeyState(NULL); if (!(keys[SDLK_LSHIFT] || keys[SDLK_RSHIFT])) { - player_node->setDestination(mx + mCameraX, my + mCameraY); + player_node->setDestination(event.getX() + mCameraX, + event.getY() + mCameraY); } mPlayerFollowMouse = true; } } - - if (button == gcn::MouseInput::MIDDLE) + else if (event.getButton() == gcn::MouseEvent::MIDDLE) { // Find the being nearest to the clicked position Being *target = beingManager->findNearestLivingBeing( @@ -323,19 +324,20 @@ Viewport::mousePress(int mx, int my, int button) } void -Viewport::mouseMotion(int mx, int my) +Viewport::mouseMoved(gcn::MouseEvent &event) { if (!mMap || !player_node) return; if (mPlayerFollowMouse && mWalkTime == player_node->mWalkTime) { - player_node->setDestination(mx + mCameraX, my + mCameraY); + player_node->setDestination(event.getX() + mCameraX, + event.getY() + mCameraY); } } void -Viewport::mouseRelease(int mx, int my, int button) +Viewport::mouseReleased(gcn::MouseEvent &event) { mPlayerFollowMouse = false; } diff --git a/src/gui/viewport.h b/src/gui/viewport.h index df78b1da..80475fbf 100644 --- a/src/gui/viewport.h +++ b/src/gui/viewport.h @@ -79,31 +79,33 @@ class Viewport : public WindowContainer, public gcn::MouseListener, /** * Toggles whether the path debug graphics are shown */ - void toggleDebugPath() { mShowDebugPath = !mShowDebugPath; } + void + toggleDebugPath() { mShowDebugPath = !mShowDebugPath; } /** * Handles mouse press on map. */ void - mousePress(int mx, int my, int button); + mousePressed(gcn::MouseEvent &event); /** * Handles mouse move on map */ void - mouseMotion(int mx, int my); + mouseMoved(gcn::MouseEvent &event); /** * Handles mouse button release on map. */ void - mouseRelease(int mx, int my, int button); + mouseReleased(gcn::MouseEvent &event); /** * Shows a popup for an item. * TODO Find some way to get rid of Item here */ - void showPopup(int x, int y, Item *item); + void + showPopup(int x, int y, Item *item); /** * A relevant config option changed. @@ -111,6 +113,18 @@ class Viewport : public WindowContainer, public gcn::MouseListener, void optionChanged(const std::string &name); + /** + * Returns camera x offset in tiles. + */ + int + getCameraX() { return mCameraX; } + + /** + * Returns camera y offset in tiles. + */ + int + getCameraY() { return mCameraY; } + private: /** * Shows a popup for a floor item. @@ -131,8 +145,8 @@ class Viewport : public WindowContainer, public gcn::MouseListener, int mScrollLaziness; float mViewX; /**< Current viewpoint in pixels. */ float mViewY; /**< Current viewpoint in pixels. */ - int mCameraX; - int mCameraY; + int mCameraX; /**< Current viewpoint in tiles. */ + int mCameraY; /**< Current viewpoint in tiles. */ bool mShowDebugPath; /**< Show a path from player to pointer. */ bool mPlayerFollowMouse; diff --git a/src/gui/window.cpp b/src/gui/window.cpp index 1960d6ca..bb60c6ff 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -197,6 +197,12 @@ void Window::setContentHeight(int height) resizeToContent(); } +void Window::setContentSize(int width, int height) +{ + setContentWidth(width); + setContentHeight(height); +} + void Window::setLocationRelativeTo(gcn::Widget *widget) { int wx, wy; @@ -209,12 +215,6 @@ void Window::setLocationRelativeTo(gcn::Widget *widget) getY() + (wy + (widget->getHeight() - getHeight()) / 2 - y)); } -void Window::setContentSize(int width, int height) -{ - setContentWidth(width); - setContentHeight(height); -} - void Window::setMinWidth(unsigned int width) { mMinWinWidth = width; @@ -282,86 +282,60 @@ void Window::add(gcn::Widget *w, int x, int y, bool delChild) mChrome->add(w, x, y, delChild); } -void Window::mousePress(int x, int y, int button) +void Window::mousePressed(gcn::MouseEvent &event) { // Let Guichan move window to top and figure out title bar drag - gcn::Window::mousePress(x, y, button); + gcn::Window::mousePressed(event); - // If the mouse is not inside the content, the press must have been on the - // border, and is a candidate for a resize. - if (isResizable() && button == 1 && + int x = event.getX(); + int y = event.getY(); + + // Activate resizing if the left mouse button was pressed on the grip + mMouseResize = + isResizable() && + event.getButton() == gcn::MouseEvent::LEFT && getGripDimension().isPointInRect(x, y) && - !getChildrenArea().isPointInRect(x, y) && - hasMouse() && - !(mMouseDrag && y > (int)getPadding())) - { - mMouseResize = true; - mMouseXOffset = x; - mMouseYOffset = y; - } + !getChildrenArea().isPointInRect(x, y); } -void Window::mouseMotion(int x, int y) +void Window::mouseDragged(gcn::MouseEvent &event) { - if (mMouseDrag || mMouseResize) + // Let Guichan handle title bar drag + gcn::Window::mouseDragged(event); + + // Keep guichan window inside screen + int newX = std::max(0, getX()); + int newY = std::max(0, getY()); + newX = std::min(windowContainer->getWidth() - getWidth(), newX); + newY = std::min(windowContainer->getHeight() - getHeight(), newY); + setPosition(newX, newY); + + if (mMouseResize && !mIsMoving) { - int dx = x - mMouseXOffset; - int dy = y - mMouseYOffset; gcn::Rectangle newDim = getDimension(); - // Change the dimension according to dragging and moving - if (mMouseResize && isResizable()) - { - // We're dragging bottom right - newDim.height += dy; - newDim.width += dx; - } - else if (mMouseDrag && isMovable()) - { - newDim.x += dx; - newDim.y += dy; - } + // We're dragging bottom right + newDim.width += event.getX() - mDragOffsetX; + newDim.height += event.getY() - mDragOffsetY; - // Keep guichan window inside screen + // Keep guichan window inside screen (supports resizing any side) if (newDim.x < 0) { - if (mMouseResize) - { - newDim.width += newDim.x; - } - + newDim.width += newDim.x; newDim.x = 0; } if (newDim.y < 0) { - if (mMouseResize) - { - newDim.height += newDim.y; - } - + newDim.height += newDim.y; newDim.y = 0; } if (newDim.x + newDim.width > windowContainer->getWidth()) { - if (mMouseResize) - { - newDim.width = windowContainer->getWidth() - newDim.x; - } - else - { - newDim.x = windowContainer->getWidth() - newDim.width; - } + newDim.width = windowContainer->getWidth() - newDim.x; } if (newDim.y + newDim.height > windowContainer->getHeight()) { - if (mMouseResize) - { - newDim.height = windowContainer->getHeight() - newDim.y; - } - else - { - newDim.y = windowContainer->getHeight() - newDim.height; - } + newDim.height = windowContainer->getHeight() - newDim.y; } // Keep the window at least its minimum size @@ -383,18 +357,9 @@ void Window::mouseMotion(int x, int y) newDim.height = mMaxWinHeight; } - // Snap window to edges - //if (x < snapSize) x = 0; - //if (y < snapSize) y = 0; - //if (x + winWidth + snapSize > screen->w) x = screen->w - winWidth; - //if (y + winHeight + snapSize > screen->h) y = screen->h - winHeight; - // Update mouse offset when dragging bottom or right border - if (mMouseResize) - { - mMouseYOffset += newDim.height - getHeight(); - mMouseXOffset += newDim.width - getWidth(); - } + mDragOffsetX += newDim.width - getWidth(); + mDragOffsetY += newDim.height - getHeight(); // Set the new window and content dimensions setDimension(newDim); @@ -403,16 +368,6 @@ void Window::mouseMotion(int x, int y) } } -void -Window::mouseRelease(int x, int y, int button) -{ - if (button == 1) - { - mMouseResize = false; - mMouseDrag = false; - } -} - gcn::Rectangle Window::getGripDimension() { diff --git a/src/gui/window.h b/src/gui/window.h index 158035c0..9ac02287 100644 --- a/src/gui/window.h +++ b/src/gui/window.h @@ -77,12 +77,12 @@ class Window : public gcn::Window /** * Adds a widget to the window. */ - void add(gcn::Widget *wi, bool delChild=true); + void add(gcn::Widget *wi, bool delChild = true); /** * Adds a widget to the window and also specifices its position. */ - void add(gcn::Widget *w, int x, int y, bool delChild=true); + void add(gcn::Widget *w, int x, int y, bool delChild = true); /** * Sets the width of the window contents. @@ -95,14 +95,14 @@ class Window : public gcn::Window void setContentHeight(int height); /** - * Sets the location relative to the given widget. + * Sets the size of this window. */ - void setLocationRelativeTo(gcn::Widget* widget); + void setContentSize(int width, int height); /** - * Sets the size of this window. + * Sets the location relative to the given widget. */ - void setContentSize(int width, int height); + void setLocationRelativeTo(gcn::Widget *widget); /** * Sets whether of not the window can be resized. @@ -146,7 +146,7 @@ class Window : public gcn::Window */ bool isSticky(); - /** + /** * Overloads window setVisible by guichan to allow sticky window * Handling */ @@ -171,9 +171,8 @@ class Window : public gcn::Window * Window dragging and resizing mouse related. These methods also makes * sure the window is not dragged/resized outside of the screen. */ - void mousePress(int x, int y, int button); - void mouseMotion(int mx, int my); - void mouseRelease(int x, int y, int button); + void mousePressed(gcn::MouseEvent &event); + void mouseDragged(gcn::MouseEvent &event); /** * Gets the position of the resize grip. diff --git a/src/main.cpp b/src/main.cpp index b9eeaeb5..3a448494 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -110,7 +110,8 @@ Net::Connection *chatServerConnection = 0; namespace { struct ErrorListener : public gcn::ActionListener { - void action(const std::string &eventId, gcn::Widget *widget) { + void action(const gcn::ActionEvent &event) + { state = STATE_CHOOSE_SERVER; } } errorListener; @@ -713,15 +714,16 @@ int main(int argc, char *argv[]) logger->log("State: CHAR_SELECT"); currentDialog = new CharSelectDialog(&charInfo); - if (((CharSelectDialog*)currentDialog)-> + if (((CharSelectDialog*) currentDialog)-> selectByName(options.playername)) options.chooseDefault = true; else - ((CharSelectDialog*)currentDialog)->selectByName( + ((CharSelectDialog*) currentDialog)->selectByName( config.getValue("lastCharacter", "")); if (options.chooseDefault) - ((CharSelectDialog*)currentDialog)->action("ok", NULL); + ((CharSelectDialog*) currentDialog)->action( + gcn::ActionEvent(NULL, "ok")); break; case STATE_ERROR: diff --git a/src/net/playerhandler.cpp b/src/net/playerhandler.cpp index f16037cf..327edea3 100644 --- a/src/net/playerhandler.cpp +++ b/src/net/playerhandler.cpp @@ -56,7 +56,7 @@ extern Window *buySellDialog; namespace { struct WeightListener : public gcn::ActionListener { - void action(const std::string &eventId, gcn::Widget *widget) + void action(const gcn::ActionEvent &event) { weightNotice = NULL; } @@ -70,7 +70,7 @@ namespace { namespace { struct DeathListener : public gcn::ActionListener { - void action(const std::string &eventId, gcn::Widget *widget) + void action(const gcn::ActionEvent &event) { player_node->revive(); deathNotice = NULL; diff --git a/src/net/tradehandler.cpp b/src/net/tradehandler.cpp index 2ebc160f..b3e80675 100644 --- a/src/net/tradehandler.cpp +++ b/src/net/tradehandler.cpp @@ -41,9 +41,9 @@ std::string tradePartnerName; namespace { struct RequestTradeListener : public gcn::ActionListener { - void action(const std::string &eventId, gcn::Widget *widget) + void action(const gcn::ActionEvent &event) { - player_node->tradeReply(eventId == "yes"); + player_node->tradeReply(event.getId() == "yes"); }; } listener; } diff --git a/tools/Purger.java b/tools/Purger.java deleted file mode 100644 index 1751c8de..00000000 --- a/tools/Purger.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Purger (c) 2006 Eugenio Favalli - * License: GPL, v2 or later - */ - -import java.io.*; -import java.text.*; -import java.util.*; - - public class Purger { - - public static void main(String[] args) { - if (args.length != 2) { - System.out.println( - "Usage: java Purger \n" + - " - folder: is the path to account.txt and athena.txt files.\n" + - " - date: accounts created before this date will be purged (dd/mm/yy)."); - return; - } - - int accounts = 0; - int characters = 0; - int deletedCharacters = 0; - Vector activeAccounts = new Vector(); - - File oldAccount = new File(args[0] + "account.txt"); - File oldAthena = new File(args[0] + "athena.txt"); - File newAccount = new File(args[0] + "account.txt.new"); - File newAthena = new File(args[0] + "athena.txt.new"); - - DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy"); - Date purgeDate; - try { - purgeDate = dateFormat.parse(args[1]); - } - catch (ParseException e) { - System.out.println("ERROR: Wrong date format."); - return; - } - - String line; - try { - FileInputStream fin = new FileInputStream(oldAccount); - BufferedReader input = new BufferedReader( - new InputStreamReader(fin)); - FileOutputStream fout = new FileOutputStream(newAccount); - PrintStream output = new PrintStream(fout); - - while ((line = input.readLine()) != null) { - boolean copy = false; - String[] fields = line.split("\t"); - // Check if we're reading a comment or the last line - if (line.substring(0, 2).equals("//") || fields[1].charAt(0) == '%') { - copy = true; - } - else { - // Server accounts should not be purged - if (!fields[4].equals("S")) { - accounts++; - dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - try { - Date date = dateFormat.parse(fields[3]); - if (date.after(purgeDate)) { - activeAccounts.add(fields[0]); - copy = true; - } - } - catch (ParseException e) { - System.out.println( - "ERROR: Wrong date format in account.txt. (" - + accounts + ": " + line + ")"); - //return; - } - catch (Exception e) { - e.printStackTrace(); - return; - } - } - else { - copy = true; - } - } - if (copy) { - try { - output.println(line); - } - catch (Exception e) { - System.err.println("ERROR: Unable to write file."); - } - } - } - } - catch (FileNotFoundException e ) { - System.out.println( - "ERROR: file " + oldAccount.getAbsolutePath() + " not found."); - return; - } - catch (Exception e) { - System.out.println("ERROR: unable to process account.txt"); - e.printStackTrace(); - return; - } - - input.close(); - output.close(); - - try { - FileInputStream fin = new FileInputStream(oldAthena); - BufferedReader input = new BufferedReader( - new InputStreamReader(fin)); - FileOutputStream fout = new FileOutputStream(newAthena); - PrintStream output = new PrintStream(fout); - - while ((line = input.readLine()) != null) { - boolean copy = false; - String[] fields = line.split("\t"); - // Check if we're reading a comment or the last line - if (line.substring(0, 2).equals("//") - || fields[1].charAt(0) == '%') { - copy = true; - } - else { - characters++; - String id = fields[1].substring(0, fields[1].indexOf(',')); - if (activeAccounts.contains(id)) { - copy = true; - } - else { - deletedCharacters++; - } - } - if (copy) { - output.println(line); - } - } - } - catch (FileNotFoundException e ) { - System.out.println( - "ERROR: file " + oldAthena.getAbsolutePath() + " not found."); - return; - } - catch (Exception e) { - System.out.println("ERROR: unable to process athena.txt"); - e.printStackTrace(); - return; - } - - input.close(); - output.close(); - - System.out.println( - "Removed " + (accounts - activeAccounts.size()) + "/" + - accounts + " accounts."); - System.out.println( - "Removed " + deletedCharacters + "/" - + characters + " characters."); - } - -} \ No newline at end of file -- cgit v1.2.3-70-g09d2 From d61fdaf1932724f86a68484c4a05195ca270646e Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond Date: Fri, 27 Jul 2007 22:30:19 +0000 Subject: Removed useless yet costly dynamic casts. --- ChangeLog | 11 +++++++++++ src/gui/browserbox.cpp | 4 ++-- src/gui/button.cpp | 5 ++--- src/gui/checkbox.cpp | 6 ++---- src/gui/equipmentwindow.cpp | 6 +++--- src/gui/gui.cpp | 5 ++--- src/gui/itemcontainer.cpp | 9 +++------ src/gui/minimap.cpp | 4 ++-- src/gui/playerbox.cpp | 4 ++-- src/gui/popupmenu.cpp | 2 +- src/gui/progressbar.cpp | 5 ++--- src/gui/radiobutton.cpp | 2 +- src/gui/scrollarea.cpp | 16 ++++++++-------- src/gui/slider.cpp | 12 ++++++------ src/gui/textfield.cpp | 2 +- src/gui/widgets/dropdown.cpp | 31 +++++-------------------------- src/gui/widgets/resizegrip.cpp | 2 +- src/resources/image.cpp | 2 +- 18 files changed, 55 insertions(+), 73 deletions(-) (limited to 'src/gui/browserbox.cpp') diff --git a/ChangeLog b/ChangeLog index b27becc3..3e617d90 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2007-07-25 Guillaume Melquiond + + * src/resources/image.cpp: Added support for subimages of subimages. + * src/gui/equipmentwindow.cpp, src/gui/button.cpp, src/gui/slider.cpp, + src/gui/widgets/resizegrip.cpp, src/gui/widgets/dropdown.cpp, + src/gui/progressbar.cpp, src/gui/browserbox.cpp, src/gui/gui.cpp, + src/gui/radiobutton.cpp, src/gui/textfield.cpp, src/gui/playerbox.cpp, + src/gui/itemcontainer.cpp, src/gui/checkbox.cpp, src/gui/minimap.cpp, + src/gui/scrollarea.cpp, src/gui/popupmenu.cpp: Removed useless yet + costly dynamic casts. + 2007-07-25 Guillaume Melquiond * src/net/beinghandler.cpp, src/net/protocol.h: Added being speed to diff --git a/src/gui/browserbox.cpp b/src/gui/browserbox.cpp index 65fdde64..4a3f2f64 100644 --- a/src/gui/browserbox.cpp +++ b/src/gui/browserbox.cpp @@ -104,7 +104,7 @@ void BrowserBox::addRow(const std::string &row) std::string newRow; BROWSER_LINK bLink; int idx1, idx2, idx3; - gcn::ImageFont *font = dynamic_cast(getFont()); + gcn::ImageFont *font = static_cast(getFont()); // Use links and user defined colors if (mUseLinksAndUserColors) @@ -294,7 +294,7 @@ BrowserBox::draw(gcn::Graphics *graphics) unsigned int i, j; int x = 0, y = 0; int wrappedLines = 0; - gcn::ImageFont *font = dynamic_cast(getFont()); + gcn::ImageFont *font = static_cast(getFont()); graphics->setColor(BLACK); for (i = 0; i < mTextRows.size(); i++) diff --git a/src/gui/button.cpp b/src/gui/button.cpp index e607b66a..83d4657c 100644 --- a/src/gui/button.cpp +++ b/src/gui/button.cpp @@ -111,9 +111,8 @@ Button::draw(gcn::Graphics *graphics) mode = 0; } - dynamic_cast(graphics)->drawImageRect(0, 0, - getWidth(), getHeight(), - button[mode]); + static_cast(graphics)-> + drawImageRect(0, 0, getWidth(), getHeight(), button[mode]); graphics->setColor(getForegroundColor()); diff --git a/src/gui/checkbox.cpp b/src/gui/checkbox.cpp index ec7eb578..fab4780c 100644 --- a/src/gui/checkbox.cpp +++ b/src/gui/checkbox.cpp @@ -66,7 +66,7 @@ CheckBox::~CheckBox() void CheckBox::drawBox(gcn::Graphics* graphics) { - Image *box = NULL; + Image *box; if (mMarked) { if (isEnabled()) { @@ -80,7 +80,5 @@ void CheckBox::drawBox(gcn::Graphics* graphics) box = checkBoxDisabled; } - if (box != NULL) { - dynamic_cast(graphics)->drawImage(box, 2, 2); - } + static_cast(graphics)->drawImage(box, 2, 2); } diff --git a/src/gui/equipmentwindow.cpp b/src/gui/equipmentwindow.cpp index ec84491e..1ae887bc 100644 --- a/src/gui/equipmentwindow.cpp +++ b/src/gui/equipmentwindow.cpp @@ -65,8 +65,8 @@ void EquipmentWindow::draw(gcn::Graphics *graphics) } image = item->getInfo().getImage(); - dynamic_cast(graphics)->drawImage( - image, 36 * (i % 4) + 10, 36 * (i / 4) + 25); + static_cast(graphics)-> + drawImage(image, 36 * (i % 4) + 10, 36 * (i / 4) + 25); } graphics->drawRectangle(gcn::Rectangle(160, 25, 32, 32)); @@ -77,7 +77,7 @@ void EquipmentWindow::draw(gcn::Graphics *graphics) image = item->getInfo().getImage(); - dynamic_cast(graphics)->drawImage(image, 160, 25); + static_cast(graphics)->drawImage(image, 160, 25); graphics->drawText(toString(item->getQuantity()), 170, 62, gcn::Graphics::CENTER); } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index b9b15429..8f1cc7f4 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -213,9 +213,8 @@ Gui::draw() if ((SDL_GetAppState() & SDL_APPMOUSEFOCUS || button & SDL_BUTTON(1)) && mCustomCursor) { - dynamic_cast(mGraphics)->drawImage(mMouseCursor, - mouseX - 5, - mouseY - 2); + static_cast(mGraphics)-> + drawImage(mMouseCursor, mouseX - 5, mouseY - 2); } mGraphics->popClipArea(); diff --git a/src/gui/itemcontainer.cpp b/src/gui/itemcontainer.cpp index a176f226..0e5bcce9 100644 --- a/src/gui/itemcontainer.cpp +++ b/src/gui/itemcontainer.cpp @@ -105,16 +105,13 @@ ItemContainer::draw(gcn::Graphics *graphics) // Draw selection image below selected item if (mSelectedItem == item) { - dynamic_cast(graphics)->drawImage( - mSelImg, itemX, itemY); + static_cast(graphics)->drawImage(mSelImg, itemX, itemY); } // Draw item icon - Image* image; - if ((image = item->getInfo().getImage()) != NULL) + if (Image *image = item->getInfo().getImage()) { - dynamic_cast(graphics)->drawImage( - image, itemX, itemY); + static_cast(graphics)->drawImage(image, itemX, itemY); } // Draw item caption diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp index 69c5eb6e..2720225d 100644 --- a/src/gui/minimap.cpp +++ b/src/gui/minimap.cpp @@ -72,8 +72,8 @@ void Minimap::draw(gcn::Graphics *graphics) if (mMapImage != NULL) { - dynamic_cast(graphics)->drawImage( - mMapImage, getPadding(), getTitleBarHeight()); + static_cast(graphics)-> + drawImage(mMapImage, getPadding(), getTitleBarHeight()); } Beings &beings = beingManager->getAll(); diff --git a/src/gui/playerbox.cpp b/src/gui/playerbox.cpp index fad156f1..95366bee 100644 --- a/src/gui/playerbox.cpp +++ b/src/gui/playerbox.cpp @@ -80,7 +80,7 @@ PlayerBox::draw(gcn::Graphics *graphics) if (mPlayer) { // Draw character - mPlayer->draw(dynamic_cast(graphics), 40, 42); + mPlayer->draw(static_cast(graphics), 40, 42); } } @@ -92,5 +92,5 @@ PlayerBox::drawBorder(gcn::Graphics *graphics) w = getWidth() + bs * 2; h = getHeight() + bs * 2; - dynamic_cast(graphics)->drawImageRect(0, 0, w, h, background); + static_cast(graphics)->drawImageRect(0, 0, w, h, background); } diff --git a/src/gui/popupmenu.cpp b/src/gui/popupmenu.cpp index c7c77ef4..cc764d35 100644 --- a/src/gui/popupmenu.cpp +++ b/src/gui/popupmenu.cpp @@ -124,7 +124,7 @@ void PopupMenu::handleLink(const std::string& link) mBeing->getType() == Being::NPC && current_npc == 0) { - dynamic_cast(mBeing)->talk(); + static_cast(mBeing)->talk(); } // Trade action diff --git a/src/gui/progressbar.cpp b/src/gui/progressbar.cpp index 2bdfc856..6d18b2f7 100644 --- a/src/gui/progressbar.cpp +++ b/src/gui/progressbar.cpp @@ -93,9 +93,8 @@ void ProgressBar::logic() void ProgressBar::draw(gcn::Graphics *graphics) { - dynamic_cast(graphics)->drawImageRect(0, 0, - getWidth(), getHeight(), - mBorder); + static_cast(graphics)-> + drawImageRect(0, 0, getWidth(), getHeight(), mBorder); // The bar if (mProgress > 0) diff --git a/src/gui/radiobutton.cpp b/src/gui/radiobutton.cpp index bbebe48f..e318116a 100644 --- a/src/gui/radiobutton.cpp +++ b/src/gui/radiobutton.cpp @@ -80,6 +80,6 @@ void RadioButton::drawBox(gcn::Graphics* graphics) } if (box != NULL) { - dynamic_cast(graphics)->drawImage(box, 2, 2); + static_cast(graphics)->drawImage(box, 2, 2); } } diff --git a/src/gui/scrollarea.cpp b/src/gui/scrollarea.cpp index 903ec95d..816f94a8 100644 --- a/src/gui/scrollarea.cpp +++ b/src/gui/scrollarea.cpp @@ -228,8 +228,8 @@ void ScrollArea::drawBorder(gcn::Graphics *graphics) int h = getHeight() + bs * 2; if (mOpaque) { - dynamic_cast(graphics)->drawImageRect(0, 0, w, h, - background); + static_cast(graphics)-> + drawImageRect(0, 0, w, h, background); } } @@ -269,8 +269,8 @@ void ScrollArea::drawButton(gcn::Graphics *graphics, BUTTON_DIR dir) break; } - dynamic_cast(graphics)->drawImage( - buttons[dir][state], dim.x, dim.y); + static_cast(graphics)-> + drawImage(buttons[dir][state], dim.x, dim.y); } void ScrollArea::drawUpButton(gcn::Graphics *graphics) @@ -313,14 +313,14 @@ void ScrollArea::drawVMarker(gcn::Graphics *graphics) { gcn::Rectangle dim = getVerticalMarkerDimension(); - dynamic_cast(graphics)->drawImageRect( - dim.x, dim.y, dim.width, dim.height, vMarker); + static_cast(graphics)-> + drawImageRect(dim.x, dim.y, dim.width, dim.height, vMarker); } void ScrollArea::drawHMarker(gcn::Graphics *graphics) { gcn::Rectangle dim = getHorizontalMarkerDimension(); - dynamic_cast(graphics)->drawImageRect( - dim.x, dim.y, dim.width, dim.height, vMarker); + static_cast(graphics)-> + drawImageRect(dim.x, dim.y, dim.width, dim.height, vMarker); } diff --git a/src/gui/slider.cpp b/src/gui/slider.cpp index 98efc409..f0170a1b 100644 --- a/src/gui/slider.cpp +++ b/src/gui/slider.cpp @@ -109,22 +109,22 @@ void Slider::draw(gcn::Graphics *graphics) int x = 0; int y = (h - hStart->getHeight()) / 2; - dynamic_cast(graphics)->drawImage(hStart, x, y); + static_cast(graphics)->drawImage(hStart, x, y); w -= hStart->getWidth() + hEnd->getWidth(); x += hStart->getWidth(); - dynamic_cast(graphics)->drawImagePattern( - hMid, x, y, w, hMid->getHeight()); + static_cast(graphics)-> + drawImagePattern(hMid, x, y, w, hMid->getHeight()); x += w; - dynamic_cast(graphics)->drawImage(hEnd, x, y); + static_cast(graphics)->drawImage(hEnd, x, y); drawMarker(graphics); } void Slider::drawMarker(gcn::Graphics *graphics) { - dynamic_cast(graphics)->drawImage(hGrip, - getMarkerPosition(), (getHeight() - hGrip->getHeight()) / 2); + static_cast(graphics)-> + drawImage(hGrip, getMarkerPosition(), (getHeight() - hGrip->getHeight()) / 2); } diff --git a/src/gui/textfield.cpp b/src/gui/textfield.cpp index adf41a9a..ce7f6d5f 100644 --- a/src/gui/textfield.cpp +++ b/src/gui/textfield.cpp @@ -98,5 +98,5 @@ void TextField::drawBorder(gcn::Graphics *graphics) w = getWidth() + bs * 2; h = getHeight() + bs * 2; - dynamic_cast(graphics)->drawImageRect(0, 0, w, h, skin); + static_cast(graphics)->drawImageRect(0, 0, w, h, skin); } diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp index 0bf0e673..1176ef2a 100644 --- a/src/gui/widgets/dropdown.cpp +++ b/src/gui/widgets/dropdown.cpp @@ -145,7 +145,7 @@ void DropDown::draw(gcn::Graphics* graphics) graphics->setColor(highlightColor); graphics->drawLine(0, h, getWidth(), h); graphics->setColor(shadowColor); - graphics->drawLine(0, h + 1,getWidth(),h + 1); + graphics->drawLine(0, h + 1, getWidth(), h + 1); } } @@ -156,34 +156,13 @@ void DropDown::drawBorder(gcn::Graphics *graphics) w = getWidth() + bs * 2; h = getHeight() + bs * 2; - dynamic_cast(graphics)->drawImageRect(0, 0, w, h, skin); + static_cast(graphics)->drawImageRect(0, 0, w, h, skin); } void DropDown::drawButton(gcn::Graphics *graphics) { + int height = mDroppedDown ? mOldH : getHeight(); - unsigned short state = 0; - unsigned short dir = 0; - gcn::Rectangle dim; - - if (mPushed) - state = 1; - - if (mDroppedDown) - dir = 1; - - int height; - if (mDroppedDown) - { - height = mOldH; - } - else - { - height = getHeight(); - } - int x = getWidth() - height; - int y = 0; - - dynamic_cast(graphics)->drawImage( - buttons[dir][state], x, y + 1); + static_cast(graphics)-> + drawImage(buttons[mDroppedDown][mPushed], getWidth() - height, 1); } diff --git a/src/gui/widgets/resizegrip.cpp b/src/gui/widgets/resizegrip.cpp index 50a6fce4..6be50f2c 100644 --- a/src/gui/widgets/resizegrip.cpp +++ b/src/gui/widgets/resizegrip.cpp @@ -61,5 +61,5 @@ ResizeGrip::~ResizeGrip() void ResizeGrip::draw(gcn::Graphics *graphics) { - dynamic_cast(graphics)->drawImage(gripImage, 0, 0); + static_cast(graphics)->drawImage(gripImage, 0, 0); } diff --git a/src/resources/image.cpp b/src/resources/image.cpp index 993b0a2b..ad280eeb 100644 --- a/src/resources/image.cpp +++ b/src/resources/image.cpp @@ -343,5 +343,5 @@ SubImage::~SubImage() Image *SubImage::getSubImage(int x, int y, int w, int h) { - return NULL; + return mParent->getSubImage(mBounds.x + x, mBounds.y + y, w, h); } -- cgit v1.2.3-70-g09d2 From ce2b0db3129cc4f3f20c322fd6c727ce663838cc Mon Sep 17 00:00:00 2001 From: Eugenio Favalli Date: Mon, 10 Sep 2007 07:46:51 +0000 Subject: Added support for True Type Fonts. --- ChangeLog | 10 +- configure.ac | 7 +- data/fonts/dejavusans.ttf | Bin 0 -> 569716 bytes src/Makefile.am | 2 + src/gui/browserbox.cpp | 56 +--- src/gui/browserbox.h | 5 - src/gui/gui.cpp | 20 +- src/gui/truetypefont.cpp | 170 ++++++++++++ src/gui/truetypefont.h | 134 +++++++++ src/gui/window.cpp | 1 + src/main.cpp | 679 +++++++++++++++++++++++----------------------- src/openglgraphics.cpp | 1 - tmw.cbp | 14 +- 13 files changed, 702 insertions(+), 397 deletions(-) create mode 100644 data/fonts/dejavusans.ttf create mode 100644 src/gui/truetypefont.cpp create mode 100644 src/gui/truetypefont.h (limited to 'src/gui/browserbox.cpp') diff --git a/ChangeLog b/ChangeLog index b629adbc..3e7d4c5b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-09-10 Eugenio Favalli + + * configure.ac, data/fonts/dejavusans.ttf, + src/gui/browserbox.cpp, src/gui/browserbox.h, src/gui/gui.cpp, + src/gui/truetypefont.cpp, src/gui/truetypefont.h, src/gui/window.cpp, + src/main.cpp, src/Makefile.am, src/openglgraphics.cpp, tmw.cbp: Added + support for True Type Fonts. + 2007-09-08 Guillaume Melquiond * po/LINGUAS: Added German to the list of available languages. @@ -6,7 +14,7 @@ 2007-08-27 Matthias Hartmann * po/de.po: Added german translation. - + 2007-08-27 Eugenio Favalli * data/maps/new_1-1.tmx.gz: Added test npcs. diff --git a/configure.ac b/configure.ac index c3f14337..1ee6dfb7 100755 --- a/configure.ac +++ b/configure.ac @@ -79,12 +79,15 @@ AC_CHECK_LIB(SDL_image, IMG_LoadPNG_RW, , AC_MSG_ERROR([ *** Unable to find SDL_image library with PNG support (http://www.libsdl.org/projects/SDL_image/)])) -AC_CHECK_LIB([guichan_sdl], [gcnSDL], , -AC_MSG_ERROR([ *** Unable to find Guichan SDL library (http://guichan.sf.net/)])) +AC_CHECK_LIB(SDL_ttf, TTF_Quit, , +AC_MSG_ERROR([ *** Unable to find SDL_ttf library (http://www.libsdl.org/projects/SDL_ttf/)])) AC_CHECK_LIB([SDL_mixer], [Mix_OpenAudio], , AC_MSG_ERROR([ *** Unable to find SDL_mixer library (http://www.libsdl.org/projects/SDL_mixer/)])) +AC_CHECK_LIB([guichan_sdl], [gcnSDL], , +AC_MSG_ERROR([ *** Unable to find Guichan SDL library (http://guichan.sf.net/)])) + AC_CHECK_LIB([enet], [enet_initialize], , AC_MSG_ERROR([ *** Unable to find enet library (http://enet.bespin.org/)])) diff --git a/data/fonts/dejavusans.ttf b/data/fonts/dejavusans.ttf new file mode 100644 index 00000000..627cef46 Binary files /dev/null and b/data/fonts/dejavusans.ttf differ diff --git a/src/Makefile.am b/src/Makefile.am index 1fe12518..7006f66e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -66,6 +66,8 @@ tmw_SOURCES = gui/widgets/dropdown.cpp \ gui/npc_text.h \ gui/ok_dialog.cpp \ gui/ok_dialog.h \ + gui/truetypefont.cpp \ + gui/truetypefont.h \ gui/passwordfield.cpp \ gui/passwordfield.h \ gui/playerbox.cpp \ diff --git a/src/gui/browserbox.cpp b/src/gui/browserbox.cpp index 4a3f2f64..c618fa69 100644 --- a/src/gui/browserbox.cpp +++ b/src/gui/browserbox.cpp @@ -30,14 +30,7 @@ #include #include "linkhandler.h" - -#ifdef USE_OPENGL -#include "../configuration.h" -#include "../resources/resourcemanager.h" - -int BrowserBox::instances = 0; -gcn::ImageFont* BrowserBox::browserFont = NULL; -#endif +#include "truetypefont.h" BrowserBox::BrowserBox(unsigned int mode): gcn::Widget(), @@ -47,35 +40,10 @@ BrowserBox::BrowserBox(unsigned int mode): { setFocusable(true); addMouseListener(this); - -#ifdef USE_OPENGL - if (config.getValue("opengl", 0)) { - if (instances == 0) { - browserFont = new gcn::ImageFont( - "graphics/gui/browserfont.png", - " abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567" - "89:@!\"$%&/=?^+*#[]{}()<>_;'.,\\|-~`" - "øåáÁéÉíÍóÓúÚç륣¢¡¿àãõêñÑöüäÖÜÄßèÈÅ"); - } - setFont(browserFont); - instances++; - } -#endif } BrowserBox::~BrowserBox() { -#ifdef USE_OPENGL - instances--; - - if (instances == 0) - { - // Clean up static resource font - delete browserFont; - browserFont = NULL; - } -#endif } void BrowserBox::setLinkHandler(LinkHandler* linkHandler) @@ -104,7 +72,7 @@ void BrowserBox::addRow(const std::string &row) std::string newRow; BROWSER_LINK bLink; int idx1, idx2, idx3; - gcn::ImageFont *font = static_cast(getFont()); + TrueTypeFont *font = static_cast(getFont()); // Use links and user defined colors if (mUseLinksAndUserColors) @@ -172,7 +140,7 @@ void BrowserBox::addRow(const std::string &row) { unsigned int i, j, y = 0; unsigned int nextChar; - char hyphen = '~'; + char *hyphen = "~"; int hyphenWidth = font->getWidth(hyphen); int x = 0; for (i = 0; i < mTextRows.size(); i++) @@ -180,7 +148,8 @@ void BrowserBox::addRow(const std::string &row) std::string row = mTextRows[i]; for (j = 0; j < row.size(); j++) { - x += font->getWidth(row.at(j)); + std::string character = row.substr(j, 1); + x += font->getWidth(character); nextChar = j + 1; // Wraping between words (at blank spaces) @@ -294,7 +263,7 @@ BrowserBox::draw(gcn::Graphics *graphics) unsigned int i, j; int x = 0, y = 0; int wrappedLines = 0; - gcn::ImageFont *font = static_cast(getFont()); + TrueTypeFont *font = static_cast(getFont()); graphics->setColor(BLACK); for (i = 0; i < mTextRows.size(); i++) @@ -377,22 +346,23 @@ BrowserBox::draw(gcn::Graphics *graphics) { for (x = 0; x < getWidth(); x++) { - font->drawGlyph(graphics, '-', x, y); - x += font->getWidth('-') - 2; + font->drawString(graphics, "-", x, y); + x += font->getWidth("-") - 2; } break; } // Draw each char else { - font->drawGlyph(graphics, row.at(j), x, y); - x += font->getWidth(row.at(j)); + std::string character = row.substr(j, 1); + font->drawString(graphics, character, x, y); + x += font->getWidth(character.c_str()); // Auto wrap mode if (mMode == AUTO_WRAP) { unsigned int nextChar = j + 1; - char hyphen = '~'; + char *hyphen = "~"; int hyphenWidth = font->getWidth(hyphen); // Wraping between words (at blank spaces) @@ -419,7 +389,7 @@ BrowserBox::draw(gcn::Graphics *graphics) // Wrapping looong lines (brutal force) else if ((x + 2 * hyphenWidth) > getWidth()) { - font->drawGlyph(graphics, hyphen, + font->drawString(graphics, hyphen, getWidth() - hyphenWidth, y); x = 15; // Ident in new line y += font->getHeight(); diff --git a/src/gui/browserbox.h b/src/gui/browserbox.h index 666a7754..1c33e6f9 100644 --- a/src/gui/browserbox.h +++ b/src/gui/browserbox.h @@ -158,11 +158,6 @@ class BrowserBox : public gcn::Widget, public gcn::MouseListener bool mOpaque; bool mUseLinksAndUserColors; int mSelectedLink; - -#ifdef USE_OPENGL - static int instances; /**< Number of Window instances */ - static gcn::ImageFont* browserFont; -#endif }; #endif diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 620dfb0b..dc51054c 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -26,14 +26,16 @@ #include #include #include +#include // Should stay here because of Guichan being sensitive to headers order #include #include "focushandler.h" +#include "truetypefont.h" +#include "viewport.h" #include "window.h" #include "windowcontainer.h" -#include "viewport.h" #include "../configlistener.h" #include "../configuration.h" @@ -104,14 +106,13 @@ Gui::Gui(Graphics *graphics): // Set global font try { - mGuiFont = new gcn::ImageFont("graphics/gui/sansserif8.png", - " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[" - "\\]^_`abcdefghijklmnopqrstuvwxyz{|}~|" - ); + mGuiFont = new TrueTypeFont("data/fonts/dejavusans.ttf", 12); } catch (gcn::Exception e) { - logger->error("Unable to load sansserif8.png!"); + logger->log("Unable to load dejavusans.ttf: %s", + e.getMessage().c_str()); + throw; } // Set speech font @@ -124,7 +125,9 @@ Gui::Gui(Graphics *graphics): } catch (gcn::Exception e) { - logger->error("Unable to load rpgfont_wider.png!"); + logger->log("Unable to load rpgfont_wider.png: %s", + e.getMessage().c_str()); + throw; } gcn::Widget::setGlobalFont(mGuiFont); @@ -140,7 +143,8 @@ Gui::Gui(Graphics *graphics): } catch (gcn::Exception e) { - logger->error("Unable to load colored hits' fonts!"); + logger->log("Unable to load colored hits' fonts: %s", e.getMessage().c_str()); + throw; } // Initialize mouse cursor and listen for changes to the option diff --git a/src/gui/truetypefont.cpp b/src/gui/truetypefont.cpp new file mode 100644 index 00000000..7ef29539 --- /dev/null +++ b/src/gui/truetypefont.cpp @@ -0,0 +1,170 @@ +/* + * 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$ + */ + +#include "truetypefont.h" + +#include + +#include + +#include "../graphics.h" +#include "../resources/image.h" + +#define CACHE_SIZE 30 + +class TextChunk +{ + public: + TextChunk(const std::string &text, gcn::Color color) : + img(NULL), text(text), color(color) + { + } + + ~TextChunk() + { + delete img; + } + + bool operator==(const TextChunk &chunk) const + { + return ( + chunk.text == text && chunk.color == color); + } + + void generate(TTF_Font *font) + { + SDL_Color sdlCol; + sdlCol.b = color.b; + sdlCol.r = color.r; + sdlCol.g = color.g; + + SDL_Surface *surface = TTF_RenderUTF8_Blended( + font, text.c_str(), sdlCol); + + if (!surface) + { + throw "Rendering font to surface failed: " + + std::string(TTF_GetError()); + } + + img = Image::load(surface, std::string()); + + SDL_FreeSurface(surface); + } + + Image *img; + std::string text; + gcn::Color color; +}; + + +// Word surfaces cache +static std::list cache; +typedef std::list::iterator CacheIterator; + + +TrueTypeFont::TrueTypeFont(const std::string& filename, int size) +{ + if (!TTF_WasInit() && TTF_Init() == -1) + { + throw GCN_EXCEPTION("Unable to initialize SDL_ttf: " + + std::string(TTF_GetError())); + } + + mFont = TTF_OpenFont(filename.c_str(), size); + + if (mFont == NULL) + { + throw GCN_EXCEPTION("SDLTrueTypeFont::SDLTrueTypeFont: " + + std::string(TTF_GetError())); + } +} + +TrueTypeFont::~TrueTypeFont() +{ + TTF_CloseFont(mFont); + + if (TTF_WasInit()) + { + TTF_Quit(); + } +} + +void TrueTypeFont::drawString(gcn::Graphics *graphics, + const std::string &text, + int x, int y) +{ + if (text.empty()) + { + return; + } + + Graphics *g = dynamic_cast(graphics); + + if (!g) + { + throw "Not a valid graphics object!"; + } + + gcn::Color col = g->getColor(); + + TextChunk chunk(text, col); + + bool found = false; + + for (CacheIterator i = cache.begin(); i != cache.end(); i++) + { + if (chunk == (*i)) + { + // Raise priority: move it to front + cache.splice(cache.begin(), cache, i); + found = true; + break; + } + } + + // Surface not found + if (!found) + { + if (cache.size() >= CACHE_SIZE) + { + cache.pop_back(); + } + cache.push_front(chunk); + cache.front().generate(mFont); + } + + g->drawImage(cache.front().img, x, y); +} + +int TrueTypeFont::getWidth(const std::string& text) const +{ + int w, h; + TTF_SizeUTF8(mFont, text.c_str(), &w, &h); + return w; +} + +int TrueTypeFont::getHeight() const +{ + return TTF_FontHeight(mFont); +} diff --git a/src/gui/truetypefont.h b/src/gui/truetypefont.h new file mode 100644 index 00000000..e0e57cd7 --- /dev/null +++ b/src/gui/truetypefont.h @@ -0,0 +1,134 @@ +/* + * 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_TRUETYPEFONT_H +#define _TMW_TRUETYPEFONT_H + +#include + +#include +#include +#include + +/** + * A wrapper around SDL_ttf for allowing the use of TrueType fonts. + * + * NOTE: This class needs SDL_ttf to be initialized. + */ +class TrueTypeFont : public gcn::Font +{ + public: + /** + * Constructor. + * + * @param filename Font filename. + * @param size Font size. + */ + TrueTypeFont(const std::string& filename, int size); + + /** + * Destructor. + */ + ~TrueTypeFont(); + + virtual int getWidth(const std::string& text) const; + + virtual int getHeight() const; + + /** + * @see Font::drawString + */ + void drawString(gcn::Graphics* graphics, const std::string& text, int x, int y); + + private: + TTF_Font *mFont; +}; + +#endif +/* + * 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_TRUETYPEFONT_H +#define _TMW_TRUETYPEFONT_H + +#include + +#include +#include +#include + +/** + * A wrapper around SDL_ttf for allowing the use of TrueType fonts. + * + * NOTE: This class needs SDL_ttf to be initialized. + */ +class TrueTypeFont : public gcn::Font +{ + public: + /** + * Constructor. + * + * @param filename Font filename. + * @param size Font size. + */ + TrueTypeFont(const std::string& filename, int size); + + /** + * Destructor. + */ + ~TrueTypeFont(); + + virtual int getWidth(const std::string& text) const; + + virtual int getHeight() const; + + /** + * @see Font::drawString + */ + void drawString(gcn::Graphics* graphics, const std::string& text, int x, int y); + + private: + TTF_Font *mFont; +}; + +#endif diff --git a/src/gui/window.cpp b/src/gui/window.cpp index 3e6e1bac..84f4466c 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -173,6 +173,7 @@ void Window::draw(gcn::Graphics *graphics) // Draw title if (getTitleBarHeight()) { + graphics->setColor(gcn::Color(0, 0, 0)); graphics->setFont(getFont()); graphics->drawText(getCaption(), 7, 5, gcn::Graphics::LEFT); } diff --git a/src/main.cpp b/src/main.cpp index 67086f9f..1f4eafde 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -655,387 +655,395 @@ extern "C" char const *_nl_locale_name_default(void); /** Main */ int main(int argc, char *argv[]) { - // Parse command line options - Options options; - parseOptions(argc, argv, options); - if (options.printHelp) + try { - printHelp(); - return 0; - } - else if (options.printVersion) - { - printVersion(); - return 0; - } + // Parse command line options + Options options; + parseOptions(argc, argv, options); + if (options.printHelp) + { + printHelp(); + return 0; + } + else if (options.printVersion) + { + printVersion(); + return 0; + } #if ENABLE_NLS #ifdef WIN32 - putenv(("LANG=" + std::string(_nl_locale_name_default())).c_str()); + putenv(("LANG=" + std::string(_nl_locale_name_default())).c_str()); #endif - setlocale(LC_MESSAGES, ""); - bindtextdomain("tmw", LOCALEDIR); - bind_textdomain_codeset("tmw", "UTF-8"); - textdomain("tmw"); + setlocale(LC_MESSAGES, ""); + bindtextdomain("tmw", LOCALEDIR); + bind_textdomain_codeset("tmw", "UTF-8"); + textdomain("tmw"); #endif - // Initialize PhysicsFS - PHYSFS_init(argv[0]); + // Initialize PhysicsFS + PHYSFS_init(argv[0]); - initHomeDir(); - // Configure logger - logger = new Logger(); - logger->setLogFile(homeDir + std::string("/tmw.log")); - logger->setLogToStandardOut(config.getValue("logToStandardOut", 0)); + initHomeDir(); + // Configure logger + logger = new Logger(); + logger->setLogFile(homeDir + std::string("/tmw.log")); + logger->setLogToStandardOut(config.getValue("logToStandardOut", 0)); - // Log the tmw version + // Log the tmw version #ifdef PACKAGE_VERSION - logger->log("The Mana World v%s", PACKAGE_VERSION); + logger->log("The Mana World v%s", PACKAGE_VERSION); #else - logger->log("The Mana World - version not defined"); + logger->log("The Mana World - version not defined"); #endif - initXML(); - initConfiguration(options); - initEngine(); + initXML(); + initConfiguration(options); + initEngine(); - Game *game = NULL; - Window *currentDialog = NULL; - QuitDialog* quitDialog = NULL; - Image *login_wallpaper = NULL; + Game *game = NULL; + Window *currentDialog = NULL; + QuitDialog* quitDialog = NULL; + Image *login_wallpaper = NULL; - gcn::Container *top = static_cast(gui->getTop()); + gcn::Container *top = static_cast(gui->getTop()); #ifdef PACKAGE_VERSION - gcn::Label *versionLabel = new gcn::Label(PACKAGE_VERSION); - top->add(versionLabel, 2, 2); + gcn::Label *versionLabel = new gcn::Label(PACKAGE_VERSION); + top->add(versionLabel, 2, 2); #endif - sound.playMusic(TMW_DATADIR "data/music/Magick - Real.ogg"); + sound.playMusic(TMW_DATADIR "data/music/Magick - Real.ogg"); - // Server choice - if (options.serverName.empty()) { - loginData.hostname = config.getValue("MostUsedServerName0", - defaultAccountServerName.c_str()); - } - else { - loginData.hostname = options.serverName; - } - if (options.serverPort == 0) { - loginData.port = (short)config.getValue("MostUsedServerPort0", - defaultAccountServerPort); - } else { - loginData.port = options.serverPort; - } + // Server choice + if (options.serverName.empty()) { + loginData.hostname = config.getValue("MostUsedServerName0", + defaultAccountServerName.c_str()); + } + else { + loginData.hostname = options.serverName; + } + if (options.serverPort == 0) { + loginData.port = (short)config.getValue("MostUsedServerPort0", + defaultAccountServerPort); + } else { + loginData.port = options.serverPort; + } - loginData.username = options.playername; - if (loginData.username.empty()) { - if (config.getValue("remember", 0)) { - loginData.username = config.getValue("username", ""); + loginData.username = options.playername; + if (loginData.username.empty()) { + if (config.getValue("remember", 0)) { + loginData.username = config.getValue("username", ""); + } + } + if (!options.password.empty()) { + loginData.password = options.password; } - } - if (!options.password.empty()) { - loginData.password = options.password; - } - loginData.remember = config.getValue("remember", 0); - loginData.registerLogin = false; + loginData.remember = config.getValue("remember", 0); + loginData.registerLogin = false; - Net::initialize(); - accountServerConnection = Net::getConnection(); - gameServerConnection = Net::getConnection(); - chatServerConnection = Net::getConnection(); + Net::initialize(); + accountServerConnection = Net::getConnection(); + gameServerConnection = Net::getConnection(); + chatServerConnection = Net::getConnection(); - unsigned int oldstate = !state; // We start with a status change. + unsigned int oldstate = !state; // We start with a status change. - SDL_Event event; - while (state != STATE_FORCE_QUIT) - { - // Handle SDL events - while (SDL_PollEvent(&event)) { - switch (event.type) { - case SDL_QUIT: - state = STATE_FORCE_QUIT; - break; - - case SDL_KEYDOWN: - if (event.key.keysym.sym == SDLK_ESCAPE) - if (!quitDialog) - { - quitDialog = new QuitDialog(NULL, &quitDialog); - } - else - { - quitDialog->requestMoveToTop(); - } - break; + SDL_Event event; + while (state != STATE_FORCE_QUIT) + { + // Handle SDL events + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + state = STATE_FORCE_QUIT; + break; + + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_ESCAPE) + if (!quitDialog) + { + quitDialog = new QuitDialog(NULL, &quitDialog); + } + else + { + quitDialog->requestMoveToTop(); + } + break; + } + + guiInput->pushInput(event); } - guiInput->pushInput(event); - } - - Net::flush(); - gui->logic(); + Net::flush(); + gui->logic(); - if (!login_wallpaper) - { - login_wallpaper = ResourceManager::getInstance()-> - getImage("graphics/images/login_wallpaper.png"); if (!login_wallpaper) { - logger->error("Couldn't load login_wallpaper.png"); + login_wallpaper = ResourceManager::getInstance()-> + getImage("graphics/images/login_wallpaper.png"); + if (!login_wallpaper) + { + logger->error("Couldn't load login_wallpaper.png"); + } } - } - graphics->drawImage(login_wallpaper, 0, 0); - gui->draw(); - graphics->updateScreen(); + graphics->drawImage(login_wallpaper, 0, 0); + gui->draw(); + graphics->updateScreen(); - // TODO: Add connect timeouts - if (state == STATE_CONNECT_ACCOUNT && - accountServerConnection->isConnected()) - { - if (options.skipUpdate) { - state = STATE_LOADDATA; - } else { - state = STATE_UPDATE; + // TODO: Add connect timeouts + if (state == STATE_CONNECT_ACCOUNT && + accountServerConnection->isConnected()) + { + if (options.skipUpdate) { + state = STATE_LOADDATA; + } else { + state = STATE_UPDATE; + } } - } - else if (state == STATE_CONNECT_GAME && - gameServerConnection->isConnected() && - chatServerConnection->isConnected()) - { - accountServerConnection->disconnect(); - Net::clearHandlers(); - - state = STATE_GAME; - } - else if (state == STATE_RECONNECT_ACCOUNT && - accountServerConnection->isConnected()) - { - reconnectAccount(token); - state = STATE_WAIT; - } + else if (state == STATE_CONNECT_GAME && + gameServerConnection->isConnected() && + chatServerConnection->isConnected()) + { + accountServerConnection->disconnect(); + Net::clearHandlers(); - if (state != oldstate) { - // Load updates after exiting the update state - if (oldstate == STATE_UPDATE) + state = STATE_GAME; + } + else if (state == STATE_RECONNECT_ACCOUNT && + accountServerConnection->isConnected()) { - loadUpdates(); - // Reload the wallpaper in case that it was updated - login_wallpaper->decRef(); - login_wallpaper = ResourceManager::getInstance()-> - getImage("graphics/images/login_wallpaper.png"); + reconnectAccount(token); + state = STATE_WAIT; } - oldstate = state; + if (state != oldstate) { + // Load updates after exiting the update state + if (oldstate == STATE_UPDATE) + { + loadUpdates(); + // Reload the wallpaper in case that it was updated + login_wallpaper->decRef(); + login_wallpaper = ResourceManager::getInstance()-> + getImage("graphics/images/login_wallpaper.png"); + } + + oldstate = state; + + // Get rid of the dialog of the previous state + if (currentDialog) { + delete currentDialog; + currentDialog = NULL; + } + // State has changed, while the quitDialog was active, it might + // not be correct anymore + if (quitDialog) { + quitDialog->scheduleDelete(); + } + + switch (state) { + case STATE_CHOOSE_SERVER: + logger->log("State: CHOOSE_SERVER"); + + // Allow changing this using a server choice dialog + // We show the dialog box only if the command-line options + // weren't set. + if (options.serverName.empty() && options.serverPort == 0) { + currentDialog = new ServerDialog(&loginData); + } else { + state = STATE_CONNECT_ACCOUNT; + + // Reset options so that cancelling or connect timeout + // will show the server dialog + options.serverName = ""; + options.serverPort = 0; + } + break; + + case STATE_CONNECT_ACCOUNT: + logger->log("State: CONNECT_ACCOUNT"); + logger->log("Trying to connect to account server..."); + accountServerConnection->connect(loginData.hostname, + loginData.port); + currentDialog = new ConnectionDialog(STATE_CHOOSE_SERVER); + break; + + case STATE_UPDATE: + logger->log("State: UPDATE"); + // TODO: Revive later + //currentDialog = new UpdaterWindow(); + state = STATE_LOADDATA; + break; + + case STATE_LOGIN: + logger->log("State: LOGIN"); + currentDialog = new LoginDialog(&loginData); + // TODO: Restore autologin + //if (!loginData.password.empty()) { + // accountLogin(&loginData); + //} + break; + + case STATE_LOADDATA: + logger->log("State: LOADDATA"); + + // Add customdata directory + ResourceManager::getInstance()->searchAndAddArchives( + "customdata/", + "zip", + false); + + // Load XML databases + EquipmentDB::load(); + ItemDB::load(); + MonsterDB::load(); + state = STATE_LOGIN; + break; + + case STATE_LOGIN_ATTEMPT: + accountLogin(&loginData); + break; + + case STATE_SWITCH_ACCOUNTSERVER: + logger->log("State: SWITCH_ACCOUNTSERVER"); + + gameServerConnection->disconnect(); + chatServerConnection->disconnect(); + accountServerConnection->disconnect(); + + state = STATE_CHOOSE_SERVER; + break; + + case STATE_SWITCH_ACCOUNTSERVER_ATTEMPT: + logger->log("State: SWITCH_ACCOUNTSERVER_ATTEMPT"); + switchAccountServer(); + break; + + case STATE_REGISTER: + logger->log("State: REGISTER"); + currentDialog = new RegisterDialog(&loginData); + break; + + case STATE_REGISTER_ATTEMPT: + accountRegister(&loginData); + break; + + case STATE_CHAR_SELECT: + logger->log("State: CHAR_SELECT"); + currentDialog = + new CharSelectDialog(&charInfo, &loginData); + + if (((CharSelectDialog*) currentDialog)-> + selectByName(options.playername)) + options.chooseDefault = true; + else + ((CharSelectDialog*) currentDialog)->selectByName( + config.getValue("lastCharacter", "")); - // Get rid of the dialog of the previous state - if (currentDialog) { - delete currentDialog; - currentDialog = NULL; - } - // State has changed, while the quitDialog was active, it might - // not be correct anymore - if (quitDialog) { - quitDialog->scheduleDelete(); - } + if (options.chooseDefault) + { + ((CharSelectDialog*) currentDialog)->action( + gcn::ActionEvent(NULL, "ok")); + options.chooseDefault = false; + } - switch (state) { - case STATE_CHOOSE_SERVER: - logger->log("State: CHOOSE_SERVER"); - - // Allow changing this using a server choice dialog - // We show the dialog box only if the command-line options - // weren't set. - if (options.serverName.empty() && options.serverPort == 0) { - currentDialog = new ServerDialog(&loginData); - } else { - state = STATE_CONNECT_ACCOUNT; - - // Reset options so that cancelling or connect timeout - // will show the server dialog - options.serverName = ""; - options.serverPort = 0; - } - break; - - case STATE_CONNECT_ACCOUNT: - logger->log("State: CONNECT_ACCOUNT"); - logger->log("Trying to connect to account server..."); - accountServerConnection->connect(loginData.hostname, - loginData.port); - currentDialog = new ConnectionDialog(STATE_CHOOSE_SERVER); - break; - - case STATE_UPDATE: - logger->log("State: UPDATE"); - // TODO: Revive later - //currentDialog = new UpdaterWindow(); - state = STATE_LOADDATA; - break; - - case STATE_LOGIN: - logger->log("State: LOGIN"); - currentDialog = new LoginDialog(&loginData); - // TODO: Restore autologin - //if (!loginData.password.empty()) { - // accountLogin(&loginData); - //} - break; - - case STATE_LOADDATA: - logger->log("State: LOADDATA"); - - // Add customdata directory - ResourceManager::getInstance()->searchAndAddArchives( - "customdata/", - "zip", - false); - - // Load XML databases - EquipmentDB::load(); - ItemDB::load(); - MonsterDB::load(); - state = STATE_LOGIN; - break; - - case STATE_LOGIN_ATTEMPT: - accountLogin(&loginData); - break; - - case STATE_SWITCH_ACCOUNTSERVER: - logger->log("State: SWITCH_ACCOUNTSERVER"); - - gameServerConnection->disconnect(); - chatServerConnection->disconnect(); - accountServerConnection->disconnect(); - - state = STATE_CHOOSE_SERVER; - break; - - case STATE_SWITCH_ACCOUNTSERVER_ATTEMPT: - logger->log("State: SWITCH_ACCOUNTSERVER_ATTEMPT"); - switchAccountServer(); - break; - - case STATE_REGISTER: - logger->log("State: REGISTER"); - currentDialog = new RegisterDialog(&loginData); - break; - - case STATE_REGISTER_ATTEMPT: - accountRegister(&loginData); - break; - - case STATE_CHAR_SELECT: - logger->log("State: CHAR_SELECT"); - currentDialog = - new CharSelectDialog(&charInfo, &loginData); - - if (((CharSelectDialog*) currentDialog)-> - selectByName(options.playername)) - options.chooseDefault = true; - else - ((CharSelectDialog*) currentDialog)->selectByName( - config.getValue("lastCharacter", "")); - - if (options.chooseDefault) - { - ((CharSelectDialog*) currentDialog)->action( - gcn::ActionEvent(NULL, "ok")); - options.chooseDefault = false; - } - - break; - - case STATE_UNREGISTER_ATTEMPT: - logger->log("State: UNREGISTER ATTEMPT"); - accountUnRegister(&loginData); - loginData.clear(); - break; - - case STATE_UNREGISTER: - logger->log("State: UNREGISTER"); - accountServerConnection->disconnect(); - currentDialog = new OkDialog("Unregister succesfull", - "Farewell, come back any time ...."); - - //The errorlistener sets the state to STATE_CHOOSE_SERVER - currentDialog->addActionListener(&errorListener); - currentDialog = NULL; // OkDialog deletes itself - break; - - case STATE_ERROR: - logger->log("State: ERROR"); - currentDialog = new OkDialog("Error", errorMessage); - currentDialog->addActionListener(&errorListener); - currentDialog = NULL; // OkDialog deletes itself - gameServerConnection->disconnect(); - chatServerConnection->disconnect(); - Net::clearHandlers(); - break; - - case STATE_CONNECT_GAME: - logger->log("State: CONNECT_GAME"); - currentDialog = new ConnectionDialog(STATE_CHAR_SELECT); - break; - - case STATE_GAME: - logger->log("Memorizing selected character %s", - player_node->getName().c_str()); - config.setValue("lastCharacter", player_node->getName()); - - Net::GameServer::connect(gameServerConnection, token); - Net::ChatServer::connect(chatServerConnection, token); - sound.fadeOutMusic(1000); + break; + + case STATE_UNREGISTER_ATTEMPT: + logger->log("State: UNREGISTER ATTEMPT"); + accountUnRegister(&loginData); + loginData.clear(); + break; + + case STATE_UNREGISTER: + logger->log("State: UNREGISTER"); + accountServerConnection->disconnect(); + currentDialog = new OkDialog("Unregister succesfull", + "Farewell, come back any time ...."); + + //The errorlistener sets the state to STATE_CHOOSE_SERVER + currentDialog->addActionListener(&errorListener); + currentDialog = NULL; // OkDialog deletes itself + break; + + case STATE_ERROR: + logger->log("State: ERROR"); + currentDialog = new OkDialog("Error", errorMessage); + currentDialog->addActionListener(&errorListener); + currentDialog = NULL; // OkDialog deletes itself + gameServerConnection->disconnect(); + chatServerConnection->disconnect(); + Net::clearHandlers(); + break; + + case STATE_CONNECT_GAME: + logger->log("State: CONNECT_GAME"); + currentDialog = new ConnectionDialog(STATE_CHAR_SELECT); + break; + + case STATE_GAME: + logger->log("Memorizing selected character %s", + player_node->getName().c_str()); + config.setValue("lastCharacter", player_node->getName()); + + Net::GameServer::connect(gameServerConnection, token); + Net::ChatServer::connect(chatServerConnection, token); + sound.fadeOutMusic(1000); #ifdef PACKAGE_VERSION - delete versionLabel; - versionLabel = NULL; + delete versionLabel; + versionLabel = NULL; #endif - currentDialog = NULL; + currentDialog = NULL; + + logger->log("State: GAME"); + game = new Game; + game->logic(); + delete game; + + //If the quitdialog didn't set the next state + if (state == STATE_GAME) + { + state = STATE_EXIT; + } + break; + + case STATE_SWITCH_CHARACTER: + logger->log("State: SWITCH_CHARACTER"); + switchCharacter(&token); + break; + + case STATE_RECONNECT_ACCOUNT: + logger->log("State: RECONNECT_ACCOUNT"); - logger->log("State: GAME"); - game = new Game; - game->logic(); - delete game; - - //If the quitdialog didn't set the next state - if (state == STATE_GAME) - { - state = STATE_EXIT; - } - break; - - case STATE_SWITCH_CHARACTER: - logger->log("State: SWITCH_CHARACTER"); - switchCharacter(&token); - break; - - case STATE_RECONNECT_ACCOUNT: - logger->log("State: RECONNECT_ACCOUNT"); - - //done with game&chat - gameServerConnection->disconnect(); - chatServerConnection->disconnect(); - - accountServerConnection->connect(loginData.hostname, - loginData.port); - break; - - case STATE_WAIT: - break; - - case STATE_EXIT: - logger->log("State: EXIT"); - logoutThenExit(); - break; - - default: - state = STATE_FORCE_QUIT; - break; + //done with game&chat + gameServerConnection->disconnect(); + chatServerConnection->disconnect(); + + accountServerConnection->connect(loginData.hostname, + loginData.port); + break; + + case STATE_WAIT: + break; + + case STATE_EXIT: + logger->log("State: EXIT"); + logoutThenExit(); + break; + + default: + state = STATE_FORCE_QUIT; + break; + } } } + + } + catch (...) + { + logger->log("Exception"); } accountServerConnection->disconnect(); @@ -1051,5 +1059,6 @@ int main(int argc, char *argv[]) exit_engine(); PHYSFS_deinit(); delete logger; + return 0; } diff --git a/src/openglgraphics.cpp b/src/openglgraphics.cpp index 375c43a0..51e99fa0 100644 --- a/src/openglgraphics.cpp +++ b/src/openglgraphics.cpp @@ -41,7 +41,6 @@ #include #include -#include #include "log.h" diff --git a/tmw.cbp b/tmw.cbp index d7f17192..0e0478a5 100644 --- a/tmw.cbp +++ b/tmw.cbp @@ -27,7 +27,6 @@ - @@ -36,12 +35,13 @@ - + + @@ -735,6 +735,16 @@