Cura/resources/qml/Preferences/ProfilesPage.qml
2018-02-19 15:24:58 +01:00

391 lines
12 KiB
QML

// Copyright (c) 2018 Ultimaker B.V.
// Uranium is released under the terms of the LGPLv3 or higher.
import QtQuick 2.8
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.3
import QtQuick.Dialogs 1.2
import UM 1.2 as UM
import Cura 1.0 as Cura
Item
{
id: base
property var resetEnabled: false // Keep PreferencesDialog happy
property var extrudersModel: Cura.ExtrudersModel{}
UM.I18nCatalog { id: catalog; name: "cura"; }
Cura.QualityManagementModel {
id: qualitiesModel
}
Label {
id: titleLabel
anchors {
top: parent.top
left: parent.left
right: parent.right
margins: 5 * screenScaleFactor
}
font.pointSize: 18
text: catalog.i18nc("@title:tab", "Profiles")
}
property var hasCurrentItem: qualityListView.currentItem != null
property var currentItem: {
var current_index = qualityListView.currentIndex;
return qualitiesModel.getItem(current_index);
}
property var isCurrentItemActivated: {
if (!base.currentItem) {
return false;
}
return base.currentItem.name == Cura.MachineManager.activeQualityOrQualityChangesName;
}
Row // Button Row
{
id: buttonRow
anchors {
left: parent.left
right: parent.right
top: titleLabel.bottom
}
height: childrenRect.height
// Activate button
Button
{
text: catalog.i18nc("@action:button", "Activate")
iconName: "list-activate"
enabled: !isCurrentItemActivated
onClicked: {
if (base.currentItem.is_read_only) {
Cura.MachineManager.setQualityGroup(base.currentItem.quality_group);
} else {
Cura.MachineManager.setQualityChangesGroup(base.currentItem.quality_changes_group);
}
}
}
// Create button
Button
{
text: catalog.i18nc("@label", "Create")
iconName: "list-add"
//enabled: base.canCreateProfile() && !Cura.MachineManager.stacksHaveErrors
enabled: true // TODO
//visible: base.canCreateProfile()
visible: true // TODO
onClicked: {
// TODO
}
}
// Duplicate button
Button
{
text: catalog.i18nc("@label", "Duplicate")
iconName: "list-add"
//enabled: ! base.canCreateProfile()
enabled: true // TODO
//visible: ! base.canCreateProfile()
visible: true // TODO
onClicked: {
// TODO
}
}
// Remove button
Button
{
text: catalog.i18nc("@action:button", "Remove")
iconName: "list-remove"
//enabled: base.currentItem != null ? !base.currentItem.readOnly && !Cura.ContainerManager.isContainerUsed(base.currentItem.id) : false;
enabled: true // TODO
onClicked: {
// TODO
}
}
// Rename button
Button
{
text: catalog.i18nc("@action:button", "Rename")
iconName: "edit-rename"
//enabled: base.currentItem != null ? !base.currentItem.readOnly : false;
enabled: true // TODO
onClicked: {
// TODO
}
}
// Import button
Button
{
text: catalog.i18nc("@action:button", "Import")
iconName: "document-import"
onClicked: {
// TODO
}
}
// Export button
Button
{
text: catalog.i18nc("@action:button", "Export")
iconName: "document-export"
//enabled: currentItem != null && !base.currentItem.readOnly
enabled: true // TODO
onClicked: {
// TODO
}
}
}
Item {
id: contentsItem
anchors {
top: titleLabel.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
margins: 5 * screenScaleFactor
bottomMargin: 0
}
clip: true
}
Item
{
anchors {
top: buttonRow.bottom
topMargin: UM.Theme.getSize("default_margin").height
left: parent.left
right: parent.right
bottom: parent.bottom
}
SystemPalette { id: palette }
Label
{
id: captionLabel
anchors {
top: parent.top
left: parent.left
}
visible: text != ""
text: {
// OLD STUFF
return catalog.i18nc("@label %1 is printer name", "Printer: %1").arg(Cura.MachineManager.activeMachineName);
}
width: profileScrollView.width
elide: Text.ElideRight
}
ScrollView
{
id: profileScrollView
anchors {
top: captionLabel.visible ? captionLabel.bottom : parent.top
topMargin: captionLabel.visible ? UM.Theme.getSize("default_margin").height : 0
bottom: parent.bottom
left: parent.left
}
Rectangle {
parent: viewport
anchors.fill: parent
color: palette.light
}
width: true ? (parent.width * 0.4) | 0 : parent.width
ListView
{
id: qualityListView
model: qualitiesModel
section.property: "is_read_only"
section.delegate: Rectangle
{
height: childrenRect.height
Label
{
anchors.left: parent.left
anchors.leftMargin: UM.Theme.getSize("default_lining").width
text: section == "true" ? catalog.i18nc("@label", "Protected profiles") : catalog.i18nc("@label", "Custom profiles")
font.bold: true
}
}
delegate: Rectangle
{
width: profileScrollView.width
height: childrenRect.height
color: ListView.isCurrentItem ? palette.highlight : (model.index % 2) ? palette.base : palette.alternateBase
Row
{
spacing: (UM.Theme.getSize("default_margin").width / 2) | 0
anchors.left: parent.left
anchors.leftMargin: UM.Theme.getSize("default_margin").width
anchors.right: parent.right
Label
{
width: Math.floor((parent.width * 0.3))
text: model.name
elide: Text.ElideRight
font.italic: { // TODO: make it easier
return model.name == Cura.MachineManager.activeQualityOrQualityChangesName;
}
color: parent.ListView.isCurrentItem ? palette.highlightedText : palette.text;
}
}
MouseArea
{
anchors.fill: parent
onClicked: {
parent.ListView.view.currentIndex = model.index;
}
}
}
onCurrentIndexChanged:
{
var model = qualitiesModel.getItem(currentIndex);
// TODO
}
}
}
// details panel on the right
Item
{
id: detailsPanel
anchors {
left: profileScrollView.right
leftMargin: UM.Theme.getSize("default_margin").width
top: parent.top
bottom: parent.bottom
right: parent.right
}
Item
{
anchors.fill: parent
Item // Profile title Label
{
id: profileName
width: parent.width
height: childrenRect.height
Label {
text: base.currentItem.name // TODO
font: UM.Theme.getFont("large")
}
}
Flow {
id: currentSettingsActions
visible: true // TODO //currentItem && currentItem.id == Cura.MachineManager.activeQualityId
anchors.left: parent.left
anchors.right: parent.right
anchors.top: profileName.bottom
anchors.topMargin: UM.Theme.getSize("default_margin").height
Button
{
text: {
return catalog.i18nc("@action:button", "Update profile with current settings/overrides");
}
enabled: Cura.MachineManager.hasUserSettings && !Cura.MachineManager.isReadOnly(Cura.MachineManager.activeQualityId)
onClicked: Cura.ContainerManager.updateQualityChanges()
}
Button
{
text: catalog.i18nc("@action:button", "Discard current changes");
enabled: Cura.MachineManager.hasUserSettings
onClicked: Cura.ContainerManager.clearUserContainers();
}
}
Column {
id: profileNotices
anchors.top: currentSettingsActions.visible ? currentSettingsActions.bottom : currentSettingsActions.anchors.top
anchors.topMargin: UM.Theme.getSize("default_margin").height
anchors.left: parent.left
anchors.right: parent.right
spacing: UM.Theme.getSize("default_margin").height
Label {
id: defaultsMessage
visible: false
text: catalog.i18nc("@action:label", "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below.")
wrapMode: Text.WordWrap
width: parent.width
}
Label {
id: noCurrentSettingsMessage
visible: currentItem && currentItem.id == Cura.MachineManager.activeQualityId && !Cura.MachineManager.hasUserSettings
text: catalog.i18nc("@action:label", "Your current settings match the selected profile.")
wrapMode: Text.WordWrap
width: parent.width
}
}
TabView
{
anchors.left: parent.left
anchors.top: profileNotices.visible ? profileNotices.bottom : profileNotices.anchors.top
anchors.topMargin: UM.Theme.getSize("default_margin").height
anchors.right: parent.right
anchors.bottom: parent.bottom
currentIndex: 0
ProfileTab
{
title: catalog.i18nc("@title:tab", "Global Settings");
quality: base.currentItem;
}
Repeater
{
model: base.extrudersModel
ProfileTab
{
title: model.name;
extruderPosition: model.index;
quality: base.currentItem;
}
}
}
}
}
}
}