Bläddra i källkod

Show file details within the tray dialog, rather than in a separate dialog

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
Claudio Cambra 3 år sedan
förälder
incheckning
d25ce28a1b
4 ändrade filer med 109 tillägg och 1 borttagningar
  1. 12 0
      src/gui/systray.cpp
  2. 3 0
      src/gui/systray.h
  3. 1 1
      src/gui/tray/ActivityItem.qml
  4. 93 0
      src/gui/tray/Window.qml

+ 12 - 0
src/gui/systray.cpp

@@ -382,6 +382,18 @@ void Systray::createFileActivityDialog(const QString &localPath)
     Q_EMIT showFileDetailsPage(localPath, FileDetailsPage::Activity);
 }
 
+void Systray::presentShareViewInTray(const QString &localPath)
+{
+    const auto folder = FolderMan::instance()->folderForPath(localPath);
+    if (!folder) {
+        qCWarning(lcSystray) << "Could not open file details view in tray for" << localPath << "no responsible folder found";
+        return;
+    }
+    qCDebug(lcSystray) << "Opening file details view in tray for " << localPath;
+
+    Q_EMIT showFileDetails(folder->accountState(), localPath, FileDetailsPage::Sharing);
+}
+
 void Systray::slotCurrentUserChanged()
 {
     if (_trayEngine) {

+ 3 - 0
src/gui/systray.h

@@ -102,6 +102,7 @@ signals:
     void shutdown();
 
     void showFileDetailsPage(const QString &fileLocalPath, const OCC::Systray::FileDetailsPage page);
+    void showFileDetails(AccountState *accountState, const QString &localPath, const OCC::Systray::FileDetailsPage fileDetailsPage);
     void sendChatMessage(const QString &token, const QString &message, const QString &replyTo);
     void showErrorMessageDialog(const QString &error);
 
@@ -141,6 +142,8 @@ public slots:
     void createShareDialog(const QString &localPath);
     void createFileActivityDialog(const QString &localPath);
 
+    void presentShareViewInTray(const QString &localPath);
+
 private slots:
     void slotUnpauseAllFolders();
     void slotPauseAllFolders();

+ 1 - 1
src/gui/tray/ActivityItem.qml

@@ -51,7 +51,7 @@ ItemDelegate {
 
             activityData: model
 
-            onShareButtonClicked: Systray.createShareDialog(model.openablePath)
+            onShareButtonClicked: Systray.presentShareViewInTray(model.openablePath)
 
             onDismissButtonClicked: activityModel.slotTriggerDismiss(model.activityIndex)
         }

+ 93 - 0
src/gui/tray/Window.qml

@@ -4,7 +4,9 @@ import QtQuick.Controls 2.3
 import QtQuick.Layouts 1.2
 import QtGraphicalEffects 1.0
 import Qt.labs.platform 1.1 as NativeDialogs
+
 import "../"
+import "../filedetails/"
 
 // Custom qml modules are in /theme (and included by resources.qrc)
 import Style 1.0
@@ -76,6 +78,7 @@ ApplicationWindow {
 
         function onIsOpenChanged() {
             userStatusDrawer.close()
+            fileDetailsDrawer.close();
 
             if(Systray.isOpen) {
                 accountMenu.close();
@@ -88,6 +91,10 @@ ApplicationWindow {
             newErrorDialog.text = error
             newErrorDialog.open()
         }
+
+        function onShowFileDetails(accountState, localPath, fileDetailsPage) {
+            fileDetailsDrawer.openFileDetails(accountState, localPath, fileDetailsPage);
+        }
     }
 
     OpacityMask {
@@ -140,6 +147,92 @@ ApplicationWindow {
         }
     }
 
+    Drawer {
+        id: fileDetailsDrawer
+        width: parent.width
+        height: parent.height
+        padding: 0
+        edge: Qt.RightEdge
+        modal: false
+        visible: false
+
+        background: Rectangle {
+            radius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius
+            border.width: Style.trayWindowBorderWidth
+            border.color: Style.menuBorder
+            color: Style.backgroundColor
+        }
+
+        property var folderAccountState: ({})
+        property string fileLocalPath: ""
+        property var pageToShow: Systray.FileDetailsPage.Activity
+
+        function openFileDetails(accountState, localPath, fileDetailsPage) {
+            console.log(`About to show file details view in tray for ${localPath}`);
+            folderAccountState = accountState;
+            fileLocalPath = localPath;
+            pageToShow = fileDetailsPage;
+
+            if(!opened) {
+                open();
+            }
+        }
+
+        Loader {
+            id: fileDetailsContents
+            anchors.fill: parent
+            active: fileDetailsDrawer.visible
+            onActiveChanged: {
+                if (active) {
+                    Systray.showFileDetailsPage(fileDetailsDrawer.fileLocalPath,
+                                                fileDetailsDrawer.pageToShow);
+                }
+            }
+            sourceComponent: ColumnLayout {
+                anchors.fill: parent
+
+                FileDetailsPage {
+                    id: fileDetails
+
+                    Layout.fillWidth: true
+                    Layout.fillHeight: true
+
+                    background: null
+                    accountState: fileDetailsDrawer.folderAccountState
+                    localPath: fileDetailsDrawer.fileLocalPath
+                }
+
+                CustomButton {
+                    FontMetrics {
+                        id: doneButtonFm
+                        font: parent.contentsFont
+                    }
+
+                    Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+                    Layout.topMargin: fileDetails.intendedPadding
+                    Layout.bottomMargin: fileDetails.intendedPadding
+                    Layout.leftMargin: fileDetails.intendedPadding
+                    Layout.rightMargin: fileDetails.intendedPadding
+                    Layout.preferredWidth: doneButtonFm.boundingRect(text).width +
+                                           leftPadding +
+                                           rightPadding +
+                                           Style.standardSpacing * 2
+
+                    text: qsTr("Done")
+                    contentsFont.bold: true
+                    bgColor: Style.currentUserHeaderColor
+                    textColor: Style.adjustedCurrentUserHeaderColor
+                    textColorHovered: Style.currentUserHeaderTextColor
+                    onClicked: fileDetailsDrawer.close()
+
+                    Accessible.role: Accessible.Button
+                    Accessible.name: qsTr("Close the file details view")
+                    Accessible.onPressAction: clicked()
+                }
+            }
+        }
+    }
+
     Item {
         id: trayWindowMainItem