From edea80319d2310f1ff9bb6511b94c1aa3ecd0b63 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 1 Nov 2014 18:50:19 +0100 Subject: [PATCH] refs #335, trinary logic for LEDs improved. The 3rd state usually means a transition state such as "connecting" --- src/blackgui/led.cpp | 83 +++++++++++++++++++++++++++++++++++++------- src/blackgui/led.h | 40 +++++++++++++++------ 2 files changed, 100 insertions(+), 23 deletions(-) diff --git a/src/blackgui/led.cpp b/src/blackgui/led.cpp index e77f150a9..f7cae1fd4 100644 --- a/src/blackgui/led.cpp +++ b/src/blackgui/led.cpp @@ -28,7 +28,8 @@ namespace BlackGui CLedWidget::CLedWidget(bool on, LedColor onColor, LedColor offColor, LedShape shape, const QString &onName, const QString &offName, QWidget *parent) : m_value(on ? On : Off), m_colorOn(onColor), m_colorOff(offColor), - m_shape(shape), m_tooltipOn(onName), m_tooltipOff(offName), m_renderer(new QSvgRenderer(parent)) + m_shape(shape), m_tooltipOn(onName), m_tooltipOff(offName), + m_renderer(new QSvgRenderer(parent)) { this->setLed(); } @@ -45,21 +46,41 @@ namespace BlackGui ledShapeAndColor = shapes().at(static_cast(this->m_shape)); if (ledColor == NoColor) { - if (m_value == On) + switch (m_value) + { + case On: + this->m_currentToolTip = this->m_tooltipOn; + ledShapeAndColor.append(CLedWidget::colorString(this->m_colorOn)); + break; + case TriState: + this->m_currentToolTip = this->m_tooltipTriState; + ledShapeAndColor.append(CLedWidget::colorString(this->m_colorTriState)); + break; + case Off: + default: + this->m_currentToolTip = this->m_tooltipOff; + ledShapeAndColor.append(CLedWidget::colorString(this->m_colorOff)); + break; + } + + } + else + { + if (ledColor == m_colorOn) { this->m_currentToolTip = this->m_tooltipOn; ledShapeAndColor.append(CLedWidget::colorString(this->m_colorOn)); } - else + else if (ledColor == m_colorOff) { this->m_currentToolTip = this->m_tooltipOff; ledShapeAndColor.append(CLedWidget::colorString(this->m_colorOff)); } - } - else - { - this->m_currentToolTip = "transition"; - ledShapeAndColor.append(CLedWidget::colorString(ledColor)); + else + { + this->m_currentToolTip = this->m_tooltipTriState; + ledShapeAndColor.append(CLedWidget::colorString(this->m_colorTriState)); + } } this->setToolTip(this->m_currentToolTip); // for widget @@ -104,16 +125,30 @@ namespace BlackGui return colors().at(static_cast(color)); } - void CLedWidget::setToolTips(const QString &on, const QString &off) + void CLedWidget::setToolTips(const QString &on, const QString &off, const QString &triState) { this->m_tooltipOn = on; this->m_tooltipOff = off; + this->m_tooltipTriState = triState; this->setLed(); } void CLedWidget::setOnToolTip(const QString &on) { - this->setToolTips(on, this->m_tooltipOff); + this->m_tooltipOn = on; + this->setLed(); + } + + void CLedWidget::setOffToolTip(const QString &off) + { + this->m_tooltipOff = off; + this->setLed(); + } + + void CLedWidget::setTriStateToolTip(const QString &triState) + { + this->m_tooltipTriState = triState; + this->setLed(); } void CLedWidget::setOnColor(LedColor color) @@ -130,10 +165,11 @@ namespace BlackGui setLed(); } - void CLedWidget::setTemporaryColor(CLedWidget::LedColor color) + void CLedWidget::setTriStateColor(CLedWidget::LedColor color) { - m_value = Temporary; - setLed(color); + if (color == this->m_colorOff) return; + m_colorTriState = color; + setLed(); } void CLedWidget::setShape(LedShape newShape) @@ -154,6 +190,20 @@ namespace BlackGui setLed(); } + void CLedWidget::setValues(LedColor onColor, LedColor offColor, LedColor triStateColor, LedShape shape, const QString &toolTipOn, const QString &toolTipOff, const QString &toolTipTriState, int width) + { + m_colorOn = onColor; + m_colorOff = offColor; + m_colorTriState = triStateColor; + m_shape = shape; + m_tooltipOn = toolTipOn; + m_tooltipOff = toolTipOff; + m_tooltipTriState = toolTipTriState; + m_widthTarget = width; + setLed(); + } + + QPixmap CLedWidget::asPixmap() const { return this->renderToPixmap(); @@ -167,6 +217,13 @@ namespace BlackGui setLed(); } + void CLedWidget::setTriState() + { + if (m_value == TriState) return; + m_value = TriState; + setLed(); + } + void CLedWidget::toggleValue() { m_value = (m_value == Off) ? m_value = On : m_value = Off; diff --git a/src/blackgui/led.h b/src/blackgui/led.h index 5abb2b72b..71404df55 100644 --- a/src/blackgui/led.h +++ b/src/blackgui/led.h @@ -39,7 +39,7 @@ namespace BlackGui enum LedShape { Circle = 0, Square, Triangle, Rounded}; //! States - enum State { On, Off, Temporary }; + enum State { On, Off, TriState }; //! Default constructor CLedWidget(QWidget *parent = nullptr); @@ -53,9 +53,12 @@ namespace BlackGui //! Value bool value() const { return m_value; } - //! Allows to set the led value {true,false} + //! Allows to set the led value {true, false} void setOn(bool on); + //! Sets the 3rd state + void setTriState(); + //! Toggle on / off void toggleValue(); @@ -68,6 +71,9 @@ namespace BlackGui //! Off color LedColor offColor() const { return m_colorOff; } + //! Tri-state color + LedColor triStateColor() const { return m_colorTriState; } + //! Allows to change the On color {Red,Green,Yellow,Grey,Orange,Purple,blue} void setOnColor(LedColor color); @@ -75,7 +81,7 @@ namespace BlackGui void setOffColor(LedColor color); //! Temporary color until next value change - void setTemporaryColor(LedColor color); + void setTriStateColor(LedColor color); //! Allows to change the led shape {Circle,Square,Triangle,Rounded rectangle} void setShape(LedShape); @@ -89,30 +95,44 @@ namespace BlackGui //! Tool tip QString getOffToolTip() const { return m_tooltipOff; } + //! Tool tip + QString getTriStateToolTip() const { return m_tooltipTriState; } + //! Tool tips - void setToolTips(const QString &on, const QString &off); + void setToolTips(const QString &on, const QString &off, const QString &triState = "tri-state"); //! On tool tip void setOnToolTip(const QString &on); - //! New values + //! Off tool tip + void setOffToolTip(const QString &off); + + //! Tri-state tool tip + void setTriStateToolTip(const QString &triState); + + //! New values dual state void setValues(LedColor onColor, LedColor offColor, LedShape shape, const QString &toolTipOn, const QString &toolTipOff, int width = -1); + //! New values tri-state + void setValues(LedColor onColor, LedColor offColor, LedColor triStateColor, LedShape shape, const QString &toolTipOn, const QString &toolTipOff, const QString &toolTipTriState, int width = -1); + //! Render as pixmap, so it can be used with TableViews QPixmap asPixmap() const; protected: State m_value = Off; //!< current value - LedColor m_colorOn = Red; //!< On color - LedColor m_colorOff = Grey; //!< Off color + LedColor m_colorOn = Yellow; //!< On color + LedColor m_colorOff = Black; //!< Off color + LedColor m_colorTriState = Blue; //!< tri-state color LedShape m_shape = Circle; //!< shape double m_whRatio = 1.0; //!< width/height ratio int m_widthTarget = -1; //!< desired width int m_heightCalculated = 1; //!< calculated height - QString m_tooltipOn; //!< tooltip when on - QString m_tooltipOff; //!< tooltip when off - QString m_currentToolTip; //!< currently used tooltip + QString m_tooltipOn = "on"; //!< tooltip when on + QString m_tooltipOff = "off"; //!< tooltip when off + QString m_tooltipTriState = "tri-state"; //!< tooltip tri state + QString m_currentToolTip = "off"; //!< currently used tooltip QScopedPointer m_renderer; //!< Renderer //! Paint event