// Copyright (c) 2015 Ultimaker B.V. // Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Layouts 1.1 import UM 1.1 as UM Rectangle { id: base; property real progress: UM.Backend.progress; property bool activity: Printer.getPlatformActivity; Behavior on progress { NumberAnimation { duration: 250; } } property int totalHeight: childrenRect.height property string fileBaseName property variant activeMachineInstance: UM.MachineManager.activeMachineInstance onActiveMachineInstanceChanged: { base.createFileName() } UM.I18nCatalog { id: catalog; name:"cura"} property variant printDuration: PrintInformation.currentPrintTime; property real printMaterialAmount: PrintInformation.materialAmount; function createFileName(){ var splitMachineName = UM.MachineManager.activeMachineInstance.split(" ") var abbrMachine = '' for (var i = 0; i < splitMachineName.length; i++){ if (splitMachineName[i].search(/ultimaker/i) != -1){ abbrMachine += 'UM' } else{ if (splitMachineName[i].charAt(0).search(/[0-9]/g) == -1) abbrMachine += splitMachineName[i].charAt(0) } var regExpAdditives = /[0-9\+]/g; var resultAdditives = splitMachineName[i].match(regExpAdditives); if (resultAdditives != null){ for (var j = 0; j < resultAdditives.length; j++){ abbrMachine += resultAdditives[j] } } } //printJobTextfield.text = abbrMachine + '_' + base.fileBaseName } Connections { target: openDialog onHasMesh: { base.fileBaseName = name base.createFileName() } } Rectangle{ id: printJobRow implicitWidth: base.width; //implicitHeight: UM.Theme.sizes.sidebar_header.height /////////////remove this TODO implicitHeight: 1 anchors.top: parent.top //color: UM.Theme.colors.sidebar_header_bar color: UM.Theme.colors.setting_control_border // Label{ // id: printJobTextfieldLabel // text: catalog.i18nc("@label","Printjob name"); // anchors.left: parent.left // anchors.leftMargin: UM.Theme.sizes.default_margin.width; // anchors.verticalCenter: parent.verticalCenter // font: UM.Theme.fonts.default; // color: UM.Theme.colors.text_white // } // TextField { // id: printJobTextfield // anchors.right: parent.right // anchors.rightMargin: UM.Theme.sizes.default_margin.width; // anchors.verticalCenter: parent.verticalCenter // width: parent.width/100*55 // height: UM.Theme.sizes.sidebar_inputFields.height // property int unremovableSpacing: 5 // text: '' // onEditingFinished: { // if (printJobTextfield.text != ''){ // printJobTextfield.focus = false // } // } // validator: RegExpValidator { // regExp: /^[^\\ \/ \.]*$/ // } // style: TextFieldStyle{ // textColor: UM.Theme.colors.setting_control_text; // font: UM.Theme.fonts.default; // background: Rectangle { // radius: 0 // implicitWidth: parent.width // implicitHeight: parent.height // border.width: 1; // border.color: UM.Theme.colors.slider_groove_border; // } // } // } } Rectangle { id: specsRow implicitWidth: base.width implicitHeight: UM.Theme.sizes.sidebar_specs_bar.height anchors.top: printJobRow.bottom Item{ id: time width: (parent.width / 100 * 45) - UM.Theme.sizes.default_margin.width * 2 height: parent.height anchors.left: parent.left anchors.leftMargin: UM.Theme.sizes.default_margin.width anchors.top: parent.top visible: base.printMaterialAmount > 0 ? true : false UM.RecolorImage { id: timeIcon anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left width: UM.Theme.sizes.save_button_specs_icons.width height: UM.Theme.sizes.save_button_specs_icons.height sourceSize.width: width sourceSize.height: width color: UM.Theme.colors.text_hover source: UM.Theme.icons.print_time; } Label{ id: timeSpec anchors.verticalCenter: parent.verticalCenter anchors.left: timeIcon.right anchors.leftMargin: UM.Theme.sizes.default_margin.width/2 font: UM.Theme.fonts.default color: UM.Theme.colors.text text: (!base.printDuration || !base.printDuration.valid) ? "" : catalog.i18nc("@label", "%1 h:m").arg(base.printDuration.getDisplayString(UM.DurationFormat.Short)) } } Item{ width: parent.width / 100 * 55 height: parent.height anchors.left: time.right anchors.top: parent.top visible: base.printMaterialAmount > 0 ? true : false UM.RecolorImage { id: lengthIcon anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left width: UM.Theme.sizes.save_button_specs_icons.width height: UM.Theme.sizes.save_button_specs_icons.height sourceSize.width: width sourceSize.height: width color: UM.Theme.colors.text_hover source: UM.Theme.icons.category_material; } Label{ id: lengthSpec anchors.verticalCenter: parent.verticalCenter anchors.left: lengthIcon.right anchors.leftMargin: UM.Theme.sizes.default_margin.width/2 font: UM.Theme.fonts.default color: UM.Theme.colors.text text: base.printMaterialAmount <= 0 ? "" : catalog.i18nc("@label","%1 m").arg(base.printMaterialAmount) } } } Rectangle{ id: saveRow width: base.width height: saveToButton.height + (UM.Theme.sizes.default_margin.height / 2) // height + bottomMargin anchors.top: specsRow.bottom anchors.left: parent.left Button { id: saveToButton property int resizedWidth x: base.width - saveToButton.resizedWidth - UM.Theme.sizes.default_margin.width - UM.Theme.sizes.save_button_save_to_button.height tooltip: UM.OutputDeviceManager.activeDeviceDescription; enabled: base.progress > 0.99 && base.activity == true height: UM.Theme.sizes.save_button_save_to_button.height width: 150 anchors.top:parent.top text: UM.OutputDeviceManager.activeDeviceShortDescription onClicked: { UM.OutputDeviceManager.requestWriteToDevice(UM.OutputDeviceManager.activeDevice) } style: ButtonStyle { background: Rectangle { color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button Behavior on color { ColorAnimation { duration: 50; } } width: { var w = 0; if (base.width*0.55 > actualLabel.width + (UM.Theme.sizes.default_margin.width * 2)){ saveToButton.resizedWidth = base.width*0.55 w = base.width*0.55 } else { saveToButton.resizedWidth = actualLabel.width + (UM.Theme.sizes.default_margin.width * 2) w = actualLabel.width + (UM.Theme.sizes.default_margin.width * 2) } if(w < base.width * 0.55) { w = base.width * 0.55; } return w; } Label { id: actualLabel anchors.centerIn: parent color: UM.Theme.colors.load_save_button_text font: UM.Theme.fonts.default text: control.text; } } label: Item { } } } Button { id: deviceSelectionMenu tooltip: catalog.i18nc("@info:tooltip","Select the active output device"); anchors.top:parent.top anchors.right: parent.right anchors.rightMargin: UM.Theme.sizes.default_margin.width width: UM.Theme.sizes.save_button_save_to_button.height height: UM.Theme.sizes.save_button_save_to_button.height //iconSource: UM.Theme.icons[UM.OutputDeviceManager.activeDeviceIconName]; style: ButtonStyle { background: Rectangle { id: deviceSelectionIcon color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button Behavior on color { ColorAnimation { duration: 50; } } anchors.left: parent.left anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width / 2; width: parent.height height: parent.height UM.RecolorImage { id: lengthIcon anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter width: UM.Theme.sizes.standard_arrow.width height: UM.Theme.sizes.standard_arrow.height sourceSize.width: width sourceSize.height: width color: UM.Theme.colors.load_save_button_text source: UM.Theme.icons.arrow_bottom } } label: Label{ } } menu: Menu { id: devicesMenu; Instantiator { model: devicesModel; MenuItem { text: model.description checkable: true; checked: model.id == UM.OutputDeviceManager.activeDevice; exclusiveGroup: devicesMenuGroup; onTriggered: { UM.OutputDeviceManager.setActiveDevice(model.id); } } onObjectAdded: devicesMenu.insertItem(index, object) onObjectRemoved: devicesMenu.removeItem(object) } ExclusiveGroup { id: devicesMenuGroup; } } } UM.OutputDevicesModel { id: devicesModel; } } }