From 7ce8a6a201adbd81a514e815e0a064bf1e89f96b Mon Sep 17 00:00:00 2001 From: Michael Schuster Date: Mon, 9 Dec 2019 20:59:10 +0100 Subject: [PATCH] Make the ShareDialog background-aware (Dark-/Light-Mode switching) Use customizeStyle() to change link colours, icons and pixmaps in the ShareDialog and notify it's widgets via slots. TODO - known issue (macOS): - The background and font colours in the ShareUserLine widget still stay the same. Signed-off-by: Michael Schuster --- src/gui/sharedialog.cpp | 24 +++++++++++++++++ src/gui/sharedialog.h | 4 +++ src/gui/sharelinkwidget.cpp | 26 +++++++++++++++++++ src/gui/sharelinkwidget.h | 3 +++ src/gui/shareusergroupwidget.cpp | 44 +++++++++++++++++++++++++++++--- src/gui/shareusergroupwidget.h | 8 ++++++ 6 files changed, 106 insertions(+), 3 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 435de4a0c..544e0e723 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -156,6 +156,9 @@ void ShareDialog::addLinkShareWidget(const QSharedPointer &linkShare) connect(_linkWidgetList.at(index), &ShareLinkWidget::deleteLinkShare, this, &ShareDialog::slotDeleteShare); //connect(_linkWidgetList.at(index), &ShareLinkWidget::resizeRequested, this, &ShareDialog::slotAdjustScrollWidgetSize); + // Connect styleChanged events to our widget, so it can adapt (Dark-/Light-Mode switching) + connect(this, &ShareDialog::styleChanged, _linkWidgetList.at(index), &ShareLinkWidget::slotStyleChanged); + _ui->verticalLayout->insertWidget(_linkWidgetList.size()+1, _linkWidgetList.at(index)); _linkWidgetList.at(index)->setupUiOptions(); } @@ -281,6 +284,10 @@ void ShareDialog::showSharingUi() if (userGroupSharing) { _userGroupWidget = new ShareUserGroupWidget(_accountState->account(), _sharePath, _localPath, _maxSharingPermissions, _privateLinkUrl, this); + + // Connect styleChanged events to our widget, so it can adapt (Dark-/Light-Mode switching) + connect(this, &ShareDialog::styleChanged, _userGroupWidget, &ShareUserGroupWidget::slotStyleChanged); + _ui->verticalLayout->insertWidget(1, _userGroupWidget); _userGroupWidget->getShares(); } @@ -334,4 +341,21 @@ void ShareDialog::slotAccountStateChanged(int state) } } } + +void ShareDialog::changeEvent(QEvent *e) +{ + switch (e->type()) { + case QEvent::StyleChange: + case QEvent::PaletteChange: + case QEvent::ThemeChange: + // Notify the other widgets (Dark-/Light-Mode switching) + emit styleChanged(); + break; + default: + break; + } + + QDialog::changeEvent(e); +} + } diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index dbd0ca775..17d156437 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -68,6 +68,10 @@ private slots: signals: void toggleAnimation(bool); + void styleChanged(); + +protected: + void changeEvent(QEvent *) override; private: void showSharingUi(); diff --git a/src/gui/sharelinkwidget.cpp b/src/gui/sharelinkwidget.cpp index b201871dc..73bd01c86 100644 --- a/src/gui/sharelinkwidget.cpp +++ b/src/gui/sharelinkwidget.cpp @@ -19,6 +19,7 @@ #include "capabilities.h" #include "guiutility.h" #include "sharemanager.h" +#include "theme.h" #include "QProgressIndicator.h" #include @@ -256,6 +257,8 @@ void ShareLinkWidget::setupUiOptions() //TO DO //startAnimation(0, height()); + + customizeStyle(); } void ShareLinkWidget::setNote(const QString ¬e) @@ -549,4 +552,27 @@ void ShareLinkWidget::displayError(const QString &errMsg) _ui->errorLabel->setText(errMsg); _ui->errorLabel->show(); } + +void ShareLinkWidget::slotStyleChanged() +{ + customizeStyle(); +} + +void ShareLinkWidget::customizeStyle() +{ + _unshareLinkAction->setIcon(Theme::createColorAwareIcon(":/client/resources/delete.png")); + + _addAnotherLinkAction->setIcon(Theme::createColorAwareIcon(":/client/resources/add.png")); + + _ui->enableShareLink->setIcon(Theme::createColorAwareIcon(":/client/resources/copy.svg")); + + _ui->shareLinkIconLabel->setPixmap(Theme::createColorAwarePixmap(":/client/resources/public.svg")); + + _ui->shareLinkToolButton->setIcon(Theme::createColorAwareIcon(":/client/resources/more.svg")); + + _ui->confirmNote->setIcon(Theme::createColorAwareIcon(":/client/resources/confirm.svg")); + _ui->confirmPassword->setIcon(Theme::createColorAwareIcon(":/client/resources/confirm.svg")); + _ui->confirmExpirationDate->setIcon(Theme::createColorAwareIcon(":/client/resources/confirm.svg")); +} + } diff --git a/src/gui/sharelinkwidget.h b/src/gui/sharelinkwidget.h index 34b2b3c3f..451687879 100644 --- a/src/gui/sharelinkwidget.h +++ b/src/gui/sharelinkwidget.h @@ -65,6 +65,7 @@ public slots: void slotToggleAnimation(bool start); void slotServerError(int code, const QString &message); void slotCreateShareRequiresPassword(const QString &message); + void slotStyleChanged(); private slots: void slotCreateShareLink(bool clicked); @@ -114,6 +115,8 @@ private: void startAnimation(const int start, const int end); + void customizeStyle(); + Ui::ShareLinkWidget *_ui; AccountPtr _account; QString _sharePath; diff --git a/src/gui/shareusergroupwidget.cpp b/src/gui/shareusergroupwidget.cpp index 82a3425f1..47cd3a80e 100644 --- a/src/gui/shareusergroupwidget.cpp +++ b/src/gui/shareusergroupwidget.cpp @@ -26,6 +26,7 @@ #include "thumbnailjob.h" #include "sharee.h" #include "sharemanager.h" +#include "theme.h" #include "QProgressIndicator.h" #include @@ -114,6 +115,8 @@ ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account, //_ui->shareeHorizontalLayout->addWidget(&_pi_sharee); _parentScrollArea = parentWidget()->findChild("scrollArea"); + + customizeStyle(); } ShareUserGroupWidget::~ShareUserGroupWidget() @@ -214,6 +217,10 @@ void ShareUserGroupWidget::slotSharesFetched(const QList> connect(s, &ShareUserLine::resizeRequested, this, &ShareUserGroupWidget::slotAdjustScrollWidgetSize); connect(s, &ShareUserLine::visualDeletionDone, this, &ShareUserGroupWidget::getShares); s->setBackgroundRole(layout->count() % 2 == 0 ? QPalette::Base : QPalette::AlternateBase); + + // Connect styleChanged events to our widget, so it can adapt (Dark-/Light-Mode switching) + connect(this, &ShareUserGroupWidget::styleChanged, s, &ShareUserLine::slotStyleChanged); + layout->addWidget(s); x++; @@ -258,7 +265,8 @@ void ShareUserGroupWidget::slotPrivateLinkShare() auto menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); - menu->addAction(QIcon(":/client/resources/copy.svg"), + // this icon is not handled by slotStyleChanged() -> customizeStyle but we can live with that + menu->addAction(Theme::createColorAwareIcon(":/client/resources/copy.svg"), tr("Copy link"), this, SLOT(slotPrivateLinkCopy())); @@ -361,6 +369,19 @@ void ShareUserGroupWidget::slotPrivateLinkEmail() this); } +void ShareUserGroupWidget::slotStyleChanged() +{ + customizeStyle(); + + // Notify the other widgets (ShareUserLine in this case, Dark-/Light-Mode switching) + emit styleChanged(); +} + +void ShareUserGroupWidget::customizeStyle() +{ + _ui->confirmShare->setIcon(Theme::createColorAwareIcon(":/client/resources/confirm.svg")); +} + ShareUserLine::ShareUserLine(QSharedPointer share, SharePermissions maxSharingPermissions, bool isFile, @@ -426,8 +447,9 @@ ShareUserLine::ShareUserLine(QSharedPointer share, _ui->permissionToolButton->setMenu(menu); _ui->permissionToolButton->setPopupMode(QToolButton::InstantPopup); - QIcon icon(QLatin1String(":/client/resources/more.svg")); - _ui->permissionToolButton->setIcon(icon); + // icon now set in: customizeStyle + /*QIcon icon(QLatin1String(":/client/resources/more.svg")); + _ui->permissionToolButton->setIcon(icon);*/ // Set the permissions checkboxes displayPermissions(); @@ -454,6 +476,8 @@ ShareUserLine::ShareUserLine(QSharedPointer share, } loadAvatar(); + + customizeStyle(); } void ShareUserLine::loadAvatar() @@ -648,4 +672,18 @@ void ShareUserLine::displayPermissions() _permissionDelete->setChecked(perm & SharePermissionDelete); } } + +void ShareUserLine::slotStyleChanged() +{ + customizeStyle(); +} + +void ShareUserLine::customizeStyle() +{ + _ui->permissionToolButton->setIcon(Theme::createColorAwareIcon(":/client/resources/more.svg")); + + QIcon deleteicon = QIcon::fromTheme(QLatin1String("user-trash"),Theme::createColorAwareIcon(QLatin1String(":/client/resources/delete.png"))); + _deleteShareButton->setIcon(deleteicon); +} + } diff --git a/src/gui/shareusergroupwidget.h b/src/gui/shareusergroupwidget.h index a1f537f05..f60edaedb 100644 --- a/src/gui/shareusergroupwidget.h +++ b/src/gui/shareusergroupwidget.h @@ -64,9 +64,11 @@ public: signals: void togglePublicLinkShare(bool); + void styleChanged(); public slots: void getShares(); + void slotStyleChanged(); private slots: void slotSharesFetched(const QList> &shares); @@ -88,6 +90,8 @@ private slots: void slotPrivateLinkEmail(); private: + void customizeStyle(); + Ui::ShareUserGroupWidget *_ui; QScrollArea *_parentScrollArea; AccountPtr _account; @@ -127,6 +131,9 @@ signals: void visualDeletionDone(); void resizeRequested(); +public slots: + void slotStyleChanged(); + private slots: void on_deleteShareButton_clicked(); void slotPermissionsChanged(); @@ -141,6 +148,7 @@ private slots: private: void displayPermissions(); void loadAvatar(); + void customizeStyle(); Ui::ShareUserLine *_ui; QSharedPointer _share;