summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/widgets/characterdisplay.cpp32
-rw-r--r--src/gui/widgets/characterdisplay.h24
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