18 import Ubuntu.Components 0.1
21 import Unity.Application 0.1
22 import
"../Components"
23 import "../Components/ListItems" as ListItems
28 property Scope scope: null
29 property SortFilterProxyModel categories: categoryFilter
30 property bool isCurrent:
false
31 property alias moving: categoryView.moving
32 property int tabBarHeight: 0
33 property PageHeader pageHeader: null
34 property Item previewListView: null
36 property bool enableHeightBehaviorOnNextCreation:
false
37 property var categoryView: categoryView
41 scope.activateApplication.connect(activateApp);
45 function activateApp(appId) {
46 shell.activateApplication(appId);
49 function positionAtBeginning() {
50 categoryView.positionAtBeginning()
53 function showHeader() {
54 categoryView.showHeader()
60 value: isCurrent && !previewListView.open
63 SortFilterProxyModel {
65 model: scope ? scope.categories : null
66 dynamicSortFilter:
true
67 filterRole: Categories.RoleCount
73 pageHeader.resetSearch();
74 previewListView.open =
false;
78 target: scopeView.scope
79 property:
"searchQuery"
80 value: pageHeader.searchQuery
86 property:
"searchQuery"
87 value: scopeView.scope ? scopeView.scope.searchQuery :
""
93 onSearchClicked:
if (isCurrent) {
94 pageHeader.triggerSearch()
95 categoryView.showHeader()
100 target: scopeView.scope
101 onShowDash: previewListView.open =
false;
102 onHideDash: previewListView.open =
false;
107 objectName:
"categoryListView"
109 model: scopeView.categories
110 forceNoClip: previewListView.open
112 property string expandedCategoryId:
""
114 onContentYChanged: pageHeader.positionRealHeader();
115 onOriginYChanged: pageHeader.positionRealHeader();
116 onContentHeightChanged: pageHeader.positionRealHeader();
118 delegate: ListItems.Base {
120 objectName:
"dashCategory" + category
121 highlightWhenPressed:
false
124 readonly
property bool expandable: rendererLoader.item ? rendererLoader.item.expandable :
false
125 readonly
property bool filtered: rendererLoader.item ? rendererLoader.item.filter :
true
126 readonly
property string category: categoryId
127 readonly
property var item: rendererLoader.item
133 template: model.renderer
134 components: model.components
135 viewWidth: parent.width
147 switch (cardTool.categoryLayout) {
148 case "carousel":
return "CardCarousel.qml";
149 case "running-apps":
return "Apps/RunningApplicationsGrid.qml";
151 default:
return "CardFilterGrid.qml";
156 if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
157 item.enableHeightBehavior = scopeView.enableHeightBehaviorOnNextCreation;
158 scopeView.enableHeightBehaviorOnNextCreation =
false;
160 if (source.toString().indexOf(
"Apps/RunningApplicationsGrid.qml") != -1) {
163 item.model = Qt.binding(
function() {
return runningApps; })
164 item.canEnableTerminationMode = Qt.binding(
function() {
return scopeView.isCurrent })
166 item.model = Qt.binding(
function() {
return results })
168 item.objectName = Qt.binding(
function() {
return categoryId })
169 if (item.expandable) {
170 var shouldFilter = categoryId != categoryView.expandedCategoryId;
171 if (shouldFilter != item.filter) {
172 item.filter = shouldFilter;
175 updateDelegateCreationRange();
176 item.cardTool = cardTool;
179 Component.onDestruction: {
180 if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
181 scopeView.enableHeightBehaviorOnNextCreation = item.enableHeightBehaviorOnNextCreation;
186 target: rendererLoader.item
188 if (scopeView.scope.id ===
"scopes" || (scopeView.scope.id ==
"clickscope" && categoryId ==
"local")) {
192 var item = target.model.get(index);
193 scopeView.scope.activate(item.result)
195 previewListView.model = target.model;
196 previewListView.currentIndex = -1
197 previewListView.currentIndex = index;
198 previewListView.open =
true
202 previewListView.model = target.model;
203 previewListView.currentIndex = -1
204 previewListView.currentIndex = index;
205 previewListView.open =
true
210 onExpandedCategoryIdChanged: {
211 collapseAllButExpandedCategory();
213 function collapseAllButExpandedCategory() {
214 var item = rendererLoader.item;
215 if (item.expandable) {
216 var shouldFilter = categoryId != categoryView.expandedCategoryId;
217 if (shouldFilter != item.filter) {
219 var shrinkingVisible = shouldFilter && y + item.collapsedHeight < categoryView.height;
220 var growingVisible = !shouldFilter && y + height < categoryView.height;
221 if (!previewListView.open || !shouldFilter) {
222 if (shrinkingVisible || growingVisible) {
223 item.startFilterAnimation(shouldFilter)
225 item.filter = shouldFilter;
227 if (!shouldFilter && !previewListView.open) {
228 categoryView.maximizeVisibleArea(index, item.uncollapsedHeight);
234 onOriginYChanged: rendererLoader.updateDelegateCreationRange();
235 onContentYChanged: rendererLoader.updateDelegateCreationRange();
236 onHeightChanged: rendererLoader.updateDelegateCreationRange();
237 onContentHeightChanged: rendererLoader.updateDelegateCreationRange();
240 function updateDelegateCreationRange() {
243 if (categoryView.contentY < categoryView.originY) {
245 }
else if (categoryView.contentHeight > categoryView.height && categoryView.contentY + categoryView.height > categoryView.contentHeight) {
249 if (item && item.hasOwnProperty(
"delegateCreationBegin")) {
250 if (baseItem.y + baseItem.height <= 0) {
252 item.delegateCreationBegin = item.originY + baseItem.height
253 item.delegateCreationEnd = item.originY + baseItem.height
254 }
else if (baseItem.y >= categoryView.height) {
256 item.delegateCreationBegin = item.originY
257 item.delegateCreationEnd = item.originY
259 item.delegateCreationBegin = item.originY + Math.max(-baseItem.y, 0)
260 item.delegateCreationEnd = item.originY + Math.min(categoryView.height + item.delegateCreationBegin, baseItem.height)
272 fillMode: Image.Stretch
273 source:
"graphics/dash_divider_top_lightgrad.png"
279 visible: index != categoryView.model.count - 1
281 bottom: parent.bottom
285 fillMode: Image.Stretch
286 source:
"graphics/dash_divider_top_darkgrad.png"
291 onHeightChanged: rendererLoader.updateDelegateCreationRange();
292 onYChanged: rendererLoader.updateDelegateCreationRange();
295 sectionProperty:
"name"
296 sectionDelegate: ListItems.Header {
297 objectName:
"dashSectionHeader" + (delegate ? delegate.category :
"")
298 property var delegate: categoryView.item(delegateIndex)
299 width: categoryView.width
302 if (delegate && delegate.expandable)
303 return delegate.filtered ?
"graphics/header_handlearrow.png" :
"graphics/header_handlearrow2.png"
307 if (categoryView.expandedCategoryId != delegate.category)
308 categoryView.expandedCategoryId = delegate.category;
310 categoryView.expandedCategoryId =
"";
314 implicitHeight: scopeView.tabBarHeight
316 if (scopeView.pageHeader && scopeView.isCurrent) {
317 scopeView.pageHeader.height = height;
320 onYChanged: positionRealHeader();
322 function positionRealHeader() {
323 if (scopeView.pageHeader && scopeView.isCurrent) {
324 scopeView.pageHeader.y = y + parent.y;