Show file details within the tray dialog, rather than in a separate dialog
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 7 Nov 2022 13:05:20 +0000 (14:05 +0100)
committerClaudio Cambra <claudio.cambra@gmail.com>
Fri, 9 Dec 2022 14:06:35 +0000 (15:06 +0100)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/systray.cpp
src/gui/systray.h
src/gui/tray/ActivityItem.qml
src/gui/tray/Window.qml

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