Changeset - 22c28fc64310
[Not reviewed]
default
1 1 2
Hasan Yavuz ÖZDERYA - 7 years ago 2018-08-20 09:47:47
hy@ozderya.net
removed ledwidget external dependency by copying files to project
4 files changed with 191 insertions and 44 deletions:
0 comments (0 inline, 0 general)
CMakeLists.txt
Show inline comments
 
@@ -43,36 +43,28 @@ if (BUILD_QWT)
 
else (BUILD_QWT)
 
    find_package(Qwt 6.1 REQUIRED)
 
endif (BUILD_QWT)
 

	
 
# If set, cmake will download QtColorWidgets over git, build and use it as a static library.
 
set(BUILD_QTCOLORWIDGETS true CACHE BOOL "Download and build QtColorWidgets library automatically.")
 
if (BUILD_QTCOLORWIDGETS)
 
  include(BuildQColorWidgets)
 
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
 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${QTCOLORWIDGETS_FLAGS}")
 

	
 
# wrap UI and resource files
 
qt5_wrap_ui(UI_FILES
 
  src/mainwindow.ui
 
  src/portcontrol.ui
 
  src/about_dialog.ui
 
  src/snapshotview.ui
 
  src/commandpanel.ui
 
@@ -143,50 +135,45 @@ add_executable(${PROGRAM_NAME} WIN32
 
  src/plotmenu.cpp
 
  src/barplot.cpp
 
  src/barchart.cpp
 
  src/barscaledraw.cpp
 
  src/numberformat.cpp
 
  src/updatechecker.cpp
 
  src/versionnumber.cpp
 
  src/updatecheckdialog.cpp
 
  src/samplepack.cpp
 
  src/source.cpp
 
  src/sink.cpp
 
  src/samplecounter.cpp
 
  src/ledwidget.cpp
 
  misc/windows_icon.rc
 
  ${UI_FILES}
 
  ${RES_FILES}
 
  )
 

	
 
# Use the Widgets module from Qt 5.
 
target_link_libraries(${PROGRAM_NAME}
 
  ${QWT_LIBRARY}
 
  ${QTCOLORWIDGETS_LIBRARIES}
 
  ${LEDWIDGET_LIBRARY}
 
  )
 
qt5_use_modules(${PROGRAM_NAME} Widgets SerialPort Network)
 

	
 
if (BUILD_QWT)
 
  add_dependencies(${PROGRAM_NAME} QWT)
 
endif ()
 

	
 
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")
 

	
 
# Enable C++11 support, fail if not supported
 
include(CheckCXXCompilerFlag)
 
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
 
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
 
if(COMPILER_SUPPORTS_CXX11)
 
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 
elseif(COMPILER_SUPPORTS_CXX0X)
 
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
 
else()
cmake/modules/BuildLedWidget.cmake
Show inline comments
 
deleted file
src/ledwidget.cpp
Show inline comments
 
new file 100644
 
/*
 
  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 <http://www.gnu.org/licenses/>.
 
*/
 

	
 
#include "ledwidget.h"
 
#include <QPainter>
 
#include <QPainterPath>
 
#include <QRadialGradient>
 

	
 
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);
 
}
src/ledwidget.h
Show inline comments
 
new file 100644
 
/*
 
  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 <http://www.gnu.org/licenses/>.
 
*/
 

	
 
#ifndef LEDWIDGET_H
 
#define LEDWIDGET_H
 

	
 
#include <QWidget>
 
#include <QSize>
 
#include <QColor>
 

	
 
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
0 comments (0 inline, 0 general)