From: Christian Kamm Date: Thu, 6 Jul 2017 12:03:22 +0000 (+0200) Subject: IssuesTab: Hide filters if they wouldn't be useful X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~704^2^2~52 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1c9b51c330932171b82166cf97dea9d8be15f9b4;p=nextcloud-desktop.git IssuesTab: Hide filters if they wouldn't be useful As suggested by @dragotin --- diff --git a/src/gui/issueswidget.cpp b/src/gui/issueswidget.cpp index eff8a3b45..e32e89aac 100644 --- a/src/gui/issueswidget.cpp +++ b/src/gui/issueswidget.cpp @@ -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()) _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(); + // 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(); + } + 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 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) diff --git a/src/gui/issueswidget.h b/src/gui/issueswidget.h index 9d31e16e1..8ebe6451d 100644 --- a/src/gui/issueswidget.h +++ b/src/gui/issueswidget.h @@ -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, diff --git a/src/gui/issueswidget.ui b/src/gui/issueswidget.ui index eb15d3d8c..5a1e1fac6 100644 --- a/src/gui/issueswidget.ui +++ b/src/gui/issueswidget.ui @@ -27,9 +27,9 @@ - + - + Account @@ -45,7 +45,7 @@ - + Folder