Browse Source

Add scroll bar to the `WorkSpaceDialog`

The warning message took out some space from the dialog. Added a scroll bar to make sure the content can still be read.

CURA-6990
c.lamboo 2 years ago
parent
commit
fccfcb0e2b
1 changed files with 293 additions and 284 deletions
  1. 293 284
      plugins/3MFReader/WorkspaceDialog.qml

+ 293 - 284
plugins/3MFReader/WorkspaceDialog.qml

@@ -31,414 +31,423 @@ UM.Dialog
         }
     }
 
-    Item
+    Flickable
     {
-        id: dialogSummaryItem
+        clip: true
         width: parent.width
-        height: childrenRect.height
-        anchors.margins: 10 * screenScaleFactor
+        height: parent.height
+        contentHeight: dialogSummaryItem.height
+        ScrollBar.vertical: UM.ScrollBar { id: verticalScrollBar }
 
-        UM.I18nCatalog
+        Item
         {
-            id: catalog
-            name: "cura"
-        }
+            id: dialogSummaryItem
+            width: verticalScrollBar.visible ? parent.width - verticalScrollBar.width - UM.Theme.getSize("default_margin").width : parent.width
+            height: childrenRect.height
+            anchors.margins: 10 * screenScaleFactor
 
-        ListModel
-        {
-            id: resolveStrategiesModel
-            // Instead of directly adding the list elements, we add them afterwards.
-            // This is because it's impossible to use setting function results to be bound to listElement properties directly.
-            // See http://stackoverflow.com/questions/7659442/listelement-fields-as-properties
-            Component.onCompleted:
+            UM.I18nCatalog
             {
-                append({"key": "override", "label": catalog.i18nc("@action:ComboBox Update/override existing profile", "Update existing")});
-                append({"key": "new", "label": catalog.i18nc("@action:ComboBox Save settings in a new profile", "Create new")});
+                id: catalog
+                name: "cura"
             }
-        }
 
-        Column
-        {
-            width: parent.width
-            height: childrenRect.height
-            spacing: UM.Theme.getSize("default_margin").height
+            ListModel
+            {
+                id: resolveStrategiesModel
+                // Instead of directly adding the list elements, we add them afterwards.
+                // This is because it's impossible to use setting function results to be bound to listElement properties directly.
+                // See http://stackoverflow.com/questions/7659442/listelement-fields-as-properties
+                Component.onCompleted:
+                {
+                    append({"key": "override", "label": catalog.i18nc("@action:ComboBox Update/override existing profile", "Update existing")});
+                    append({"key": "new", "label": catalog.i18nc("@action:ComboBox Save settings in a new profile", "Create new")});
+                }
+            }
 
             Column
             {
                 width: parent.width
                 height: childrenRect.height
+                spacing: UM.Theme.getSize("default_margin").height
 
-                UM.Label
+                Column
                 {
-                    id: titleLabel
-                    text: catalog.i18nc("@action:title", "Summary - Cura Project")
-                    font: UM.Theme.getFont("large")
+                    width: parent.width
+                    height: childrenRect.height
+
+                    UM.Label
+                    {
+                        id: titleLabel
+                        text: catalog.i18nc("@action:title", "Summary - Cura Project")
+                        font: UM.Theme.getFont("large")
+                    }
+
+                    Rectangle
+                    {
+                        id: separator
+                        color: UM.Theme.getColor("text")
+                        width: parent.width
+                        height: UM.Theme.getSize("default_lining").height
+                    }
                 }
 
-                Rectangle
+                Item
                 {
-                    id: separator
-                    color: UM.Theme.getColor("text")
                     width: parent.width
-                    height: UM.Theme.getSize("default_lining").height
-                }
-            }
+                    height: childrenRect.height
 
-            Item
-            {
-                width: parent.width
-                height: childrenRect.height
+                    UM.TooltipArea
+                    {
+                        id: machineResolveStrategyTooltip
+                        anchors.top: parent.top
+                        anchors.right: parent.right
+                        width: (parent.width / 3) | 0
+                        height: visible ? comboboxHeight : 0
+                        visible: base.visible && machineResolveComboBox.model.count > 1
+                        text: catalog.i18nc("@info:tooltip", "How should the conflict in the machine be resolved?")
+                        Cura.ComboBox
+                        {
+                            id: machineResolveComboBox
+                            model: manager.updatableMachinesModel
+                            visible: machineResolveStrategyTooltip.visible
+                            textRole: "displayName"
+                            width: parent.width
+                            height: UM.Theme.getSize("button").height
+                            onCurrentIndexChanged:
+                            {
+                                if (model.getItem(currentIndex).id == "new"
+                                    && model.getItem(currentIndex).type == "default_option")
+                                {
+                                    manager.setResolveStrategy("machine", "new")
+                                }
+                                else
+                                {
+                                    manager.setResolveStrategy("machine", "override")
+                                    manager.setMachineToOverride(model.getItem(currentIndex).id)
+                                }
+                            }
 
-                UM.TooltipArea
-                {
-                    id: machineResolveStrategyTooltip
-                    anchors.top: parent.top
-                    anchors.right: parent.right
-                    width: (parent.width / 3) | 0
-                    height: visible ? comboboxHeight : 0
-                    visible: base.visible && machineResolveComboBox.model.count > 1
-                    text: catalog.i18nc("@info:tooltip", "How should the conflict in the machine be resolved?")
-                    Cura.ComboBox
+                            onVisibleChanged:
+                            {
+                                if (!visible) {return}
+
+                                currentIndex = 0
+                                // If the project printer exists in Cura, set it as the default dropdown menu option.
+                                // No need to check object 0, which is the "Create new" option
+                                for (var i = 1; i < model.count; i++)
+                                {
+                                    if (model.getItem(i).name == manager.machineName)
+                                    {
+                                        currentIndex = i
+                                        break
+                                    }
+                                }
+                                // The project printer does not exist in Cura. If there is at least one printer of the same
+                                // type, select the first one, else set the index to "Create new"
+                                if (currentIndex == 0 && model.count > 1)
+                                {
+                                    currentIndex = 1
+                                }
+                            }
+                        }
+                    }
+
+                    Column
                     {
-                        id: machineResolveComboBox
-                        model: manager.updatableMachinesModel
-                        visible: machineResolveStrategyTooltip.visible
-                        textRole: "displayName"
                         width: parent.width
-                        height: UM.Theme.getSize("button").height
-                        onCurrentIndexChanged:
+                        height: childrenRect.height
+
+                        UM.Label
+                        {
+                            id: printer_settings_label
+                            text: catalog.i18nc("@action:label", "Printer settings")
+                            font: UM.Theme.getFont("default_bold")
+                        }
+
+                        Row
                         {
-                            if (model.getItem(currentIndex).id == "new"
-                                && model.getItem(currentIndex).type == "default_option")
+                            width: parent.width
+                            height: childrenRect.height
+
+                            UM.Label
                             {
-                                manager.setResolveStrategy("machine", "new")
+                                text: catalog.i18nc("@action:label", "Type")
+                                width: (parent.width / 3) | 0
                             }
-                            else
+                            UM.Label
                             {
-                                manager.setResolveStrategy("machine", "override")
-                                manager.setMachineToOverride(model.getItem(currentIndex).id)
+                                text: manager.machineType
+                                width: (parent.width / 3) | 0
                             }
                         }
 
-                        onVisibleChanged:
+                        Row
                         {
-                            if (!visible) {return}
+                            width: parent.width
+                            height: childrenRect.height
 
-                            currentIndex = 0
-                            // If the project printer exists in Cura, set it as the default dropdown menu option.
-                            // No need to check object 0, which is the "Create new" option
-                            for (var i = 1; i < model.count; i++)
+                            UM.Label
                             {
-                                if (model.getItem(i).name == manager.machineName)
-                                {
-                                    currentIndex = i
-                                    break
-                                }
+                                text: catalog.i18nc("@action:label", manager.isPrinterGroup ? "Printer Group" : "Printer Name")
+                                width: (parent.width / 3) | 0
                             }
-                            // The project printer does not exist in Cura. If there is at least one printer of the same
-                            // type, select the first one, else set the index to "Create new"
-                            if (currentIndex == 0 && model.count > 1)
+                            UM.Label
                             {
-                                currentIndex = 1
+                                text: manager.machineName
+                                width: (parent.width / 3) | 0
+                                wrapMode: Text.WordWrap
                             }
                         }
                     }
                 }
 
-                Column
+                Item
                 {
                     width: parent.width
                     height: childrenRect.height
 
-                    UM.Label
+                    UM.TooltipArea
                     {
-                        id: printer_settings_label
-                        text: catalog.i18nc("@action:label", "Printer settings")
-                        font: UM.Theme.getFont("default_bold")
+                        anchors.right: parent.right
+                        anchors.top: parent.top
+                        width: (parent.width / 3) | 0
+                        height: visible ? comboboxHeight : 0
+                        visible: manager.qualityChangesConflict
+                        text: catalog.i18nc("@info:tooltip", "How should the conflict in the profile be resolved?")
+                        Cura.ComboBox
+                        {
+                            model: resolveStrategiesModel
+                            textRole: "label"
+                            id: qualityChangesResolveComboBox
+                            width: parent.width
+                            height: UM.Theme.getSize("button").height
+                            onActivated:
+                            {
+                                manager.setResolveStrategy("quality_changes", resolveStrategiesModel.get(index).key)
+                            }
+                        }
                     }
 
-                    Row
+                    Column
                     {
                         width: parent.width
                         height: childrenRect.height
 
                         UM.Label
                         {
-                            text: catalog.i18nc("@action:label", "Type")
-                            width: (parent.width / 3) | 0
+                            text: catalog.i18nc("@action:label", "Profile settings")
+                            font: UM.Theme.getFont("default_bold")
                         }
-                        UM.Label
+
+                        Row
                         {
-                            text: manager.machineType
-                            width: (parent.width / 3) | 0
-                        }
-                    }
+                            width: parent.width
+                            height: childrenRect.height
 
-                    Row
-                    {
-                        width: parent.width
-                        height: childrenRect.height
+                            UM.Label
+                            {
+                                text: catalog.i18nc("@action:label", "Name")
+                                width: (parent.width / 3) | 0
+                            }
+                            UM.Label
+                            {
+                                text: manager.qualityName
+                                width: (parent.width / 3) | 0
+                                wrapMode: Text.WordWrap
+                            }
+                        }
 
-                        UM.Label
+                        Row
                         {
-                            text: catalog.i18nc("@action:label", manager.isPrinterGroup ? "Printer Group" : "Printer Name")
-                            width: (parent.width / 3) | 0
+                            width: parent.width
+                            height: childrenRect.height
+
+                            UM.Label
+                            {
+                                text: catalog.i18nc("@action:label", "Intent")
+                                width: (parent.width / 3) | 0
+                            }
+                            UM.Label
+                            {
+                                text: manager.intentName
+                                width: (parent.width / 3) | 0
+                                wrapMode: Text.WordWrap
+                            }
                         }
-                        UM.Label
+
+                        Row
                         {
-                            text: manager.machineName
-                            width: (parent.width / 3) | 0
-                            wrapMode: Text.WordWrap
-                        }
-                    }
-                }
-            }
+                            width: parent.width
+                            height: childrenRect.height
 
-            Item
-            {
-                width: parent.width
-                height: childrenRect.height
+                            UM.Label
+                            {
+                                text: catalog.i18nc("@action:label", "Not in profile")
+                                visible: manager.numUserSettings != 0
+                                width: (parent.width / 3) | 0
+                            }
+                            UM.Label
+                            {
+                                text: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings)
+                                visible: manager.numUserSettings != 0
+                                width: (parent.width / 3) | 0
+                            }
+                        }
 
