Make AccountSettings and ActivitySettings background-aware (Dark-/Light-Mode switching)
authorMichael Schuster <michael@schuster.ms>
Thu, 19 Dec 2019 18:50:21 +0000 (19:50 +0100)
committerMichael Schuster <48932272+misch7@users.noreply.github.com>
Thu, 19 Dec 2019 21:07:30 +0000 (22:07 +0100)
Signed-off-by: Michael Schuster <michael@schuster.ms>
src/gui/accountsettings.cpp
src/gui/accountsettings.h
src/gui/activitywidget.cpp
src/gui/activitywidget.h
src/gui/folderstatusdelegate.cpp
src/gui/folderstatusdelegate.h
src/gui/settingsdialog.cpp

index 3c62c3231ed33f86b712739cdd14cff8e51aac03..0be7dc534ce9a25cb669f74af780cbe737cfdbe7 100644 (file)
@@ -123,6 +123,9 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent)
     FolderStatusDelegate *delegate = new FolderStatusDelegate;
     delegate->setParent(this);
 
+    // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching)
+    connect(this, &AccountSettings::styleChanged, delegate, &FolderStatusDelegate::slotStyleChanged);
+
     ui->_folderList->header()->hide();
     ui->_folderList->setItemDelegate(delegate);
     ui->_folderList->setModel(_model);
@@ -180,8 +183,9 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent)
     connect(this, &AccountSettings::folderChanged, _model, &FolderStatusModel::resetFolders);
 
 
-    QColor color = palette().highlight().color();
-    ui->quotaProgressBar->setStyleSheet(QString::fromLatin1(progressBarStyleC).arg(color.name()));
+    // quotaProgressBar style now set in customizeStyle()
+    /*QColor color = palette().highlight().color();
+     ui->quotaProgressBar->setStyleSheet(QString::fromLatin1(progressBarStyleC).arg(color.name()));*/
 
     ui->connectLabel->setText(tr("No account configured."));
 
@@ -1249,6 +1253,9 @@ bool AccountSettings::event(QEvent *e)
 void AccountSettings::slotStyleChanged()
 {
     customizeStyle();
+
+    // Notify the other widgets (Dark-/Light-Mode switching)
+    emit styleChanged();
 }
 
 void AccountSettings::customizeStyle()
@@ -1256,6 +1263,9 @@ void AccountSettings::customizeStyle()
     QString msg = ui->connectLabel->text();
     Theme::replaceLinkColorStringBackgroundAware(msg);
     ui->connectLabel->setText(msg);
+
+    QColor color = palette().highlight().color();
+    ui->quotaProgressBar->setStyleSheet(QString::fromLatin1(progressBarStyleC).arg(color.name()));
 }
 
 } // namespace OCC
index 11a5fe604392775dc010ef9815facfb9bf843c71..545b3cac82660d73e0fe856499c6413f0c72941e 100644 (file)
@@ -64,6 +64,7 @@ signals:
     void showIssuesList(AccountState *account);
     void requesetMnemonic();
     void removeAccountFolders(AccountState *account);
+    void styleChanged();
 
 public slots:
     void slotOpenOC();
index 7ce4471d32d5ad277180879cb5e42b84dad0679c..f721a4cf3be89857868e699da44690cfe5929e59 100644 (file)
@@ -89,6 +89,9 @@ ActivityWidget::ActivityWidget(AccountState *accountState, QWidget *parent)
         this, &ActivityWidget::addError);
 
     _removeTimer.setInterval(1000);
+
+    // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching)
+    connect(this, &ActivityWidget::styleChanged, delegate, &ActivityItemDelegate::slotStyleChanged);
 }
 
 ActivityWidget::~ActivityWidget()
@@ -548,6 +551,12 @@ void ActivityWidget::slotNotifyServerFinished(const QString &reply, int replyCod
     qCInfo(lcActivity) << "Server Notification reply code" << replyCode << reply;
 }
 
+void ActivityWidget::slotStyleChanged()
+{
+    // Notify the other widgets (Dark-/Light-Mode switching)
+    emit styleChanged();
+}
+
 /* ==================================================================== */
 
 ActivitySettings::ActivitySettings(AccountState *accountState, QWidget *parent)
@@ -570,6 +579,9 @@ ActivitySettings::ActivitySettings(AccountState *accountState, QWidget *parent)
     // connect a model signal to stop the animation
     connect(_activityWidget, &ActivityWidget::rowsInserted, _progressIndicator, &QProgressIndicator::stopAnimation);
     connect(_activityWidget, &ActivityWidget::rowsInserted, this, &ActivitySettings::slotDisplayActivities);
+
+    // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching)
+    connect(this, &ActivitySettings::styleChanged, _activityWidget, &ActivityWidget::slotStyleChanged);
 }
 
 void ActivitySettings::slotDisplayActivities(){
@@ -628,4 +640,11 @@ bool ActivitySettings::event(QEvent *e)
 ActivitySettings::~ActivitySettings()
 {
 }
+
+void ActivitySettings::slotStyleChanged()
+{
+    // Notify the other widgets (Dark-/Light-Mode switching)
+    emit styleChanged();
+}
+
 }
