123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537 |
- // Copyright (c) 2020 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.5 as UM
- import Cura 1.1 as Cura
- UM.Dialog
- {
- id: base
- title: catalog.i18nc("@title:window", "Open Project")
- minimumWidth: UM.Theme.getSize("popup_dialog").width
- minimumHeight: UM.Theme.getSize("popup_dialog").height
- width: minimumWidth
- backgroundColor: UM.Theme.getColor("main_background")
- margin: UM.Theme.getSize("default_margin").width
- property int comboboxHeight: UM.Theme.getSize("default_margin").height
- onClosing: manager.notifyClosed()
- onVisibleChanged:
- {
- if (visible)
- {
- machineResolveComboBox.currentIndex = 0
- qualityChangesResolveComboBox.currentIndex = 0
- materialResolveComboBox.currentIndex = 0
- }
- }
- Flickable
- {
- clip: true
- width: parent.width
- height: parent.height
- contentHeight: dialogSummaryItem.height
- ScrollBar.vertical: UM.ScrollBar { id: verticalScrollBar }
- Item
- {
- id: dialogSummaryItem
- width: verticalScrollBar.visible ? parent.width - verticalScrollBar.width - UM.Theme.getSize("default_margin").width : parent.width
- height: childrenRect.height
- anchors.margins: 10 * screenScaleFactor
- UM.I18nCatalog
- {
- id: catalog
- name: "cura"
- }
- 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
- Column
- {
- 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
- }
- }
- 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)
- }
- }
- 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
- {
- width: parent.width
- height: childrenRect.height
- UM.Label
- {
- id: printer_settings_label
- text: catalog.i18nc("@action:label", "Printer settings")
- font: UM.Theme.getFont("default_bold")
- }
- Row
- {
- width: parent.width
- height: childrenRect.height
- UM.Label
- {
- text: catalog.i18nc("@action:label", "Type")
- width: (parent.width / 3) | 0
- }
- UM.Label
- {
- text: manager.machineType
- width: (parent.width / 3) | 0
- }
- }
- Row
- {
- width: parent.width
- height: childrenRect.height
- UM.Label
- {
- text: catalog.i18nc("@action:label", manager.isPrinterGroup ? "Printer Group" : "Printer Name")
- width: (parent.width / 3) | 0
- }
- UM.Label
- {
- text: manager.machineName
- width: (parent.width / 3) | 0
- wrapMode: Text.WordWrap
- }
- }
- }
- }
- Item
- {
- width: parent.width
- height: childrenRect.height
- 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:
- {
- manager.setResolveStrategy("quality_changes", resolveStrategiesModel.get(index).key)
- }
- }
- }
- Column
- {
- width: parent.width
- height: childrenRect.height
- UM.Label
- {
- text: catalog.i18nc("@action:label", "Profile settings")
- font: UM.Theme.getFont("default_bold")
- }
- 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
- }
- }
- Row
- {
- 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
- }
- }
- Row
- {
- 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
- }
- }
- 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
- }
- 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
- }
- }
- }
- }
- 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")
- 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
- {
- text: catalog.i18nc("@action:label", "Visible settings:")
- width: (parent.width / 3) | 0
- }
- UM.Label
- {
- text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings)
- width: (parent.width / 3) | 0
- }
- }
- }
- 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.")
- }
- }
- }
- }
- }
- 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 + 2 * base.margin
- Column
- {
- height: childrenRect.height
- spacing: base.margin
- anchors.margins: base.margin
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: parent.top
- RowLayout
- {
- id: warningRow
- height: childrenRect.height
- visible: warning
- spacing: base.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", "The material used in this project is currently not installed in Cura.<br/>Install the material profile and reopen the project.")
- }
- }
- Loader
- {
- width: parent.width
- height: childrenRect.height
- sourceComponent: buttonRow
- }
- }
- }
- buttonSpacing: UM.Theme.getSize("default_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 material")
- onClicked: manager.installMissingPackages()
- }
- ]
- onRejected: manager.onCancelButtonClicked()
- onAccepted: manager.onOkButtonClicked()
- }
|