ShareDialog: Use a tab widget #5655
authorChristian Kamm <mail@ckamm.de>
Tue, 4 Apr 2017 12:41:25 +0000 (14:41 +0200)
committerChristian Kamm <mail@ckamm.de>
Fri, 21 Apr 2017 08:09:01 +0000 (10:09 +0200)
src/gui/sharedialog.cpp
src/gui/sharedialog.ui
src/gui/shareusergroupwidget.cpp
src/gui/shareusergroupwidget.h

index 0eadeccb24302248ddf8cbc2edb6ddd212262ee5..6fd2807cc94f823aeb0348f5370a8b3f2d4b3ea8 100644 (file)
@@ -102,7 +102,8 @@ ShareDialog::ShareDialog(QPointer<AccountState> 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> 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();
     }
 }
index 000c1bbd270522ebed8c4e50bb1d1e5dda62baee..203dc9ea799a572403379bcbeca97f8d2e685b3d 100644 (file)
     </layout>
    </item>
    <item>
-    <layout class="QVBoxLayout" name="shareWidgetsLayout">
-     <property name="spacing">
-      <number>10</number>
-     </property>
-    </layout>
-   </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>40</height>
-      </size>
-     </property>
-    </spacer>
+    <widget class="QTabWidget" name="shareWidgets"/>
    </item>
    <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Close</set>
-     </property>
-    </widget>
+    <layout class="QHBoxLayout" name="buttonBoxLayout">
+     <item>
+      <widget class="QDialogButtonBox" name="buttonBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="standardButtons">
+        <set>QDialogButtonBox::Close</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
    </item>
   </layout>
  </widget>
index bb978896952cf0554515dca08a0217bb2107cca6..768888781ec53f4c3915d2e0982961c9d21d2eda 100644 (file)
@@ -178,28 +178,33 @@ void ShareUserGroupWidget::slotSharesFetched(const QList<QSharedPointer<Share>>
     QSize minimumSize = newViewPort->sizeHint();
     int x = 0;
 
-    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);
-
-        x++;
-        if (x <= 3) {
-            minimumSize = newViewPort->sizeHint();
-        } else {
-            minimumSize.rwidth() = qMax(newViewPort->sizeHint().width(), minimumSize.width());
+    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()));
+            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());
+            }
         }
+        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<QVBoxLayout*>(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
index 5448d73f1a6ceeb12d50c2881d918b191c74359c..578f9fa717e09ec2c4bb29d7b3497219d276c8c4 100644 (file)
@@ -59,7 +59,7 @@ public:
     QSharedPointer<Share> share() const;
 
 signals:
-    void shareDeleted(ShareWidget *share);
+    void visualDeletionDone();
     void resizeRequested();
 
 private slots: