Make the ShareDialog background-aware (Dark-/Light-Mode switching)
authorMichael Schuster <michael@schuster.ms>
Mon, 9 Dec 2019 19:59:10 +0000 (20:59 +0100)
committerMichael Schuster <48932272+misch7@users.noreply.github.com>
Mon, 9 Dec 2019 20:37:21 +0000 (21:37 +0100)
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 <michael@schuster.ms>
src/gui/sharedialog.cpp
src/gui/sharedialog.h
src/gui/sharelinkwidget.cpp
src/gui/sharelinkwidget.h
src/gui/shareusergroupwidget.cpp
src/gui/shareusergroupwidget.h

index 435de4a0c1bac84d89537e852548bac113c63ef9..544e0e723022de10efac16772b3e28117d4a7b7f 100644 (file)
@@ -156,6 +156,9 @@ void ShareDialog::addLinkShareWidget(const QSharedPointer<LinkShare> &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);
+}
+
 }
index dbd0ca7755dbb35c6de783f72eedfd201b776afe..17d156437152774c0f0ee4c82843ba99c22480f3 100644 (file)
@@ -68,6 +68,10 @@ private slots:
 
 signals:
     void toggleAnimation(bool);
+    void styleChanged();
+
+protected:
+    void changeEvent(QEvent *) override;
 
 private:
     void showSharingUi();
index b201871dc363becb43b43477caca82d85c7d96c9..73bd01c86ec8d4345dc012ba01db138b1785da93 100644 (file)
@@ -19,6 +19,7 @@
 #include "capabilities.h"
 #include "guiutility.h"
 #include "sharemanager.h"
+#include "theme.h"
 
 #include "QProgressIndicator.h"
 #include <QBuffer>
@@ -256,6 +257,8 @@ void ShareLinkWidget::setupUiOptions()
 
     //TO DO
     //startAnimation(0, height());
+
+    customizeStyle();
 }
 
 void ShareLinkWidget::setNote(const QString &note)
@@ -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"));
+}
+
 }
index 34b2b3c3febfcac99c40e9c19cbeca743a147de2..4516878791a01121f89284edb0e77daac04c2ea6 100644 (file)
@@ -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;
index 82a3425f1491bae29a07b32908b77ac67ca728e3..47cd3a80e9fc92b3dd9751567400a04c24006d5f 100644 (file)
@@ -26,6 +26,7 @@
 #include "thumbnailjob.h"
 #include "sharee.h"
 #include "sharemanager.h"
+#include "theme.h"
 
 #include "QProgressIndicator.h"
 #include <QBuffer>
@@ -114,6 +115,8 @@ ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account,
     //_ui->shareeHorizontalLayout->addWidget(&_pi_sharee);
 
     _parentScrollArea = parentWidget()->findChild<QScrollArea*>("scrollArea");
+
+    customizeStyle();
 }
 
 ShareUserGroupWidget::~ShareUserGroupWidget()
@@ -214,6 +217,10 @@ void ShareUserGroupWidget::slotSharesFetched(const QList<QSharedPointer<Share>>
         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> share,
     SharePermissions maxSharingPermissions,
     bool isFile,
@@ -426,8 +447,9 @@ ShareUserLine::ShareUserLine(QSharedPointer<Share> 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> 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);
+}
+
 }
index a1f537f059e685c5cef5652bf0da7b97669ff67f..f60edaedbf314c9a70d8e3dd48887a41cb081186 100644 (file)
@@ -64,9 +64,11 @@ public:
 
 signals:
     void togglePublicLinkShare(bool);
+    void styleChanged();
 
 public slots:
     void getShares();
+    void slotStyleChanged();
 
 private slots:
     void slotSharesFetched(const QList<QSharedPointer<Share>> &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> _share;