浏览代码

refactor common parts of conflict delegate into a separate component

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
Matthieu Gallien 2 年之前
父节点
当前提交
31e4dede62
共有 3 个文件被更改,包括 115 次插入139 次删除
  1. 1 0
      resources.qrc
  2. 16 139
      src/gui/ConflictDelegate.qml
  3. 98 0
      src/gui/ConflictItemFileInfo.qml

+ 1 - 0
resources.qrc

@@ -58,5 +58,6 @@
         <file>src/gui/tray/TrayFolderListItem.qml</file>
         <file>src/gui/ResolveConflictsDialog.qml</file>
         <file>src/gui/ConflictDelegate.qml</file>
+        <file>src/gui/ConflictItemFileInfo.qml</file>
     </qresource>
 </RCC>

+ 16 - 139
src/gui/ConflictDelegate.qml

@@ -53,156 +53,33 @@ Item {
         anchors.right: parent.right
         anchors.bottomMargin: 8
 
-        Item {
+        ConflictItemFileInfo {
             Layout.fillWidth: true
             Layout.fillHeight: true
 
-            CheckBox {
-                id: selectExisting
+            itemSelected: root.existingSelected
+            itemPreviewUrl: root.existingPreviewUrl
+            itemVersionLabel: qsTr('Local version')
+            itemDateLabel: root.existingDate
+            itemFileSizeLabel: root.existingSize
 
-                anchors.left: parent.left
-                anchors.verticalCenter: parent.verticalCenter
-
-                leftPadding: 0
-                spacing: 0
-
-                checked: root.existingSelected
-
-                onToggled: function() {
-                    model.existingSelected = checked
-                }
-            }
-
-            Image {
-                id: existingPreview
-
-                anchors.left: selectExisting.right
-                anchors.verticalCenter: parent.verticalCenter
-
-                source: root.existingPreviewUrl
-                width: 48
-                height: 48
-                sourceSize.width: 48
-                sourceSize.height: 48
-            }
-
-            ColumnLayout {
-                anchors.top: parent.top
-                anchors.bottom: parent.bottom
-                anchors.left: existingPreview.right
-                anchors.right: parent.right
-                anchors.leftMargin: 10
-
-                spacing: 0
-
-                Item {
-                    Layout.fillHeight: true
-                }
-
-                EnforcedPlainTextLabel {
-                    Layout.fillWidth: true
-
-                    text: qsTr('Local version')
-
-                    font.pixelSize: 15
-                }
-
-                EnforcedPlainTextLabel {
-                    Layout.fillWidth: true
-
-                    text: root.existingDate
-
-                    font.pixelSize: 15
-                }
-
-                EnforcedPlainTextLabel {
-                    Layout.fillWidth: true
-
-                    text: existingSize
-
-                    font.pixelSize: 15
-                }
-
-                Item {
-                    Layout.fillHeight: true
-                }
+            onSelectedChanged: function() {
+                model.existingSelected = itemSelected
             }
         }
 
-        Item {
+        ConflictItemFileInfo {
             Layout.fillWidth: true
             Layout.fillHeight: true
 
-            CheckBox {
-                id: selectConflict
-
-                anchors.left: parent.left
-                anchors.verticalCenter: parent.verticalCenter
-                anchors.leftMargin: 0
-
-                leftPadding: 0
-                spacing: 0
-
-                checked: root.conflictSelected
-
-                onToggled: function() {
-                    model.conflictSelected = checked
-                }
-            }
-
-            Image {
-                id: conflictPreview
-
-                anchors.left: selectConflict.right
-                anchors.verticalCenter: parent.verticalCenter
-
-                source: root.conflictPreviewUrl
-                width: 48
-                height: 48
-                sourceSize.width: 48
-                sourceSize.height: 48
-            }
-
-            ColumnLayout {
-                anchors.top: parent.top
-                anchors.bottom: parent.bottom
-                anchors.left: conflictPreview.right
-                anchors.right: parent.right
-                anchors.leftMargin: 10
-
-                spacing: 0
-
-                Item {
-                    Layout.fillHeight: true
-                }
-
-                EnforcedPlainTextLabel {
-                    Layout.fillWidth: true
-
-                    text: qsTr('Server version')
-
-                    font.pixelSize: 15
-                }
-
-                EnforcedPlainTextLabel {
-                    Layout.fillWidth: true
-
-                    text: root.conflictDate
-
-                    font.pixelSize: 15
-                }
-
-                EnforcedPlainTextLabel {
-                    Layout.fillWidth: true
-
-                    text: conflictSize
-
-                    font.pixelSize: 15
-                }
+            itemSelected: root.conflictSelected
+            itemPreviewUrl: root.conflictPreviewUrl
+            itemVersionLabel: qsTr('Server version')
+            itemDateLabel: root.conflictDate
+            itemFileSizeLabel: root.conflictSize
 
-                Item {
-                    Layout.fillHeight: true
-                }
+            onSelectedChanged: function() {
+                model.conflictSelected = itemSelected
             }
         }
     }

+ 98 - 0
src/gui/ConflictItemFileInfo.qml

@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2023 by Matthieu Gallien <matthieu.gallien@nextcloud.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 QtQml 2.15
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Controls 2.15
+import Style 1.0
+import "./tray"
+
+Item {
+    property alias itemSelected: selectItem.checked
+    property alias itemPreviewUrl: itemPreview.source
+    property alias itemVersionLabel: versionLabel.text
+    property alias itemDateLabel: dateLabel.text
+    property alias itemFileSizeLabel: fileSizeLabel.text
+
+    signal selectedChanged()
+
+    CheckBox {
+        id: selectItem
+
+        anchors.left: parent.left
+        anchors.verticalCenter: parent.verticalCenter
+
+        leftPadding: 0
+        spacing: 0
+
+        onToggled: function() {
+            selectedChanged()
+        }
+    }
+
+    Image {
+        id: itemPreview
+
+        anchors.left: selectItem.right
+        anchors.verticalCenter: parent.verticalCenter
+
+        width: 48
+        height: 48
+        sourceSize.width: 48
+        sourceSize.height: 48
+    }
+
+    ColumnLayout {
+        anchors.top: parent.top
+        anchors.bottom: parent.bottom
+        anchors.left: itemPreview.right
+        anchors.right: parent.right
+        anchors.leftMargin: 10
+
+        spacing: 0
+
+        Item {
+            Layout.fillHeight: true
+        }
+
+        EnforcedPlainTextLabel {
+            id: versionLabel
+
+            Layout.fillWidth: true
+
+            font.pixelSize: 15
+        }
+
+        EnforcedPlainTextLabel {
+            id: dateLabel
+
+            Layout.fillWidth: true
+
+            font.pixelSize: 15
+        }
+
+        EnforcedPlainTextLabel {
+            id: fileSizeLabel
+
+            Layout.fillWidth: true
+
+            font.pixelSize: 15
+        }
+
+        Item {
+            Layout.fillHeight: true
+        }
+    }
+}