Unity 8
MenuContent.qml
1 /*
2  * Copyright (C) 2013-2014 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 QtQuick.Layouts 1.1
19 import Ubuntu.Components 1.3
20 import Unity.Indicators 0.1 as Indicators
21 import Utils 0.1
22 import "../Components"
23 import "Indicators"
24 
25 Rectangle {
26  id: content
27 
28  property QtObject model: null
29  property int currentMenuIndex: -1
30  property Component pageDelegate
31 
32  color: theme.palette.normal.background
33 
34  width: units.gu(40)
35  height: units.gu(42)
36 
37  onCurrentMenuIndexChanged: {
38  listViewContent.currentIndex = currentMenuIndex;
39  }
40 
41  ListView {
42  id: listViewContent
43  objectName: "indicatorsContentListView"
44  anchors.fill: parent
45  model: content.model
46 
47  highlightFollowsCurrentItem: false
48  interactive: false
49  orientation: ListView.Horizontal
50  // Load all the indicator menus (a big number)
51  cacheBuffer: 1073741823
52 
53  // for additions/removals.
54  onCountChanged: {
55  listViewContent.currentIndex = content.currentMenuIndex;
56  }
57 
58  onCurrentIndexChanged: {
59  positionViewAtIndex(currentIndex, ListView.Beginning);
60  }
61 
62  delegate: Loader {
63  id: loader
64 
65  width: ListView.view.width
66  height: ListView.view.height
67  asynchronous: true
68  visible: ListView.isCurrentItem
69 
70  property var modelData: model
71  property var modelIndex: index
72 
73  sourceComponent: pageDelegate
74 
75  onVisibleChanged: {
76  // Reset the indicator states
77  if (!visible && status == Loader.Ready) {
78  item.reset();
79  }
80  }
81  }
82  }
83 }