From 19b9cddf7d5ef3daac5cda481db492f28574d28d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Nusser?= Date: Sun, 16 Apr 2017 12:54:16 +0200 Subject: Move button functionality to BaseButton. Create TabButton. --- plugingui/tabbutton.cc | 84 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 6 deletions(-) (limited to 'plugingui/tabbutton.cc') diff --git a/plugingui/tabbutton.cc b/plugingui/tabbutton.cc index 2a55572..1fc4619 100644 --- a/plugingui/tabbutton.cc +++ b/plugingui/tabbutton.cc @@ -26,24 +26,96 @@ */ #include "tabbutton.h" +#include "painter.h" + namespace GUI { -TabButton::TabButton(Widget* parent, Widget* tabWidget) - : Button(parent) - , tabWidget(tabWidget) +TabButton::TabButton(Widget* parent, Widget* tab_widget) + : ButtonBase(parent) + , tab_widget(tab_widget) { CONNECT(this, clickNotifier, this, &TabButton::clickHandler); } -Widget *TabButton::getTabWidget() +TabButton::~TabButton() +{ +} + +Widget* TabButton::getTabWidget() +{ + return tab_widget; +} + +std::size_t TabButton::getMinimalWidth() const { - return tabWidget; + std::size_t padding = 15; + auto font_width = font.textWidth(text); + + return font_width + padding; +} + +std::size_t TabButton::getMinimalHeight() const +{ + std::size_t padding = 10; + auto font_height= font.textHeight(text); + + return font_height + padding; +} + +void TabButton::setActive(bool active) +{ + if (active) { + draw_state = State::Down; + } + else { + draw_state = State::Up; + } + + redraw(); +} + +void TabButton::repaintEvent(RepaintEvent* e) +{ + Painter p(*this); + + p.clear(); + + int padTop = 3; + int padLeft = 0; + + int w = width(); + int h = height(); + if(w == 0 || h == 0) + { + return; + } + + switch(draw_state) + { + case State::Up: + tab_passive.setSize(w - padLeft, h - padTop); + p.drawImage(padLeft, padTop, tab_passive); + break; + + case State::Down: + tab_active.setSize(w - padLeft, h - padTop); + p.drawImage(padLeft, padTop, tab_active); + break; + } + + p.setColour(Colour(0.1)); + // FIXME: fix all the magic values here + auto x = (width() / 2) - (3 * text.length()) + + (draw_state == State::Up ? 0 : 1) + (padLeft / 2); + auto y = (height() / 2) + 5 + 1 + (draw_state == State::Up ? 0 : 1) + + (padTop / 2); + p.drawText(x, y + 4, font, text, true); } void TabButton::clickHandler() { - switchTabNotifier(tabWidget); + switchTabNotifier(tab_widget); } } // GUI:: -- cgit v1.2.3