diff options
author | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2011-07-05 00:23:22 +0200 |
---|---|---|
committer | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2011-09-28 18:30:50 +0200 |
commit | b3858a91e0f6b2c4706ea7b4418a26d4ef14baa7 (patch) | |
tree | a4840d65aba93f280db51415d155a4fb60f33eb9 /src/gui | |
parent | d6449162225eeeed3f68fb443dcecfdaa235f3be (diff) | |
download | mana-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.cpp | 58 | ||||
-rw-r--r-- | src/gui/widgets/button.h | 15 | ||||
-rw-r--r-- | src/gui/windowmenu.cpp | 3 |
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; |