From 352409f22230698bc32661b916f708663a4179b5 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 7 Jun 2011 23:12:08 +0300 Subject: Add "did you know?" dialog and some messages for it. Fix browserbox images position and size. --- configure.ac | 1 + data/help/CMakeLists.txt | 1 + data/help/Makefile.am | 2 +- data/help/tips/1-1.jpg | Bin 0 -> 42139 bytes data/help/tips/1-2.jpg | Bin 0 -> 26274 bytes data/help/tips/1.txt | 3 + data/help/tips/2.txt | 2 + data/help/tips/3.txt | 2 + data/help/tips/4.txt | 2 + data/help/tips/5.txt | 2 + data/help/tips/6.txt | 2 + data/help/tips/CMakeLists.txt | 12 ++++ data/help/tips/Makefile.am | 16 +++++ src/CMakeLists.txt | 2 + src/Makefile.am | 2 + src/defaults.cpp | 2 + src/game.cpp | 9 +++ src/gui/didyouknowwindow.cpp | 160 +++++++++++++++++++++++++++++++++++++++++ src/gui/didyouknowwindow.h | 81 +++++++++++++++++++++ src/gui/helpwindow.cpp | 2 + src/gui/widgets/browserbox.cpp | 14 +++- src/gui/windowmenu.cpp | 6 ++ src/keyboardconfig.cpp | 2 + src/keyboardconfig.h | 1 + 24 files changed, 323 insertions(+), 3 deletions(-) create mode 100644 data/help/tips/1-1.jpg create mode 100644 data/help/tips/1-2.jpg create mode 100644 data/help/tips/1.txt create mode 100644 data/help/tips/2.txt create mode 100644 data/help/tips/3.txt create mode 100644 data/help/tips/4.txt create mode 100644 data/help/tips/5.txt create mode 100644 data/help/tips/6.txt create mode 100644 data/help/tips/CMakeLists.txt create mode 100644 data/help/tips/Makefile.am create mode 100644 src/gui/didyouknowwindow.cpp create mode 100644 src/gui/didyouknowwindow.h diff --git a/configure.ac b/configure.ac index 7eeb8cf94..db6dae2e7 100755 --- a/configure.ac +++ b/configure.ac @@ -215,6 +215,7 @@ data/help/Makefile data/help/es/Makefile data/help/fr/Makefile data/help/ru/Makefile +data/help/tips/Makefile data/icons/Makefile docs/Makefile po/Makefile.in diff --git a/data/help/CMakeLists.txt b/data/help/CMakeLists.txt index 1f5722110..c2ed62d3a 100644 --- a/data/help/CMakeLists.txt +++ b/data/help/CMakeLists.txt @@ -14,5 +14,6 @@ SET(FILES ADD_SUBDIRECTORY(es) ADD_SUBDIRECTORY(fr) ADD_SUBDIRECTORY(ru) +ADD_SUBDIRECTORY(tips) INSTALL(FILES ${FILES} DESTINATION ${DATA_DIR}/help) diff --git a/data/help/Makefile.am b/data/help/Makefile.am index 1e672b168..6b3205929 100644 --- a/data/help/Makefile.am +++ b/data/help/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = es fr ru +SUBDIRS = es fr ru tips helpdir = $(pkgdatadir)/data/help diff --git a/data/help/tips/1-1.jpg b/data/help/tips/1-1.jpg new file mode 100644 index 000000000..855e72315 Binary files /dev/null and b/data/help/tips/1-1.jpg differ diff --git a/data/help/tips/1-2.jpg b/data/help/tips/1-2.jpg new file mode 100644 index 000000000..3028e6ce6 Binary files /dev/null and b/data/help/tips/1-2.jpg differ diff --git a/data/help/tips/1.txt b/data/help/tips/1.txt new file mode 100644 index 000000000..d76d94492 --- /dev/null +++ b/data/help/tips/1.txt @@ -0,0 +1,3 @@ +You can hide/show bars and buttons by right click and select menu item. +~~~help/tips/1-1.jpg~ +~~~help/tips/1-2.jpg~ diff --git a/data/help/tips/2.txt b/data/help/tips/2.txt new file mode 100644 index 000000000..231864b73 --- /dev/null +++ b/data/help/tips/2.txt @@ -0,0 +1,2 @@ +You can buy or sell items from players shops. +Right click on player and select "Buy" or "Sell" diff --git a/data/help/tips/3.txt b/data/help/tips/3.txt new file mode 100644 index 000000000..2f154124d --- /dev/null +++ b/data/help/tips/3.txt @@ -0,0 +1,2 @@ +You can disable yellow bar, +by pressing key 8 on numeric keyboard. diff --git a/data/help/tips/4.txt b/data/help/tips/4.txt new file mode 100644 index 000000000..05d2c40a9 --- /dev/null +++ b/data/help/tips/4.txt @@ -0,0 +1,2 @@ +You can restore yellow bar settings, +by right click on it and select in context menu "Reset yellow bar". diff --git a/data/help/tips/5.txt b/data/help/tips/5.txt new file mode 100644 index 000000000..9cc26c905 --- /dev/null +++ b/data/help/tips/5.txt @@ -0,0 +1,2 @@ +You can copy value from any bar, +by right click on it and select in context menu "Copy to chat". diff --git a/data/help/tips/6.txt b/data/help/tips/6.txt new file mode 100644 index 000000000..6178d6971 --- /dev/null +++ b/data/help/tips/6.txt @@ -0,0 +1,2 @@ +You can set away mode, +by type in chat command /away diff --git a/data/help/tips/CMakeLists.txt b/data/help/tips/CMakeLists.txt new file mode 100644 index 000000000..b0b1b7947 --- /dev/null +++ b/data/help/tips/CMakeLists.txt @@ -0,0 +1,12 @@ +SET(FILES + 1.txt + 1-1.jpg + 1-2.jpg + 2.txt + 3.txt + 4.txt + 5.txt + 6.txt + ) + +INSTALL(FILES ${FILES} DESTINATION ${DATA_DIR}/help/tips) diff --git a/data/help/tips/Makefile.am b/data/help/tips/Makefile.am new file mode 100644 index 000000000..1c7e6550e --- /dev/null +++ b/data/help/tips/Makefile.am @@ -0,0 +1,16 @@ + +helptipsdir = $(pkgdatadir)/data/help/tips + +helptips_DATA = \ + 1.txt \ + 1-1.jpg \ + 1-2.jpg \ + 2.txt \ + 3.txt \ + 4.txt \ + 5.txt \ + 6.txt + +EXTRA_DIST = \ + $(helptips_DATA) \ + CMakeLists.txt diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index df0a9ea0f..37baf838f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -237,6 +237,8 @@ SET(SRCS gui/connectiondialog.h gui/debugwindow.cpp gui/debugwindow.h + gui/didyouknowwindow.cpp + gui/didyouknowwindow.h gui/emotepopup.cpp gui/emotepopup.h gui/equipmentwindow.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 9863a0f69..e158627c8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -240,6 +240,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ gui/connectiondialog.h \ gui/debugwindow.cpp \ gui/debugwindow.h \ + gui/didyouknowwindow.cpp \ + gui/didyouknowwindow.h \ gui/emotepopup.cpp \ gui/emotepopup.h \ gui/equipmentwindow.cpp \ diff --git a/src/defaults.cpp b/src/defaults.cpp index cb5c0011c..bcb123a92 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -202,6 +202,8 @@ DefaultsData* getConfigDefaults() AddDEF(configData, "enableAttackFilter", true); AddDEF(configData, "securetrades", true); AddDEF(configData, "unsecureChars", "IO0@#$"); + AddDEF(configData, "currentTip", 0); + AddDEF(configData, "showDidYouKnow", true); return configData; } diff --git a/src/game.cpp b/src/game.cpp index 850d335e4..bb477b2e0 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -53,6 +53,7 @@ #include "gui/chatwindow.h" #include "gui/confirmdialog.h" #include "gui/debugwindow.h" +#include "gui/didyouknowwindow.h" #include "gui/equipmentwindow.h" #include "gui/gui.h" #include "gui/helpwindow.h" @@ -141,6 +142,7 @@ SpecialsWindow *specialsWindow = NULL; ShortcutWindow *dropShortcutWindow = NULL; ShortcutWindow *spellShortcutWindow = NULL; WhoIsOnline *whoIsOnline = NULL; +DidYouKnowWindow *didYouKnowWindow = NULL; KillStats *killStats = NULL; BotCheckerWindow *botCheckerWindow = NULL; SocialWindow *socialWindow = NULL; @@ -212,6 +214,12 @@ static void createGuiWindows() itemShortcutWindow->addTab(toString(f + 1), new ItemShortcutContainer(f)); } + didYouKnowWindow = new DidYouKnowWindow; + if (config.getBoolValue("showDidYouKnow")) + { + didYouKnowWindow->setVisible(true); + didYouKnowWindow->loadData(); + } emoteShortcutWindow = new ShortcutWindow("EmoteShortcut", new EmoteShortcutContainer); @@ -314,6 +322,7 @@ static void destroyGuiWindows() del_0(botCheckerWindow); del_0(whoIsOnline); del_0(killStats); + del_0(didYouKnowWindow); Mana::Event::trigger(CHANNEL_GAME, Mana::Event(EVENT_GUIWINDOWSUNLOADED)); } diff --git a/src/gui/didyouknowwindow.cpp b/src/gui/didyouknowwindow.cpp new file mode 100644 index 000000000..24731d58a --- /dev/null +++ b/src/gui/didyouknowwindow.cpp @@ -0,0 +1,160 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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, see . + */ + +#include "gui/didyouknowwindow.h" + +#include "log.h" + +#include "gui/gui.h" +#include "gui/setup.h" + +#include "gui/widgets/button.h" +#include "gui/widgets/browserbox.h" +#include "gui/widgets/checkbox.h" +#include "gui/widgets/layout.h" +#include "gui/widgets/scrollarea.h" + +#include "resources/resourcemanager.h" +#include "configuration.h" + +#include "utils/gettext.h" + +#include "debug.h" + +static const int minTip = 1; +static const int maxTip = 6; + +DidYouKnowWindow::DidYouKnowWindow(): + Window(_("Did You Know?")) +{ + setMinWidth(300); + setMinHeight(250); + setContentSize(455, 350); + setWindowName("DidYouKnow"); + setResizable(true); + setupWindow->registerWindowForReset(this); + + setDefaultSize(500, 400, ImageRect::CENTER); + + mBrowserBox = new BrowserBox; + mBrowserBox->setOpaque(false); + mScrollArea = new ScrollArea(mBrowserBox); + Button *okButton = new Button(_("Close"), "close", this); + mButtonPrev = new Button(_("< Previous"), "prev", this); + mButtonNext = new Button(_("Next >"), "next", this); + mOpenAgainCheckBox = new CheckBox(_("Auto open this window"), + config.getBoolValue("showDidYouKnow"), this, "openagain"); + + mScrollArea->setDimension(gcn::Rectangle(5, 5, 445, + 335 - okButton->getHeight())); + okButton->setPosition(450 - okButton->getWidth(), + 345 - okButton->getHeight()); + + mBrowserBox->setLinkHandler(this); + mBrowserBox->setFont(gui->getHelpFont()); + mBrowserBox->setProcessVersion(true); + mBrowserBox->setEnableImages(true); + + place(0, 0, mScrollArea, 5, 3).setPadding(3); + place(0, 3, mOpenAgainCheckBox); + place(1, 4, mButtonPrev, 1); + place(2, 4, mButtonNext, 1); + place(4, 4, okButton); + + Layout &layout = getLayout(); + layout.setRowHeight(0, Layout::AUTO_SET); + + loadWindowState(); +} + +void DidYouKnowWindow::action(const gcn::ActionEvent &event) +{ + if (event.getId() == "close") + setVisible(false); + + unsigned num = config.getIntValue("currentTip"); + + if (event.getId() == "prev") + loadData(num - 1); + else if (event.getId() == "next") + loadData(num + 1); + else if (event.getId() == "openagain") + config.setValue("showDidYouKnow", mOpenAgainCheckBox->isSelected()); +} + +void DidYouKnowWindow::handleLink(const std::string &link _UNUSED_, + gcn::MouseEvent *event _UNUSED_) +{ +} + +void DidYouKnowWindow::loadData(int num) +{ + mBrowserBox->clearRows(); + if (!num) + num = config.getIntValue("currentTip") + 1; + + if (num < minTip || num > maxTip) + num = minTip; + + config.setValue("currentTip", num); + + loadFile(num); + + mScrollArea->setVerticalScrollAmount(0); +} + +void DidYouKnowWindow::loadFile(int num) +{ + const std::string file = strprintf("tips/%d", num); + const std::vector langs = getLang(); + ResourceManager *resman = ResourceManager::getInstance(); + std::string helpPath = branding.getStringValue("helpPath"); + if (helpPath.empty()) + helpPath = paths.getStringValue("help"); + + std::vector lines; + if (!langs.empty()) + { + std::string name = helpPath + langs[0] + "/" + file + ".txt"; + if (resman->exists(name)) + lines = resman->loadTextFile(name); + if (lines.empty() && langs.size() > 1) + { + name = helpPath + langs[1] + "/" + file + ".txt"; + lines = resman->loadTextFile(name); + } + } + + if (lines.empty()) + lines = resman->loadTextFile(helpPath + file + ".txt"); + + for (unsigned int i = 0; i < lines.size(); ++i) + mBrowserBox->addRow(lines[i]); +} + +void DidYouKnowWindow::setVisible(bool visible) +{ + Window::setVisible(visible); + + if (visible || isVisible()) + loadData(); +} diff --git a/src/gui/didyouknowwindow.h b/src/gui/didyouknowwindow.h new file mode 100644 index 000000000..28a992d73 --- /dev/null +++ b/src/gui/didyouknowwindow.h @@ -0,0 +1,81 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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, see . + */ + +#ifndef DIDYOUKNOWWINDOW_H +#define DIDYOUKNOWWINDOW_H + +#include "gui/widgets/linkhandler.h" +#include "gui/widgets/window.h" + +#include + +#ifdef __GNUC__ +#define _UNUSED_ __attribute__ ((unused)) +#else +#define _UNUSED_ +#endif + +class Button; +class BrowserBox; +class CheckBox; +class LinkHandler; + +/** + * The help dialog. + */ +class DidYouKnowWindow : public Window, public LinkHandler, + public gcn::ActionListener +{ + public: + /** + * Constructor. + */ + DidYouKnowWindow(); + + /** + * Called when receiving actions from the widgets. + */ + void action(const gcn::ActionEvent &event); + + /** + * Handles link action. + */ + void handleLink(const std::string &link, + gcn::MouseEvent *event _UNUSED_); + + void loadData(int num = 0); + + void setVisible(bool visible); + + private: + void loadFile(int num); + + BrowserBox *mBrowserBox; + gcn::ScrollArea *mScrollArea; + Button *mButtonPrev; + Button *mButtonNext; + CheckBox *mOpenAgainCheckBox; +}; + +extern DidYouKnowWindow *didYouKnowWindow; + +#endif diff --git a/src/gui/helpwindow.cpp b/src/gui/helpwindow.cpp index e0e42c0bb..4c4770a43 100644 --- a/src/gui/helpwindow.cpp +++ b/src/gui/helpwindow.cpp @@ -123,6 +123,8 @@ void HelpWindow::loadFile(const std::string &file) if (lines.empty()) lines = resman->loadTextFile(helpPath + file + ".txt"); + logger->log("help file: " + helpPath + file + ".txt"); + for (unsigned int i = 0; i < lines.size(); ++i) mBrowserBox->addRow(lines[i]); } diff --git a/src/gui/widgets/browserbox.cpp b/src/gui/widgets/browserbox.cpp index f3ee7270b..140a72770 100644 --- a/src/gui/widgets/browserbox.cpp +++ b/src/gui/widgets/browserbox.cpp @@ -368,6 +368,8 @@ int BrowserBox::calcHeight() { unsigned x = 0, y = 0; int wrappedLines = 0; + int moreHeight = 0; + int maxWidth = getWidth(); int link = 0; if (getWidth() < 0) return 1; @@ -412,8 +414,12 @@ int BrowserBox::calcHeight() Image *img = resman->getImage(str); if (img) { + img->incRef(); mLineParts.push_back(LinePart(x, y, selColor, img)); - y += img->getHeight(); + y += img->getHeight() + 2; + moreHeight += img->getHeight(); + if (img->getWidth() > maxWidth) + maxWidth = img->getWidth() + 2; } continue; } @@ -570,7 +576,11 @@ int BrowserBox::calcHeight() } y += fontHeight; } - return (static_cast(mTextRows.size()) + wrappedLines) * fontHeight; + if (getWidth() != maxWidth) + setWidth(maxWidth); + + return (static_cast(mTextRows.size()) + wrappedLines) + * fontHeight + moreHeight; } void BrowserBox::updateHeight() diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp index 719b67829..b73e5fad0 100644 --- a/src/gui/windowmenu.cpp +++ b/src/gui/windowmenu.cpp @@ -26,6 +26,7 @@ #include "graphics.h" #include "keyboardconfig.h" +#include "gui/didyouknowwindow.h" #include "gui/emotepopup.h" #include "gui/skilldialog.h" #include "gui/specialswindow.h" @@ -94,6 +95,7 @@ WindowMenu::WindowMenu(): KeyboardConfig::KEY_WINDOW_SHORTCUT); addButton(N_("SP"), _("Spells"), x, h, KeyboardConfig::KEY_WINDOW_SPELLS); addButton(N_("DR"), _("Drop"), x, h, KeyboardConfig::KEY_WINDOW_DROP); + addButton(N_("YK"), _("Did you know"), x, h, KeyboardConfig::KEY_WINDOW_DIDYOUKNOW); addButton(N_("SET"), _("Setup"), x, h, KeyboardConfig::KEY_WINDOW_SETUP); if (graphics) @@ -212,6 +214,10 @@ void WindowMenu::action(const gcn::ActionEvent &event) { window = spellShortcutWindow; } + else if (event.getId() == "YK") + { + window = didYouKnowWindow; + } if (window) { diff --git a/src/keyboardconfig.cpp b/src/keyboardconfig.cpp index 6ca3f65c5..ff504ca2d 100644 --- a/src/keyboardconfig.cpp +++ b/src/keyboardconfig.cpp @@ -158,6 +158,8 @@ static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = { {"keyWindowOnline", KeyboardConfig::KEY_NO_VALUE, _("Who Is Online Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI}, + {"keyWindowDidYouKnow", -1, N_("Did you know Window"), + KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI}, {"keySocialPrevTab", KeyboardConfig::KEY_NO_VALUE, _("Previous Social Tab"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI}, diff --git a/src/keyboardconfig.h b/src/keyboardconfig.h index d6a7f47b2..1d264b039 100644 --- a/src/keyboardconfig.h +++ b/src/keyboardconfig.h @@ -221,6 +221,7 @@ class KeyboardConfig KEY_WINDOW_SPELLS, KEY_WINDOW_BOT_CHECKER, KEY_WINDOW_ONLINE, + KEY_WINDOW_DIDYOUKNOW, KEY_PREV_SOCIAL_TAB, KEY_NEXT_SOCIAL_TAB, KEY_EMOTE_1, -- cgit v1.2.3-60-g2f50