-                UM.TooltipArea
-                {
-                    anchors.right: parent.right
-                    anchors.top: parent.top
-                    width: (parent.width / 3) | 0
-                    height: visible ? comboboxHeight : 0
-                    visible: manager.qualityChangesConflict
-                    text: catalog.i18nc("@info:tooltip", "How should the conflict in the profile be resolved?")
-                    Cura.ComboBox
-                    {
-                        model: resolveStrategiesModel
-                        textRole: "label"
-                        id: qualityChangesResolveComboBox
-                        width: parent.width
-                        height: UM.Theme.getSize("button").height
-                        onActivated:
+                        Row
                         {
-                            manager.setResolveStrategy("quality_changes", resolveStrategiesModel.get(index).key)
+                            width: parent.width
+                            height: childrenRect.height
+
+                            UM.Label
+                            {
+                                text: catalog.i18nc("@action:label", "Derivative from")
+                                visible: manager.numSettingsOverridenByQualityChanges != 0
+                                width: (parent.width / 3) | 0
+                            }
+                            UM.Label
+                            {
+                                text: catalog.i18ncp("@action:label", "%1, %2 override", "%1, %2 overrides", manager.numSettingsOverridenByQualityChanges).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges)
+                                width: (parent.width / 3) | 0
+                                visible: manager.numSettingsOverridenByQualityChanges != 0
+                                wrapMode: Text.WordWrap
+                            }
                         }
                     }
                 }
 
