summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2011-07-05 00:23:22 +0200
committerYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2011-09-28 18:30:50 +0200
commitb3858a91e0f6b2c4706ea7b4418a26d4ef14baa7 (patch)
treea4840d65aba93f280db51415d155a4fb60f33eb9 /src/gui
parentd6449162225eeeed3f68fb443dcecfdaa235f3be (diff)
downloadmana-b3858a91e0f6b2c4706ea7b4418a26d4ef14baa7.tar.gz
mana-b3858a91e0f6b2c4706ea7b4418a26d4ef14baa7.tar.bz2
mana-b3858a91e0f6b2c4706ea7b4418a26d4ef14baa7.tar.xz
mana-b3858a91e0f6b2c4706ea7b4418a26d4ef14baa7.zip
Added textpopup on mouse hovering support to buttons.
I added a use of it to the menu buttons.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/widgets/button.cpp58
-rw-r--r--src/gui/widgets/button.h15
-rw-r--r--src/gui/windowmenu.cpp3
3 files changed, 74 insertions, 2 deletions
diff --git a/src/gui/widgets/button.cpp b/src/gui/widgets/button.cpp
index f072ef61..b2fa9e89 100644
--- a/src/gui/widgets/button.cpp
+++ b/src/gui/widgets/button.cpp
@@ -25,6 +25,7 @@
#include "graphics.h"
#include "gui/palette.h"
+#include "gui/textpopup.h"
#include "resources/image.h"
#include "resources/theme.h"
@@ -36,7 +37,8 @@
int Button::mInstances = 0;
float Button::mAlpha = 1.0;
-ImageRect *Button::mButton;
+ImageRect* Button::mButton;
+TextPopup* Button::mTextPopup = 0;
enum{
BUTTON_STANDARD, // 0
@@ -159,6 +161,10 @@ void Button::init()
btn[mode]->decRef();
}
updateAlpha();
+
+ // Load the popup
+ if (!mTextPopup)
+ mTextPopup = new TextPopup();
}
mInstances++;
}
@@ -175,6 +181,9 @@ Button::~Button()
dtor<Image*>());
}
delete[] mButton;
+
+ // Remove the popup
+ delete mTextPopup;
}
removeButtonIcon();
}
@@ -301,3 +310,50 @@ void Button::setCaption(const std::string& caption)
mCaption = caption;
adjustSize();
}
+
+void Button::logic()
+{
+ gcn::Button::logic();
+ mTextPopup->logic();
+}
+
+void Button::mouseMoved(gcn::MouseEvent &event)
+{
+ gcn::Button::mouseMoved(event);
+ mTextPopup->mouseMoved(event);
+
+ int x = event.getX();
+ int y = event.getY();
+
+ if (event.getSource() == this && !mPopupText.empty())
+ {
+ if (mParent)
+ {
+ x += mParent->getX();
+ y += mParent->getY();
+ }
+
+ mTextPopup->show(x + getX(), y + getY(), mPopupText);
+ }
+ else
+ {
+ mTextPopup->setVisible(false);
+ }
+}
+
+void Button::mouseExited(gcn::MouseEvent &event)
+{
+ gcn::Button::mouseExited(event);
+ mTextPopup->mouseExited(event);
+
+ mTextPopup->setVisible(false);
+}
+
+void Button::setButtonPopupText(const std::string& text)
+{
+ mPopupText = text;
+ if (!mPopupText.empty())
+ mTextPopup->show(getX(), getY(), mPopupText);
+ else
+ mTextPopup->setVisible(false);
+}
diff --git a/src/gui/widgets/button.h b/src/gui/widgets/button.h
index 6d8f773c..cfc5043e 100644
--- a/src/gui/widgets/button.h
+++ b/src/gui/widgets/button.h
@@ -26,6 +26,7 @@
class ImageRect;
class Image;
+class TextPopup;
/**
* Button widget. Same as the Guichan button but with custom look.
@@ -74,6 +75,17 @@ class Button : public gcn::Button
void setButtonIcon(const std::string& iconFile = std::string(),
int frameHeight = 0, int frameWidth = 0);
+ /**
+ * Set the button popup text when hovering it for a few seconds.
+ *
+ * @note: An empty text will disable the popup.
+ */
+ void setButtonPopupText(const std::string& text = "");
+
+ void logic();
+ void mouseMoved(gcn::MouseEvent &event);
+ void mouseExited(gcn::MouseEvent &event);
+
private:
void init();
@@ -84,6 +96,9 @@ class Button : public gcn::Button
static float mAlpha;
Image** mButtonIcon; /**< Button Icons graphics */
+
+ static TextPopup* mTextPopup; /**< The buttons popup */
+ std::string mPopupText; /**< the current button text */
};
#endif
diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp
index 542ab4a0..7011c82a 100644
--- a/src/gui/windowmenu.cpp
+++ b/src/gui/windowmenu.cpp
@@ -158,7 +158,8 @@ void WindowMenu::valueChanged(const gcn::SelectionEvent &event)
void WindowMenu::addButton(const char* text, int &x, int &h)
{
- gcn::Button *btn = new Button(gettext(text), text, this);
+ Button *btn = new Button(gettext(text), text, this);
+ btn->setButtonPopupText(gettext(text));
btn->setPosition(x, 0);
add(btn);
x += btn->getWidth() + 3;