blob: a2a3fea8861f85062a13fb82cc47feef260927a2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
// 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
}
}
}
}
}
|