index a51ed9346e1da947298ae5433481bf3a8af8cef8..ee271c62a10f16f6fb36c58cadd0158a9943824f 100644 (file)
@@ -78,12 +78,14 @@ public slots:
     void addError(const QString &folderAlias, const QString &message, ErrorCategory category);
     void slotProgressInfo(const QString &folder, const ProgressInfo &progress);
     void slotItemCompleted(const QString &folder, const SyncFileItemPtr &item);
+    void slotStyleChanged();
 
 signals:
     void guiLog(const QString &, const QString &);
     void rowsInserted();
     void hideActivityTab(bool);
     void sendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row);
+    void styleChanged();
 
 private slots:
     void slotBuildNotificationDisplay(const ActivityList &list);
@@ -96,6 +98,7 @@ private slots:
     void slotSecondaryButtonClickedOnListView(const QModelIndex &index);
 
 private:
+    void customizeStyle();
     void showLabels();
     QString timeString(QDateTime dt, QLocale::FormatType format) const;
     Ui::ActivityWidget *_ui;
@@ -137,6 +140,7 @@ public slots:
     void slotRefresh();
     void slotRemoveAccount();
     void setNotificationRefreshInterval(std::chrono::milliseconds interval);
+    void slotStyleChanged();
 
 private slots:
     void slotRegularNotificationCheck();
@@ -144,6 +148,7 @@ private slots:
 
 signals:
     void guiLog(const QString &, const QString &);
+    void styleChanged();
 
 private:
     bool event(QEvent *e) override;
index 337530da9221f4206f96181e5a9fd6e5b1d81a75..5cd2ed11870cb8e802b5568c2a06486d46a7ebfc 100644 (file)
@@ -40,7 +40,7 @@ namespace OCC {
 FolderStatusDelegate::FolderStatusDelegate()
     : QStyledItemDelegate()
 {
-    m_moreIcon = QIcon(QLatin1String(":/client/resources/more.svg"));
+    customizeStyle();
 }
 
 QString FolderStatusDelegate::addFolderText()
@@ -349,7 +349,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
         btnOpt.arrowType = Qt::NoArrow;
         btnOpt.subControls = QStyle::SC_ToolButton;
         btnOpt.rect = optionsButtonVisualRect;
-        btnOpt.icon = m_moreIcon;
+        btnOpt.icon = _iconMore;
         int e = QApplication::style()->pixelMetric(QStyle::PM_ButtonIconSize);
         btnOpt.iconSize = QSize(e,e);
         QApplication::style()->drawComplexControl(QStyle::CC_ToolButton, &btnOpt, painter);
@@ -423,5 +423,14 @@ QRect FolderStatusDelegate::errorsListRect(QRect within)
     return within;
 }
 
+void FolderStatusDelegate::slotStyleChanged()
+{
+    customizeStyle();
+}
+
+void FolderStatusDelegate::customizeStyle()
+{
+    _iconMore = Theme::createColorAwareIcon(QLatin1String(":/client/resources/more.svg"));
+}
 
 } // namespace OCC
index b4902abf0a4b6788fbb8bce33f69065985a9893b..342be330a69bc66c0fbdf84d363a4ae109273c86 100644 (file)
@@ -26,7 +26,6 @@ class FolderStatusDelegate : public QStyledItemDelegate
 {
     Q_OBJECT
 public:
-    QIcon m_moreIcon;
     FolderStatusDelegate();
 
     enum datarole { FolderAliasRole = Qt::UserRole + 100,
@@ -62,9 +61,16 @@ public:
     static QRect errorsListRect(QRect within);
     static int rootFolderHeightWithoutErrors(const QFontMetrics &fm, const QFontMetrics &aliasFm);
 
+public slots:
+    void slotStyleChanged();
+
 private:
+    void customizeStyle();
+
     static QString addFolderText();
     QPersistentModelIndex _pressedIndex;
+
+    QIcon _iconMore;
 };
 
 } // namespace OCC
index 68467e90151289f24d25dee5b1ae4ab9240b7a00..0dc6480f681b1b639f81c741450e2f7fd5b4b2e7 100644 (file)
@@ -254,9 +254,6 @@ void SettingsDialog::accountAdded(AccountState *s)
     _actionGroupWidgets.insert(accountAction, accountSettings);
     _actionForAccount.insert(s->account().data(), accountAction);
     accountAction->trigger();
-    
-    // Connect styleChanged event, to adapt (Dark-/Light-Mode switching)
-    connect(this, &SettingsDialog::styleChanged, accountSettings, &AccountSettings::slotStyleChanged);
 
     connect(accountSettings, &AccountSettings::folderChanged, _gui, &ownCloudGui::slotFoldersChanged);
     connect(accountSettings, &AccountSettings::openFolderAlias,
@@ -268,6 +265,10 @@ void SettingsDialog::accountAdded(AccountState *s)
     // Refresh immediatly when getting online
     connect(s, &AccountState::isConnectedChanged, this, &SettingsDialog::slotRefreshActivityAccountStateSender);
 
+    // Connect styleChanged event, to adapt (Dark-/Light-Mode switching)
+    connect(this, &SettingsDialog::styleChanged, accountSettings, &AccountSettings::slotStyleChanged);
+    connect(this, &SettingsDialog::styleChanged, _activitySettings[s], &ActivitySettings::slotStyleChanged);
+
     activityAdded(s);
     slotRefreshActivity(s);
 }