mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-23 06:09:38 +08:00
258 lines
7.9 KiB
QML
258 lines
7.9 KiB
QML
// 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 Action addMachineAction;
|
|
property Action configureMachinesAction;
|
|
property Action addProfileAction;
|
|
property Action manageProfilesAction;
|
|
property Action configureSettingsAction;
|
|
property int currentModeIndex;
|
|
|
|
color: UM.Theme.getColor("sidebar");
|
|
UM.I18nCatalog { id: catalog; name:"cura"}
|
|
|
|
function showTooltip(item, position, text)
|
|
{
|
|
tooltip.text = text;
|
|
position = item.mapToItem(base, position.x, position.y / 2);
|
|
tooltip.show(position);
|
|
}
|
|
|
|
function hideTooltip()
|
|
{
|
|
tooltip.hide();
|
|
}
|
|
|
|
MouseArea
|
|
{
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.AllButtons;
|
|
|
|
onWheel:
|
|
{
|
|
wheel.accepted = true;
|
|
}
|
|
}
|
|
|
|
SidebarHeader {
|
|
id: header
|
|
width: parent.width
|
|
height: totalHeightHeader
|
|
|
|
addMachineAction: base.addMachineAction;
|
|
configureMachinesAction: base.configureMachinesAction;
|
|
}
|
|
|
|
Rectangle {
|
|
id: headerSeparator
|
|
width: parent.width
|
|
height: UM.Theme.getSize("sidebar_lining").height
|
|
color: UM.Theme.getColor("sidebar_lining")
|
|
anchors.top: header.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
}
|
|
|
|
ProfileSetup {
|
|
id: profileItem
|
|
addProfileAction: base.addProfileAction
|
|
manageProfilesAction: base.manageProfilesAction
|
|
anchors.top: settingsModeSelection.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
width: parent.width
|
|
height: totalHeightProfileSetup
|
|
|
|
onShowTooltip: base.showTooltip(item, location, text)
|
|
onHideTooltip: base.hideTooltip()
|
|
}
|
|
|
|
currentModeIndex:
|
|
{
|
|
var index = parseInt(UM.Preferences.getValue("cura/active_mode"))
|
|
if(index)
|
|
{
|
|
return index;
|
|
}
|
|
return 0;
|
|
}
|
|
onCurrentModeIndexChanged:
|
|
{
|
|
UM.Preferences.setValue("cura/active_mode", currentModeIndex);
|
|
if(modesListModel.count > base.currentModeIndex)
|
|
{
|
|
sidebarContents.push({ "item": modesListModel.get(base.currentModeIndex).item, "replace": true });
|
|
}
|
|
}
|
|
|
|
Label {
|
|
id: settingsModeLabel
|
|
text: catalog.i18nc("@label:listbox","Setup");
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width;
|
|
anchors.top: headerSeparator.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
width: parent.width/100*45
|
|
font: UM.Theme.getFont("large");
|
|
color: UM.Theme.getColor("text")
|
|
}
|
|
|
|
Rectangle {
|
|
id: settingsModeSelection
|
|
width: parent.width/100*55
|
|
height: UM.Theme.getSize("sidebar_header_mode_toggle").height
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
|
anchors.top: headerSeparator.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
Component{
|
|
id: wizardDelegate
|
|
Button {
|
|
height: settingsModeSelection.height
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: model.index * (settingsModeSelection.width / 2)
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
width: parent.width / 2
|
|
text: model.text
|
|
exclusiveGroup: modeMenuGroup;
|
|
checkable: true;
|
|
checked: base.currentModeIndex == index
|
|
onClicked: base.currentModeIndex = index
|
|
|
|
style: ButtonStyle {
|
|
background: Rectangle {
|
|
border.width: UM.Theme.getSize("default_lining").width
|
|
border.color: control.checked ? UM.Theme.getColor("toggle_checked_border") :
|
|
control.pressed ? UM.Theme.getColor("toggle_active_border") :
|
|
control.hovered ? UM.Theme.getColor("toggle_hovered_border") : UM.Theme.getColor("toggle_unchecked_border")
|
|
color: control.checked ? UM.Theme.getColor("toggle_checked") :
|
|
control.pressed ? UM.Theme.getColor("toggle_active") :
|
|
control.hovered ? UM.Theme.getColor("toggle_hovered") : UM.Theme.getColor("toggle_unchecked")
|
|
Behavior on color { ColorAnimation { duration: 50; } }
|
|
Label {
|
|
anchors.centerIn: parent
|
|
color: control.checked ? UM.Theme.getColor("toggle_checked_text") :
|
|
control.pressed ? UM.Theme.getColor("toggle_active_text") :
|
|
control.hovered ? UM.Theme.getColor("toggle_hovered_text") : UM.Theme.getColor("toggle_unchecked_text")
|
|
font: UM.Theme.getFont("default")
|
|
text: control.text;
|
|
}
|
|
}
|
|
label: Item { }
|
|
}
|
|
}
|
|
}
|
|
ExclusiveGroup { id: modeMenuGroup; }
|
|
ListView{
|
|
id: modesList
|
|
property var index: 0
|
|
model: modesListModel
|
|
delegate: wizardDelegate
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
width: parent.width
|
|
}
|
|
}
|
|
|
|
StackView
|
|
{
|
|
id: sidebarContents
|
|
|
|
anchors.bottom: footerSeparator.top
|
|
anchors.top: profileItem.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
anchors.left: base.left
|
|
anchors.right: base.right
|
|
|
|
delegate: StackViewDelegate
|
|
{
|
|
function transitionFinished(properties)
|
|
{
|
|
properties.exitItem.opacity = 1
|
|
}
|
|
|
|
pushTransition: StackViewTransition
|
|
{
|
|
PropertyAnimation
|
|
{
|
|
target: enterItem
|
|
property: "opacity"
|
|
from: 0
|
|
to: 1
|
|
duration: 100
|
|
}
|
|
PropertyAnimation
|
|
{
|
|
target: exitItem
|
|
property: "opacity"
|
|
from: 1
|
|
to: 0
|
|
duration: 100
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: footerSeparator
|
|
width: parent.width
|
|
height: UM.Theme.getSize("sidebar_lining").height
|
|
color: UM.Theme.getColor("sidebar_lining")
|
|
anchors.bottom: saveButton.top
|
|
anchors.bottomMargin: UM.Theme.getSize("default_margin").height
|
|
}
|
|
|
|
SaveButton
|
|
{
|
|
id: saveButton;
|
|
implicitWidth: base.width
|
|
implicitHeight: totalHeight
|
|
anchors.bottom: parent.bottom
|
|
}
|
|
|
|
SidebarTooltip
|
|
{
|
|
id: tooltip;
|
|
}
|
|
|
|
ListModel
|
|
{
|
|
id: modesListModel;
|
|
}
|
|
|
|
SidebarSimple
|
|
{
|
|
id: sidebarSimple;
|
|
visible: false;
|
|
|
|
onShowTooltip: base.showTooltip(item, location, text)
|
|
onHideTooltip: base.hideTooltip()
|
|
}
|
|
|
|
SidebarAdvanced
|
|
{
|
|
id: sidebarAdvanced;
|
|
visible: false;
|
|
|
|
configureSettings: base.configureSettingsAction;
|
|
onShowTooltip: base.showTooltip(item, location, text)
|
|
onHideTooltip: base.hideTooltip()
|
|
}
|
|
|
|
Component.onCompleted:
|
|
{
|
|
modesListModel.append({ text: catalog.i18nc("@title:tab", "Simple"), item: sidebarSimple })
|
|
modesListModel.append({ text: catalog.i18nc("@title:tab", "Advanced"), item: sidebarAdvanced })
|
|
sidebarContents.push({ "item": modesListModel.get(base.currentModeIndex).item, "immediate": true });
|
|
}
|
|
}
|