Clean up Add Machine Wizard and use the new MachineDefintionsModel

This commit is contained in:
Arjen Hiemstra 2015-08-25 18:14:48 +02:00
parent b9a306865e
commit 9a88176f6f
2 changed files with 161 additions and 206 deletions

View file

@ -7,44 +7,34 @@ import QtQuick.Layouts 1.1
import QtQuick.Window 2.1
import QtQuick.Controls.Styles 1.1
import UM 1.0 as UM
import UM 1.1 as UM
import Cura 1.0 as Cura
import ".."
ColumnLayout
Item
{
id: wizardPage
property string title
property int pageWidth
property int pageHeight
property var manufacturers: wizardPage.lineManufacturers()
property int manufacturerIndex: 0
id: base
SystemPalette{id: palette}
signal reloadModel(var newModel)
property string activeManufacturer: "Ultimaker";
width: wizardPage.pageWidth
height: wizardPage.pageHeight
property variant wizard;
Connections
{
target: elementRoot
target: base.wizard
onNextClicked: //You can add functions here that get triggered when the final button is clicked in the wizard-element
{
saveMachine()
}
}
function lineManufacturers(manufacturer)
{
var manufacturers = []
for (var i = 0; i < UM.Models.availableMachinesModel.rowCount(); i++)
onBackClicked:
{
if (UM.Models.availableMachinesModel.getItem(i).manufacturer != manufacturers[manufacturers.length - 1])
var old_page_count = base.wizard.getPageCount()
// Delete old pages (if any)
for (var i = old_page_count - 1; i > 0; i--)
{
manufacturers.push(UM.Models.availableMachinesModel.getItem(i).manufacturer)
base.wizard.removePage(i)
}
}
return manufacturers
}
Label
@ -52,7 +42,7 @@ ColumnLayout
id: title
anchors.left: parent.left
anchors.top: parent.top
text: parent.title
text: catalog.i18nc("@title", "Add Printer")
font.pointSize: 18;
}
@ -61,164 +51,121 @@ ColumnLayout
id: subTitle
anchors.left: parent.left
anchors.top: title.bottom
//: Add Printer wizard page description
text: qsTr("Please select the type of printer:");
text: catalog.i18nc("@label", "Please select the type of printer:");
}
ScrollView
{
id: machinesHolder
anchors.left: parent.left
anchors.top: subTitle.bottom
implicitWidth: wizardPage.width- UM.Theme.sizes.default_margin.width
implicitHeight: wizardPage.height - subTitle.height - title.height - (machineNameHolder.height * 2)
Component
{
id: machineDelegate
ColumnLayout
{
id: machineLayout
spacing: 0
anchors.left: parent.left
anchors.leftMargin: UM.Theme.sizes.standard_list_lineheight.width
function showManufacturer()
{
if (model.manufacturer == UM.Models.availableMachinesModel.getItem(index - 1).manufacturer){
return false
}
else{
return true
}
}
height:
{
if (machineLayout.showManufacturer() & wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer)
return UM.Theme.sizes.standard_list_lineheight.height * 2
if (wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer | machineLayout.showManufacturer())
return UM.Theme.sizes.standard_list_lineheight.height * 1
else
return 0
}
Behavior on height
{
NumberAnimation { target: machineLayout; property: "height"; duration: 200}
}
Button
{
id: manufacturer
property color backgroundColor: "transparent"
height: UM.Theme.sizes.standard_list_lineheight.height
visible: machineLayout.showManufacturer()
anchors.top: machineLayout.top
anchors.topMargin: 0
text:
{
if (wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer)
return model.manufacturer + " ▼"
else
return model.manufacturer + " ►"
}
style: ButtonStyle
{
background: Rectangle
{
id: manufacturerBackground
opacity: 0.3
border.width: 0
color: manufacturer.backgroundColor
height: UM.Theme.sizes.standard_list_lineheight.height
}
label: Text
{
renderType: Text.NativeRendering
horizontalAlignment: Text.AlignLeft
text: control.text
color: palette.windowText
font.bold: true
}
}
MouseArea
{
id: mousearea
hoverEnabled: true
anchors.fill: parent
onEntered: manufacturer.backgroundColor = palette.light
onExited: manufacturer.backgroundColor = "transparent"
onClicked:
{
wizardPage.manufacturerIndex = wizardPage.manufacturers.indexOf(model.manufacturer)
machineList.currentIndex = index
}
}
}
RadioButton
{
id: machineButton
opacity: wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer ? 1 : 0
height: wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer ? UM.Theme.sizes.standard_list_lineheight.height : 0
anchors.top: parent.top
anchors.topMargin: machineLayout.showManufacturer() ? manufacturer.height - 5 : 0
anchors.left: parent.left
anchors.leftMargin: UM.Theme.sizes.standard_list_lineheight.width
checked: machineList.currentIndex == index ? true : false
exclusiveGroup: printerGroup;
text: model.name
onClicked: machineList.currentIndex = index;
function getAnimationTime(time)
{
if (machineButton.opacity == 0)
return time
else
return 0
}
Label
{
id: author
visible: model.author != "Ultimaker" ? true : false
height: wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer ? UM.Theme.sizes.standard_list_lineheight.height : 0
//: Printer profile caption meaning: this profile is supported by the community
text: qsTr("community supported profile");
opacity: wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer ? 1 : 0
anchors.left: machineButton.right
anchors.leftMargin: UM.Theme.sizes.standard_list_lineheight.height/2
anchors.verticalCenter: machineButton.verticalCenter
anchors.verticalCenterOffset: UM.Theme.sizes.standard_list_lineheight.height / 4
font: UM.Theme.fonts.caption;
color: palette.mid
}
Behavior on opacity
{
SequentialAnimation
{
PauseAnimation { duration: machineButton.getAnimationTime(100) }
NumberAnimation { properties:"opacity"; duration: machineButton.getAnimationTime(200) }
}
}
}
}
anchors{
left: parent.left;
top: subTitle.bottom;
right: parent.right;
bottom: machineNameHolder.top;
}
ListView
{
id: machineList
property int currentIndex: 0
property int otherMachinesIndex:
{
for (var i = 0; i < UM.Models.availableMachinesModel.rowCount(); i++)
{
if (UM.Models.availableMachinesModel.getItem(i).manufacturer != "Ultimaker")
{
return i
model: UM.MachineDefinitionsModel { id: machineDefinitionsModel; showVariants: false; }
focus: true
section.property: "manufacturer"
section.delegate: Button {
text: {
if (base,activeManufacturer == section)
return section + " ▼"
else
return section + " ►"
}
style: ButtonStyle {
background: Rectangle {
id: manufacturerBackground
opacity: 0.3
border.width: 0
color: control.hovered ? palette.light : "transparent";
height: UM.Theme.sizes.standard_list_lineheight.height
}
label: Text {
horizontalAlignment: Text.AlignLeft
text: control.text
color: palette.windowText
font.bold: true
}
}
onClicked: {
base.activeManufacturer = section;
machineList.currentIndex = machineList.model.find("manufacturer", section)
}
}
delegate: RadioButton {
id: machineButton
anchors.left: parent.left
anchors.leftMargin: UM.Theme.sizes.standard_list_lineheight.width
opacity: 1;
height: UM.Theme.sizes.standard_list_lineheight.height;
checked: ListView.isCurrentItem;
exclusiveGroup: printerGroup;
text: model.name
onClicked: {
ListView.view.currentIndex = index;
if(model.pages.length > 0) {
base.wizard.nextAvailable = true;
} else {
base.wizard.nextAvailable = false;
}
}
Label
{
id: author
// visible: model.author != "Ultimaker" ? true : false
//: Printer profile caption meaning: this profile is supported by the community
// text: qsTr("community supported profile");
text: model.author;
anchors.left: machineButton.right
anchors.leftMargin: UM.Theme.sizes.standard_list_lineheight.height/2
anchors.verticalCenter: machineButton.verticalCenter
anchors.verticalCenterOffset: UM.Theme.sizes.standard_list_lineheight.height / 4
font: UM.Theme.fonts.caption;
color: palette.mid
}
states: State {
name: "collapsed";
when: base.activeManufacturer != model.manufacturer;
PropertyChanges { target: machineButton; opacity: 0; height: 0; }
}
transitions: [
Transition {
to: "collapsed";
SequentialAnimation {
NumberAnimation { property: "opacity"; duration: 75; }
NumberAnimation { property: "height"; duration: 75; }
}
},
Transition {
from: "collapsed";
SequentialAnimation {
NumberAnimation { property: "height"; duration: 75; }
NumberAnimation { property: "opacity"; duration: 75; }
}
}
]
}
anchors.fill: parent
model: UM.Models.availableMachinesModel
delegate: machineDelegate
focus: true
}
}
@ -226,12 +173,11 @@ ColumnLayout
{
id: machineNameHolder
height: childrenRect.height
anchors.top: machinesHolder.bottom
anchors.bottom: parent.bottom;
Label
{
id: insertNameLabel
//: Add Printer wizard field label
text: qsTr("Printer Name:");
text: catalog.i18nc("@label", "Printer Name:");
}
TextField
{
@ -242,39 +188,43 @@ ColumnLayout
}
}
ExclusiveGroup { id: printerGroup; }
function saveMachine()
{
if(machineList.currentIndex != -1)
{
UM.Models.availableMachinesModel.createMachine(machineList.currentIndex, machineName.text)
var pages = UM.Models.availableMachinesModel.getItem(machineList.currentIndex).pages
var old_page_count = elementRoot.getPageCount()
for(var i = 0; i < UM.Models.count; i++)
{
print(UM.Models.getItem(i))
}
// Delete old pages (if any)
for (var i = old_page_count - 1; i > 0; i--)
{
elementRoot.removePage(i)
elementRoot.currentPage = 0
}
var item = machineList.model.getItem(machineList.currentIndex);
machineList.model.createInstance(machineName.text, item.id)
var pages = machineList.model.getItem(machineList.currentIndex).pages
console.log(pages)
console.log(pages.length)
// Insert new pages (if any)
for(var i = 0; i < pages.count; i++)
for(var i = 0; i < pages.length; i++)
{
elementRoot.insertPage(pages.getItem(i).page + ".qml",pages.getItem(i).title,i + 1)
}
// Hack to ensure the current page is set correctly
if(old_page_count == 1)
{
elementRoot.currentPage += 1
console.log(pages[i])
switch(pages[i]) {
case "SelectUpgradedParts":
base.wizard.appendPage(UM.Resources.getPath(Cura.ResourceTypes.QmlFiles, "WizardPages/SelectUpgradedParts.qml"), catalog.i18nc("@title", "Select Upgraded Parts"));
break;
case "UpgradeFirmware":
base.wizard.appendPage(UM.Resources.getPath(Cura.ResourceTypes.QmlFiles, "WizardPages/UpgradeFirmware.qml"), catalog.i18nc("@title", "Upgrade Firmware"));
break;
case "UltimakerCheckup":
base.wizard.appendPage(UM.Resources.getPath(Cura.ResourceTypes.QmlFiles, "WizardPages/UltimakerCheckup.qml"), catalog.i18nc("@title", "Check Printer"));
break;
case "BedLeveling":
base.wizard.appendPage(UM.Resources.getPath(Cura.ResourceTypes.QmlFiles, "WizardPages/Bedleveling.qml"), catalog.i18nc("@title", "Bed Levelling"));
break;
default:
break;
}
}
}
}
}
ExclusiveGroup { id: printerGroup; }
UM.I18nCatalog { id: catalog; name: "cura"; }
SystemPalette { id: palette }
}