version 2.32.0

work with icons - remove unused, organize and update to last oxygen
add BusyIcon widget
This commit is contained in:
2024-10-30 22:22:44 +03:00
parent f8fec93f0e
commit e791618a17
158 changed files with 436 additions and 159 deletions

114
libs/widgets/busy_icon.cpp Normal file
View File

@@ -0,0 +1,114 @@
#include "busy_icon.h"
#include "qad_types.h"
#include <QApplication>
#include <QPainter>
#include <qmath.h>
BusyIcon::BusyIcon(QWidget * parent): QWidget(parent) {}
BusyIcon::~BusyIcon() {}
void BusyIcon::start() {
stop();
ang = 0;
timer = startTimer(25);
}
void BusyIcon::stop() {
if (timer == 0) return;
killTimer(timer);
timer = 0;
}
QIcon BusyIcon::icon() {
return icon_;
}
void BusyIcon::setIcon(QIcon i) {
icon_ = i;
image = i.pixmap(512, 512).toImage();
}
void BusyIcon::setIconSize(qreal s) {
icon_size = s;
updateGeometry();
update();
}
void BusyIcon::setIconScale(qreal s) {
icon_scale = s;
updateGeometry();
update();
}
void BusyIcon::setCircleWidth(qreal s) {
circle_width = s;
updateGeometry();
update();
}
QSize BusyIcon::sizeHint() const {
return preferredIconSize(icon_size, this);
}
void BusyIcon::timerEvent(QTimerEvent *) {
if (!isVisible()) return;
ang += 1;
update();
}
QPointF point(qreal r, qreal a) {
return QPointF(-r * sin(a), -r * cos(a));
}
qreal frag(qreal a, qreal f) {
int i = (int)(a / f);
return a - (i * f);
}
qreal angle(int a) {
return (cos(frag(a / 15., M_PI)) - 1) * M_PI;
}
void BusyIcon::paintEvent(QPaintEvent *) {
QPainter p(this);
if (rect().isEmpty()) return;
qreal w = width(), h = height();
p.translate(w / 2., h / 2.);
p.scale(qMin(w, h), qMin(w, h));
float imgsz = icon_scale / 100.f, ioff = circle_width / 200.f;
p.setRenderHint(QPainter::SmoothPixmapTransform);
p.setRenderHint(QPainter::Antialiasing);
p.drawImage(QRectF(-imgsz / 2., -imgsz / 2., imgsz, imgsz), image);
p.setPen(Qt::NoPen);
p.setBrush(palette().brush(QPalette::Active, QPalette::Highlight));
p.setRenderHint(QPainter::Antialiasing);
qreal sa = angle(ang), ea = angle(ang + 10);
if (ea > sa) ea -= M_PI * 2.;
qreal rs = 0.5 - ioff, rb = 0.5;
int steps = qMin(128, qRound(qAbs(ea - sa) / 0.025));
QPolygonF pol;
for (int i = 0; i <= steps; ++i) {
qreal c = i / (qreal)steps;
pol << point(rs, sa * c + ea * (1. - c));
}
for (int i = 0; i <= steps; ++i) {
qreal c = i / (qreal)steps;
pol << point(rb, ea * c + sa * (1. - c));
}
p.drawPolygon(pol);
}

56
libs/widgets/busy_icon.h Normal file
View File

@@ -0,0 +1,56 @@
#ifndef busy_icon_H
#define busy_icon_H
#include "qad_widgets_export.h"
#include <QDebug>
#include <QIcon>
#include <QWidget>
QT_BEGIN_NAMESPACE
class QAD_WIDGETS_EXPORT BusyIcon: public QWidget {
Q_OBJECT
Q_PROPERTY(QIcon icon READ icon WRITE setIcon)
Q_PROPERTY(qreal iconSize READ iconSize WRITE setIconSize)
Q_PROPERTY(qreal iconScale READ iconScale WRITE setIconScale)
Q_PROPERTY(qreal circleWidth READ circleWidth WRITE setCircleWidth)
public:
explicit BusyIcon(QWidget * parent = 0);
~BusyIcon();
QIcon icon();
void setIcon(QIcon i);
qreal iconSize() { return icon_size; }
void setIconSize(qreal s);
qreal iconScale() { return icon_scale; }
void setIconScale(qreal s);
qreal circleWidth() { return circle_width; }
void setCircleWidth(qreal s);
private:
QSize sizeHint() const;
void timerEvent(QTimerEvent *);
void paintEvent(QPaintEvent *);
QIcon icon_;
QImage image;
qreal icon_size = 5.f, icon_scale = 75.f, circle_width = 20.f;
int timer = 0, ang = 0;
private slots:
public slots:
void start();
void stop();
signals:
};
QT_END_NAMESPACE
#endif

View File

