136 lines
4.1 KiB
QML
136 lines
4.1 KiB
QML
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import QtQuick.Controls.Basic
|
|
import FileSystemModule
|
|
|
|
// The MenuBar also serves as a controller for our Window as we don't use any decorations.
|
|
MenuBar {
|
|
id: root
|
|
|
|
required property ApplicationWindow rootWindow
|
|
property alias infoText: windowInfo.text
|
|
|
|
implicitHeight: 25
|
|
|
|
// The top level menus on the left side
|
|
delegate: MenuBarItem {
|
|
id: menuBarItem
|
|
implicitHeight: 25
|
|
|
|
contentItem: Text {
|
|
horizontalAlignment: Text.AlignLeft
|
|
verticalAlignment: Text.AlignVCenter
|
|
color: menuBarItem.highlighted ? Colors.textFile : Colors.text
|
|
opacity: enabled ? 1.0 : 0.3
|
|
text: menuBarItem.text
|
|
elide: Text.ElideRight
|
|
font: menuBarItem.font
|
|
}
|
|
|
|
background: Rectangle {
|
|
color: menuBarItem.highlighted ? Colors.selection : "transparent"
|
|
Rectangle {
|
|
id: indicator
|
|
width: 0; height: 3
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.bottom: parent.bottom
|
|
color: Colors.color1
|
|
|
|
states: State {
|
|
name: "active"; when: menuBarItem.highlighted
|
|
PropertyChanges { target: indicator; width: parent.width }
|
|
}
|
|
|
|
transitions: Transition {
|
|
NumberAnimation {
|
|
properties: "width"
|
|
duration: 300
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// The background property contains an information text in the middle as well as the
|
|
// Minimize, Maximize and Close Buttons.
|
|
background: Rectangle {
|
|
color: Colors.surface2
|
|
// Make the empty space drag the specified root window.
|
|
WindowDragHandler { dragWindow: rootWindow }
|
|
|
|
Text {
|
|
id: windowInfo
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
color: Colors.text
|
|
}
|
|
|
|
component InteractionButton: Rectangle {
|
|
signal action;
|
|
property alias hovered: hoverHandler.hovered
|
|
|
|
width: root.height
|
|
anchors.top: parent.top
|
|
anchors.bottom: parent.bottom
|
|
color: hovered ? Colors.background : "transparent"
|
|
|
|
HoverHandler { id: hoverHandler }
|
|
TapHandler { onTapped: action() }
|
|
}
|
|
|
|
InteractionButton {
|
|
id: minimize
|
|
|
|
anchors.right: maximize.left
|
|
onAction: rootWindow.showMinimized()
|
|
Rectangle {
|
|
width: parent.height - 10; height: 2
|
|
anchors.centerIn: parent
|
|
color: parent.hovered ? Colors.iconIndicator : Colors.icon
|
|
}
|
|
}
|
|
|
|
InteractionButton {
|
|
id: maximize
|
|
|
|
anchors.right: close.left
|
|
onAction: rootWindow.showMaximized()
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
anchors.margins: 5
|
|
border.width: 2
|
|
color: "transparent"
|
|
border.color: parent.hovered ? Colors.iconIndicator : Colors.icon
|
|
}
|
|
}
|
|
|
|
InteractionButton {
|
|
id: close
|
|
|
|
color: hovered ? "#ec4143" : "transparent"
|
|
anchors.right: parent.right
|
|
onAction: rootWindow.close()
|
|
Rectangle {
|
|
width: parent.height - 8; height: 2
|
|
anchors.centerIn: parent
|
|
color: parent.hovered ? Colors.iconIndicator : Colors.icon
|
|
rotation: 45
|
|
transformOrigin: Item.Center
|
|
antialiasing: true
|
|
Rectangle {
|
|
width: parent.height
|
|
height: parent.width
|
|
anchors.centerIn: parent
|
|
color: parent.color
|
|
antialiasing: true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|