Skip to content

Commit

Permalink
gui/toolmenuheaderwidget: Use ledBorder instead of BlinkingButton.
Browse files Browse the repository at this point in the history
The led color will be set through a style property.
The led is new handled here.

Signed-off-by: andreidanila1 <[email protected]>
  • Loading branch information
andreidanila1 committed Nov 25, 2024
1 parent 39e7f25 commit 6a677bb
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 22 deletions.
17 changes: 15 additions & 2 deletions gui/include/gui/widgets/toolmenuheaderwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,29 @@ class SCOPY_GUI_EXPORT ToolMenuHeaderWidget : public QWidget, public BaseHeader

Q_SIGNALS:
void blinkLed(int retCode);
void devicePressed();

private Q_SLOTS:
void onBlinkLed(int retCode);
void startBlinking(int blinkPeriodMsec = 100);
void stopBlinking();

private:
void setupTimers(QWidget *parent);
void setLedState(QString state, QWidget *parent);

bool m_isIdle;
QString m_ledState;
QPushButton *m_deviceBtn;
BlinkingButton *m_greenBtn;
BlinkingButton *m_redBtn;
QLineEdit *m_title;
QLabel *m_uriLabel;
QTimer *m_timer;
QTimer *m_blinkTimer;

const int LED_RUNNING_TIME = 500;
const QString ERROR_STATE = "error";
const QString SUCCESS_STATE = "success";
const QString IDLE_STATE = "idle";
};
} // namespace scopy

Expand Down
69 changes: 49 additions & 20 deletions gui/src/widgets/toolmenuheaderwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
*/

#include "toolmenuheaderwidget.h"

#include <style.h>
#include <stylehelper.h>

Expand Down Expand Up @@ -49,21 +48,16 @@ ToolMenuHeaderWidget::ToolMenuHeaderWidget(QString title, QWidget *parent)
titleLay->addWidget(m_title);
titleLay->addWidget(m_uriLabel);

QWidget *ledWidget = new QWidget(this);
QVBoxLayout *ledLay = new QVBoxLayout(ledWidget);
ledLay->setMargin(0);
ledLay->setSpacing(0);

m_greenBtn = new BlinkingButton(":/gui/icons/green_led.svg", this);
m_redBtn = new BlinkingButton(":/gui/icons/red_led.svg", this);
ledLay->addWidget(m_redBtn);
ledLay->addWidget(m_greenBtn);

hLay->addWidget(m_deviceBtn);
hLay->addWidget(titleWidget);
hLay->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
hLay->addWidget(ledWidget);

m_isIdle = true;
m_ledState = IDLE_STATE;
setupTimers(parent);

connect(this, &ToolMenuHeaderWidget::blinkLed, this, &ToolMenuHeaderWidget::onBlinkLed);
connect(m_deviceBtn, &QPushButton::pressed, this, &ToolMenuHeaderWidget::devicePressed);
}

ToolMenuHeaderWidget::~ToolMenuHeaderWidget() {}
Expand All @@ -74,11 +68,10 @@ QString ToolMenuHeaderWidget::title() { return m_title->text(); }

void ToolMenuHeaderWidget::setDeviceIcon(QPixmap icon)
{
QSize size = QSize(Style::getDimension(json::global::unit_2), Style::getDimension(json::global::unit_2));
m_deviceBtn->setIcon(QIcon(icon));
m_deviceBtn->setIconSize(
QSize(Style::getDimension(json::global::unit_2), Style::getDimension(json::global::unit_2)));
m_deviceBtn->setFixedSize(
QSize(Style::getDimension(json::global::unit_2), Style::getDimension(json::global::unit_2)));
m_deviceBtn->setIconSize(size);
m_deviceBtn->setFixedSize(size);
}

void ToolMenuHeaderWidget::setUri(QString uri)
Expand All @@ -89,11 +82,47 @@ void ToolMenuHeaderWidget::setUri(QString uri)

void ToolMenuHeaderWidget::onBlinkLed(int retCode)
{
if(retCode < 0) {
m_redBtn->startBlinking();
} else {
m_greenBtn->startBlinking();
m_ledState = (retCode < 0) ? ERROR_STATE : SUCCESS_STATE;
startBlinking();
}

void ToolMenuHeaderWidget::startBlinking(int blinkPeriodMsec)
{
m_timer->start();
if(!m_blinkTimer->isActive()) {
m_blinkTimer->start(blinkPeriodMsec);
}
}

void ToolMenuHeaderWidget::stopBlinking()
{
m_blinkTimer->stop();
m_timer->stop();
m_isIdle = true;
}

void ToolMenuHeaderWidget::setupTimers(QWidget *parent)
{
// Timer to reset LED to idle state
m_timer = new QTimer(this);
m_timer->setInterval(LED_RUNNING_TIME);
connect(m_timer, &QTimer::timeout, this, [this, parent]() {
stopBlinking();
setLedState(IDLE_STATE, parent);
});

// Timer to handle LED blinking
m_blinkTimer = new QTimer(this);
connect(m_blinkTimer, &QTimer::timeout, this, [this, parent]() {
m_isIdle = !m_isIdle;
QString state = (m_isIdle) ? IDLE_STATE : m_ledState;
setLedState(state, parent);
});
}

void ToolMenuHeaderWidget::setLedState(QString state, QWidget *parent)
{
Style::setStyle(parent, style::properties::widget::ledBorder, state);
}

#include "moc_toolmenuheaderwidget.cpp"
1 change: 1 addition & 0 deletions gui/style/json/global.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"padding_2": "12",
"padding_interactive": "5",
"border_width": "1",
"border_width_2": "8",
"border_width_interactive": "1",
"ch0": "#E76423",
"ch1": "#B16EE0",
Expand Down
14 changes: 14 additions & 0 deletions gui/style/qss/properties/widget/ledBorder.qss
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
QWidget[&&property&&="idle"] {
border-left: &border_width_2& solid transparent;
border-radius: 0;
}

QWidget[&&property&&="error"] {
border-left: &border_width_2& solid red;
border-radius: 0;
}

QWidget[&&property&&="success"] {
border-left: &border_width_2& solid green;
border-radius: 0;
}

0 comments on commit 6a677bb

Please sign in to comment.