123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- // Copyright (c) 2021 Ultimaker B.V.
- // Cura is released under the terms of the LGPLv3 or higher.
- import QtQuick 2.7
- import QtQuick.Controls 2.4
- import UM 1.5 as UM
- import Cura 1.0 as Cura
- import "../Account"
- import "../ApplicationSwitcher"
- Item
- {
- id: base
- implicitHeight: UM.Theme.getSize("main_window_header").height
- implicitWidth: UM.Theme.getSize("main_window_header").width
- Image
- {
- id: logo
- anchors.left: parent.left
- anchors.leftMargin: UM.Theme.getSize("default_margin").width
- anchors.verticalCenter: parent.verticalCenter
- source: UM.Theme.getImage("logo")
- width: UM.Theme.getSize("logo").width
- height: UM.Theme.getSize("logo").height
- fillMode: Image.PreserveAspectFit
- sourceSize.width: width
- sourceSize.height: height
- }
- ButtonGroup
- {
- buttons: stagesListContainer.children
- }
- Row
- {
- id: stagesListContainer
- spacing: Math.round(UM.Theme.getSize("default_margin").width / 2)
- anchors
- {
- horizontalCenter: parent.horizontalCenter
- verticalCenter: parent.verticalCenter
- leftMargin: UM.Theme.getSize("default_margin").width
- }
- // The main window header is dynamically filled with all available stages
- Repeater
- {
- id: stagesHeader
- model: UM.StageModel { }
- delegate: Button
- {
- id: stageSelectorButton
- text: model.name.toUpperCase()
- checkable: true
- checked: UM.Controller.activeStage !== null && model.id == UM.Controller.activeStage.stageId
- anchors.verticalCenter: parent.verticalCenter
- //style: UM.Theme.styles.main_window_header_tab
- height: Math.round(0.5 * UM.Theme.getSize("main_window_header").height)
- // This id is required to find the stage buttons through Squish
- property string stageId: model.id
- hoverEnabled: true
- leftPadding: 2 * UM.Theme.getSize("default_margin").width
- rightPadding: 2 * UM.Theme.getSize("default_margin").width
- // Set top & bottom padding to whatever space is left from height and the size of the text.
- bottomPadding: Math.round((height - buttonLabel.contentHeight) / 2)
- topPadding: bottomPadding
- background: Rectangle
- {
- radius: UM.Theme.getSize("action_button_radius").width
- color:
- {
- if (stageSelectorButton.checked)
- {
- return UM.Theme.getColor("main_window_header_button_background_active")
- }
- else
- {
- if (stageSelectorButton.hovered)
- {
- return UM.Theme.getColor("main_window_header_button_background_hovered")
- }
- return UM.Theme.getColor("main_window_header_button_background_inactive")
- }
- }
- }
- contentItem: UM.Label
- {
- id: buttonLabel
- text: stageSelectorButton.text
- anchors.centerIn: stageSelectorButton
- font: UM.Theme.getFont("medium")
- color:
- {
- if (stageSelectorButton.checked)
- {
- return UM.Theme.getColor("main_window_header_button_text_active")
- }
- else
- {
- if (stageSelectorButton.hovered)
- {
- return UM.Theme.getColor("main_window_header_button_text_hovered")
- }
- return UM.Theme.getColor("main_window_header_button_text_inactive")
- }
- }
- }
- // This is a trick to assure the activeStage is correctly changed. It doesn't work properly if done in the onClicked (see CURA-6028)
- MouseArea
- {
- anchors.fill: parent
- onClicked: UM.Controller.setActiveStage(model.id)
- }
- }
- }
- }
- // Shortcut button to quick access the Toolbox
- Button
- {
- id: marketplaceButton
- text: catalog.i18nc("@action:button", "Marketplace")
- height: Math.round(0.5 * UM.Theme.getSize("main_window_header").height)
- onClicked: Cura.Actions.browsePackages.trigger()
- hoverEnabled: true
- background: Rectangle
- {
- id: marketplaceButtonBorder
- radius: UM.Theme.getSize("action_button_radius").width
- color: UM.Theme.getColor("main_window_header_background")
- border.width: UM.Theme.getSize("default_lining").width
- border.color: UM.Theme.getColor("primary_text")
- Rectangle
- {
- id: marketplaceButtonFill
- anchors.fill: parent
- radius: parent.radius
- color: UM.Theme.getColor("primary_text")
- opacity: marketplaceButton.hovered ? 0.2 : 0
- Behavior on opacity { NumberAnimation { duration: 100 } }
- }
- }
- contentItem: UM.Label
- {
- id: label
- text: marketplaceButton.text
- color: UM.Theme.getColor("primary_text")
- width: contentWidth
- }
- anchors
- {
- right: applicationSwitcher.left
- rightMargin: UM.Theme.getSize("default_margin").width
- verticalCenter: parent.verticalCenter
- }
- Cura.NotificationIcon
- {
- id: marketplaceNotificationIcon
- anchors
- {
- top: parent.top
- right: parent.right
- rightMargin: (-0.5 * width) | 0
- topMargin: (-0.5 * height) | 0
- }
- visible: CuraApplication.getPackageManager().packagesWithUpdate.length > 0
- labelText:
- {
- const itemCount = CuraApplication.getPackageManager().packagesWithUpdate.length
- return itemCount > 9 ? "9+" : itemCount
- }
- }
- }
- ApplicationSwitcher
- {
- id: applicationSwitcher
- anchors
- {
- verticalCenter: parent.verticalCenter
- right: accountWidget.left
- rightMargin: UM.Theme.getSize("default_margin").width
- }
- }
- AccountWidget
- {
- id: accountWidget
- anchors
- {
- verticalCenter: parent.verticalCenter
- right: parent.right
- rightMargin: UM.Theme.getSize("default_margin").width
- }
- }
- }
|