mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-29 23:34:32 +08:00

The following issues are fixed: * Printer/Quality/Material names will be wrapped if they are too long * The width of the window is determined based on the content of the dialog. With that there will not longer be overlap between the dialog content and the buttons.
472 lines
16 KiB
QML
472 lines
16 KiB
QML
// Copyright (c) 2016 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.1 as UM
|
|
|
|
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
|
|
height: Math.max(dialogSummaryItem.height + 2 * buttonsItem.height, minimumHeight) // 2 * button height to also have some extra space around the button relative to the button size
|
|
|
|
property int comboboxHeight: 15 * screenScaleFactor
|
|
property int spacerHeight: 10 * screenScaleFactor
|
|
property int doubleSpacerHeight: 20 * screenScaleFactor
|
|
|
|
onClosing: manager.notifyClosed()
|
|
onVisibleChanged:
|
|
{
|
|
if (visible)
|
|
{
|
|
machineResolveComboBox.currentIndex = 0
|
|
qualityChangesResolveComboBox.currentIndex = 0
|
|
materialResolveComboBox.currentIndex = 0
|
|
}
|
|
}
|
|
|
|
Item
|
|
{
|
|
id: dialogSummaryItem
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
anchors.margins: 10 * screenScaleFactor
|
|
|
|
UM.I18nCatalog
|
|
{
|
|
id: catalog
|
|
name: "cura"
|
|
}
|
|
SystemPalette
|
|
{
|
|
id: palette
|
|
}
|
|
|
|
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: 2 * screenScaleFactor
|
|
Label
|
|
{
|
|
id: titleLabel
|
|
text: catalog.i18nc("@action:title", "Summary - Cura Project")
|
|
font.pointSize: 18
|
|
}
|
|
Rectangle
|
|
{
|
|
id: separator
|
|
color: palette.text
|
|
width: parent.width
|
|
height: 1
|
|
}
|
|
Item // Spacer
|
|
{
|
|
height: doubleSpacerHeight
|
|
width: height
|
|
}
|
|
|
|
Row
|
|
{
|
|
height: childrenRect.height
|
|
width: parent.width
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Printer settings")
|
|
font.bold: true
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Item
|
|
{
|
|
// spacer
|
|
height: spacerHeight
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
UM.TooltipArea
|
|
{
|
|
id: machineResolveStrategyTooltip
|
|
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?")
|
|
ComboBox
|
|
{
|
|
id: machineResolveComboBox
|
|
model: manager.updatableMachinesModel
|
|
visible: machineResolveStrategyTooltip.visible
|
|
textRole: "displayName"
|
|
width: parent.width
|
|
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
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Row
|
|
{
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Type")
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Label
|
|
{
|
|
text: manager.machineType
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
}
|
|
|
|
Row
|
|
{
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", manager.isPrinterGroup ? "Printer Group" : "Printer Name")
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Label
|
|
{
|
|
text: manager.machineName
|
|
width: (parent.width / 3) | 0
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
}
|
|
|
|
Item // Spacer
|
|
{
|
|
height: doubleSpacerHeight
|
|
width: height
|
|
}
|
|
Row
|
|
{
|
|
height: childrenRect.height
|
|
width: parent.width
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Profile settings")
|
|
font.bold: true
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Item
|
|
{
|
|
// spacer
|
|
height: spacerHeight
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
UM.TooltipArea
|
|
{
|
|
id: qualityChangesResolveTooltip
|
|
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?")
|
|
ComboBox
|
|
{
|
|
model: resolveStrategiesModel
|
|
textRole: "label"
|
|
id: qualityChangesResolveComboBox
|
|
width: parent.width
|
|
onActivated:
|
|
{
|
|
manager.setResolveStrategy("quality_changes", resolveStrategiesModel.get(index).key)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Row
|
|
{
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Name")
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Label
|
|
{
|
|
text: manager.qualityName
|
|
width: (parent.width / 3) | 0
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
}
|
|
Row
|
|
{
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Intent")
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Label
|
|
{
|
|
text: manager.intentName
|
|
width: (parent.width / 3) | 0
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
}
|
|
Row
|
|
{
|
|
width: parent.width
|
|
height: manager.numUserSettings != 0 ? childrenRect.height : 0
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Not in profile")
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Label
|
|
{
|
|
text: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings)
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
visible: manager.numUserSettings != 0
|
|
}
|
|
Row
|
|
{
|
|
width: parent.width
|
|
height: manager.numSettingsOverridenByQualityChanges != 0 ? childrenRect.height : 0
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Derivative from")
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
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
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
visible: manager.numSettingsOverridenByQualityChanges != 0
|
|
}
|
|
Item // Spacer
|
|
{
|
|
height: doubleSpacerHeight
|
|
width: height
|
|
}
|
|
Row
|
|
{
|
|
height: childrenRect.height
|
|
width: parent.width
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Material settings")
|
|
font.bold: true
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Item
|
|
{
|
|
// spacer
|
|
height: spacerHeight
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
UM.TooltipArea
|
|
{
|
|
id: materialResolveTooltip
|
|
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?")
|
|
ComboBox
|
|
{
|
|
model: resolveStrategiesModel
|
|
textRole: "label"
|
|
id: materialResolveComboBox
|
|
width: parent.width
|
|
onActivated:
|
|
{
|
|
manager.setResolveStrategy("material", resolveStrategiesModel.get(index).key)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Repeater
|
|
{
|
|
model: manager.materialLabels
|
|
delegate: Row
|
|
{
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Name")
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Label
|
|
{
|
|
text: modelData
|
|
width: (parent.width / 3) | 0
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
}
|
|
}
|
|
|
|
Item // Spacer
|
|
{
|
|
height: doubleSpacerHeight
|
|
width: height
|
|
}
|
|
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Setting visibility")
|
|
font.bold: true
|
|
}
|
|
Row
|
|
{
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Mode")
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Label
|
|
{
|
|
text: manager.activeMode
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
}
|
|
Row
|
|
{
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
visible: manager.hasVisibleSettingsField
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "Visible settings:")
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings)
|
|
width: (parent.width / 3) | 0
|
|
}
|
|
}
|
|
Item // Spacer
|
|
{
|
|
height: spacerHeight
|
|
width: height
|
|
}
|
|
Row
|
|
{
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
visible: manager.hasObjectsOnPlate
|
|
UM.RecolorImage
|
|
{
|
|
width: warningLabel.height
|
|
height: width
|
|
|
|
source: UM.Theme.getIcon("notice")
|
|
color: palette.text
|
|
|
|
}
|
|
Label
|
|
{
|
|
id: warningLabel
|
|
text: catalog.i18nc("@action:warning", "Loading a project will clear all models on the build plate.")
|
|
wrapMode: Text.Wrap
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Item
|
|
{
|
|
id: buttonsItem
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
anchors.bottom: parent.bottom
|
|
anchors.right: parent.right
|
|
Button
|
|
{
|
|
id: cancel_button
|
|
text: catalog.i18nc("@action:button","Cancel");
|
|
onClicked: { manager.onCancelButtonClicked() }
|
|
enabled: true
|
|
anchors.bottom: parent.bottom
|
|
anchors.right: ok_button.left
|
|
anchors.rightMargin: 2 * screenScaleFactor
|
|
}
|
|
Button
|
|
{
|
|
id: ok_button
|
|
anchors.right: parent.right
|
|
anchors.bottom: parent.bottom
|
|
text: catalog.i18nc("@action:button","Open");
|
|
onClicked: { manager.closeBackend(); manager.onOkButtonClicked() }
|
|
}
|
|
}
|
|
|
|
|
|
function accept() {
|
|
manager.closeBackend();
|
|
manager.onOkButtonClicked();
|
|
base.visible = false;
|
|
base.accept();
|
|
}
|
|
|
|
function reject() {
|
|
manager.onCancelButtonClicked();
|
|
base.visible = false;
|
|
base.rejected();
|
|
}
|
|
}
|