From 5cec54e00bc05fb32bc9b08727641f9d48fefee6 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 19 Oct 2014 14:28:01 +0300 Subject: Add miltiline popup based on textbox. --- src/CMakeLists.txt | 2 ++ src/Makefile.am | 2 ++ src/gui/popups/textboxpopup.cpp | 80 +++++++++++++++++++++++++++++++++++++++++ src/gui/popups/textboxpopup.h | 64 +++++++++++++++++++++++++++++++++ src/gui/windowmanager.cpp | 4 +++ 5 files changed, 152 insertions(+) create mode 100644 src/gui/popups/textboxpopup.cpp create mode 100644 src/gui/popups/textboxpopup.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 633158470..c83c60319 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -379,6 +379,8 @@ SET(SRCS gui/popups/spellpopup.h gui/popups/statuspopup.cpp gui/popups/statuspopup.h + gui/popups/textboxpopup.cpp + gui/popups/textboxpopup.h gui/windows/killstats.cpp gui/windows/killstats.h gui/windows/logindialog.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 33a488512..d3ccb5b36 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -499,6 +499,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ gui/popups/spellpopup.h \ gui/popups/statuspopup.cpp \ gui/popups/statuspopup.h \ + gui/popups/textboxpopup.cpp \ + gui/popups/textboxpopup.h \ gui/windows/killstats.cpp \ gui/windows/killstats.h \ gui/windows/logindialog.cpp \ diff --git a/src/gui/popups/textboxpopup.cpp b/src/gui/popups/textboxpopup.cpp new file mode 100644 index 000000000..651b1fa66 --- /dev/null +++ b/src/gui/popups/textboxpopup.cpp @@ -0,0 +1,80 @@ +/* + * The ManaPlus Client + * Copyright (C) 2008 The Legend of Mazzeroth Development Team + * Copyright (C) 2008-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2014 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/popups/textboxpopup.h" + +#include "gui/widgets/textbox.h" + +#include "gui/fonts/font.h" + +#include "debug.h" + +TextBoxPopup *textBoxPopup = nullptr; + +TextBoxPopup::TextBoxPopup() : + Popup("TextBoxPopup", "textpopup.xml"), + mTextBox(new TextBox(this)) +{ +} + +void TextBoxPopup::postInit() +{ + const int fontHeight = getFont()->getHeight(); + setMinHeight(fontHeight); + mTextBox->setEditable(false); + mTextBox->setOpaque(false); + add(mTextBox); + addMouseListener(this); +} + +TextBoxPopup::~TextBoxPopup() +{ +} + +void TextBoxPopup::show(const int x, const int y, const std::string &str) +{ + mTextBox->setTextWrapped(str, 190); + setContentSize(mTextBox->getWidth(), mTextBox->getHeight()); + const int distance = 20; + + const Rect &rect = mDimension; + int posX = std::max(0, x - rect.width / 2); + int posY = y + distance; + + if (posX + rect.width > mainGraphics->mWidth) + posX = mainGraphics->mWidth - rect.width; + if (posY + rect.height > mainGraphics->mHeight) + posY = y - rect.height - distance; + + setPosition(posX, posY); + setVisible(true); + requestMoveToTop(); +} + +void TextBoxPopup::mouseMoved(MouseEvent &event) +{ + Popup::mouseMoved(event); + + // When the mouse moved on top of the popup, hide it + setVisible(false); +} diff --git a/src/gui/popups/textboxpopup.h b/src/gui/popups/textboxpopup.h new file mode 100644 index 000000000..8aa6bf11a --- /dev/null +++ b/src/gui/popups/textboxpopup.h @@ -0,0 +1,64 @@ +/* + * The ManaPlus Client + * Copyright (C) 2008 The Legend of Mazzeroth Development Team + * Copyright (C) 2008-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2014 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 GUI_POPUPS_TEXTBOXPOPUP_H +#define GUI_POPUPS_TEXTBOXPOPUP_H + +#include "gui/widgets/popup.h" + +class TextBox; + +/** + * A popup that displays information about an item. + */ +class TextBoxPopup final : public Popup +{ + public: + /** + * Constructor. Initializes the item popup. + */ + TextBoxPopup(); + + A_DELETE_COPY(TextBoxPopup) + + /** + * Destructor. Cleans up the item popup on deletion. + */ + ~TextBoxPopup(); + + void postInit() override final; + + /** + * Sets the text to be displayed. + */ + void show(const int x, const int y, const std::string &str); + + void mouseMoved(MouseEvent &event) override final; + + private: + TextBox *mTextBox; +}; + +extern TextBoxPopup *textBoxPopup; + +#endif // GUI_POPUPS_TEXTBOXPOPUP_H diff --git a/src/gui/windowmanager.cpp b/src/gui/windowmanager.cpp index 06bfc8673..bd68f09bc 100644 --- a/src/gui/windowmanager.cpp +++ b/src/gui/windowmanager.cpp @@ -35,6 +35,7 @@ #include "gui/popups/itempopup.h" #include "gui/popups/popupmenu.h" #include "gui/popups/spellpopup.h" +#include "gui/popups/textboxpopup.h" #include "gui/popups/textpopup.h" #include "gui/windows/didyouknowwindow.h" @@ -103,6 +104,8 @@ void WindowManager::createWindows() beingPopup->postInit(); textPopup = new TextPopup; textPopup->postInit(); + textBoxPopup = new TextBoxPopup; + textBoxPopup->postInit(); itemPopup = new ItemPopup; itemPopup->postInit(); spellPopup = new SpellPopup; @@ -111,6 +114,7 @@ void WindowManager::createWindows() void WindowManager::deleteWindows() { + delete2(textBoxPopup); delete2(textPopup); delete2(beingPopup); delete2(itemPopup); -- cgit v1.2.3-70-g09d2