From 76e67db04bd2f3509f01cc75553df1d9405ab14a Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 4 Apr 2017 14:41:25 +0200 Subject: [PATCH] ShareDialog: Use a tab widget #5655 --- src/gui/sharedialog.cpp | 12 ++++---- src/gui/sharedialog.ui | 47 ++++++++++++-------------------- src/gui/shareusergroupwidget.cpp | 45 ++++++++++++++++++------------ src/gui/shareusergroupwidget.h | 2 +- 4 files changed, 52 insertions(+), 54 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 0eadeccb2..6fd2807cc 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -102,7 +102,8 @@ ShareDialog::ShareDialog(QPointer accountState, this->setWindowTitle(tr("%1 Sharing").arg(Theme::instance()->appNameGUI())); if (!accountState->account()->capabilities().shareAPI()) { - _ui->shareWidgetsLayout->addWidget(new QLabel(tr("The server does not allow sharing"))); + _ui->shareWidgets->hide(); + layout()->replaceWidget(_ui->shareWidgets, new QLabel(tr("The server does not allow sharing"))); return; } @@ -115,7 +116,7 @@ ShareDialog::ShareDialog(QPointer accountState, _progressIndicator = new QProgressIndicator(this); _progressIndicator->startAnimation(); _progressIndicator->setToolTip(tr("Retrieving maximum possible sharing permissions from server...")); - _ui->shareWidgetsLayout->addWidget(_progressIndicator); + _ui->buttonBoxLayout->insertWidget(0, _progressIndicator); // Server versions >= 9.1 support the "share-permissions" property // older versions will just return share-permissions: "" @@ -171,7 +172,7 @@ void ShareDialog::showSharingUi() if (!canReshare) { auto label = new QLabel(this); label->setText(tr("The file can not be shared because it was shared without sharing permission.")); - _ui->shareWidgetsLayout->addWidget(label); + layout()->replaceWidget(_ui->shareWidgets, label); return; } @@ -184,7 +185,7 @@ void ShareDialog::showSharingUi() if (userGroupSharing) { _userGroupWidget = new ShareUserGroupWidget(_accountState->account(), _sharePath, _localPath, _maxSharingPermissions, this); - _ui->shareWidgetsLayout->addWidget(_userGroupWidget); + _ui->shareWidgets->addTab(_userGroupWidget, tr("Users and Groups")); _userGroupWidget->getShares(); } @@ -196,12 +197,11 @@ void ShareDialog::showSharingUi() // Make the line softer: p.setColor(QPalette::Foreground, QColor::fromRgba((p.color(QPalette::Foreground).rgba() & 0x00ffffff) | 0x50000000)); hline->setPalette(p); - _ui->shareWidgetsLayout->addWidget(hline); } _linkWidget = new ShareLinkWidget(_accountState->account(), _sharePath, _localPath, _maxSharingPermissions, autoShare, this); _linkWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); - _ui->shareWidgetsLayout->addWidget(_linkWidget); + _ui->shareWidgets->addTab(_linkWidget, tr("Public Links")); _linkWidget->getShares(); } } diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index 000c1bbd2..203dc9ea7 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -64,38 +64,25 @@ - - - 10 - + + + + + + + + + 0 + 0 + + + + QDialogButtonBox::Close + + + - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - 0 - 0 - - - - QDialogButtonBox::Close - - - diff --git a/src/gui/shareusergroupwidget.cpp b/src/gui/shareusergroupwidget.cpp index bb9788969..768888781 100644 --- a/src/gui/shareusergroupwidget.cpp +++ b/src/gui/shareusergroupwidget.cpp @@ -178,28 +178,33 @@ void ShareUserGroupWidget::slotSharesFetched(const QList> QSize minimumSize = newViewPort->sizeHint(); int x = 0; - foreach(const auto &share, shares) { - // We don't handle link shares - if (share->getShareType() == Share::TypeLink) { - continue; - } + if (shares.isEmpty()) { + layout->addWidget(new QLabel(tr("The item is not shared with any users or groups"))); + } else { + foreach(const auto &share, shares) { + // We don't handle link shares + if (share->getShareType() == Share::TypeLink) { + continue; + } - ShareWidget *s = new ShareWidget(share, _maxSharingPermissions, _isFile, _ui->scrollArea); - connect(s, SIGNAL(resizeRequested()), this, SLOT(slotAdjustScrollWidgetSize())); - layout->addWidget(s); + ShareWidget *s = new ShareWidget(share, _maxSharingPermissions, _isFile, _ui->scrollArea); + connect(s, SIGNAL(resizeRequested()), this, SLOT(slotAdjustScrollWidgetSize())); + connect(s, SIGNAL(visualDeletionDone()), this, SLOT(getShares())); + layout->addWidget(s); - x++; - if (x <= 3) { - minimumSize = newViewPort->sizeHint(); - } else { - minimumSize.rwidth() = qMax(newViewPort->sizeHint().width(), minimumSize.width()); + x++; + if (x <= 3) { + minimumSize = newViewPort->sizeHint(); + } else { + minimumSize.rwidth() = qMax(newViewPort->sizeHint().width(), minimumSize.width()); + } } + layout->addStretch(1); } minimumSize.rwidth() += layout->spacing(); minimumSize.rheight() += layout->spacing(); scrollArea->setMinimumSize(minimumSize); - scrollArea->setVisible(!shares.isEmpty()); scrollArea->setWidget(newViewPort); _disableCompleterActivated = false; @@ -243,10 +248,15 @@ void ShareUserGroupWidget::slotCompleterActivated(const QModelIndex & index) * Add spinner to the bottom of the widget list */ auto viewPort = _ui->scrollArea->widget(); - auto layout = viewPort->layout(); + auto layout = qobject_cast(viewPort->layout()); auto indicator = new QProgressIndicator(viewPort); indicator->startAnimation(); - layout->addWidget(indicator); + if (layout->count() == 1) { + // No shares yet! Remove the label, add some stretch. + delete layout->itemAt(0)->widget(); + layout->addStretch(1); + } + layout->insertWidget(layout->count() - 1, indicator); /* * Don't send the reshare permissions for federated shares for servers <9.1 @@ -444,7 +454,8 @@ void ShareWidget::slotPermissionsChanged() void ShareWidget::slotDeleteAnimationFinished() { - resizeRequested(); + emit resizeRequested(); + emit visualDeletionDone(); deleteLater(); // There is a painting bug where a small line of this widget isn't diff --git a/src/gui/shareusergroupwidget.h b/src/gui/shareusergroupwidget.h index 5448d73f1..578f9fa71 100644 --- a/src/gui/shareusergroupwidget.h +++ b/src/gui/shareusergroupwidget.h @@ -59,7 +59,7 @@ public: QSharedPointer share() const; signals: - void shareDeleted(ShareWidget *share); + void visualDeletionDone(); void resizeRequested(); private slots: