summary refs log tree commit diff
path: root/include
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
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')
-rw-r--r--include/MainWindow.h10
-rw-r--r--include/ui/CircularProgress.h114
-rw-r--r--include/ui/OverlayModal.h60
-rw-r--r--include/ui/OverlayWidget.h4
4 files changed, 184 insertions, 4 deletions
diff --git a/include/MainWindow.h b/include/MainWindow.h

index 89d1df45..f1582f85 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h
@@ -22,8 +22,10 @@ #include <QSharedPointer> #include "ChatPage.h" +#include "CircularProgress.h" #include "LoginPage.h" #include "MatrixClient.h" +#include "OverlayModal.h" #include "RegisterPage.h" #include "SlidingStackWidget.h" #include "WelcomePage.h" @@ -41,7 +43,7 @@ public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); -public slots: +private slots: // Show the welcome page in the main window. void showWelcomePage(); @@ -54,6 +56,8 @@ public slots: // Show the chat page and start communicating with the given access token. void showChatPage(QString user_id, QString home_server, QString token); + void removeOverlayProgressBar(); + private: // The UI component of the main window. Ui::MainWindow *ui_; @@ -73,6 +77,10 @@ private: // The main chat area. ChatPage *chat_page_; + // Used to hide undefined states between page transitions. + OverlayModal *progress_modal_; + CircularProgress *spinner_; + // Matrix Client API provider. QSharedPointer<MatrixClient> client_; }; 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 diff --git a/include/ui/OverlayModal.h b/include/ui/OverlayModal.h new file mode 100644
index 00000000..aff93d02 --- /dev/null +++ b/include/ui/OverlayModal.h
@@ -0,0 +1,60 @@ +/* + * nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> + * + * This program 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. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef UI_OVERLAY_MODAL_H +#define UI_OVERLAY_MODAL_H + +#include <QGraphicsOpacityEffect> +#include <QPaintEvent> +#include <QPropertyAnimation> + +#include "OverlayWidget.h" + +class OverlayModal : public OverlayWidget +{ +public: + explicit OverlayModal(QWidget *parent, QWidget *content); + + void fadeIn(); + void fadeOut(); + +public: + inline void setDuration(int duration); + inline void setColor(QColor color); + +protected: + void paintEvent(QPaintEvent *event) override; + +private: + int duration_; + QColor color_; + + QGraphicsOpacityEffect *opacity_; + QPropertyAnimation *animation_; +}; + +inline void OverlayModal::setDuration(int duration) +{ + duration_ = duration; +} + +inline void OverlayModal::setColor(QColor color) +{ + color_ = color; +} + +#endif // UI_OVERLAY_MODAL_H diff --git a/include/ui/OverlayWidget.h b/include/ui/OverlayWidget.h
index 020393ad..36b42dc9 100644 --- a/include/ui/OverlayWidget.h +++ b/include/ui/OverlayWidget.h
@@ -2,7 +2,6 @@ #define UI_OVERLAY_WIDGET_H #include <QEvent> -#include <QObject> #include <QWidget> class OverlayWidget : public QWidget @@ -10,8 +9,7 @@ class OverlayWidget : public QWidget Q_OBJECT public: - explicit OverlayWidget(QWidget *parent = 0); - ~OverlayWidget(); + explicit OverlayWidget(QWidget *parent = nullptr); protected: bool event(QEvent *event) override;