IssuesTab: Hide filters if they wouldn't be useful
authorChristian Kamm <mail@ckamm.de>
Thu, 6 Jul 2017 12:03:22 +0000 (14:03 +0200)
committerckamm <mail@ckamm.de>
Mon, 10 Jul 2017 09:13:48 +0000 (11:13 +0200)
As suggested by @dragotin

src/gui/issueswidget.cpp
src/gui/issueswidget.h
src/gui/issueswidget.ui

index eff8a3b454d67f69a232d3a5509201cec4d9fcd7..e32e89aac7b491421766370ee4121fb420e9fbf8 100644 (file)
@@ -65,6 +65,8 @@ IssuesWidget::IssuesWidget(QWidget *parent)
         SLOT(slotAccountAdded(AccountState *)));
     connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState *)),
         SLOT(slotAccountRemoved(AccountState *)));
+    connect(FolderMan::instance(), SIGNAL(folderListChanged(Folder::Map)),
+        SLOT(slotUpdateFolderFilters()));
 
 
     // Adjust copyToClipboard() when making changes here!
@@ -183,6 +185,7 @@ void IssuesWidget::slotRefreshIssues()
 void IssuesWidget::slotAccountAdded(AccountState *account)
 {
     _ui->filterAccount->addItem(account->account()->displayName(), QVariant::fromValue(account));
+    updateAccountChoiceVisibility();
 }
 
 void IssuesWidget::slotAccountRemoved(AccountState *account)
@@ -191,6 +194,15 @@ void IssuesWidget::slotAccountRemoved(AccountState *account)
         if (account == _ui->filterAccount->itemData(i).value<AccountState *>())
             _ui->filterAccount->removeItem(i);
     }
+    updateAccountChoiceVisibility();
+}
+
+void IssuesWidget::updateAccountChoiceVisibility()
+{
+    bool visible = _ui->filterAccount->count() > 2;
+    _ui->filterAccount->setVisible(visible);
+    _ui->accountLabel->setVisible(visible);
+    slotUpdateFolderFilters();
 }
 
 AccountState *IssuesWidget::currentAccountFilter() const
@@ -228,6 +240,12 @@ void IssuesWidget::slotUpdateFolderFilters()
 {
     auto account = _ui->filterAccount->currentData().value<AccountState *>();
 
+    // If there is no account selector, show folders for the single
+    // available account
+    if (_ui->filterAccount->isHidden() && _ui->filterAccount->count() > 1) {
+        account = _ui->filterAccount->itemData(1).value<AccountState *>();
+    }
+
     if (!account) {
         _ui->filterFolder->setCurrentIndex(0);
     }
@@ -236,11 +254,30 @@ void IssuesWidget::slotUpdateFolderFilters()
     for (int i = _ui->filterFolder->count() - 1; i >= 1; --i) {
         _ui->filterFolder->removeItem(i);
     }
+
+    // Find all selectable folders while figuring out if we need a folder
+    // selector in the first place
+    bool anyAccountHasMultipleFolders = false;
+    QSet<AccountState *> accountsWithFolders;
     for (auto folder : FolderMan::instance()->map().values()) {
+        if (accountsWithFolders.contains(folder->accountState()))
+            anyAccountHasMultipleFolders = true;
+        accountsWithFolders.insert(folder->accountState());
+
         if (folder->accountState() != account)
             continue;
         _ui->filterFolder->addItem(folder->shortGuiLocalPath(), folder->alias());
     }
+
+    // If we don't need the combo box, hide it.
+    _ui->filterFolder->setVisible(anyAccountHasMultipleFolders);
+    _ui->folderLabel->setVisible(anyAccountHasMultipleFolders);
+
+    // If there's no choice, select the only folder and disable
+    if (_ui->filterFolder->count() == 2 && anyAccountHasMultipleFolders) {
+        _ui->filterFolder->setCurrentIndex(1);
+        _ui->filterFolder->setEnabled(false);
+    }
 }
 
 void IssuesWidget::storeSyncIssues(QTextStream &ts)
index 9d31e16e1660bf1df8bf7c81b213e3955786095e..8ebe6451d7f46fc3d37d88b268ed3e799e2e8142 100644 (file)
@@ -69,6 +69,7 @@ private slots:
     void slotAccountRemoved(AccountState *account);
 
 private:
+    void updateAccountChoiceVisibility();
     AccountState *currentAccountFilter() const;
     QString currentFolderFilter() const;
     bool shouldBeVisible(QTreeWidgetItem *item, AccountState *filterAccount,
index eb15d3d8c4ebbf79ada133e45a16b743c6e8cb86..5a1e1fac676cfdd091be372a0a3e11344abe4cbb 100644 (file)
@@ -27,9 +27,9 @@
    <item>
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0">
-      <layout class="QFormLayout" name="formLayout">
+      <layout class="QFormLayout" name="accountFolderLayout">
        <item row="0" column="0">
-        <widget class="QLabel" name="label">
+        <widget class="QLabel" name="accountLabel">
          <property name="text">
           <string>Account</string>
          </property>
@@ -45,7 +45,7 @@
         </widget>
        </item>
        <item row="1" column="0">
-        <widget class="QLabel" name="label_2">
+        <widget class="QLabel" name="folderLabel">
          <property name="text">
           <string>Folder</string>
          </property>