123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511 |
- // Copyright (c) 2022 Ultimaker B.V.
- // Cura is released under the terms of the LGPLv3 or higher.
- import QtQuick 2.10
- import QtQuick.Controls 2.3
- import QtQuick.Layouts 1.3
- import QtQuick.Window 2.2
- import UM 1.6 as UM
- import Cura 1.1 as Cura
- UM.Dialog
- {
- id: workspaceDialog
- title: manager.isUcp? catalog.i18nc("@title:window Don't translate 'Universal Cura Project'", "Open Universal Cura Project (UCP)"): catalog.i18nc("@title:window", "Open Project")
- margin: UM.Theme.getSize("default_margin").width
- minimumWidth: UM.Theme.getSize("modal_window_minimum").width
- minimumHeight: UM.Theme.getSize("modal_window_minimum").height
- backgroundColor: UM.Theme.getColor("detail_background")
- headerComponent: Rectangle
- {
- height: childrenRect.height + 2 * UM.Theme.getSize("default_margin").height
- color: UM.Theme.getColor("main_background")
- ColumnLayout
- {
- id: headerColumn
- anchors.top: parent.top
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.topMargin: UM.Theme.getSize("default_margin").height
- anchors.leftMargin: UM.Theme.getSize("default_margin").width
- anchors.rightMargin: anchors.leftMargin
- RowLayout
- {
- UM.Label
- {
- id: titleLabel
- text: manager.isUcp? catalog.i18nc("@action:title Don't translate 'Universal Cura Project'", "Summary - Open Universal Cura Project (UCP)"): catalog.i18nc("@action:title", "Summary - Cura Project")
- font: UM.Theme.getFont("large")
- }
- Cura.TertiaryButton
- {
- id: learnMoreButton
- visible: manager.isUcp
- text: catalog.i18nc("@button", "Learn more")
- iconSource: UM.Theme.getIcon("LinkExternal")
- isIconOnRightSide: true
- onClicked: Qt.openUrlExternally("https://support.ultimaker.com/s/article/000002979")
- }
- }
- }
- }
- Rectangle
- {
- anchors.fill: parent
- UM.I18nCatalog { id: catalog; name: "cura" }
- color: UM.Theme.getColor("main_background")
- Flickable
- {
- id: dialogSummaryItem
- width: parent.width
- height: parent.height
- clip: true
- contentHeight: contentColumn.height
- ScrollBar.vertical: UM.ScrollBar { id: scrollbar }
- 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
- {
- id: contentColumn
- width: parent.width - scrollbar.width - UM.Theme.getSize("default_margin").width
- height: childrenRect.height
- spacing: UM.Theme.getSize("default_margin").height
- leftPadding: UM.Theme.getSize("default_margin").width
- rightPadding: UM.Theme.getSize("default_margin").width
- WorkspaceSection
- {
- id: printerSection
- title: catalog.i18nc("@action:label", "Printer settings")
- iconSource: UM.Theme.getIcon("Printer")
- content: Column
- {
- spacing: UM.Theme.getSize("default_margin").height
- leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
- WorkspaceRow
- {
- leftLabelText: catalog.i18nc("@action:label", "Type")
- rightLabelText: manager.machineType
- }
- WorkspaceRow
- {
- leftLabelText: catalog.i18nc("@action:label", manager.isPrinterGroup ? "Printer Group" : "Printer Name")
- rightLabelText: manager.isUcp? manager.machineType: manager.machineName == catalog.i18nc("@button", "Create new") ? "" : manager.machineName
- }
- }
- comboboxTitle: catalog.i18nc("@action:label", "Open With")
- comboboxTooltipText: catalog.i18nc("@info:tooltip", "Printer settings will be updated to match the settings saved with the project.")
- comboboxVisible: workspaceDialog.visible && manager.updatableMachinesModel.count > 1
- combobox: Cura.MachineSelector
- {
- id: machineSelector
- headerCornerSide: Cura.RoundedRectangle.Direction.All
- width: parent.width
- height: parent.height
- machineListModel: manager.updatableMachinesModel
- machineName: manager.machineName
- isConnectedCloudPrinter: false
- isCloudRegistered: false
- isNetworkPrinter: manager.isNetworked
- isGroup: manager.isAbstractMachine
- connectionStatus: ""
- minDropDownWidth: machineSelector.width
- Component
- {
- id: componentNewPrinter
- Cura.SecondaryButton
- {
- id: createNewPrinter
- text: catalog.i18nc("@button", "Create new")
- fixedWidthMode: true
- width: parent.width - leftPadding * 1.5
- visible: manager.allowCreateMachine
- onClicked:
- {
- toggleContent()
- manager.setResolveStrategy("machine", "new")
- machineSelector.machineName = catalog.i18nc("@button", "Create new")
- manager.setIsAbstractMachine(false)
- manager.setIsNetworkedMachine(false)
- }
- }
- }
- buttons: manager.allowCreateMachine ? [componentNewPrinter.createObject()] : []
- onSelectPrinter: function(machine)
- {
- toggleContent();
- machineSelector.machineName = machine.name
- manager.setResolveStrategy("machine", "override")
- manager.setMachineToOverride(machine.id)
- manager.setIsAbstractMachine(machine.isAbstractMachine)
- manager.setIsNetworkedMachine(machine.isNetworked)
- }
- }
- }
- WorkspaceSection
- {
- id: ucpProfileSection
- visible: manager.isUcp
- title: catalog.i18nc("@action:label", "Settings Loaded from UCP file")
- iconSource: UM.Theme.getIcon("Settings")
- content: Column
- {
- id: ucpProfileSettingsValuesTable
- spacing: UM.Theme.getSize("default_margin").height
- leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
- WorkspaceRow
- {
- id: numberOfOverrides
- leftLabelText: catalog.i18nc("@action:label", "Settings Loaded from UCP file")
- rightLabelText: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.exportedSettingModelRowCount).arg(manager.exportedSettingModelRowCount)
- buttonText: tableViewSpecificSettings.shouldBeVisible ? catalog.i18nc("@action:button", "Hide settings") : catalog.i18nc("@action:button", "Show settings")
- onButtonClicked: tableViewSpecificSettings.shouldBeVisible = !tableViewSpecificSettings.shouldBeVisible
- }
- Cura.TableView
- {
- id: tableViewSpecificSettings
- width: parent.width - parent.leftPadding - UM.Theme.getSize("default_margin").width
- height: UM.Theme.getSize("card").height
- visible: shouldBeVisible && manager.isUcp
- property bool shouldBeVisible: true
- columnHeaders:
- [
- catalog.i18nc("@title:column", "Applies on"),
- catalog.i18nc("@title:column", "Setting"),
- catalog.i18nc("@title:column", "Value")
- ]
- model: UM.TableModel
- {
- id: tableModel
- headers: ["category", "label", "value"]
- rows: manager.exportedSettingModelItems
- }
- Connections
- {
- target: manager
- function onExportedSettingModelChanged()
- {
- tableModel.clear()
- tableModel.rows = manager.exportedSettingModelItems
- }
- }
- }
- }
- comboboxVisible: manager.qualityChangesConflict
- combobox: Cura.ComboBox
- {
- id: qualityChangesResolveComboBox
- model: resolveStrategiesModel
- textRole: "label"
- visible: manager.qualityChangesConflict && !manager.isUcp
- contentLeftPadding: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width
- textFont: UM.Theme.getFont("medium")
- background: Cura.RoundedRectangle
- {
- border.width: UM.Theme.getSize("default_lining").width
- border.color: UM.Theme.getColor("lining")
- color: qualityChangesResolveComboBox.hovered ? UM.Theme.getColor("expandable_hover") : UM.Theme.getColor("action_button")
- cornerSide: Cura.RoundedRectangle.Direction.All
- radius: UM.Theme.getSize("default_radius").width
- }
- // This is a hack. This will trigger onCurrentIndexChanged and set the index when this component in loaded
- currentIndex:
- {
- currentIndex = 0
- }
- onCurrentIndexChanged:
- {
- manager.setResolveStrategy("quality_changes", resolveStrategiesModel.get(currentIndex).key)
- }
- }
- }
- WorkspaceSection
- {
- id: profileSection
- title: manager.isUcp? catalog.i18nc("@action:label", "Suggested Profile settings"):catalog.i18nc("@action:label", "Profile settings")
- iconSource: UM.Theme.getIcon("Sliders")
- content: Column
- {
- id: profileSettingsValuesTable
- spacing: UM.Theme.getSize("default_margin").height
- leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
- WorkspaceRow
- {
- leftLabelText: catalog.i18nc("@action:label", "Name")
- rightLabelText: manager.qualityName
- visible: manager.isCompatibleMachine
- }
- WorkspaceRow
- {
- leftLabelText: catalog.i18nc("@action:label", "Intent")
- rightLabelText: manager.intentName
- visible: manager.isCompatibleMachine
- }
- WorkspaceRow
- {
- leftLabelText: catalog.i18nc("@action:label", "Not in profile")
- rightLabelText: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings)
- visible: manager.numUserSettings != 0 && !manager.isUcp
- }
- WorkspaceRow
- {
- leftLabelText: catalog.i18nc("@action:label", "Derivative from")
- rightLabelText: catalog.i18ncp("@action:label", "%1, %2 override", "%1, %2 overrides", manager.numSettingsOverridenByQualityChanges).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges)
- visible: manager.numSettingsOverridenByQualityChanges != 0 && manager.isCompatibleMachine
- }
- }
- }
- WorkspaceSection
- {
- id: materialSection
- title: manager.isUcp? catalog.i18nc("@action:label", "Suggested Material settings"): catalog.i18nc("@action:label", "Material settings")
- iconSource: UM.Theme.getIcon("Spool")
- content: Column
- {
- spacing: UM.Theme.getSize("default_margin").height
- leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
- Repeater
- {
- model: manager.materialLabels
- delegate: WorkspaceRow
- {
- leftLabelText: catalog.i18nc("@action:label", "Name")
- rightLabelText: modelData
- }
- }
- }
- comboboxVisible: manager.materialConflict
- combobox: Cura.ComboBox
- {
- id: materialResolveComboBox
- model: resolveStrategiesModel
- textRole: "label"
- visible: manager.materialConflict && !manager.isUcp
- contentLeftPadding: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width
- textFont: UM.Theme.getFont("medium")
- background: Cura.RoundedRectangle
- {
- border.width: UM.Theme.getSize("default_lining").width
- border.color: UM.Theme.getColor("lining")
- color: materialResolveComboBox.hovered ? UM.Theme.getColor("expandable_hover") : UM.Theme.getColor("action_button")
- cornerSide: Cura.RoundedRectangle.Direction.All
- radius: UM.Theme.getSize("default_radius").width
- }
- // This is a hack. This will trigger onCurrentIndexChanged and set the index when this component in loaded
- currentIndex:
- {
- currentIndex = 0
- }
- onCurrentIndexChanged:
- {
- manager.setResolveStrategy("material", resolveStrategiesModel.get(currentIndex).key)
- }
- }
- }
- WorkspaceSection
- {
- id: visibilitySection
- title: catalog.i18nc("@action:label", "Setting visibility")
- iconSource: UM.Theme.getIcon("Eye")
- visible : !manager.isUcp
- content: Column
- {
- spacing: UM.Theme.getSize("default_margin").height
- leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
- bottomPadding: UM.Theme.getSize("narrow_margin").height
- WorkspaceRow
- {
- leftLabelText: catalog.i18nc("@action:label", "Mode")
- rightLabelText: manager.activeMode
- }
- WorkspaceRow
- {
- leftLabelText: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings)
- rightLabelText: manager.activeMode
- visible: manager.hasVisibleSettingsField
- }
- }
- }
- Row
- {
- id: clearBuildPlateWarning
- width: parent.width
- height: childrenRect.height
- spacing: UM.Theme.getSize("default_margin").width
- 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.")
- }
- }
- }
- }
- }
- property bool warning: manager.missingPackages.length > 0
- footerComponent: Rectangle
- {
- color: warning ? UM.Theme.getColor("warning") : "transparent"
- anchors.bottom: parent.bottom
- width: parent.width
- height: childrenRect.height + (warning ? 2 * workspaceDialog.margin : workspaceDialog.margin)
- Column
- {
- height: childrenRect.height
- spacing: workspaceDialog.margin
- anchors.leftMargin: workspaceDialog.margin
- anchors.rightMargin: workspaceDialog.margin
- anchors.bottomMargin: workspaceDialog.margin
- anchors.topMargin: warning ? workspaceDialog.margin : 0
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: parent.top
- RowLayout
- {
- id: warningRow
- height: childrenRect.height
- visible: warning
- spacing: workspaceDialog.margin
- UM.ColorImage
- {
- width: UM.Theme.getSize("extruder_icon").width
- height: UM.Theme.getSize("extruder_icon").height
- source: UM.Theme.getIcon("Warning")
- }
- UM.Label
- {
- id: warningText
- text: catalog.i18nc("@label", "This project contains materials or plugins that are currently not installed in Cura.<br/>Install the missing packages and reopen the project.")
- }
- }
- Loader
- {
- width: parent.width
- height: childrenRect.height
- sourceComponent: buttonRow
- }
- }
- }
- buttonSpacing: UM.Theme.getSize("wide_margin").width
- rightButtons: [
- Cura.TertiaryButton
- {
- visible: !warning
- text: catalog.i18nc("@action:button", "Cancel")
- onClicked: reject()
- },
- Cura.PrimaryButton
- {
- visible: !warning
- text: catalog.i18nc("@action:button", "Open")
- onClicked: accept()
- },
- Cura.TertiaryButton
- {
- visible: warning
- text: catalog.i18nc("@action:button", "Open project anyway")
- onClicked: {
- manager.showMissingMaterialsWarning();
- accept();
- }
- },
- Cura.PrimaryButton
- {
- visible: warning
- text: catalog.i18nc("@action:button", "Install missing packages")
- onClicked: manager.installMissingPackages()
- }
- ]
- onClosing: manager.notifyClosed()
- onRejected: manager.onCancelButtonClicked()
- onAccepted: manager.onOkButtonClicked()
- onVisibleChanged:
- {
- if (visible)
- {
- // Force reload the comboboxes
- // Since this dialog is only created once the first time you open it, these comboxes need to be reloaded
- // each time it is shown after the first time so that the indexes will update correctly.
- materialSection.reloadValues()
- profileSection.reloadValues()
- printerSection.reloadValues()
- ucpProfileSection.reloadValues()
- }
- }
- }
|