diff options
25 files changed, 615 insertions, 603 deletions
diff --git a/aethyra.cbp b/aethyra.cbp index 0ede5d07..67d8d7d2 100644 --- a/aethyra.cbp +++ b/aethyra.cbp @@ -100,6 +100,8 @@ <Unit filename="src\configuration.h" /> <Unit filename="src\effectmanager.cpp" /> <Unit filename="src\effectmanager.h" /> + <Unit filename="src\emoteshortcut.cpp" /> + <Unit filename="src\emoteshortcut.h" /> <Unit filename="src\engine.cpp" /> <Unit filename="src\engine.h" /> <Unit filename="src\equipment.cpp" /> @@ -141,6 +143,12 @@ <Unit filename="src\gui\connection.h" /> <Unit filename="src\gui\debugwindow.cpp" /> <Unit filename="src\gui\debugwindow.h" /> + <Unit filename="src\gui\emotecontainer.cpp" /> + <Unit filename="src\gui\emotecontainer.h" /> + <Unit filename="src\gui\emoteshortcutcontainer.cpp" /> + <Unit filename="src\gui\emoteshortcutcontainer.h" /> + <Unit filename="src\gui\emotewindow.cpp" /> + <Unit filename="src\gui\emotewindow.h" /> <Unit filename="src\gui\equipmentwindow.cpp" /> <Unit filename="src\gui\equipmentwindow.h" /> <Unit filename="src\gui\focushandler.cpp" /> @@ -223,12 +231,6 @@ <Unit filename="src\gui\skill.h" /> <Unit filename="src\gui\slider.cpp" /> <Unit filename="src\gui\slider.h" /> - <Unit filename="src\gui\smileycontainer.cpp" /> - <Unit filename="src\gui\smileycontainer.h" /> - <Unit filename="src\gui\smileyshortcutcontainer.cpp" /> - <Unit filename="src\gui\smileyshortcutcontainer.h" /> - <Unit filename="src\gui\smileywindow.cpp" /> - <Unit filename="src\gui\smileywindow.h" /> <Unit filename="src\gui\speechbubble.cpp" /> <Unit filename="src\gui\speechbubble.h" /> <Unit filename="src\gui\status.cpp" /> diff --git a/src/Makefile.am b/src/Makefile.am index e189b793..96be8465 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -33,6 +33,12 @@ aethyra_SOURCES = gui/widgets/dropdown.cpp \ gui/connection.h \ gui/debugwindow.cpp \ gui/debugwindow.h \ + gui/emotecontainer.cpp \ + gui/emotecontainer.h \ + gui/emoteshortcutcontainer.cpp \ + gui/emoteshortcutcontainer.h \ + gui/emotewindow.cpp \ + gui/emotewindow.h \ gui/equipmentwindow.cpp \ gui/equipmentwindow.h \ gui/focushandler.cpp \ @@ -117,12 +123,6 @@ aethyra_SOURCES = gui/widgets/dropdown.cpp \ gui/skill.h \ gui/slider.cpp \ gui/slider.h \ - gui/smileycontainer.cpp \ - gui/smileycontainer.h \ - gui/smileyshortcutcontainer.cpp \ - gui/smileyshortcutcontainer.h \ - gui/smileywindow.cpp \ - gui/smileywindow.h \ gui/speechbubble.cpp \ gui/speechbubble.h \ gui/status.cpp \ @@ -252,6 +252,8 @@ aethyra_SOURCES = gui/widgets/dropdown.cpp \ configuration.h \ effectmanager.cpp \ effectmanager.h \ + emoteshortcut.cpp \ + emoteshortcut.h \ engine.cpp \ engine.h \ equipment.cpp \ @@ -272,8 +274,6 @@ aethyra_SOURCES = gui/widgets/dropdown.cpp \ inventory.h \ item.cpp \ item.h \ - smileyshortcut.cpp \ - smileyshortcut.h \ itemshortcut.cpp \ itemshortcut.h \ joystick.cpp \ diff --git a/src/emoteshortcut.cpp b/src/emoteshortcut.cpp new file mode 100644 index 00000000..66989d44 --- /dev/null +++ b/src/emoteshortcut.cpp @@ -0,0 +1,77 @@ +/* + * Aethyra + * Copyright 2009 Aethyra Development Team + * + * This file is part of Aethyra. + * + * Aethyra 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. + * + * Aethyra 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 Aethyra; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "emoteshortcut.h" + +#include "configuration.h" +#include "localplayer.h" + +#include "utils/tostring.h" + +EmoteShortcut::EmoteShortcut *emoteShortcut; + +EmoteShortcut::EmoteShortcut(): + mEmoteSelected(0) +{ + for (int i = 0; i < SHORTCUT_EMOTES; i++) + { + mEmotes[i] = i + 1; + } + load(); +} + +EmoteShortcut::~EmoteShortcut() +{ + save(); +} + +void EmoteShortcut::load() +{ + for (int i = 0; i < SHORTCUT_EMOTES; i++) + { + int emoteId = (int) config.getValue("emoteshortcut" + toString(i), i + 1); + + if (emoteId) + { + mEmotes[i] = emoteId; + } + } +} + +void EmoteShortcut::save() +{ + for (int i = 0; i < SHORTCUT_EMOTES; i++) + { + const int emoteId = mEmotes[i] ? mEmotes[i] : 0; + config.setValue("emoteshortcut" + toString(i), emoteId); + } +} + +void EmoteShortcut::useEmote(int index) +{ + if ((index > 0) && (index <= SHORTCUT_EMOTES)) + { + if (mEmotes[index - 1] > 0) + { + player_node->emote(mEmotes[index - 1]); + } + } +} diff --git a/src/emoteshortcut.h b/src/emoteshortcut.h new file mode 100644 index 00000000..14162f73 --- /dev/null +++ b/src/emoteshortcut.h @@ -0,0 +1,125 @@ +/* + * Aethyra + * Copyright 2009 Aethyra Development Team + * + * This file is part of Aethyra. + * + * Aethyra 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. + * + * Aethyra 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 Aethyra; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _AETHYRA_EMOTESHORTCUT_H__ +#define _AETHYRA_EMOTESHORTCUT_H__ + +#define SHORTCUT_EMOTES 12 + +/** + * The class which keeps track of the emote shortcuts. + */ +class EmoteShortcut +{ + public: + /** + * Constructor. + */ + EmoteShortcut(); + + /** + * Destructor. + */ + ~EmoteShortcut(); + + /** + * Load the configuration information. + */ + void load(); + + /** + * Returns the shortcut Emote ID specified by the index. + * + * @param index Index of the shortcut Emote. + */ + int getEmote(int index) const + { return mEmotes[index]; } + + /** + * Returns the amount of shortcut Emotes. + */ + int getEmoteCount() const + { return SHORTCUT_EMOTES; } + + /** + * Returns the emote ID that is currently selected. + */ + int getEmoteSelected() const + { return mEmoteSelected; } + + /** + * Adds the selected emote ID to the emotes specified by the index. + * + * @param index Index of the emotes. + */ + void setEmote(int index) + { mEmotes[index] = mEmoteSelected; } + + /** + * Adds a emoticon to the emotes store specified by the index. + * + * @param index Index of the emote. + * @param emoteId ID of the emote. + */ + void setEmotes(int index, int emoteId) + { mEmotes[index] = emoteId; } + + /** + * Set the Emote that is selected. + * + * @param emoteId The ID of the emote that is to be assigned. + */ + void setEmoteSelected(int emoteId) + { mEmoteSelected = emoteId; } + + /** + * A flag to check if the Emote is selected. + */ + bool isEmoteSelected() + { return mEmoteSelected; } + + /** + * Remove a Emote from the shortcut. + */ + void removeEmote(int index) + { mEmotes[index] = 0; } + + /** + * Try to use the Emote specified by the index. + * + * @param index Index of the emote shortcut. + */ + void useEmote(int index); + + private: + /** + * Save the configuration information. + */ + void save(); + + int mEmotes[SHORTCUT_EMOTES]; /**< The emote stored. */ + int mEmoteSelected; /**< The emote held by cursor. */ + +}; + +extern EmoteShortcut *emoteShortcut; + +#endif diff --git a/src/game.cpp b/src/game.cpp index 18169cd0..753d7afa 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -35,7 +35,6 @@ #include "flooritemmanager.h" #include "graphics.h" #include "itemshortcut.h" -#include "smileyshortcut.h" #include "joystick.h" #include "keyboardconfig.h" #include "localplayer.h" @@ -49,15 +48,16 @@ #include "gui/chat.h" #include "gui/confirm_dialog.h" #include "gui/debugwindow.h" +#include "gui/emoteshortcut.h" +#include "gui/emoteshortcutcontainer.h" +#include "gui/emotewindow.h" #include "gui/equipmentwindow.h" #include "gui/gui.h" #include "gui/help.h" #include "gui/inventorywindow.h" -#include "gui/smileywindow.h" #include "gui/shortcutwindow.h" #include "gui/shortcutcontainer.h" #include "gui/itemshortcutcontainer.h" -#include "gui/smileyshortcutcontainer.h" #include "gui/menuwindow.h" #include "gui/minimap.h" #include "gui/ministatus.h" @@ -118,7 +118,7 @@ BuyDialog *buyDialog; SellDialog *sellDialog; BuySellDialog *buySellDialog; InventoryWindow *inventoryWindow; -SmileyWindow *smileyWindow; +EmoteWindow *emoteWindow; NpcListDialog *npcListDialog; NpcTextDialog *npcTextDialog; SkillDialog *skillDialog; @@ -129,7 +129,7 @@ TradeWindow *tradeWindow; HelpWindow *helpWindow; DebugWindow *debugWindow; ShortcutWindow *itemShortcutWindow; -ShortcutWindow *smileyShortcutWindow; +ShortcutWindow *emoteShortcutWindow; BeingManager *beingManager = NULL; FloorItemManager *floorItemManager = NULL; @@ -202,7 +202,7 @@ void createGuiWindows(Network *network) sellDialog = new SellDialog(network); buySellDialog = new BuySellDialog(); inventoryWindow = new InventoryWindow(); - smileyWindow = new SmileyWindow(); + emoteWindow = new EmoteWindow(); npcTextDialog = new NpcTextDialog(); npcListDialog = new NpcListDialog(); skillDialog = new SkillDialog(); @@ -213,7 +213,7 @@ void createGuiWindows(Network *network) helpWindow = new HelpWindow(); debugWindow = new DebugWindow(); itemShortcutWindow = new ShortcutWindow("ItemShortcut",new ItemShortcutContainer); - smileyShortcutWindow = new ShortcutWindow("SmileyShortcut",new SmileyShortcutContainer); + emoteShortcutWindow = new ShortcutWindow("emoteShortcut",new EmoteShortcutContainer); // Set initial window visibility chatWindow->setVisible((bool) config.getValue( @@ -227,8 +227,8 @@ void createGuiWindows(Network *network) menuWindow->getWindowName() + "Visible", true)); itemShortcutWindow->setVisible((bool) config.getValue( itemShortcutWindow->getWindowName() + "Visible", true)); - smileyShortcutWindow->setVisible((bool) config.getValue( - smileyShortcutWindow->getWindowName() + "Visible", true)); + emoteShortcutWindow->setVisible((bool) config.getValue( + emoteShortcutWindow->getWindowName() + "Visible", true)); if (config.getValue("logToChat", 0)) { @@ -250,7 +250,7 @@ void destroyGuiWindows() delete sellDialog; delete buySellDialog; delete inventoryWindow; - delete smileyWindow; + delete emoteWindow; delete npcListDialog; delete npcTextDialog; delete skillDialog; @@ -261,7 +261,7 @@ void destroyGuiWindows() delete helpWindow; delete debugWindow; delete itemShortcutWindow; - delete smileyShortcutWindow; + delete emoteShortcutWindow; } Game::Game(Network *network): @@ -545,14 +545,14 @@ void Game::handleInput() } } - // Smilie - if (keyboard.isKeyActive(keyboard.KEY_SMILIE)) + // Mode switch to emotes + if (keyboard.isKeyActive(keyboard.KEY_EMOTE)) { // Emotions - int emotion = keyboard.getKeySmilieOffset(event.key.keysym.sym); + int emotion = keyboard.getKeyEmoteOffset(event.key.keysym.sym); if (emotion) { - smileyShortcut->useSmiley(emotion); + emoteShortcut->useEmote(emotion); used = true; return; } @@ -655,13 +655,13 @@ void Game::handleInput() if (!tradeWindow->isVisible()) { // Checks if any item shortcut is pressed. - for (int i = KeyboardConfig::KEY_SHORTCUT_0; - i <= KeyboardConfig::KEY_SHORTCUT_9; + for (int i = KeyboardConfig::KEY_SHORTCUT_1; + i <= KeyboardConfig::KEY_SHORTCUT_12; i++) { if (tKey == i && !used) { itemShortcut->useItem( - i - KeyboardConfig::KEY_SHORTCUT_0); + i - KeyboardConfig::KEY_SHORTCUT_1); break; } } @@ -708,7 +708,7 @@ void Game::handleInput() { statusWindow->setVisible(false); inventoryWindow->setVisible(false); - smileyWindow->setVisible(false); + emoteWindow->setVisible(false); skillDialog->setVisible(false); setupWindow->setVisible(false); equipmentWindow->setVisible(false); @@ -745,11 +745,11 @@ void Game::handleInput() case KeyboardConfig::KEY_WINDOW_DEBUG: requestedWindow = debugWindow; break; - case KeyboardConfig::KEY_WINDOW_ALLSMILEY: - requestedWindow = smileyWindow; + case KeyboardConfig::KEY_WINDOW_EMOTE: + requestedWindow = emoteWindow; break; - case KeyboardConfig::KEY_WINDOW_SMILEY_SHORTCUT: - requestedWindow = smileyShortcutWindow; + case KeyboardConfig::KEY_WINDOW_EMOTE_SHORTCUT: + requestedWindow = emoteShortcutWindow; break; } } diff --git a/src/gui/smileycontainer.cpp b/src/gui/emotecontainer.cpp index f8f57c45..c3e20c41 100644 --- a/src/gui/smileycontainer.cpp +++ b/src/gui/emotecontainer.cpp @@ -1,33 +1,33 @@ /* - * The Mana World - * Copyright 2004 The Mana World Development Team + * Aethyra + * Copyright 2009 Aethyra Development Team * - * This file is part of The Mana World. + * This file is part of Aethyra. * - * The Mana World is free software; you can redistribute it and/or modify + * Aethyra 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, + * Aethyra 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 + * along with Aethyra; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "smileycontainer.h" - #include <guichan/mouseinput.hpp> #include <guichan/selectionlistener.hpp> +#include "emotecontainer.h" +#include "emoteshortcut.h" + #include "../configuration.h" #include "../graphics.h" #include "../log.h" -#include "../smileyshortcut.h" #include "../resources/image.h" #include "../resources/iteminfo.h" @@ -36,45 +36,45 @@ #include "../utils/gettext.h" #include "../utils/tostring.h" -const int SmileyContainer::gridWidth = 34; // emote icon width + 4 -const int SmileyContainer::gridHeight = 36; // emote icon height + 4 +const int EmoteContainer::gridWidth = 34; // emote icon width + 4 +const int EmoteContainer::gridHeight = 36; // emote icon height + 4 static const int NO_EMOTE = -1; -SmileyContainer::SmileyContainer(): +EmoteContainer::EmoteContainer(): mSelectedEmoteIndex(NO_EMOTE) { ResourceManager *resman = ResourceManager::getInstance(); - mSmileyImg = resman->getImageSet("graphics/sprites/emotions.png", 30, 32); - if (!mSmileyImg) logger->error(_("Unable to load emotions")); + mEmoteImg = resman->getImageSet("graphics/sprites/emotions.png", 30, 32); + if (!mEmoteImg) logger->error(_("Unable to load emotions")); mSelImg = resman->getImage("graphics/gui/selection.png"); if (!mSelImg) logger->error(_("Unable to load selection.png")); mSelImg->setAlpha(config.getValue("guialpha", 0.8)); - mMaxSmiley = mSmileyImg->size(); + mMaxEmote = mEmoteImg->size(); addMouseListener(this); addWidgetListener(this); } -SmileyContainer::~SmileyContainer() +EmoteContainer::~EmoteContainer() { - if (mSmileyImg) + if (mEmoteImg) { - mSmileyImg->decRef(); - mSmileyImg=NULL; + mEmoteImg->decRef(); + mEmoteImg = NULL; } if (!mSelImg) { mSelImg->decRef(); - mSelImg=NULL; + mSelImg = NULL; } } -void SmileyContainer::draw(gcn::Graphics *graphics) +void EmoteContainer::draw(gcn::Graphics *graphics) { int columns = getWidth() / gridWidth; @@ -84,65 +84,64 @@ void SmileyContainer::draw(gcn::Graphics *graphics) columns = 1; } - for (int i = 0; i < mMaxSmiley ; i++) + for (int i = 0; i < mMaxEmote ; i++) { - int itemX = ((i) % columns) * gridWidth; - int itemY = ((i) / columns) * gridHeight; + int emoteX = ((i) % columns) * gridWidth; + int emoteY = ((i) / columns) * gridHeight; - - // Draw item icon + // Draw emote icon static_cast<Graphics*>(graphics)->drawImage( - mSmileyImg->get(i), itemX, itemY); + mEmoteImg->get(i), emoteX, emoteY); // Draw selection image below selected item if (mSelectedEmoteIndex == i) { static_cast<Graphics*>(graphics)->drawImage( - mSelImg, itemX, itemY); + mSelImg, emoteX, emoteY); } } } -void SmileyContainer::widgetResized(const gcn::Event &event) +void EmoteContainer::widgetResized(const gcn::Event &event) { recalculateHeight(); } -void SmileyContainer::recalculateHeight() +void EmoteContainer::recalculateHeight() { int cols = getWidth() / gridWidth; if (cols < 1) cols = 1; - const int rows = (mMaxSmiley / cols) + (mMaxSmiley % cols > 0 ? 1 : 0); + const int rows = (mMaxEmote / cols) + (mMaxEmote % cols > 0 ? 1 : 0); const int height = rows * gridHeight + 8; if (height != getHeight()) setHeight(height); } -int SmileyContainer::getSelectedSmiley() +int EmoteContainer::getSelectedEmote() { if (mSelectedEmoteIndex == NO_EMOTE) return 0; - return 1+mSelectedEmoteIndex; + return 1 + mSelectedEmoteIndex; } -void SmileyContainer::selectNone() +void EmoteContainer::selectNone() { setSelectedEmoteIndex(NO_EMOTE); } -void SmileyContainer::setSelectedEmoteIndex(int index) +void EmoteContainer::setSelectedEmoteIndex(int index) { - if (index < 0 || index >= mMaxSmiley ) + if (index < 0 || index >= mMaxEmote ) mSelectedEmoteIndex = NO_EMOTE; else mSelectedEmoteIndex = index; } -void SmileyContainer::distributeValueChangedEvent() +void EmoteContainer::distributeValueChangedEvent() { gcn::SelectionEvent event(this); std::list<gcn::SelectionListener*>::iterator i_end = mListeners.end(); @@ -154,7 +153,7 @@ void SmileyContainer::distributeValueChangedEvent() } } -void SmileyContainer::mousePressed(gcn::MouseEvent &event) +void EmoteContainer::mousePressed(gcn::MouseEvent &event) { int button = event.getButton(); if (button == gcn::MouseEvent::LEFT || button == gcn::MouseEvent::RIGHT) @@ -163,10 +162,10 @@ void SmileyContainer::mousePressed(gcn::MouseEvent &event) int mx = event.getX(); int my = event.getY(); int index = mx / gridWidth + ((my / gridHeight) * columns); - if (index <mMaxSmiley) + if (index < mMaxEmote) { setSelectedEmoteIndex(index); - smileyShortcut->setSmileySelected(index+1); + emoteShortcut->setEmoteSelected(index + 1); } } } diff --git a/src/gui/smileycontainer.h b/src/gui/emotecontainer.h index 88ca0b48..f5922a9c 100644 --- a/src/gui/smileycontainer.h +++ b/src/gui/emotecontainer.h @@ -1,26 +1,26 @@ /* - * The Mana World - * Copyright 2004 The Mana World Development Team + * Aethyra + * Copyright 2009 Aethyra Development Team * - * This file is part of The Mana World. + * This file is part of Aethyra. * - * The Mana World is free software; you can redistribute it and/or modify + * Aethyra 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, + * Aethyra 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 + * along with Aethyra; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef _TMW_SMILEYCONTAINER_H__ -#define _TMW_SMILEYCONTAINER_H__ +#ifndef _AETHYRA_EMOTECONTAINER_H__ +#define _AETHYRA_EMOTECONTAINER_H__ #include <list> @@ -28,9 +28,10 @@ #include <guichan/widget.hpp> #include <guichan/widgetlistener.hpp> -#include "../resources/imageset.h" #include "../guichanfwd.h" +#include "../resources/imageset.h" + class Image; class Inventory; class Emote; @@ -44,20 +45,20 @@ namespace gcn { * * \ingroup GUI */ -class SmileyContainer : public gcn::Widget, - public gcn::MouseListener, - public gcn::WidgetListener +class EmoteContainer : public gcn::Widget, + public gcn::MouseListener, + public gcn::WidgetListener { public: /** * Constructor. Initializes the graphic. */ - SmileyContainer(); + EmoteContainer(); /** * Destructor. */ - virtual ~SmileyContainer(); + virtual ~EmoteContainer(); /** * Draws the items. @@ -77,7 +78,7 @@ class SmileyContainer : public gcn::Widget, /** * Returns the selected item. */ - int getSelectedSmiley(); + int getSelectedEmote(); /** * Sets selected item to NULL. @@ -124,11 +125,11 @@ class SmileyContainer : public gcn::Widget, */ void distributeValueChangedEvent(void); - ImageSet *mSmileyImg; + ImageSet *mEmoteImg; Image *mSelImg; int mSelectedEmoteIndex; - int mMaxSmiley; + int mMaxEmote; std::list<gcn::SelectionListener*> mListeners; diff --git a/src/gui/emoteshortcutcontainer.cpp b/src/gui/emoteshortcutcontainer.cpp new file mode 100644 index 00000000..5e984dd5 --- /dev/null +++ b/src/gui/emoteshortcutcontainer.cpp @@ -0,0 +1,192 @@ +/* + * Aethyra + * Copyright 2009 Aethyra Development Team + * + * This file is part of Aethyra. + * + * Aethyra 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. + * + * Aethyra 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 Aethyra; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "emoteshortcutcontainer.h" + +#include "../emoteshortcut.h" +#include "../graphics.h" +#include "../inventory.h" +#include "../item.h" +#include "../itemshortcut.h" +#include "../keyboardconfig.h" +#include "../localplayer.h" +#include "../log.h" + +#include "../resources/image.h" +#include "../resources/resourcemanager.h" + +#include "../utils/gettext.h" +#include "../utils/tostring.h" + +EmoteShortcutContainer::EmoteShortcutContainer(): + mEmoteClicked(false), + mEmoteMoved(0) +{ + mGridWidth = 1, + mGridHeight = 1, + addMouseListener(this); + addWidgetListener(this); + + ResourceManager *resman = ResourceManager::getInstance(); + + mBackgroundImg = resman->getImage("graphics/gui/item_shortcut_bgr.png"); + mEmoteImg = resman->getImageSet("graphics/sprites/emotions.png", 30, 32); + if (!mEmoteImg) logger->error(_("Unable to load emotions")); + + mMaxItems = emoteShortcut->getEmoteCount(); + + mBoxHeight = mBackgroundImg->getHeight(); + mBoxWidth = mBackgroundImg->getWidth(); +} + +EmoteShortcutContainer::~EmoteShortcutContainer() +{ + mBackgroundImg->decRef(); + if (mEmoteImg) + { + mEmoteImg->decRef(); + mEmoteImg=NULL; + } +} + +void EmoteShortcutContainer::draw(gcn::Graphics *graphics) +{ + Graphics *g = static_cast<Graphics*>(graphics); + + //graphics->setFont(getFont()); + + for (int i = 0; i < mMaxItems; i++) + { + const int emoteX = (i % mGridWidth) * mBoxWidth; + const int emoteY = (i / mGridWidth) * mBoxHeight; + + g->drawImage(mBackgroundImg, emoteX, emoteY); + + // Draw emote keyboard shortcut. + const char *key = SDL_GetKeyName( + (SDLKey) keyboard.getKeyValue(keyboard.KEY_EMOTE_1 + i)); + graphics->setColor(0x000000); + g->drawText(key, emoteX + 2, emoteY + 2, gcn::Graphics::LEFT); + + if (emoteShortcut->getEmote(i)) + { + static_cast<Graphics*>(graphics)->drawImage( + mEmoteImg->get(emoteShortcut->getEmote(i) - 1), emoteX + 2, emoteY + 10); + } + + } + if (mEmoteMoved) + { + // Draw the emote image being dragged by the cursor. + Image* image = mEmoteImg->get(mEmoteMoved-1); + if (image) + { + const int tPosX = mCursorPosX - (image->getWidth() / 2); + const int tPosY = mCursorPosY - (image->getHeight() / 2); + + g->drawImage(image, tPosX, tPosY); + } + } +} + +void EmoteShortcutContainer::mouseDragged(gcn::MouseEvent &event) +{ + if (event.getButton() == gcn::MouseEvent::LEFT) + { + if (!mEmoteMoved && mEmoteClicked) + { + const int index = getIndexFromGrid(event.getX(), event.getY()); + const int emoteId = emoteShortcut->getEmote(index); + + if (index == -1) + { + return; + } + + if (emoteId) + { + mEmoteMoved = emoteId; + emoteShortcut->removeEmote(index); + } + } + if (mEmoteMoved) + { + mCursorPosX = event.getX(); + mCursorPosY = event.getY(); + } + } +} + +void EmoteShortcutContainer::mousePressed(gcn::MouseEvent &event) +{ + const int index = getIndexFromGrid(event.getX(), event.getY()); + + if (index == -1) + { + return; + } + + // Stores the selected emote if there is one. + if (emoteShortcut->isEmoteSelected()) + { + emoteShortcut->setEmote(index); + emoteShortcut->setEmoteSelected(0); + } + else if (emoteShortcut->getEmote(index)) + { + mEmoteClicked = true; + } +} + +void EmoteShortcutContainer::mouseReleased(gcn::MouseEvent &event) +{ + if (event.getButton() == gcn::MouseEvent::LEFT) + { + const int index = getIndexFromGrid(event.getX(), event.getY()); + + if (emoteShortcut->isEmoteSelected()) + { + emoteShortcut->setEmoteSelected(0); + } + + if (index == -1) + { + mEmoteMoved = 0; + return; + } + + if (mEmoteMoved) + { + emoteShortcut->setEmotes(index, mEmoteMoved); + mEmoteMoved = 0; + } + else if (emoteShortcut->getEmote(index) && mEmoteClicked) + { + emoteShortcut->useEmote(index + 1); + } + + if (mEmoteClicked) + { + mEmoteClicked = false; + } + } +} + diff --git a/src/gui/smileyshortcutcontainer.h b/src/gui/emoteshortcutcontainer.h index 55df6124..5b3f61cd 100644 --- a/src/gui/smileyshortcutcontainer.h +++ b/src/gui/emoteshortcutcontainer.h @@ -1,56 +1,56 @@ /* - * The Mana World - * Copyright 2007 The Mana World Development Team + * Aethyra + * Copyright 2009 Aethyra Development Team * - * This file is part of The Mana World. + * This file is part of Aethyra. * - * The Mana World is free software; you can redistribute it and/or modify + * Aethyra 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, + * Aethyra 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 + * along with Aethyra; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef _TMW_SMILEYSHORTCUTCONTAINER_H__ -#define _TMW_SMILEYSHORTCUTCONTAINER_H__ +#ifndef _AETHYRA_EMOTESHORTCUTCONTAINER_H__ +#define _AETHYRA_EMOTESHORTCUTCONTAINER_H__ #include <guichan/mouselistener.hpp> #include <guichan/widget.hpp> #include <guichan/widgetlistener.hpp> -#include "../resources/imageset.h" +#include "shortcutcontainer.h" + #include "../guichanfwd.h" -#include "shortcutcontainer.h" +#include "../resources/imageset.h" class Image; -class Item; /** - * A smiley shortcut container. Used to quickly use items. + * An emote shortcut container. Used to quickly use emoticons. * * \ingroup GUI */ -class SmileyShortcutContainer : public ShortcutContainer +class EmoteShortcutContainer : public ShortcutContainer { public: /** * Constructor. Initializes the graphic. */ - SmileyShortcutContainer(); + EmoteShortcutContainer(); /** * Destructor. */ - virtual ~SmileyShortcutContainer(); + virtual ~EmoteShortcutContainer(); /** * Draws the items. @@ -73,10 +73,10 @@ class SmileyShortcutContainer : public ShortcutContainer void mouseReleased(gcn::MouseEvent &event); private: - ImageSet *mSmileyImg; + ImageSet *mEmoteImg; - bool mSmileyClicked; - int mSmileyMoved; + bool mEmoteClicked; + int mEmoteMoved; }; #endif diff --git a/src/gui/smileywindow.cpp b/src/gui/emotewindow.cpp index e3e821ff..af9648ef 100644 --- a/src/gui/smileywindow.cpp +++ b/src/gui/emotewindow.cpp @@ -1,22 +1,22 @@ /* - * The Mana World - * Copyright 2004 The Mana World Development Team + * Aethyra + * Copyright 2009 Aethyra Development Team * - * This file is part of The Mana World. + * This file is part of Aethyra. * - * The Mana World is free software; you can redistribute it and/or modify + * Aethyra 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, + * Aethyra 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 + * along with Aethyra; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include <string> @@ -25,8 +25,8 @@ #include "button.h" #include "gui.h" -#include "smileywindow.h" -#include "smileycontainer.h" +#include "emotewindow.h" +#include "emotecontainer.h" #include "scrollarea.h" #include "../localplayer.h" @@ -34,7 +34,7 @@ #include "../utils/gettext.h" #include "../utils/tostring.h" -SmileyWindow::SmileyWindow(): +EmoteWindow::EmoteWindow(): Window(_("Emote")) { setWindowName(_("Emote")); @@ -45,7 +45,7 @@ SmileyWindow::SmileyWindow(): mUseButton = new Button(_("Use"), "use", this); - mEmotes = new SmileyContainer(); + mEmotes = new EmoteContainer(); mEmotes->addSelectionListener(this); mInvenScroll = new ScrollArea(mEmotes); @@ -61,9 +61,9 @@ SmileyWindow::SmileyWindow(): loadWindowState(); } -void SmileyWindow::action(const gcn::ActionEvent &event) +void EmoteWindow::action(const gcn::ActionEvent &event) { - int emote = mEmotes->getSelectedSmiley(); + int emote = mEmotes->getSelectedEmote(); if (!emote) return; @@ -72,7 +72,7 @@ void SmileyWindow::action(const gcn::ActionEvent &event) } -void SmileyWindow::draw() +void EmoteWindow::draw() { const gcn::Rectangle &area = getChildrenArea(); const int width = area.width; @@ -86,14 +86,14 @@ void SmileyWindow::draw() setMinHeight(130); } -void SmileyWindow::widgetResized(const gcn::Event &event) +void EmoteWindow::widgetResized(const gcn::Event &event) { Window::widgetResized(event); draw(); } -int SmileyWindow::getSelectedSmiley() const +int EmoteWindow::getSelectedEmote() const { - return mEmotes->getSelectedSmiley(); + return mEmotes->getSelectedEmote(); } diff --git a/src/gui/smileywindow.h b/src/gui/emotewindow.h index db27fcbd..a382e37d 100644 --- a/src/gui/smileywindow.h +++ b/src/gui/emotewindow.h @@ -1,26 +1,26 @@ /* - * The Mana World - * Copyright 2004 The Mana World Development Team + * Aethyra + * Copyright 2009 Aethyra Development Team * - * This file is part of The Mana World. + * This file is part of Aethyra. * - * The Mana World is free software; you can redistribute it and/or modify + * Aethyra 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, + * Aethyra 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 + * along with Aethyra; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef _TMW_SMILEYWINDOW_H -#define _TMW_SMILEYWINDOW_H +#ifndef _AETHYRA_EMOTEWINDOW_H +#define _AETHYRA_EMOTEWINDOW_H #include <guichan/actionlistener.hpp> #include <guichan/selectionlistener.hpp> @@ -30,22 +30,21 @@ #include "../guichanfwd.h" -class Item; -class SmileyContainer; +class EmoteContainer; /** - * smiley dialog. + * Emote dialog. * * \ingroup Interface */ -class SmileyWindow : public Window, gcn::ActionListener, +class EmoteWindow : public Window, gcn::ActionListener, gcn::SelectionListener { public: /** * Constructor. */ - SmileyWindow(); + EmoteWindow(); /** * Called when receiving actions from the widgets. @@ -55,7 +54,7 @@ class SmileyWindow : public Window, gcn::ActionListener, /** * Returns the selected item. */ - int getSelectedSmiley() const; + int getSelectedEmote() const; /** * Updates window drawing. @@ -69,12 +68,12 @@ class SmileyWindow : public Window, gcn::ActionListener, private: - SmileyContainer *mEmotes; + EmoteContainer *mEmotes; gcn::Button *mUseButton; gcn::ScrollArea *mInvenScroll; }; -extern SmileyWindow *smileyWindow; +extern EmoteWindow *emoteWindow; #endif diff --git a/src/gui/itemshortcutcontainer.cpp b/src/gui/itemshortcutcontainer.cpp index b576e843..7e2eeac0 100644 --- a/src/gui/itemshortcutcontainer.cpp +++ b/src/gui/itemshortcutcontainer.cpp @@ -50,8 +50,8 @@ ItemShortcutContainer::ItemShortcutContainer(): mBackgroundImg->setAlpha(config.getValue("guialpha", 0.8)); - mBoxHeight = 42; - mBoxWidth = 36; + mBoxHeight = mBackgroundImg->getHeight(); + mBoxWidth = mBackgroundImg->getWidth(); } ItemShortcutContainer::~ItemShortcutContainer() @@ -89,7 +89,7 @@ ItemShortcutContainer::draw(gcn::Graphics *graphics) // Draw item keyboard shortcut. const char *key = SDL_GetKeyName( - (SDLKey) keyboard.getKeyValue(keyboard.KEY_SHORTCUT_0 + i)); + (SDLKey) keyboard.getKeyValue(keyboard.KEY_SHORTCUT_1 + i)); graphics->setColor(0x000000); g->drawText(key, itemX + 2, itemY + 2, gcn::Graphics::LEFT); diff --git a/src/gui/menuwindow.cpp b/src/gui/menuwindow.cpp index 99eaca34..2a175a61 100644 --- a/src/gui/menuwindow.cpp +++ b/src/gui/menuwindow.cpp @@ -33,7 +33,7 @@ extern Window *chatWindow; extern Window *equipmentWindow; extern Window *inventoryWindow; extern Window *itemShortcutWindow; -extern Window *smileyWindow; +extern Window *emoteWindow; extern Window *setupWindow; extern Window *skillDialog; extern Window *statusWindow; @@ -120,7 +120,7 @@ void MenuWindowListener::action(const gcn::ActionEvent &event) } else if (event.getId() == _("Emote")) { - window = smileyWindow; + window = emoteWindow; } else if (event.getId() == _("Setup")) { diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp index bcffbae0..66f15f03 100644 --- a/src/gui/setup.cpp +++ b/src/gui/setup.cpp @@ -43,8 +43,8 @@ extern Window *minimap; extern Window *skillDialog; extern Window *statusWindow; extern Window *itemShortcutWindow; -extern Window *smileyShortcutWindow; -extern Window *smileyWindow; +extern Window *emoteShortcutWindow; +extern Window *emoteWindow; extern Window *tradeWindow; Setup::Setup(): @@ -138,8 +138,8 @@ void Setup::action(const gcn::ActionEvent &event) helpWindow->resetToDefaultSize(); skillDialog->resetToDefaultSize(); itemShortcutWindow->resetToDefaultSize(); - smileyShortcutWindow->resetToDefaultSize(); - smileyWindow->resetToDefaultSize(); + emoteShortcutWindow->resetToDefaultSize(); + emoteWindow->resetToDefaultSize(); tradeWindow->resetToDefaultSize(); } } diff --git a/src/gui/setup.h b/src/gui/setup.h index fd200f4c..1ad93cac 100644 --- a/src/gui/setup.h +++ b/src/gui/setup.h @@ -53,8 +53,7 @@ class Setup : public Window, public gcn::ActionListener /** * Event handling method. */ - void - action(const gcn::ActionEvent &event); + void action(const gcn::ActionEvent &event); private: std::list<SetupTab*> mTabs; diff --git a/src/gui/shortcutcontainer.cpp b/src/gui/shortcutcontainer.cpp index 32d7c6af..88d9bb22 100644 --- a/src/gui/shortcutcontainer.cpp +++ b/src/gui/shortcutcontainer.cpp @@ -43,7 +43,8 @@ ShortcutContainer::ShortcutContainer(): void ShortcutContainer::widgetResized(const gcn::Event &event) { mGridWidth = getWidth() / mBoxWidth; - if (mGridWidth < 1) { + if (mGridWidth < 1) + { mGridWidth = 1; } @@ -51,7 +52,8 @@ void ShortcutContainer::widgetResized(const gcn::Event &event) (mMaxItems % mGridWidth > 0 ? 1 : 0)) * mBoxHeight); mGridHeight = getHeight() / mBoxHeight; - if (mGridHeight < 1) { + if (mGridHeight < 1) + { mGridHeight = 1; } } @@ -61,7 +63,8 @@ ShortcutContainer::getIndexFromGrid(int pointX, int pointY) const { const gcn::Rectangle tRect = gcn::Rectangle( 0, 0, mGridWidth * mBoxWidth, mGridHeight * mBoxHeight); - if (!tRect.isPointInRect(pointX, pointY)) { + if (!tRect.isPointInRect(pointX, pointY)) + { return -1; } const int index = ((pointY / mBoxHeight) * mGridWidth) + diff --git a/src/gui/shortcutcontainer.h b/src/gui/shortcutcontainer.h index ebc0a9fc..9d0584d3 100644 --- a/src/gui/shortcutcontainer.h +++ b/src/gui/shortcutcontainer.h @@ -29,7 +29,6 @@ #include "../guichanfwd.h" class Image; -class Item; /** * An item shortcut container. Used to quickly use items. @@ -54,7 +53,7 @@ class ShortcutContainer : public gcn::Widget, /** * Draws the items. */ - virtual void draw(gcn::Graphics *graphics)=0; + virtual void draw(gcn::Graphics *graphics) = 0; /** * Invoked when a widget changes its size. This is used to determine @@ -65,17 +64,17 @@ class ShortcutContainer : public gcn::Widget, /** * Handles mouse when dragged. */ - virtual void mouseDragged(gcn::MouseEvent &event)=0; + virtual void mouseDragged(gcn::MouseEvent &event) = 0; /** * Handles mouse when pressed. */ - virtual void mousePressed(gcn::MouseEvent &event)=0; + virtual void mousePressed(gcn::MouseEvent &event) = 0; /** * Handles mouse release. */ - virtual void mouseReleased(gcn::MouseEvent &event)=0; + virtual void mouseReleased(gcn::MouseEvent &event) = 0; virtual int getMaxItems() { return mMaxItems; } diff --git a/src/gui/shortcutwindow.h b/src/gui/shortcutwindow.h index b5a23c2c..9ac1a52a 100644 --- a/src/gui/shortcutwindow.h +++ b/src/gui/shortcutwindow.h @@ -60,6 +60,6 @@ class ShortcutWindow : public Window }; extern ShortcutWindow *itemShortcutWindow; -extern ShortcutWindow *smileyShortcutWindow; +extern ShortcutWindow *emoteShortcutWindow; #endif diff --git a/src/gui/smileyshortcutcontainer.cpp b/src/gui/smileyshortcutcontainer.cpp deleted file mode 100644 index c3cd056d..00000000 --- a/src/gui/smileyshortcutcontainer.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/* - * The Mana World - * Copyright 2007 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 - */ - -#include "smileyshortcutcontainer.h" - -#include "../graphics.h" -#include "../inventory.h" -#include "../item.h" -#include "../itemshortcut.h" -#include "../smileyshortcut.h" -#include "../keyboardconfig.h" -#include "../localplayer.h" -#include "../log.h" - - -#include "../resources/image.h" -#include "../resources/resourcemanager.h" - -#include "../utils/gettext.h" -#include "../utils/tostring.h" - -SmileyShortcutContainer::SmileyShortcutContainer(): - mSmileyClicked(false), - mSmileyMoved(0) -{ - mGridWidth = 1, - mGridHeight = 1, - addMouseListener(this); - addWidgetListener(this); - - ResourceManager *resman = ResourceManager::getInstance(); - - mBackgroundImg = resman->getImage("graphics/gui/item_shortcut_bgr.png"); - mSmileyImg = resman->getImageSet("graphics/sprites/emotions.png", 30, 32); - if (!mSmileyImg) logger->error(_("Unable to load emotions")); - - mMaxItems = smileyShortcut->getSmileyCount(); - - mBoxHeight = 42; - mBoxWidth = 36; -} - -SmileyShortcutContainer::~SmileyShortcutContainer() -{ - mBackgroundImg->decRef(); - if (mSmileyImg) - { - mSmileyImg->decRef(); - mSmileyImg=NULL; - } - -} - -void -SmileyShortcutContainer::draw(gcn::Graphics *graphics) -{ - Graphics *g = static_cast<Graphics*>(graphics); - - graphics->setFont(getFont()); - - for (int i = 0; i < mMaxItems; i++) - { - const int itemX = (i % mGridWidth) * mBoxWidth; - const int itemY = (i / mGridWidth) * mBoxHeight; - - g->drawImage(mBackgroundImg, itemX, itemY); - - // Draw item keyboard shortcut. - const char *key = SDL_GetKeyName( - (SDLKey) keyboard.getKeyValue(keyboard.KEY_SMILEY_1 + i)); - graphics->setColor(0x000000); - g->drawText(key, itemX + 2, itemY + 2, gcn::Graphics::LEFT); - if (smileyShortcut->getSmiley(i)) - { - static_cast<Graphics*>(graphics)->drawImage( - mSmileyImg->get(smileyShortcut->getSmiley(i)-1), itemX+2, itemY+10); - } - - } - if (mSmileyMoved) - { - // Draw the item image being dragged by the cursor. - Image* image = mSmileyImg->get(mSmileyMoved-1); - if (image) - { - const int tPosX = mCursorPosX - (image->getWidth() / 2); - const int tPosY = mCursorPosY - (image->getHeight() / 2); - - g->drawImage(image, tPosX, tPosY); - } - } -} - -void -SmileyShortcutContainer::mouseDragged(gcn::MouseEvent &event) -{ - if (event.getButton() == gcn::MouseEvent::LEFT) { - if (!mSmileyMoved && mSmileyClicked) { - const int index = getIndexFromGrid(event.getX(), event.getY()); - if (index == -1) { - return; - } - const int smileyId = smileyShortcut->getSmiley(index); - if (smileyId) - { - mSmileyMoved = smileyId; - smileyShortcut->removeSmiley(index); - } - } - if (mSmileyMoved) { - mCursorPosX = event.getX(); - mCursorPosY = event.getY(); - } - } -} - -void -SmileyShortcutContainer::mousePressed(gcn::MouseEvent &event) -{ - const int index = getIndexFromGrid(event.getX(), event.getY()); - if (index == -1) { - return; - } - // Stores the selected item if theirs one. - if (smileyShortcut->isSmileySelected()) { - smileyShortcut->setSmiley(index); - smileyShortcut->setSmileySelected(0); - } - else if (smileyShortcut->getSmiley(index)) { - mSmileyClicked = true; - } -} - -void -SmileyShortcutContainer::mouseReleased(gcn::MouseEvent &event) -{ - if (event.getButton() == gcn::MouseEvent::LEFT) - { - if (smileyShortcut->isSmileySelected()) - { - smileyShortcut->setSmileySelected(0); - } - const int index = getIndexFromGrid(event.getX(), event.getY()); - if (index == -1) { - mSmileyMoved = 0; - return; - } - if (mSmileyMoved) { - smileyShortcut->setSmileys(index, mSmileyMoved); - mSmileyMoved = 0; - } - else if (smileyShortcut->getSmiley(index) && mSmileyClicked) - { - smileyShortcut->useSmiley(index+1); - } - if (mSmileyClicked) { - mSmileyClicked = false; - } - } -} - diff --git a/src/itemshortcut.h b/src/itemshortcut.h index a0c52468..57800d96 100644 --- a/src/itemshortcut.h +++ b/src/itemshortcut.h @@ -22,7 +22,7 @@ #ifndef _TMW_ITEMSHORTCUT_H__ #define _TMW_ITEMSHORTCUT_H__ -#define SHORTCUT_ITEMS 10 +#define SHORTCUT_ITEMS 12 class Item; diff --git a/src/keyboardconfig.cpp b/src/keyboardconfig.cpp index 0923f331..932f6ad2 100644 --- a/src/keyboardconfig.cpp +++ b/src/keyboardconfig.cpp @@ -50,7 +50,6 @@ static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = { {"keyPickup", SDLK_z, "Pickup"}, {"keyHideWindows", SDLK_h, "Hide Windows"}, {"keyBeingSit", SDLK_s, "Sit"}, - {"keyShortcut0", SDLK_0, "Item Shortcut 0"}, {"keyShortcut1", SDLK_1, "Item Shortcut 1"}, {"keyShortcut2", SDLK_2, "Item Shortcut 2"}, {"keyShortcut3", SDLK_3, "Item Shortcut 3"}, @@ -60,6 +59,9 @@ static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = { {"keyShortcut7", SDLK_7, "Item Shortcut 7"}, {"keyShortcut8", SDLK_8, "Item Shortcut 8"}, {"keyShortcut9", SDLK_9, "Item Shortcut 9"}, + {"keyShortcut10", SDLK_0, "Item Shortcut 10"}, + {"keyShortcut11", SDLK_MINUS, "Item Shortcut 11"}, + {"keyShortcut12", SDLK_EQUALS, "Item Shortcut 12"}, {"keyWindowStatus", SDLK_F2, "Status Window"}, {"keyWindowInventory", SDLK_F3, "Inventory Window"}, {"keyWindowEquipment", SDLK_F4, "Equipment WIndow"}, @@ -69,20 +71,20 @@ static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = { {"keyWindowShortcut", SDLK_F8, "Item Shortcut Window"}, {"keyWindowSetup", SDLK_F9, "Setup Window"}, {"keyWindowDebug", SDLK_F10, "Debug Window"}, - {"keyWindowSmileyList", SDLK_F11, "Smiley List Window"}, - {"keyWindowSmileyBar", SDLK_F12, "Smiley Shortcut Window"}, - {"keySmileyShortcut1", SDLK_KP1, "Smiley Shortcut 1"}, - {"keySmileyShortcut2", SDLK_KP2, "Smiley Shortcut 2"}, - {"keySmileyShortcut3", SDLK_KP3, "Smiley Shortcut 3"}, - {"keySmileyShortcut4", SDLK_KP4, "Smiley Shortcut 4"}, - {"keySmileyShortcut5", SDLK_KP5, "Smiley Shortcut 5"}, - {"keySmileyShortcut6", SDLK_KP6, "Smiley Shortcut 6"}, - {"keySmileyShortcut7", SDLK_KP7, "Smiley Shortcut 7"}, - {"keySmileyShortcut8", SDLK_KP8, "Smiley Shortcut 8"}, - {"keySmileyShortcut9", SDLK_KP9, "Smiley Shortcut 9"}, - {"keySmileyShortcut10", SDLK_KP0, "Smiley Shortcut 10"}, - {"keySmileyShortcut11", SDLK_KP_DIVIDE, "Smiley Shortcut 11"}, - {"keySmileyShortcut12", SDLK_KP_MULTIPLY, "Smiley Shortcut 12"} + {"keyWindowEmote", SDLK_F11, "Emote Window"}, + {"keyWindowEmoteBar", SDLK_F12, "Emote Shortcut Window"}, + {"keyEmoteShortcut1", SDLK_1, "Emote Shortcut 1"}, + {"keyEmoteShortcut2", SDLK_2, "Emote Shortcut 2"}, + {"keyEmoteShortcut3", SDLK_3, "Emote Shortcut 3"}, + {"keyEmoteShortcut4", SDLK_4, "Emote Shortcut 4"}, + {"keyEmoteShortcut5", SDLK_5, "Emote Shortcut 5"}, + {"keyEmoteShortcut6", SDLK_6, "Emote Shortcut 6"}, + {"keyEmoteShortcut7", SDLK_7, "Emote Shortcut 7"}, + {"keyEmoteShortcut8", SDLK_8, "Emote Shortcut 8"}, + {"keyEmoteShortcut9", SDLK_9, "Emote Shortcut 9"}, + {"keyEmoteShortcut10", SDLK_0, "Emote Shortcut 10"}, + {"keyEmoteShortcut11", SDLK_MINUS, "Emote Shortcut 11"}, + {"keyEmoteShortcut12", SDLK_EQUALS, "Emote Shortcut 12"} }; void KeyboardConfig::init() @@ -134,16 +136,11 @@ bool KeyboardConfig::hasConflicts() */ for (i = 0; i < KEY_TOTAL; i++) { - for (j = i,j++; j < KEY_TOTAL; j++) + for (j = i, j++; j < KEY_TOTAL; j++) { -/** - * KEY_SMILEY_* are separated from other keys, duplicate in different - * area is allowed, but not in same area (of course) - * (i.e.: not two identical key for smiley, not two identical for other; - * but same key for a smiley and a not-smiley is ok) - * - */ - if (!((i<KEY_SMILEY_1)&&(j>=KEY_SMILEY_1)) + // Allow for item shortcut and emote keys to overlap, but no other keys + if (!(((i >= KEY_SHORTCUT_1) && (i <= KEY_SHORTCUT_12)) && + ((j >= KEY_EMOTE_1) && (j <= KEY_EMOTE_12))) && mKey[i].value == mKey[j].value ) { @@ -171,13 +168,14 @@ int KeyboardConfig::getKeyIndex(int keyValue) const return KEY_NO_VALUE; } -int KeyboardConfig::getKeySmilieOffset(int keyValue) const + +int KeyboardConfig::getKeyEmoteOffset(int keyValue) const { - for (int i = KEY_SMILEY_1; i <= KEY_SMILEY_12; i++) + for (int i = KEY_EMOTE_1; i <= KEY_EMOTE_12; i++) { if(keyValue == mKey[i].value) { - return 1+i-KEY_SMILEY_1; + return 1 + i - KEY_EMOTE_1; } } return 0; diff --git a/src/keyboardconfig.h b/src/keyboardconfig.h index f6439795..716f9a17 100644 --- a/src/keyboardconfig.h +++ b/src/keyboardconfig.h @@ -103,9 +103,9 @@ class KeyboardConfig int getKeyIndex(int keyValue) const; /** - * Get the key function index for smiley by providing the offset value. + * Get the key function index for an emote by providing the offset value. */ - int getKeySmilieOffset(int keyValue) const; + int getKeyEmoteOffset(int keyValue) const; /** * Set the enable flag, which will stop the user from doing actions. @@ -147,8 +147,6 @@ class KeyboardConfig * KEY_TOTAL should always be last (used as a conditional in loops). * The key assignment view gets arranged according to the order of * these values. - * - * KEY_SMILEY_* must be also at the end (just before KEY_TOTAL) */ enum KeyAction { KEY_NO_VALUE = -1, @@ -157,7 +155,7 @@ class KeyboardConfig KEY_MOVE_LEFT, KEY_MOVE_RIGHT, KEY_ATTACK, - KEY_SMILIE, + KEY_EMOTE, KEY_TALK, KEY_TARGET, KEY_TARGET_CLOSEST, @@ -166,7 +164,6 @@ class KeyboardConfig KEY_PICKUP, KEY_HIDE_WINDOWS, KEY_SIT, - KEY_SHORTCUT_0, KEY_SHORTCUT_1, KEY_SHORTCUT_2, KEY_SHORTCUT_3, @@ -176,6 +173,9 @@ class KeyboardConfig KEY_SHORTCUT_7, KEY_SHORTCUT_8, KEY_SHORTCUT_9, + KEY_SHORTCUT_10, + KEY_SHORTCUT_11, + KEY_SHORTCUT_12, KEY_WINDOW_STATUS, KEY_WINDOW_INVENTORY, KEY_WINDOW_EQUIPMENT, @@ -185,20 +185,20 @@ class KeyboardConfig KEY_WINDOW_SHORTCUT, KEY_WINDOW_SETUP, KEY_WINDOW_DEBUG, - KEY_WINDOW_ALLSMILEY, - KEY_WINDOW_SMILEY_SHORTCUT, - KEY_SMILEY_1, - KEY_SMILEY_2, - KEY_SMILEY_3, - KEY_SMILEY_4, - KEY_SMILEY_5, - KEY_SMILEY_6, - KEY_SMILEY_7, - KEY_SMILEY_8, - KEY_SMILEY_9, - KEY_SMILEY_10, - KEY_SMILEY_11, - KEY_SMILEY_12, + KEY_WINDOW_EMOTE, + KEY_WINDOW_EMOTE_SHORTCUT, + KEY_EMOTE_1, + KEY_EMOTE_2, + KEY_EMOTE_3, + KEY_EMOTE_4, + KEY_EMOTE_5, + KEY_EMOTE_6, + KEY_EMOTE_7, + KEY_EMOTE_8, + KEY_EMOTE_9, + KEY_EMOTE_10, + KEY_EMOTE_11, + KEY_EMOTE_12, KEY_TOTAL }; diff --git a/src/main.cpp b/src/main.cpp index d9ebaefa..3cf8611d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -40,7 +40,6 @@ #include "game.h" #include "graphics.h" #include "itemshortcut.h" -#include "smileyshortcut.h" #include "keyboardconfig.h" #include "localplayer.h" #include "lockedarray.h" @@ -57,6 +56,7 @@ #include "gui/char_server.h" #include "gui/char_select.h" #include "gui/colour.h" +#include "gui/emoteshortcut.h" #include "gui/gui.h" #include "gui/login.h" #include "gui/ok_dialog.h" @@ -403,8 +403,8 @@ void init_engine(const Options &options) // Initialize the item shortcuts. itemShortcut = new ItemShortcut(); - // Initialize the smiley shortcuts. - smileyShortcut = new SmileyShortcut(); + // Initialize the emote shortcuts. + emoteShortcut = new EmoteShortcut(); gui = new Gui(graphics); state = LOGIN_STATE; /**< Initial game state */ @@ -438,7 +438,7 @@ void exit_engine() // Before config.write() since it writes the shortcuts to the config delete itemShortcut; - delete smileyShortcut; + delete emoteShortcut; config.write(); diff --git a/src/smileyshortcut.cpp b/src/smileyshortcut.cpp deleted file mode 100644 index adc7d9c3..00000000 --- a/src/smileyshortcut.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/* - * The Mana World - * Copyright 2007 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 - */ - -#include "configuration.h" -#include "smileyshortcut.h" -#include "localplayer.h" - -#include "utils/tostring.h" - -SmileyShortcut::SmileyShortcut *smileyShortcut; - -SmileyShortcut::SmileyShortcut(): - mSmileySelected(0) -{ - for (int i = 0; i < SHORTCUT_SMILEYS; i++) - { - mSmileys[i] = i+1; - } - load(); -} - -SmileyShortcut::~SmileyShortcut() -{ - save(); -} - -void SmileyShortcut::load() -{ - for (int i = 0; i < SHORTCUT_SMILEYS; i++) - { - int smileyId = (int) config.getValue("Smileyshortcut" + toString(i), i+1); - - if (smileyId) - { - mSmileys[i] = smileyId; - } - } -} - -void SmileyShortcut::save() -{ - for (int i = 0; i < SHORTCUT_SMILEYS; i++) - { - const int smileyId = mSmileys[i] ? mSmileys[i] : 0; - config.setValue("Smileyshortcut" + toString(i), smileyId); - } -} - -void SmileyShortcut::useSmiley(int index) -{ - if ((index>0)&&(index<=SHORTCUT_SMILEYS)) - { - if (mSmileys[index-1]>0) - { - player_node->emote(mSmileys[index-1]); - } - } -} diff --git a/src/smileyshortcut.h b/src/smileyshortcut.h deleted file mode 100644 index c4fb9280..00000000 --- a/src/smileyshortcut.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * The Mana World - * Copyright 2007 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 - */ - -#ifndef _TMW_SMILEYSHORTCUT_H__ -#define _TMW_SMILEYSHORTCUT_H__ - -#define SHORTCUT_SMILEYS 12 - -class Item; - -/** - * The class which keeps track of the item shortcuts. - */ -class SmileyShortcut -{ - public: - /** - * Constructor. - */ - SmileyShortcut(); - - /** - * Destructor. - */ - ~SmileyShortcut(); - - /** - * Load the configuration information. - */ - void load(); - - /** - * Returns the shortcut smiley ID specified by the index. - * - * @param index Index of the shortcut smiley. - */ - int getSmiley(int index) const - { return mSmileys[index]; } - - /** - * Returns the amount of shortcut smileys. - */ - int getSmileyCount() const - { return SHORTCUT_SMILEYS; } - - /** - * Returns the item ID that is currently selected. - */ - int getSmileySelected() const - { return mSmileySelected; } - - /** - * Adds the selected item ID to the items specified by the index. - * - * @param index Index of the items. - */ - void setSmiley(int index) - { mSmileys[index] = mSmileySelected; } - - /** - * Adds a smiley to the smileys store specified by the index. - * - * @param index Index of the smiley. - * @param smileyId ID of the smiley. - */ - void setSmileys(int index, int smileyId) - { mSmileys[index] = smileyId; } - - /** - * Set the smiley that is selected. - * - * @param smileyId The ID of the smiley that is to be assigned. - */ - void setSmileySelected(int smileyId) - { mSmileySelected = smileyId; } - - /** - * A flag to check if the smiley is selected. - */ - bool isSmileySelected() - { return mSmileySelected; } - - /** - * Remove a smiley from the shortcut. - */ - void removeSmiley(int index) - { mSmileys[index] = 0; } - - /** - * Try to use the smiley specified by the index. - * - * @param index Index of the smiley shortcut. - */ - void useSmiley(int index); - - private: - /** - * Save the configuration information. - */ - void save(); - - int mSmileys[SHORTCUT_SMILEYS]; /**< The smiley stored. */ - int mSmileySelected; /**< The smiley held by cursor. */ - -}; - -extern SmileyShortcut *smileyShortcut; - -#endif |