diff options
-rw-r--r-- | src/gui/widgets/characterdisplay.cpp | 32 | ||||
-rw-r--r-- | src/gui/widgets/characterdisplay.h | 24 |
2 files changed, 49 insertions, 7 deletions
diff --git a/src/gui/widgets/characterdisplay.cpp b/src/gui/widgets/characterdisplay.cpp index 23a22fbbb..dba6be286 100644 --- a/src/gui/widgets/characterdisplay.cpp +++ b/src/gui/widgets/characterdisplay.cpp @@ -23,6 +23,7 @@ #include "gui/widgets/characterdisplay.h" #include "gui/charselectdialog.h" +#include "gui/textpopup.h" #include "gui/widgets/label.h" #include "gui/widgets/layouthelper.h" @@ -32,9 +33,12 @@ CharacterDisplay::CharacterDisplay(const Widget2 *const widget, CharSelectDialog *const charSelectDialog) : Container(widget), + gcn::MouseListener(), + gcn::WidgetListener(), mCharacter(nullptr), mPlayerBox(new PlayerBox(nullptr)), - mName(new Label(this, "wwwwwwwwwwwwwwwwwwwwwwww")) + mName(new Label(this, "wwwwwwwwwwwwwwwwwwwwwwww")), + mPopup(new TextPopup) { mPlayerBox->setActionEventId("select"); mPlayerBox->addActionListener(charSelectDialog); @@ -55,6 +59,14 @@ CharacterDisplay::CharacterDisplay(const Widget2 *const widget, else setWidth(80); setHeight(120); + addMouseListener(this); + addWidgetListener(this); +} + +CharacterDisplay::~CharacterDisplay() +{ + delete mPopup; + mPopup = nullptr; } void CharacterDisplay::setCharacter(Net::Character *const character) @@ -84,3 +96,21 @@ void CharacterDisplay::update() distributeResizedEvent(); } + +void CharacterDisplay::widgetHidden(const gcn::Event &event) +{ + mPopup->setVisible(false); +} + +void CharacterDisplay::mouseExited(gcn::MouseEvent &event) +{ + mPopup->setVisible(false); +} + +void CharacterDisplay::mouseMoved(gcn::MouseEvent &event) +{ + int mouseX = 0; + int mouseY = 0; + SDL_GetMouseState(&mouseX, &mouseY); + mPopup->show(mouseX, mouseY, mName->getCaption()); +} diff --git a/src/gui/widgets/characterdisplay.h b/src/gui/widgets/characterdisplay.h index 5c602b4f9..c7302ef48 100644 --- a/src/gui/widgets/characterdisplay.h +++ b/src/gui/widgets/characterdisplay.h @@ -29,12 +29,17 @@ #include "net/charserverhandler.h" #include "net/net.h" +#include <guichan/widgetlistener.hpp> + class Button; class CharSelectDialog; class Label; class PlayerBox; +class TextPopup; -class CharacterDisplay final : public Container +class CharacterDisplay final : public Container, + public gcn::MouseListener, + public gcn::WidgetListener { public: CharacterDisplay(const Widget2 *const widget, @@ -42,6 +47,8 @@ class CharacterDisplay final : public Container A_DELETE_COPY(CharacterDisplay) + virtual ~CharacterDisplay(); + void setCharacter(Net::Character *const character); Net::Character *getCharacter() const @@ -58,15 +65,19 @@ class CharacterDisplay final : public Container { return false; } void focusSelect() - { } + { } void focusDelete() - { } + { } void setSelect(bool b) - { - mPlayerBox->setSelected(b); - } + { mPlayerBox->setSelected(b); } + + void widgetHidden(const gcn::Event &event) override; + + void mouseExited(gcn::MouseEvent &event) override; + + void mouseMoved(gcn::MouseEvent &event) override; private: void update(); @@ -74,6 +85,7 @@ class CharacterDisplay final : public Container Net::Character *mCharacter; PlayerBox *mPlayerBox; Label *mName; + TextPopup *mPopup; }; #endif |