summaryrefslogtreecommitdiff
path: root/src/gui/windowmenu.cpp
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2009-05-04 23:26:22 +0200
committerBjørn Lindeijer <bjorn@lindeijer.nl>2009-05-04 23:41:45 +0200
commit6cacaa3d7f55d91d8b7ca178f8595cc6c6b4383d (patch)
treea4ae355fe26eda518a5fd82c15347b6cfcf6b7f6 /src/gui/windowmenu.cpp
parent1b06ec9f12e3fbfe6fbf6579fb64bb895464badb (diff)
downloadmana-6cacaa3d7f55d91d8b7ca178f8595cc6c6b4383d.tar.gz
mana-6cacaa3d7f55d91d8b7ca178f8595cc6c6b4383d.tar.bz2
mana-6cacaa3d7f55d91d8b7ca178f8595cc6c6b4383d.tar.xz
mana-6cacaa3d7f55d91d8b7ca178f8595cc6c6b4383d.zip
Replaced emote window with a new emote popup
The popup is meant to be temporary, showing the emote instantly when you click on it. It adapts nicely to show any number of emotes. I still need to add a better way of assigning emote shortcuts, since currently you can only change which emote is assigned to which shortcut by actually using it.
Diffstat (limited to 'src/gui/windowmenu.cpp')
-rw-r--r--src/gui/windowmenu.cpp177
1 files changed, 177 insertions, 0 deletions
diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp
new file mode 100644
index 00000000..5e33a4ed
--- /dev/null
+++ b/src/gui/windowmenu.cpp
@@ -0,0 +1,177 @@
+/*
+ * The Mana World
+ * Copyright (C) 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gui/windowmenu.h"
+
+#include "gui/emotepopup.h"
+
+#include "gui/widgets/button.h"
+#include "gui/widgets/window.h"
+#include "gui/widgets/windowcontainer.h"
+
+#include "graphics.h"
+
+#include "net/net.h"
+#include "net/playerhandler.h"
+
+#include "utils/gettext.h"
+
+#include <string>
+
+extern Window *equipmentWindow;
+extern Window *inventoryWindow;
+extern Window *itemShortcutWindow;
+extern Window *setupWindow;
+extern Window *skillDialog;
+extern Window *statusWindow;
+#ifdef TMWSERV_SUPPORT
+extern Window *buddyWindow;
+extern Window *guildWindow;
+extern Window *magicDialog;
+#endif
+
+
+WindowMenu::WindowMenu():
+ mEmotePopup(0)
+{
+ // Buttons
+ static const char *buttonNames[] =
+ {
+ ":-)",
+ N_("Status"),
+ N_("Equipment"),
+ N_("Inventory"),
+ N_("Skills"),
+#ifdef TMWSERV_SUPPORT
+ N_("Magic"),
+ N_("Guilds"),
+ N_("Buddys"),
+#endif
+ N_("Shortcut"),
+ N_("Setup"),
+ 0
+ };
+ int x = 0, h = 0;
+
+ for (const char **curBtn = buttonNames; *curBtn; curBtn++)
+ {
+ gcn::Button *btn = new Button(gettext(*curBtn), *curBtn, this);
+ btn->setPosition(x, 0);
+ add(btn);
+ x += btn->getWidth() + 3;
+ h = btn->getHeight();
+ }
+
+ setDimension(gcn::Rectangle(graphics->getWidth() - x - 3, 3,
+ x - 3, h));
+ setVisible(true);
+}
+
+WindowMenu::~WindowMenu()
+{
+}
+
+void WindowMenu::action(const gcn::ActionEvent &event)
+{
+ Window *window = 0;
+
+ if (event.getId() == ":-)")
+ {
+ if (!mEmotePopup)
+ {
+ const gcn::Widget *s = event.getSource();
+ const gcn::Rectangle &r = s->getDimension();
+ const int parentX = s->getParent()->getX();
+
+ mEmotePopup = new EmotePopup;
+ const int offset = (r.width - mEmotePopup->getWidth()) / 2;
+ mEmotePopup->setPosition(parentX + r.x + offset,
+ r.y + r.height + 5);
+
+ mEmotePopup->addSelectionListener(this);
+ }
+ else
+ {
+ windowContainer->scheduleDelete(mEmotePopup);
+ mEmotePopup = 0;
+ }
+ }
+ else if (event.getId() == "Status")
+ {
+ window = statusWindow;
+ }
+ else if (event.getId() == "Equipment")
+ {
+ window = equipmentWindow;
+ }
+ else if (event.getId() == "Inventory")
+ {
+ window = inventoryWindow;
+ }
+ else if (event.getId() == "Skills")
+ {
+ window = skillDialog;
+ }
+#ifdef TMWSERV_SUPPORT
+ else if (event.getId() == "Magic")
+ {
+ window = magicDialog;
+ }
+ else if (event.getId() == "Guilds")
+ {
+ window = guildWindow;
+ }
+ else if (event.getId() == "Buddys")
+ {
+ window = buddyWindow;
+ }
+#endif
+ else if (event.getId() == "Shortcut")
+ {
+ window = itemShortcutWindow;
+ }
+ else if (event.getId() == "Setup")
+ {
+ window = setupWindow;
+ }
+
+ if (window)
+ {
+ window->setVisible(!window->isVisible());
+ if (window->isVisible())
+ {
+ window->requestMoveToTop();
+ }
+ }
+}
+
+void WindowMenu::valueChanged(const gcn::SelectionEvent &event)
+{
+ if (event.getSource() == mEmotePopup)
+ {
+ int emote = mEmotePopup->getSelectedEmote();
+ if (emote)
+ Net::getPlayerHandler()->emote(emote);
+
+ windowContainer->scheduleDelete(mEmotePopup);
+ mEmotePopup = 0;
+ }
+}