@@ -0,0 +1,66 @@
#include "busy_iconplugin.h"
#include "busy_icon.h"
#include <QtCore/QtPlugin>
BusyIconPlugin::BusyIconPlugin(QObject * parent): QObject(parent) {
m_initialized = false;
}
void BusyIconPlugin::initialize(QDesignerFormEditorInterface * /* core */) {
if (m_initialized) return;
m_initialized = true;
}
bool BusyIconPlugin::isInitialized() const {
return m_initialized;
}
QWidget * BusyIconPlugin::createWidget(QWidget * parent) {
return new BusyIcon(parent);
}
QString BusyIconPlugin::name() const {
return QLatin1String("BusyIcon");
}
QString BusyIconPlugin::group() const {
return QLatin1String("Display Widgets");
}
QIcon BusyIconPlugin::icon() const {
return QIcon(":/icons/widgets/busy-icon.png");
}
QString BusyIconPlugin::toolTip() const {
return QLatin1String("Busy indicator");
}
QString BusyIconPlugin::whatsThis() const {
return QLatin1String("Busy indicator");
}
bool BusyIconPlugin::isContainer() const {
return false;
}
QString BusyIconPlugin::domXml() const {
return QLatin1String("<widget class=\"BusyIcon\" name=\"iconBusy\">\n</widget>\n");
}
QString BusyIconPlugin::includeFile() const {
return QLatin1String("busy_icon.h");
}

View File

@@ -0,0 +1,36 @@
#ifndef busy_iconplugin_H
#define busy_iconplugin_H
#include <QObject>
#if QT_VERSION >= 0x050000
# include <QtUiPlugin/QDesignerCustomWidgetInterface>
#else
# include <QDesignerCustomWidgetInterface>
#endif
class BusyIconPlugin
: public QObject
, public QDesignerCustomWidgetInterface {
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
public:
BusyIconPlugin(QObject * parent = 0);
bool isContainer() const;
bool isInitialized() const;
QIcon icon() const;
QString domXml() const;
QString group() const;
QString includeFile() const;
QString name() const;
QString toolTip() const;
QString whatsThis() const;
QWidget * createWidget(QWidget * parent);
void initialize(QDesignerFormEditorInterface * core);
private:
bool m_initialized;
};
#endif

View File

