on 0b65bb2 help sign in
unity8/plugins/Unity/Indicators/CachedUnityMenuModel.qml
68 lines 2.3 kB history raw
1/*
2 * Copyright 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 Lesser 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 Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authors:
17 * Nick Dedekind <nick.dedekind@canonical.com>
18 */
20import QtQuick 2.0
21import QMenuModel 0.1
22import Unity.Indicators 0.1 as Indicators
24// Make sure we don't duplicate models.
25Item {
26 id: cachedModel
27 property string busName
28 property string actionsObjectPath
29 property string menuObjectPath
30 readonly property bool ready: busName!=="" && actionsObjectPath!=="" && menuObjectPath!==""
32 property UnityMenuModel model: {
33 if (!ready) return null;
35 var newModel = Indicators.UnityMenuModelCache.model(menuObjectPath);
36 if (!newModel) {
37 newModel = modelComponent.createObject(null,
38 {
39 "busName": cachedModel.busName,
40 "menuObjectPath": cachedModel.menuObjectPath,
41 "actions": { "indicator": cachedModel.actionsObjectPath },
42 });
43 Indicators.UnityMenuModelCache.registerModel(newModel.menuObjectPath, newModel);
44 }
45 return newModel;
46 }
48 QtObject {
49 id: d
50 property UnityMenuModel oldModel: null
51 }
53 onModelChanged: {
54 if (model !== d.oldModel) {
55 if (d.oldModel) Indicators.UnityMenuModelCache.deref(d.oldModel);
56 if (model) Indicators.UnityMenuModelCache.ref(model);
57 }
58 d.oldModel = model;
59 }
60 Component.onDestruction: {
61 if (model) Indicators.UnityMenuModelCache.deref(model);
62 }
64 Component {
65 id: modelComponent
66 UnityMenuModel {}
67 }