Unity 8
VolumeControl.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.4
18 import QMenuModel 0.1 as QMenuModel
19 import GlobalShortcut 1.0
20 
21 Item {
22  id: root
23  objectName: "volumeControl"
24  visible: false
25 
26  // TODO Work around http://pad.lv/1293478 until qmenumodel knows to cast
27  readonly property int stepUp: 1
28  readonly property int stepDown: -1
29 
30  property var indicators // passed from Shell.qml
31  readonly property bool showNotification: indicators && indicators.fullyOpened && indicators.currentIndicator === "indicator-sound"
32  onShowNotificationChanged: { // disallow the volume notification when using the slider, lpbug#1484126
33  actionGroup.indicatorsAction.updateState(root.showNotification);
34  }
35 
36  GlobalShortcut {
37  id: muteShortcut
38  shortcut: Qt.Key_VolumeMute
39  Keys.onPressed: toggleMute()
40  }
41 
42  QMenuModel.QDBusActionGroup {
43  id: actionGroup
44  busType: QMenuModel.DBus.SessionBus
45  busName: "com.canonical.indicator.sound"
46  objectPath: "/com/canonical/indicator/sound"
47 
48  property variant actionObject: action("volume")
49  property variant muteActionObject: action("mute")
50  property variant indicatorsAction: action("indicator-shown")
51  }
52 
53  function volumeUp() {
54  actionGroup.actionObject.activate(stepUp);
55  }
56 
57  function volumeDown() {
58  actionGroup.actionObject.activate(stepDown);
59  }
60 
61  function toggleMute() {
62  actionGroup.muteActionObject.activate();
63  }
64 
65  Component.onCompleted: {
66  actionGroup.start();
67  }
68 }