Introduce the ApplicationSwitcher widget

It includes only the hardcoded model with the Ultimaker links for now.

CURA-8421
This commit is contained in:
Konstantinos Karmas 2021-09-20 15:33:05 +02:00
parent 1305abac6f
commit 570fb3cf93
6 changed files with 238 additions and 1 deletions

View file

@ -0,0 +1,94 @@
// Copyright (c) 2021 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.10
import QtQuick.Controls 2.3
import UM 1.4 as UM
import Cura 1.1 as Cura
Button
{
id: base
property alias iconSource: applicationIcon.source
property alias displayName: applicationDisplayName.text
property alias tooltipText: tooltip.text
property bool isExternalLink: false
width: UM.Theme.getSize("application_switcher_item").width
height: UM.Theme.getSize("application_switcher_item").height
background: Rectangle
{
color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button")
border.color: parent.hovered ? UM.Theme.getColor("primary") : "transparent"
border.width: UM.Theme.getSize("default_lining").width
}
UM.TooltipArea
{
id: tooltip
anchors.fill: parent
}
Column
{
id: applicationButtonContent
anchors.centerIn: parent
spacing: UM.Theme.getSize("default_margin").width
UM.RecolorImage
{
id: applicationIcon
anchors.horizontalCenter: parent.horizontalCenter
color: UM.Theme.getColor("monitor_icon_primary")
width: UM.Theme.getSize("application_switcher_icon").width
height: width
Item
{
id: externalLinkIndicator
visible: base.isExternalLink
anchors
{
bottom: parent.bottom
bottomMargin: - Math.round(height * 1 / 6)
right: parent.right
rightMargin: - Math.round(width * 5 / 6)
}
Rectangle
{
anchors.centerIn: parent
width: UM.Theme.getSize("small_button_icon").width
height: width
color: base.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button")
radius: 0.5 * width
}
UM.RecolorImage
{
id: externalLinkIcon
anchors.centerIn: parent
width: UM.Theme.getSize("printer_status_icon").width
height: width
color: UM.Theme.getColor("monitor_icon_primary")
source: UM.Theme.getIcon("LinkExternal")
}
}
}
Label
{
id: applicationDisplayName
anchors.horizontalCenter: parent.horizontalCenter
}
}
}

View file

@ -0,0 +1,122 @@
// Copyright (c) 2021 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.15
import UM 1.4 as UM
import Cura 1.1 as Cura
Item
{
id: applicationSwitcherWidget
width: appSwitcherButton.width
height: width
Button
{
id: appSwitcherButton
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
width: Math.round(0.5 * UM.Theme.getSize("main_window_header").height)
height: width
background: UM.RecolorImage
{
width: UM.Theme.getSize("small_button_icon").width
height: width
anchors.verticalCenter: appSwitcherButton.verticalCenter
anchors.horizontalCenter: appSwitcherButton.horizontalCenter
color: UM.Theme.getColor("main_background")
source: UM.Theme.getIcon("ApplicationSwitcher")
}
onClicked:
{
if (popup.opened)
{
popup.close()
} else {
popup.open()
}
}
}
Popup
{
id: popup
y: parent.height + UM.Theme.getSize("default_arrow").height
x: parent.width - width
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
opacity: opened ? 1 : 0
Behavior on opacity { NumberAnimation { duration: 100 } }
padding: 0
width: contentWidth + 2 * UM.Theme.getSize("wide_margin").width
height: contentHeight + 2 * UM.Theme.getSize("wide_margin").width
contentItem: Item
{
id: projectListContainer
anchors.fill: parent
anchors.margins: UM.Theme.getSize("wide_margin").width
Column
{
id: contentsColumn
anchors.top: parent.top
anchors.left: parent.left
width: gridLayout.width
Grid
{
id: gridLayout
columns: 3
spacing: UM.Theme.getSize("default_margin").width
Repeater
{
id:gridgenerate
model:
[
{ displayName: "Report issue1", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description1", link: "https://github.com/Ultimaker/Cura/issues/1" },
{ displayName: "My printers", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description2", link: "https://github.com/Ultimaker/Cura/issues/2" },
{ displayName: "Ultimaker.com", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description3", link: "https://ultimaker.com" },
{ displayName: "Report issue4", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description4", link: "https://github.com/Ultimaker/Cura/issues/4" },
{ displayName: "Report issue5", thumbnail: UM.Theme.getIcon("Bug"), description: "This is the description5", link: "https://github.com/Ultimaker/Cura/issues/5" }
]
delegate: ApplicationButton
{
displayName: modelData.displayName
iconSource: modelData.thumbnail
tooltipText: modelData.description
isExternalLink: (index % 2 == 0)
onClicked: Qt.openUrlExternally(modelData.link)
}
}
}
}
}
background: UM.PointingRectangle
{
color: UM.Theme.getColor("tool_panel_background")
borderColor: UM.Theme.getColor("lining")
borderWidth: UM.Theme.getSize("default_lining").width
target: Qt.point(width - (appSwitcherButton.width / 2), -10)
arrowSize: UM.Theme.getSize("default_arrow").width
}
}
}

View file

@ -10,6 +10,7 @@ import UM 1.4 as UM
import Cura 1.0 as Cura
import "../Account"
import "../ApplicationSwitcher"
Item
{
@ -113,7 +114,7 @@ Item
anchors
{
right: accountWidget.left
right: applicationSwitcher.left
rightMargin: UM.Theme.getSize("default_margin").width
verticalCenter: parent.verticalCenter
}
@ -138,6 +139,17 @@ Item
}
}
ApplicationSwitcher
{
id: applicationSwitcher
anchors
{
verticalCenter: parent.verticalCenter
right: accountWidget.left
// rightMargin: UM.Theme.getSize("default_margin").width
}
}
AccountWidget
{
id: accountWidget