-                Column
+                Item
                 {
                     width: parent.width
                     height: childrenRect.height
 
-                    UM.Label
-                    {
-                        text: catalog.i18nc("@action:label", "Profile settings")
-                        font: UM.Theme.getFont("default_bold")
-                    }
-
-                    Row
+                    UM.TooltipArea
                     {
-                        width: parent.width
-                        height: childrenRect.height
-
-                        UM.Label
-                        {
-                            text: catalog.i18nc("@action:label", "Name")
-                            width: (parent.width / 3) | 0
-                        }
-                        UM.Label
+                        id: materialResolveTooltip
+                        anchors.right: parent.right
+                        anchors.top: parent.top
+                        width: (parent.width / 3) | 0
+                        height: visible ? comboboxHeight : 0
+                        visible: manager.materialConflict
+                        text: catalog.i18nc("@info:tooltip", "How should the conflict in the material be resolved?")
+                        Cura.ComboBox
                         {
-                            text: manager.qualityName
-                            width: (parent.width / 3) | 0
-                            wrapMode: Text.WordWrap
+                            model: resolveStrategiesModel
+                            textRole: "label"
+                            id: materialResolveComboBox
+                            width: parent.width
+                            height: UM.Theme.getSize("button").height
+                            onActivated:
+                            {
+                                manager.setResolveStrategy("material", resolveStrategiesModel.get(index).key)
+                            }
                         }
                     }
 
-                    Row
+                    Column
                     {
                         width: parent.width
                         height: childrenRect.height
-
-                        UM.Label
+                        Row
                         {
-                            text: catalog.i18nc("@action:label", "Intent")
-                            width: (parent.width / 3) | 0
+                            height: childrenRect.height
+                            width: parent.width
+                            spacing: UM.Theme.getSize("narrow_margin").width
+
+                            UM.Label
+                            {
+                                text: catalog.i18nc("@action:label", "Material settings")
+                                font: UM.Theme.getFont("default_bold")
+                                width: (parent.width / 3) | 0
+                            }
                         }
-                        UM.Label
+
+                        Repeater
                         {
-                            text: manager.intentName
-                            width: (parent.width / 3) | 0
-                            wrapMode: Text.WordWrap
+                            model: manager.materialLabels
+                            delegate: Row
+                            {
+                                width: parent.width
+                                height: childrenRect.height
+                                UM.Label
+                                {
+                                    text: catalog.i18nc("@action:label", "Name")
+                                    width: (parent.width / 3) | 0
+                                }
+                                UM.Label
+                                {
+                                    text: modelData
+                                    width: (parent.width / 3) | 0
+                                    wrapMode: Text.WordWrap
+                                }
+                            }
                         }
                     }
+                }
+
+                Column
+                {
+                    width: parent.width
+                    height: childrenRect.height
 
+                    UM.Label
+                    {
+                        text: catalog.i18nc("@action:label", "Setting visibility")
+                        font: UM.Theme.getFont("default_bold")
+                    }
                     Row
                     {
                         width: parent.width
                         height: childrenRect.height
-
                         UM.Label
                         {
-                            text: catalog.i18nc("@action:label", "Not in profile")
-                            visible: manager.numUserSettings != 0
+                            text: catalog.i18nc("@action:label", "Mode")
                             width: (parent.width / 3) | 0
                         }
                         UM.Label
                         {
-                            text: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings)
-                            visible: manager.numUserSettings != 0
+                            text: manager.activeMode
                             width: (parent.width / 3) | 0
                         }
                     }
