Move tray window header component into separate file
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 21 Nov 2024 06:37:29 +0000 (14:37 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 21 Nov 2024 06:37:29 +0000 (14:37 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
resources.qrc
src/gui/tray/CurrentAccountHeaderButton.qml
src/gui/tray/MainWindow.qml
src/gui/tray/TrayWindowHeader.qml [new file with mode: 0644]

index bcebefc7766086b456238b9cc6a9a8e3604df96b..3733a5a73a710525a47b3b0c0ecd921ee11e0669 100644 (file)
@@ -29,6 +29,7 @@
         <file>src/gui/tray/AutoSizingMenu.qml</file>
         <file>src/gui/tray/ActivityList.qml</file>
         <file>src/gui/tray/CurrentAccountHeaderButton.qml</file>
+        <file>src/gui/tray/TrayWindowHeader.qml</file>
         <file>src/gui/tray/UnifiedSearchInputContainer.qml</file>
         <file>src/gui/tray/UnifiedSearchResultFetchMoreTrigger.qml</file>
         <file>src/gui/tray/UnifiedSearchResultItem.qml</file>
index 74d53db3cd237a9f9ea91f70db20e7cbe9e68035..44a3653d510986c7431f3f082d709687bcc68a17 100644 (file)
@@ -27,6 +27,7 @@ Button {
 
     readonly property alias userLineInstantiator: userLineInstantiator
     readonly property alias accountMenu: accountMenu
+    property color parentBackgroundColor: "transparent"
 
     display: AbstractButton.IconOnly
     flat: true
@@ -165,7 +166,7 @@ Button {
                          && UserModel.currentUser.serverHasUserStatus
                 width: Style.accountAvatarStateIndicatorSize +  + Style.trayFolderStatusIndicatorSizeOffset
                 height: width
-                color: trayWindowHeaderBackground.color
+                color: root.parentBackgroundColor
                 anchors.bottom: currentAccountAvatar.bottom
                 anchors.right: currentAccountAvatar.right
                 radius: width * Style.trayFolderStatusIndicatorRadiusFactor
index 71742adf492e29df9fa4a4ad9ce8d2712412884d..e01729ed3da68ba2f227fe146e52b00ed9027803 100644 (file)
@@ -54,9 +54,9 @@ ApplicationWindow {
 \r
     onVisibleChanged: {\r
         // HACK: reload account Instantiator immediately by restting it - could be done better I guess\r
-        // see also id:currentAccountHeaderButton.accountMenu below\r
-        currentAccountHeaderButton.userLineInstantiator.active = false;\r
-        currentAccountHeaderButton.userLineInstantiator.active = true;\r
+        // see also id:trayWindowHeader.currentAccountHeaderButton.accountMenu below\r
+        trayWindowHeader.currentAccountHeaderButton.userLineInstantiator.active = false;\r
+        trayWindowHeader.currentAccountHeaderButton.userLineInstantiator.active = true;\r
         syncStatus.model.load();\r
     }\r
 \r
@@ -70,7 +70,7 @@ ApplicationWindow {
     Connections {\r
         target: UserModel\r
         function onCurrentUserChanged() {\r
-            currentAccountHeaderButton.accountMenu.close();\r
+            trayWindowHeader.currentAccountHeaderButton.accountMenu.close();\r
             syncStatus.model.load();\r
         }\r
     }\r
@@ -95,8 +95,8 @@ ApplicationWindow {
             userStatusDrawer.close()\r
             fileDetailsDrawer.close();\r
 \r
-            if(Systray.isOpen) {\r
-                currentAccountHeaderButton.accountMenu.close();\r
+            if (Systray.isOpen) {\r
+                trayWindowHeader.currentAccountHeaderButton.accountMenu.close();\r
                 appsMenu.close();\r
                 openLocalFolderButton.closeMenu()\r
             }\r
@@ -237,125 +237,19 @@ ApplicationWindow {
         Accessible.role: Accessible.Grouping\r
         Accessible.name: qsTr("Nextcloud desktop main dialog")\r
 \r
-        Rectangle {\r
-            id: trayWindowHeaderBackground\r
-\r
-            anchors.left:   trayWindowMainItem.left\r
-            anchors.right:  trayWindowMainItem.right\r
-            anchors.top:    trayWindowMainItem.top\r
-            height:         Style.trayWindowHeaderHeight\r
-            color:          Style.currentUserHeaderColor\r
-\r
-            palette {\r
-                text: Style.currentUserHeaderTextColor\r
-                windowText: Style.currentUserHeaderTextColor\r
-                buttonText: Style.currentUserHeaderTextColor\r
-            }\r
-\r
-            RowLayout {\r
-                id: trayWindowHeaderLayout\r
-\r
-                spacing:        0\r
-                anchors.fill:   parent\r
-\r
-                CurrentAccountHeaderButton {\r
-                    id: currentAccountHeaderButton\r
-                    Layout.preferredWidth:  Style.currentAccountButtonWidth\r
-                    Layout.preferredHeight: Style.trayWindowHeaderHeight\r
-                }\r
-\r
-                // Add space between items\r
-                Item {\r
-                    Layout.fillWidth: true\r
-                }\r
-\r
-                TrayFoldersMenuButton {\r
-                    id: openLocalFolderButton\r
-\r
-                    visible: currentUser.hasLocalFolder\r
-                    currentUser: UserModel.currentUser\r
-                    parentBackgroundColor: trayWindowHeaderBackground.color\r
-\r
-                    onClicked: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder()\r
+        TrayWindowHeader {\r
+            id: trayWindowHeader\r
 \r
-                    onFolderEntryTriggered: isGroupFolder ? UserModel.openCurrentAccountFolderFromTrayInfo(fullFolderPath) : UserModel.openCurrentAccountLocalFolder()\r
-\r
-                    Accessible.role: Accessible.Graphic\r
-                    Accessible.name: qsTr("Open local or group folders")\r
-                    Accessible.onPressAction: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder()\r
-\r
-                    Layout.alignment: Qt.AlignRight\r
-                    Layout.preferredWidth:  Style.trayWindowHeaderHeight\r
-                    Layout.preferredHeight: Style.trayWindowHeaderHeight\r
-                }\r
-\r
-                HeaderButton {\r
-                    id: trayWindowFeaturedAppButton\r
-                    visible: UserModel.currentUser.isFeaturedAppEnabled\r
-                    icon.source: UserModel.currentUser.featuredAppIcon + "/"\r
-                    onClicked: UserModel.openCurrentAccountFeaturedApp()\r
-\r
-                    Accessible.role: Accessible.Button\r
-                    Accessible.name: UserModel.currentUser.featuredAppAccessibleName\r
-                    Accessible.onPressAction: trayWindowFeaturedAppButton.clicked()\r
-\r
-                    Layout.alignment: Qt.AlignRight\r
-                    Layout.preferredWidth:  Style.trayWindowHeaderHeight\r
-                    Layout.preferredHeight: Style.trayWindowHeaderHeight\r
-                }\r
-\r
-                HeaderButton {\r
-                    id: trayWindowAppsButton\r
-                    icon.source: "image://svgimage-custom-color/more-apps.svg/" + palette.windowText\r
-\r
-                    onClicked: {\r
-                        if(appsMenu.count <= 0) {\r
-                            UserModel.openCurrentAccountServer()\r
-                        } else if (appsMenu.visible) {\r
-                            appsMenu.close()\r
-                        } else {\r
-                            appsMenu.open()\r
-                        }\r
-                    }\r
-\r
-                    Accessible.role: Accessible.ButtonMenu\r
-                    Accessible.name: qsTr("More apps")\r
-                    Accessible.onPressAction: trayWindowAppsButton.clicked()\r
-\r
-                    Menu {\r
-                        id: appsMenu\r
-                        x: Style.trayWindowMenuOffsetX\r
-                        y: (trayWindowAppsButton.y + trayWindowAppsButton.height + Style.trayWindowMenuOffsetY)\r
-                        width: Style.trayWindowWidth * Style.trayWindowMenuWidthFactor\r
-                        height: implicitHeight + y > Style.trayWindowHeight ? Style.trayWindowHeight - y : implicitHeight\r
-                        closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape\r
-\r
-                        Repeater { \r
-                            model: UserAppsModel\r
-                            delegate: MenuItem {\r
-                                id: appEntry\r
-                                anchors.left: parent.left\r
-                                anchors.right: parent.right\r
-                                text: model.appName\r
-                                font.pixelSize: Style.topLinePixelSize\r
-                                icon.source: model.appIconUrl\r
-                                icon.color: palette.windowText\r
-                                onTriggered: UserAppsModel.openAppUrl(appUrl)\r
-                                hoverEnabled: true\r
-                                Accessible.role: Accessible.MenuItem\r
-                                Accessible.name: qsTr("Open %1 in browser").arg(model.appName)\r
-                                Accessible.onPressAction: appEntry.triggered()\r
-                            }\r
-                        }\r
-                    }\r
-                }\r
-            }\r
-        }   // Rectangle trayWindowHeaderBackground\r
+            anchors.top: parent.top\r
+            anchors.left: parent.left\r
+            anchors.right: parent.right\r
+            height: Style.trayWindowHeaderHeight\r
+        }\r
 \r
         UnifiedSearchInputContainer {\r
             id: trayWindowUnifiedSearchInputContainer\r
 \r
-            anchors.top: trayWindowHeaderBackground.bottom\r
+            anchors.top: trayWindowHeader.bottom\r
             anchors.left: trayWindowMainItem.left\r
             anchors.right: trayWindowMainItem.right\r
             anchors.topMargin: Style.trayHorizontalMargin\r
diff --git a/src/gui/tray/TrayWindowHeader.qml b/src/gui/tray/TrayWindowHeader.qml
new file mode 100644 (file)
index 0000000..142a77e
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2020 by Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+import "../"
+import "../filedetails/"
+
+import Style
+import com.nextcloud.desktopclient
+
+Rectangle {
+    id: root
+
+    readonly property alias currentAccountHeaderButton: currentAccountHeaderButton
+
+    color: Style.currentUserHeaderColor
+
+    palette {
+        text: Style.currentUserHeaderTextColor
+        windowText: Style.currentUserHeaderTextColor
+        buttonText: Style.currentUserHeaderTextColor
+    }
+
+    RowLayout {
+        id: trayWindowHeaderLayout
+
+        spacing: 0
+        anchors.fill: parent
+
+        CurrentAccountHeaderButton {
+            id: currentAccountHeaderButton
+            parentBackgroundColor: root.color
+            Layout.preferredWidth:  Style.currentAccountButtonWidth
+            Layout.fillHeight: true
+        }
+
+        // Add space between items
+        Item {
+            Layout.fillWidth: true
+        }
+
+        TrayFoldersMenuButton {
+            id: openLocalFolderButton
+
+            Layout.alignment: Qt.AlignRight
+            Layout.preferredWidth:  Style.trayWindowHeaderHeight
+            Layout.fillHeight: true
+
+            visible: currentUser.hasLocalFolder
+            currentUser: UserModel.currentUser
+            parentBackgroundColor: root.color
+
+            onClicked: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder()
+
+            onFolderEntryTriggered: isGroupFolder ? UserModel.openCurrentAccountFolderFromTrayInfo(fullFolderPath) : UserModel.openCurrentAccountLocalFolder()
+
+            Accessible.role: Accessible.Graphic
+            Accessible.name: qsTr("Open local or group folders")
+            Accessible.onPressAction: openLocalFolderButton.userHasGroupFolders ? openLocalFolderButton.toggleMenuOpen() : UserModel.openCurrentAccountLocalFolder() 
+        }
+
+        HeaderButton {
+            id: trayWindowFeaturedAppButton
+
+            Layout.alignment: Qt.AlignRight
+            Layout.preferredWidth:  Style.trayWindowHeaderHeight
+            Layout.fillHeight: true
+
+            visible: UserModel.currentUser.isFeaturedAppEnabled
+            icon.source: UserModel.currentUser.featuredAppIcon + "/"
+            onClicked: UserModel.openCurrentAccountFeaturedApp()
+
+            Accessible.role: Accessible.Button
+            Accessible.name: UserModel.currentUser.featuredAppAccessibleName
+            Accessible.onPressAction: trayWindowFeaturedAppButton.clicked() 
+        }
+
+        HeaderButton {
+            id: trayWindowAppsButton
+            icon.source: "image://svgimage-custom-color/more-apps.svg/" + palette.windowText
+
+            onClicked: {
+                if(appsMenu.count <= 0) {
+                    UserModel.openCurrentAccountServer()
+                } else if (appsMenu.visible) {
+                    appsMenu.close()
+                } else {
+                    appsMenu.open()
+                }
+            }
+
+            Accessible.role: Accessible.ButtonMenu
+            Accessible.name: qsTr("More apps")
+            Accessible.onPressAction: trayWindowAppsButton.clicked()
+
+            Menu {
+                id: appsMenu
+                x: Style.trayWindowMenuOffsetX
+                y: (trayWindowAppsButton.y + trayWindowAppsButton.height + Style.trayWindowMenuOffsetY)
+                width: Style.trayWindowWidth * Style.trayWindowMenuWidthFactor
+                height: implicitHeight + y > Style.trayWindowHeight ? Style.trayWindowHeight - y : implicitHeight
+                closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape
+
+                Repeater { 
+                    model: UserAppsModel
+                    delegate: MenuItem {
+                        id: appEntry
+                        anchors.left: parent.left
+                        anchors.right: parent.right
+                        text: model.appName
+                        font.pixelSize: Style.topLinePixelSize
+                        icon.source: model.appIconUrl
+                        icon.color: palette.windowText
+                        onTriggered: UserAppsModel.openAppUrl(appUrl)
+                        hoverEnabled: true
+                        Accessible.role: Accessible.MenuItem
+                        Accessible.name: qsTr("Open %1 in browser").arg(model.appName)
+                        Accessible.onPressAction: appEntry.triggered()
+                    }
+                }
+            }
+        }
+    }
+}