@@ -40,7 +40,7 @@ QString CircleIndicatorPlugin::group() const {
QIcon CircleIndicatorPlugin::icon() const {
return QIcon(":/icons/circle-indicator.png");
return QIcon(":/icons/widgets/circle-indicator.png");
}

View File

@@ -40,7 +40,7 @@ QString CLineEditPlugin::group() const {
QIcon CLineEditPlugin::icon() const {
return QIcon(":/icons/clineedit.png");
return QIcon(":/icons/widgets/clineedit.png");
}

View File

@@ -40,7 +40,7 @@ QString ColorButtonPlugin::group() const {
QIcon ColorButtonPlugin::icon() const {
return QIcon(":/icons/colorbutton.png");
return QIcon(":/icons/widgets/colorbutton.png");
}

View File

@@ -40,7 +40,7 @@ QString EComboBoxPlugin::group() const {
QIcon EComboBoxPlugin::icon() const {
return QIcon(":/icons/ecombobox.png");
return QIcon(":/icons/widgets/ecombobox.png");
}

View File

@@ -40,7 +40,7 @@ QString EvalSpinBoxPlugin::group() const {
QIcon EvalSpinBoxPlugin::icon() const {
return QIcon(":/icons/evalspinbox.png");
return QIcon(":/icons/widgets/evalspinbox.png");
}

View File

@@ -40,7 +40,7 @@ QString ImageViewPlugin::group() const {
QIcon ImageViewPlugin::icon() const {
return QIcon(":/icons/view-preview.png");
return QIcon(":/icons/widgets/image-view.png");
}

View File

@@ -39,7 +39,7 @@ QString IconedLabelPlugin::group() const {
QIcon IconedLabelPlugin::icon() const {
return QIcon();
return QIcon(":/icons/widgets/iconed-label.png");
}

View File

@@ -1,5 +1,6 @@
#include "qad_widgets.h"
#include "busy_iconplugin.h"
#include "circleindicatorplugin.h"
#include "clineeditplugin.h"
#include "colorbuttonplugin.h"
@@ -42,7 +43,9 @@ QADWidgets::QADWidgets(QObject * parent): QObject(parent) {
<< new ScrollSpinBoxPlugin(this)
<< new RangeSliderPlugin(this)
<< new StateIconPlugin(this)
<< new CircleIndicatorPlugin(this);
<< new CircleIndicatorPlugin(this)
<< new BusyIconPlugin(this)
;
// clang-format on
}

View File

@@ -40,7 +40,7 @@ QString QCodeEditPlugin::group() const {
QIcon QCodeEditPlugin::icon() const {
return QIcon(":/icons/qcodeedit.png");
return QIcon(":/icons/widgets/qcodeedit.png");
}

View File

@@ -40,7 +40,7 @@ QString QPIConsolePlugin::group() const {
QIcon QPIConsolePlugin::icon() const {
return QIcon(":/icons/qpiconsole.png");
return QIcon(":/icons/widgets/qpiconsole.png");
}

View File

@@ -40,7 +40,7 @@ QString QVariantEditPlugin::group() const {
QIcon QVariantEditPlugin::icon() const {
return QIcon(":/icons/qvariantedit.png");
return QIcon(":/icons/widgets/qvariantedit.png");
}

View File

@@ -40,7 +40,7 @@ QString ScrollSpinBoxPlugin::group() const {
QIcon ScrollSpinBoxPlugin::icon() const {
return QIcon(":/icons/scroll_spin.png");
return QIcon(":/icons/widgets/scrollspin.png");
}

View File

@@ -40,7 +40,7 @@ QString SpinSliderPlugin::group() const {
QIcon SpinSliderPlugin::icon() const {
return QIcon(":/icons/spinslider.png");
return QIcon(":/icons/widgets/spinslider.png");
}

View File

@@ -156,7 +156,7 @@ QString StateIconPlugin::group() const {
QIcon StateIconPlugin::icon() const {
return QIcon(":/icons/led_on.png");
return QIcon(":/icons/widgets/status-icon.png");
}

View File

@@ -1,46 +1,49 @@
<RCC>
<qresource prefix="/">
<file>../../icons/edit-clear-locationbar-rtl.png</file>
<file>../../icons/edit-copy.png</file>
<file>../../icons/edit-paste.png</file>
<file>../../icons/edit-find.png</file>
<file>../../icons/edit-delete.png</file>
<file>../../icons/edit-clear.png</file>
<file>../../icons/dialog-ok-apply.png</file>
<file>../../icons/dialog-warning.png</file>
<file>../../icons/tools-wizard.png</file>
<file>../../icons/go-next.png</file>
<file>../../icons/go-previous.png</file>
<file>../../icons/item.png</file>
<file>../../icons/item-add.png</file>
<file>../../icons/node.png</file>
<file>../../icons/node-add.png</file>
<file>../../icons/list-add.png</file>
<file>../../icons/list-remove.png</file>
<file>../../icons/list-edit-apply.png</file>
<file>../../icons/document-new.png</file>
<file>../../icons/document-edit.png</file>
<file>../../icons/document-close.png</file>
<file>../../icons/document-save.png</file>
<file>../../icons/document-save-as.png</file>
<file>../../icons/document-save-all.png</file>
<file>../../icons/document-revert.png</file>
<file>../../icons/document-open.png</file>
<file>../../icons/document-open-recent.png</file>
<file>../../icons/alpha.png</file>
<file>../../icons/chardialog.png</file>
<file>../../icons/clineedit.png</file>
<file>../../icons/colorbutton.png</file>
<file>../../icons/ecombobox.png</file>
<file>../../icons/evalspinbox.png</file>
<file>../../icons/qcodeedit.png</file>
<file>../../icons/qpiconsole.png</file>
<file>../../icons/qvariantedit.png</file>
<file>../../icons/spinslider.png</file>
<file>../../icons/code-word.png</file>
<file>../../icons/f1.png</file>
<file>../../icons/scroll_spin.png</file>
<file>../../icons/led_on.png</file>
<file>../../icons/circle-indicator.png</file>
</qresource>
<qresource prefix="/">
<file>../../icons/edit-clear-locationbar-rtl.png</file>
<file>../../icons/edit-copy.png</file>
<file>../../icons/edit-paste.png</file>
<file>../../icons/edit-find.png</file>
<file>../../icons/edit-delete.png</file>
<file>../../icons/edit-clear.png</file>
<file>../../icons/dialog-ok-apply.png</file>
<file>../../icons/dialog-warning.png</file>
<file>../../icons/tools-wizard.png</file>
<file>../../icons/go-next.png</file>
<file>../../icons/go-previous.png</file>
<file>../../icons/item.png</file>
<file>../../icons/item-add.png</file>
<file>../../icons/node.png</file>
<file>../../icons/node-add.png</file>
<file>../../icons/list-add.png</file>
<file>../../icons/list-remove.png</file>
<file>../../icons/list-edit-apply.png</file>
<file>../../icons/document-new.png</file>
<file>../../icons/document-edit.png</file>
<file>../../icons/document-close.png</file>
<file>../../icons/document-save.png</file>
<file>../../icons/document-save-as.png</file>
<file>../../icons/document-save-all.png</file>
<file>../../icons/document-revert.png</file>
<file>../../icons/document-open.png</file>
<file>../../icons/document-open-recent.png</file>
<file>../../icons/alpha.png</file>
<file>../../icons/code-word.png</file>
<file>../../icons/f1.png</file>
<file>../../icons/widgets/chardialog.png</file>
<file>../../icons/widgets/clineedit.png</file>
<file>../../icons/widgets/colorbutton.png</file>
<file>../../icons/widgets/ecombobox.png</file>
<file>../../icons/widgets/evalspinbox.png</file>
<file>../../icons/widgets/qcodeedit.png</file>
<file>../../icons/widgets/qpiconsole.png</file>
<file>../../icons/widgets/qvariantedit.png</file>
<file>../../icons/widgets/spinslider.png</file>
<file>../../icons/widgets/scrollspin.png</file>
<file>../../icons/widgets/circle-indicator.png</file>
<file>../../icons/widgets/status-icon.png</file>
<file>../../icons/widgets/image-view.png</file>
<file>../../icons/widgets/busy-icon.png</file>
<file>../../icons/widgets/iconed-label.png</file>
</qresource>
</RCC>