-
                     Row
                     {
                         width: parent.width
                         height: childrenRect.height
-
-                        UM.Label
-                        {
-                            text: catalog.i18nc("@action:label", "Derivative from")
-                            visible: manager.numSettingsOverridenByQualityChanges != 0
-                            width: (parent.width / 3) | 0
-                        }
+                        visible: manager.hasVisibleSettingsField
                         UM.Label
                         {
-                            text: catalog.i18ncp("@action:label", "%1, %2 override", "%1, %2 overrides", manager.numSettingsOverridenByQualityChanges).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges)
+                            text: catalog.i18nc("@action:label", "Visible settings:")
                             width: (parent.width / 3) | 0
-                            visible: manager.numSettingsOverridenByQualityChanges != 0
-                            wrapMode: Text.WordWrap
-                        }
-                    }
-                }
-            }
-
-            Item
-            {
-                width: parent.width
-                height: childrenRect.height
-
-                UM.TooltipArea
-                {
-                    id: materialResolveTooltip
-                    anchors.right: parent.right
-                    anchors.top: parent.top
-                    width: (parent.width / 3) | 0
-                    height: visible ? comboboxHeight : 0
-                    visible: manager.materialConflict
-                    text: catalog.i18nc("@info:tooltip", "How should the conflict in the material be resolved?")
-                    Cura.ComboBox
-                    {
-                        model: resolveStrategiesModel
-                        textRole: "label"
-                        id: materialResolveComboBox
-                        width: parent.width
-                        height: UM.Theme.getSize("button").height
-                        onActivated:
-                        {
-                            manager.setResolveStrategy("material", resolveStrategiesModel.get(index).key)
                         }
-                    }
-                }
-
-                Column
-                {
-                    width: parent.width
-                    height: childrenRect.height
-                    Row
-                    {
-                        height: childrenRect.height
-                        width: parent.width
-                        spacing: UM.Theme.getSize("narrow_margin").width
-
                         UM.Label
                         {
-                            text: catalog.i18nc("@action:label", "Material settings")
-                            font: UM.Theme.getFont("default_bold")
+                            text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings)
                             width: (parent.width / 3) | 0
                         }
                     }
-
-                    Repeater
-                    {
-                        model: manager.materialLabels
-                        delegate: Row
-                        {
-                            width: parent.width
-                            height: childrenRect.height
-                            UM.Label
-                            {
-                                text: catalog.i18nc("@action:label", "Name")
-                                width: (parent.width / 3) | 0
-                            }
-                            UM.Label
-                            {
-                                text: modelData
-                                width: (parent.width / 3) | 0
-                                wrapMode: Text.WordWrap
-                            }
-                        }
-                    }
                 }
