summary refs log tree commit diff
path: root/include/ui/CircularProgress.h
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-04-26 02:23:12 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-04-26 02:24:10 +0300
commit415ef7e9c7b9a44a3f5da725cd252a454e4969f8 (patch)
treebddc787765f8797fdc73da91af13197d2f9d8785 /include/ui/CircularProgress.h
parentMerge pull request #6 from MTRNord/patch-1 (diff)
downloadnheko-415ef7e9c7b9a44a3f5da725cd252a454e4969f8.tar.xz
Add spinner to hide uninitialized layout after login
Diffstat (limited to 'include/ui/CircularProgress.h')
-rw-r--r--include/ui/CircularProgress.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/include/ui/CircularProgress.h b/include/ui/CircularProgress.h
new file mode 100644

index 00000000..bb8156ae --- /dev/null +++ b/include/ui/CircularProgress.h
@@ -0,0 +1,114 @@ +#ifndef UI_CIRCULAR_PROGRESS_H +#define UI_CIRCULAR_PROGRESS_H + +#include <QObject> +#include <QProgressBar> + +#include "Theme.h" + +class CircularProgressDelegate; + +class CircularProgress : public QProgressBar +{ + Q_OBJECT + + Q_PROPERTY(qreal lineWidth WRITE setLineWidth READ lineWidth) + Q_PROPERTY(qreal size WRITE setSize READ size) + Q_PROPERTY(QColor color WRITE setColor READ color) + +public: + explicit CircularProgress(QWidget *parent = nullptr); + ~CircularProgress(); + + void setProgressType(ui::ProgressType type); + void setLineWidth(qreal width); + void setSize(int size); + void setColor(const QColor &color); + + ui::ProgressType progressType() const; + qreal lineWidth() const; + int size() const; + QColor color() const; + + QSize sizeHint() const override; + +protected: + void paintEvent(QPaintEvent *event) override; + +private: + CircularProgressDelegate *delegate_; + + ui::ProgressType progress_type_; + + QColor color_; + + // Circle width. + qreal width_; + + // Circle radius. + int size_; +}; + +class CircularProgressDelegate : public QObject +{ + Q_OBJECT + + Q_PROPERTY(qreal dashOffset WRITE setDashOffset READ dashOffset) + Q_PROPERTY(qreal dashLength WRITE setDashLength READ dashLength) + Q_PROPERTY(int angle WRITE setAngle READ angle) + +public: + explicit CircularProgressDelegate(CircularProgress *parent); + ~CircularProgressDelegate(); + + inline void setDashOffset(qreal offset); + inline void setDashLength(qreal length); + inline void setAngle(int angle); + + inline qreal dashOffset() const; + inline qreal dashLength() const; + inline int angle() const; + +private: + CircularProgress *const progress_; + + qreal dash_offset_; + qreal dash_length_; + + int angle_; +}; + +inline void CircularProgressDelegate::setDashOffset(qreal offset) +{ + dash_offset_ = offset; + progress_->update(); +} + +inline void CircularProgressDelegate::setDashLength(qreal length) +{ + dash_length_ = length; + progress_->update(); +} + +inline void CircularProgressDelegate::setAngle(int angle) +{ + angle_ = angle; + progress_->update(); +} + +inline qreal CircularProgressDelegate::dashOffset() const +{ + return dash_offset_; +} + +inline qreal CircularProgressDelegate::dashLength() const +{ + return dash_length_; +} + +inline int CircularProgressDelegate::angle() const +{ + return angle_; +} + +#endif // UI_CIRCULAR_PROGRESS_H