on 04da464 help sign in
unity8/Panel/Panel.qml
153 lines 4.5 kB history raw
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
17import QtQuick 2.0
18import Ubuntu.Components 0.1
19import "../Components"
21Item {
22 id: root
23 readonly property real panelHeight: units.gu(3) + units.dp(2)
24 property real indicatorsMenuWidth: (shell.width > units.gu(60)) ? units.gu(40) : shell.width
25 property alias indicators: indicatorsMenu
26 property bool fullscreenMode: false
27 property bool searchVisible: true
29 readonly property real separatorLineHeight: leftSeparatorLine.height
30 readonly property real __panelMinusSeparatorLineHeight: panelHeight - separatorLineHeight
32 signal searchClicked
34 PanelBackground {
35 id: panelBackground
36 anchors {
37 left: parent.left
38 right: parent.right
39 }
40 height: __panelMinusSeparatorLineHeight
41 y: 0
43 Behavior on y { StandardAnimation {} }
44 }
46 PanelSeparatorLine {
47 id: leftSeparatorLine
48 anchors {
49 top: panelBackground.bottom
50 left: parent.left
51 right: indicatorsMenu.left
52 }
53 saturation: 1 - indicatorsMenu.unitProgress
54 }
56 Rectangle {
57 id: darkenedArea
58 property real darkenedOpacity: 0.6
59 anchors {
60 left: parent.left
61 right: parent.right
62 top: panelBackground.bottom
63 bottom: parent.bottom
64 }
65 color: "black"
66 opacity: indicatorsMenu.unitProgress * darkenedOpacity
67 MouseArea {
68 anchors.fill: parent
69 enabled: indicatorsMenu.shown
70 onClicked: if (indicatorsMenu.fullyOpened) indicatorsMenu.hide();
71 }
72 }
74 Indicators {
75 id: indicatorsMenu
76 objectName: "indicators"
78 anchors.right: parent.right
79 y: panelBackground.y
80 width: root.indicatorsMenuWidth
81 shown: false
82 hintValue: __panelMinusSeparatorLineHeight * 3
83 panelHeight: __panelMinusSeparatorLineHeight
84 openedHeight: parent.height + (pinnedMode ? 0 : root.panelHeight)
85 pinnedMode: !fullscreenMode
86 overFlowWidth: search.state=="hidden" ? parent.width : parent.width - search.width
88 property real unitProgress: (height - panelHeight) / (openedHeight - panelHeight)
89 }
91 PanelSeparatorLine {
92 id: indicatorsSeparatorLine
93 visible: true
94 anchors {
95 left: indicatorsMenu.left
96 right: indicatorsMenu.right
97 }
98 y: indicatorsMenu.visualBottom
99 }
101 BorderImage {
102 id: dropShadow
103 anchors {
104 top: indicators.top
105 bottom: indicatorsSeparatorLine.bottom
106 left: indicators.left
107 right: indicators.right
108 margins: -units.gu(1)
109 }
110 visible: indicatorsMenu.height > indicatorsMenu.panelHeight
111 source: "graphics/rectangular_dropshadow.sci"
112 }
114 SearchIndicator {
115 id: search
116 objectName: "search"
117 enabled: root.searchVisible
119 state: {
120 if (parent.width < indicatorsMenu.width + width) {
121 if (indicatorsMenu.state != "initial") {
122 return "hidden";
123 }
124 }
125 if (root.searchVisible && !indicatorsMenu.showAll) {
126 return "visible";
127 }
129 return "hidden";
130 }
132 height: __panelMinusSeparatorLineHeight
133 anchors {
134 top: panelBackground.top
135 left: panelBackground.left
136 }
138 onClicked: root.searchClicked()
139 }
141 states: [
142 State {
143 name: "in" //fully opaque and visible at top edge of screen
144 when: !fullscreenMode
145 PropertyChanges { target: panelBackground; y: 0 }
146 },
147 State {
148 name: "out" //pushed off screen
149 when: fullscreenMode
150 PropertyChanges { target: panelBackground; y: -panelHeight }
151 }
152 ]