diff options
Diffstat (limited to 'src/gui/widgets')
-rw-r--r-- | src/gui/widgets/button.cpp | 55 | ||||
-rw-r--r-- | src/gui/widgets/button.h | 10 |
2 files changed, 64 insertions, 1 deletions
diff --git a/src/gui/widgets/button.cpp b/src/gui/widgets/button.cpp index f8ae3e65c..0c71bf8bd 100644 --- a/src/gui/widgets/button.cpp +++ b/src/gui/widgets/button.cpp @@ -147,7 +147,7 @@ Button::Button(const Widget2 *const widget, mPressed(false) { init(); - loadImage(imageName); + loadImageSet(imageName); adjustSize(); setActionEventId(actionEventId); @@ -186,6 +186,46 @@ Button::Button(const Widget2 *const widget, const std::string &imageName, mPressed(false) { init(); + loadImageSet(imageName); + adjustSize(); + setActionEventId(actionEventId); + + if (listener) + addActionListener(listener); +} + +Button::Button(const Widget2 *const widget, + const std::string &caption, + const std::string &imageName, + const std::string &actionEventId, + gcn::ActionListener *const listener) : + gcn::Button(caption), + Widget2(widget), + gcn::WidgetListener(), + mDescription(), + mVertexes2(new ImageCollection), + mEnabledColor(getThemeColor(Theme::BUTTON)), + mEnabledColor2(getThemeColor(Theme::BUTTON_OUTLINE)), + mDisabledColor(getThemeColor(Theme::BUTTON_DISABLED)), + mDisabledColor2(getThemeColor(Theme::BUTTON_DISABLED_OUTLINE)), + mHighlightedColor(getThemeColor(Theme::BUTTON_HIGHLIGHTED)), + mHighlightedColor2(getThemeColor(Theme::BUTTON_HIGHLIGHTED_OUTLINE)), + mPressedColor(getThemeColor(Theme::BUTTON_PRESSED)), + mPressedColor2(getThemeColor(Theme::BUTTON_PRESSED_OUTLINE)), + mImages(nullptr), + mImageSet(nullptr), + mClickCount(0), + mTag(0), + mMode(0), + mXOffset(0), + mYOffset(0), + mImageWidth(0), + mImageHeight(0), + mRedraw(true), + mStick(false), + mPressed(false) +{ + init(); loadImage(imageName); adjustSize(); setActionEventId(actionEventId); @@ -253,6 +293,19 @@ void Button::loadImage(const std::string &imageName) mImageSet->decRef(); mImageSet = nullptr; } + Image *const image = Theme::getImageFromThemeXml(imageName, ""); + mImages = new Image*[BUTTON_COUNT]; + for (int f = 0; f < BUTTON_COUNT; f ++) + mImages[f] = image; +} + +void Button::loadImageSet(const std::string &imageName) +{ + if (mImageSet) + { + mImageSet->decRef(); + mImageSet = nullptr; + } mImageSet = Theme::getImageSetFromTheme(imageName, mImageWidth, mImageHeight); if (!mImageSet) diff --git a/src/gui/widgets/button.h b/src/gui/widgets/button.h index 2ba91822b..e07a3bc1d 100644 --- a/src/gui/widgets/button.h +++ b/src/gui/widgets/button.h @@ -79,6 +79,14 @@ class Button final : public gcn::Button, const std::string &actionEventId, gcn::ActionListener *const listener); + /** + * Constructor, sets the caption of the button to the given string and + * adds the given action listener. + */ + Button(const Widget2 *const widget, const std::string &imageName, + const std::string &caption, const std::string &actionEventId, + gcn::ActionListener *const listener); + A_DELETE_COPY(Button) /** @@ -125,6 +133,8 @@ class Button final : public gcn::Button, void loadImage(const std::string &imageName); + void loadImageSet(const std::string &imageName); + void adjustSize(); void setCaption(const std::string& caption); |