# HG changeset patch # User Hasan Yavuz ÖZDERYA # Date 2018-08-20 09:47:47 # Node ID 22c28fc643107487a0d133258ab21c81c1fa434b # Parent eab37541abf28c36112741af3f46705e0800e0e3 removed ledwidget external dependency by copying files to project diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,18 +52,10 @@ else () find_package(QtColorWidgets REQUIRED) endif () -set(BUILD_LEDWIDGET true CACHE BOOL "Download and build LedWidget automatically.") -if (BUILD_LEDWIDGET) - include(BuildLedWidget) -else (BUILD_LEDWIDGET) - include(FindLedWidget) -endif (BUILD_LEDWIDGET) - # includes include_directories("./src" ${QWT_INCLUDE_DIR} ${QTCOLORWIDGETS_INCLUDE_DIRS} - ${LEDWIDGET_INCLUDE_DIR} ) # flags @@ -152,6 +144,7 @@ add_executable(${PROGRAM_NAME} WIN32 src/source.cpp src/sink.cpp src/samplecounter.cpp + src/ledwidget.cpp misc/windows_icon.rc ${UI_FILES} ${RES_FILES} @@ -161,7 +154,6 @@ add_executable(${PROGRAM_NAME} WIN32 target_link_libraries(${PROGRAM_NAME} ${QWT_LIBRARY} ${QTCOLORWIDGETS_LIBRARIES} - ${LEDWIDGET_LIBRARY} ) qt5_use_modules(${PROGRAM_NAME} Widgets SerialPort Network) @@ -173,11 +165,6 @@ if (BUILD_QTCOLORWIDGETS) add_dependencies(${PROGRAM_NAME} QCW) endif () -if (BUILD_LEDWIDGET) - add_dependencies(${PROGRAM_NAME} LEDW) -endif (BUILD_LEDWIDGET) - - # set compiler flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") diff --git a/cmake/modules/BuildLedWidget.cmake b/cmake/modules/BuildLedWidget.cmake deleted file mode 100644 --- a/cmake/modules/BuildLedWidget.cmake +++ /dev/null @@ -1,30 +0,0 @@ -# -# Copyright © 2017 Hasan Yavuz Özderya -# -# This file is part of serialplot. -# -# serialplot is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# serialplot is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with serialplot. If not, see . -# - -include(ExternalProject) - -ExternalProject_Add(LEDW - PREFIX ledw - HG_REPOSITORY https://bitbucket.org/hyOzd/ledwidget - UPDATE_COMMAND "" - INSTALL_COMMAND "") - -ExternalProject_Get_Property(LEDW binary_dir source_dir) -set(LEDWIDGET_INCLUDE_DIR ${source_dir}/src) -set(LEDWIDGET_LIBRARY ${binary_dir}/libledwidget.a) diff --git a/src/ledwidget.cpp b/src/ledwidget.cpp new file mode 100644 --- /dev/null +++ b/src/ledwidget.cpp @@ -0,0 +1,129 @@ +/* + Copyright © 2018 Hasan Yavuz Özderya + + This file is part of serialplot. + + ledwidget is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ledwidget is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ledwidget. If not, see . +*/ + +#include "ledwidget.h" +#include +#include +#include + +LedWidget::LedWidget(QWidget* parent) : QWidget(parent), + m_color(107,223,51), + m_on(true) +{ + resize(20,20); +} + +QSize LedWidget::sizeHint() const +{ + return QSize(20,20); +} + +QSize LedWidget::minimumSizeHint() const +{ + return QSize(10, 10); +} + +void LedWidget::setColor(QColor ledColor) +{ + if (m_color == ledColor) return; + m_color = ledColor; + update(); + emit colorChanged(m_color); +} + +bool LedWidget::isOn() +{ + return m_on; +} + +void LedWidget::setOn(bool on) +{ + if (on == m_on) return; + m_on = on; + update(); + emit onChanged(on); +} + +void LedWidget::turnOn() +{ + setOn(true); +} + +void LedWidget::turnOff() +{ + setOn(false); +} + +void LedWidget::toggle() +{ + setOn(!m_on); +} + +void LedWidget::paintEvent(QPaintEvent* event) +{ + Q_UNUSED(event) + + const qreal r = std::min(width(), height()) / 2; // maximum radius including glow + const qreal glowOffset = std::max(2., r/5.); + const qreal borderOffset = std::max(1., r/10.); + const qreal shineOffset = std::max(1., r/20.); + const QPointF center(width()/2, height()/2); + + const qreal gr = r; + const qreal br = gr - glowOffset; // border shape radius + const qreal ir = br - borderOffset; // inner fill radius + const qreal sr = ir - shineOffset; + + QColor borderColor(130,130,130); + QColor shineColor(255, 255, 255, m_on ? 200 : 50); + QColor fillColor(m_color); + + QPainter painter(this); + painter.setRenderHints(QPainter::Antialiasing); + + // draw border + painter.setPen(Qt::NoPen); + painter.setBrush(borderColor); + painter.drawEllipse(center, br, br); + + // draw infill + if (!m_on) fillColor = fillColor.darker(); + painter.setBrush(fillColor); + painter.drawEllipse(center, ir, ir); + + // draw glow + if (m_on) + { + QColor glowColor(m_color); + glowColor.setAlphaF(0.5); + QRadialGradient glowGradient(center, gr, center); + glowGradient.setColorAt(0, glowColor); + glowGradient.setColorAt((r-glowOffset)/r, glowColor); + glowGradient.setColorAt(1, Qt::transparent); + painter.setBrush(glowGradient); + painter.drawEllipse(center, gr, gr); + } + + // draw shine + QRadialGradient shineGradient(center, sr, center-QPoint(sr/2,sr/2)); + shineGradient.setColorAt(0, shineColor); + shineGradient.setColorAt(1, Qt::transparent); + painter.setBrush(shineGradient); + painter.drawEllipse(center, sr, sr); +} diff --git a/src/ledwidget.h b/src/ledwidget.h new file mode 100644 --- /dev/null +++ b/src/ledwidget.h @@ -0,0 +1,61 @@ +/* + Copyright © 2018 Hasan Yavuz Özderya + + This file is part of serialplot. + + ledwidget is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ledwidget is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ledwidget. If not, see . +*/ + +#ifndef LEDWIDGET_H +#define LEDWIDGET_H + +#include +#include +#include + +class LedWidget : public QWidget +{ + Q_OBJECT + + Q_PROPERTY(QColor color MEMBER m_color WRITE setColor NOTIFY colorChanged) + Q_PROPERTY(bool on READ isOn WRITE setOn NOTIFY onChanged) + +public: + explicit LedWidget(QWidget *parent = 0); + + void setColor(QColor ledColor); + bool isOn(); + + QSize sizeHint() const Q_DECL_OVERRIDE; + QSize minimumSizeHint() const Q_DECL_OVERRIDE; + +signals: + void colorChanged(QColor ledColor); + void onChanged(bool on); + +public slots: + void setOn(bool on); + void turnOn(); + void turnOff(); + void toggle(); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + QColor m_color; + bool m_on; +}; + +#endif // LEDWIDGET_H