Unity 8
Panel.qml
1 /*
2  * Copyright (C) 2013-2015 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  */
16 
17 import QtQuick 2.2
18 import Ubuntu.Components 1.1
19 import Unity.Application 0.1
20 import "../Components"
21 import "../Components/PanelState"
22 import ".."
23 
24 Item {
25  id: root
26  readonly property real panelHeight: indicatorArea.y + d.indicatorHeight
27  property alias indicators: __indicators
28  property alias callHint: __callHint
29  property bool fullscreenMode: false
30 
31  Rectangle {
32  id: darkenedArea
33  property real darkenedOpacity: 0.6
34  anchors {
35  top: parent.top
36  topMargin: panelHeight
37  left: parent.left
38  right: parent.right
39  bottom: parent.bottom
40  }
41  color: "black"
42  opacity: indicators.unitProgress * darkenedOpacity
43 
44  MouseArea {
45  anchors.fill: parent
46  enabled: indicators.shown
47  onClicked: if (indicators.fullyOpened) indicators.hide();
48  }
49  }
50 
51  Item {
52  id: indicatorArea
53  objectName: "indicatorArea"
54 
55  anchors.fill: parent
56 
57  Behavior on anchors.topMargin {
58  NumberAnimation { duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing }
59  }
60 
61  BorderImage {
62  id: dropShadow
63  anchors {
64  fill: indicators
65  leftMargin: -units.gu(1)
66  bottomMargin: -units.gu(1)
67  }
68  visible: !indicators.fullyClosed
69  source: "graphics/rectangular_dropshadow.sci"
70  }
71 
72  Rectangle {
73  id: indicatorAreaBackground
74  color: callHint.visible ? "green" : "black"
75  anchors {
76  top: parent.top
77  left: parent.left
78  right: parent.right
79  }
80  height: indicators.minimizedPanelHeight
81 
82  Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration } }
83  }
84 
85  PanelSeparatorLine {
86  id: orangeLine
87  anchors {
88  top: indicatorAreaBackground.bottom
89  left: parent.left
90  right: indicators.left
91  }
92  saturation: 1 - indicators.unitProgress
93 
94  // Don't let input event pass trough
95  MouseArea { anchors.fill: parent }
96  }
97 
98  Image {
99  anchors {
100  top: indicators.top
101  bottom: indicators.bottom
102  right: indicators.left
103  topMargin: indicatorArea.anchors.topMargin + indicators.minimizedPanelHeight
104  }
105  width: units.dp(2)
106  source: "graphics/VerticalDivider.png"
107  }
108 
109  MouseArea {
110  anchors {
111  top: parent.top
112  left: parent.left
113  right: indicators.left
114  }
115  height: indicators.minimizedPanelHeight
116  onClicked: { if (callHint.visible) { callHint.showLiveCall(); } }
117  }
118 
119  IndicatorsMenu {
120  id: __indicators
121  objectName: "indicators"
122 
123  anchors {
124  top: parent.top
125  right: parent.right
126  }
127 
128  shown: false
129  width: root.width - (PanelState.buttonsVisible ? windowControlButtons.width : 0)
130  minimizedPanelHeight: units.gu(3)
131  expandedPanelHeight: units.gu(7)
132  openedHeight: root.height - indicatorOrangeLine.height
133 
134  overFlowWidth: {
135  if (callHint.visible) {
136  return Math.max(root.width - (callHint.width + units.gu(2)), 0)
137  }
138  return root.width
139  }
140  enableHint: !callHint.active && !fullscreenMode
141  panelColor: indicatorAreaBackground.color
142 
143  onShowTapped: {
144  if (callHint.active) {
145  callHint.showLiveCall();
146  }
147  }
148 
149  hideDragHandle {
150  anchors.bottomMargin: -indicatorOrangeLine.height
151  }
152  }
153 
154  WindowControlButtons {
155  id: windowControlButtons
156  anchors {
157  left: parent.left
158  top: parent.top
159  margins: units.gu(0.7)
160  }
161  height: indicators.minimizedPanelHeight - anchors.margins * 2
162  visible: PanelState.buttonsVisible
163  onClose: PanelState.close()
164  onMinimize: PanelState.minimize()
165  onMaximize: PanelState.maximize()
166  }
167 
168  PanelSeparatorLine {
169  id: indicatorOrangeLine
170  anchors {
171  top: indicators.bottom
172  left: indicators.left
173  right: indicators.right
174  }
175  }
176 
177  ActiveCallHint {
178  id: __callHint
179  anchors {
180  top: parent.top
181  left: PanelState.buttonsVisible ? windowControlButtons.right : parent.left
182  }
183  height: indicators.minimizedPanelHeight
184  visible: active && indicators.state == "initial"
185  }
186  }
187 
188  QtObject {
189  id: d
190  readonly property real indicatorHeight: indicators.minimizedPanelHeight + indicatorOrangeLine.height
191  }
192 
193  states: [
194  State {
195  name: "onscreen" //fully opaque and visible at top edge of screen
196  when: !fullscreenMode
197  PropertyChanges {
198  target: indicatorArea;
199  anchors.topMargin: 0
200  }
201  },
202  State {
203  name: "offscreen" //pushed off screen
204  when: fullscreenMode
205  PropertyChanges {
206  target: indicatorArea;
207  anchors.topMargin: indicators.state === "initial" ? -d.indicatorHeight : 0
208  }
209  PropertyChanges {
210  target: indicators.showDragHandle;
211  anchors.bottomMargin: -units.gu(1)
212  }
213  }
214  ]
215 }