-            }
-
-            Column
-            {
-                width: parent.width
-                height: childrenRect.height
 
-                UM.Label
-                {
-                    text: catalog.i18nc("@action:label", "Setting visibility")
-                    font: UM.Theme.getFont("default_bold")
-                }
-                Row
-                {
-                    width: parent.width
-                    height: childrenRect.height
-                    UM.Label
-                    {
-                        text: catalog.i18nc("@action:label", "Mode")
-                        width: (parent.width / 3) | 0
-                    }
-                    UM.Label
-                    {
-                        text: manager.activeMode
-                        width: (parent.width / 3) | 0
-                    }
-                }
                 Row
                 {
                     width: parent.width
                     height: childrenRect.height
-                    visible: manager.hasVisibleSettingsField
-                    UM.Label
+                    visible: manager.hasObjectsOnPlate
+                    UM.ColorImage
                     {
-                        text: catalog.i18nc("@action:label", "Visible settings:")
-                        width: (parent.width / 3) | 0
+                        width: warningLabel.height
+                        height: width
+                        source: UM.Theme.getIcon("Information")
+                        color: UM.Theme.getColor("text")
                     }
                     UM.Label
                     {
-                        text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings)
-                        width: (parent.width / 3) | 0
+                        id: warningLabel
+                        text: catalog.i18nc("@action:warning", "Loading a project will clear all models on the build plate.")
                     }
                 }
             }
-
-            Row
-            {
-                width: parent.width
-                height: childrenRect.height
-                visible: manager.hasObjectsOnPlate
-                UM.ColorImage
-                {
-                    width: warningLabel.height
-                    height: width
-                    source: UM.Theme.getIcon("Information")
-                    color: UM.Theme.getColor("text")
-                }
-                UM.Label
-                {
-                    id: warningLabel
-                    text: catalog.i18nc("@action:warning", "Loading a project will clear all models on the build plate.")
-                }
-            }
         }
     }