Add a selector for the intent profile

CURA-6534
This commit is contained in:
Jaime van Kessel 2019-06-05 11:13:32 +02:00
parent 2d8c19203e
commit 35ec70a3cf
5 changed files with 95 additions and 4 deletions

View file

@ -12,12 +12,14 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
class IntentModel(ListModel):
NameRole = Qt.UserRole + 1
IdRole = Qt.UserRole + 2
ContainerRole = Qt.UserRole + 3
def __init__(self, parent: Optional[QObject] = None) -> None:
super().__init__(parent)
self.addRoleName(self.NameRole, "name")
self.addRoleName(self.IdRole, "id")
self.addRoleName(self.ContainerRole, "container")
ContainerRegistry.getInstance().containerAdded.connect(self._onChanged)
ContainerRegistry.getInstance().containerRemoved.connect(self._onChanged)
@ -31,6 +33,6 @@ class IntentModel(ListModel):
def _update(self) -> None:
new_items = []
for container in ContainerRegistry.getInstance().findInstanceContainers(type="intent"):
new_items.append({"name": container.getName(), "id": container.getId()})
new_items.append({"name": container.getName(), "id": container.getId(), "container": container})
self.setItems(new_items)

View file

@ -93,7 +93,7 @@ class CuraContainerStack(ContainerStack):
#
# \param new_intent The new intent container. It is expected to have a "type" metadata entry with the value "intent".
def setIntent(self, new_intent: InstanceContainer, postpone_emit: bool = False) -> None:
self.replaceContainer(_ContainerIndexes.Quality, new_intent, postpone_emit=postpone_emit)
self.replaceContainer(_ContainerIndexes.Intent, new_intent, postpone_emit=postpone_emit)
## Get the quality container.
#

View file

@ -47,6 +47,7 @@ EMPTY_INTENT_CONTAINER_ID = "empty_intent"
empty_intent_container = copy.deepcopy(empty_container)
empty_intent_container.setMetaDataEntry("id", EMPTY_INTENT_CONTAINER_ID)
empty_intent_container.setMetaDataEntry("type", "intent")
empty_intent_container.setName(catalog.i18nc("@info:No intent profile selected", "Default"))
# All empty container IDs set

View file

@ -0,0 +1,44 @@
// Copyright (c) 2019 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7
import QtQuick.Controls 1.4
import UM 1.2 as UM
import Cura 1.6 as Cura
Menu
{
id: menu
title: "Intent"
property int extruderIndex: 0
Cura.IntentModel
{
id: intentModel
}
Instantiator
{
model: intentModel
MenuItem
{
text: model.name
checkable: true
checked: false
Binding on checked
{
when: Cura.MachineManager.activeStack != null
value: Cura.MachineManager.activeStack.intent == model.container
}
exclusiveGroup: group
onTriggered: Cura.MachineManager.activeStack.intent = model.container
}
onObjectAdded: menu.insertItem(index, object)
onObjectRemoved: menu.removeItem(object)
}
ExclusiveGroup { id: group }
}

View file

@ -3,6 +3,7 @@
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Controls 1.1 as OldControls
import UM 1.3 as UM
import Cura 1.0 as Cura
@ -24,12 +25,55 @@ Item
anchors
{
top: parent.top
topMargin: parent.padding
left: parent.left
right: parent.right
margins: parent.padding
}
}
Item
{
id: intent
height: childrenRect.height
anchors
{
top: globalProfileRow.bottom
topMargin: UM.Theme.getSize("default_margin").height
left: parent.left
leftMargin: parent.padding
right: parent.right
rightMargin: parent.padding
}
Label
{
id: intentLabel
anchors
{
top: parent.top
bottom: parent.bottom
left: parent.left
right: intentSelection.left
}
text: catalog.i18nc("@label", "Intent")
font: UM.Theme.getFont("medium")
color: UM.Theme.getColor("text")
verticalAlignment: Text.AlignVCenter
}
OldControls.ToolButton
{
id: intentSelection
text: Cura.MachineManager.activeStack != null ? Cura.MachineManager.activeStack.intent.name : ""
tooltip: text
height: UM.Theme.getSize("print_setup_big_item").height
width: UM.Theme.getSize("print_setup_big_item").width
anchors.right: parent.right
style: UM.Theme.styles.print_setup_header_button
activeFocusOnPress: true
menu: Cura.IntentMenu { extruderIndex: Cura.ExtruderManager.activeExtruderIndex }
}
}
UM.TabRow
@ -40,7 +84,7 @@ Item
anchors
{
top: globalProfileRow.bottom
top: intent.bottom
topMargin: UM.Theme.getSize("default_margin").height
left: parent.left
leftMargin: parent.padding