From e28148c929a362693952904424802ddd03516c21 Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Mon, 17 Oct 2016 17:22:30 +0300 Subject: [PATCH] ListView item template selector refactoring + sample code --- .../ui-tests-app/list-view/first-image.png | Bin 0 -> 990 bytes apps/app/ui-tests-app/list-view/list-view.css | 8 +++ apps/app/ui-tests-app/list-view/list-view.ts | 60 ++++++++++++++++++ apps/app/ui-tests-app/list-view/list-view.xml | 50 +++++++++++++++ .../ui-tests-app/list-view/main-view-model.ts | 51 +++++++++++++++ apps/app/ui-tests-app/list-view/no-image.png | Bin 0 -> 2193 bytes apps/app/ui-tests-app/mainPage.ts | 1 + tests/app/ui/list-view/list-view-tests.ts | 4 +- .../ui/builder/component-builder.ts | 14 +++- .../ui/list-view/list-view-common.ts | 13 ++-- .../ui/list-view/list-view.android.ts | 1 - tns-core-modules/ui/list-view/list-view.d.ts | 2 +- 12 files changed, 191 insertions(+), 13 deletions(-) create mode 100644 apps/app/ui-tests-app/list-view/first-image.png create mode 100644 apps/app/ui-tests-app/list-view/list-view.css create mode 100644 apps/app/ui-tests-app/list-view/list-view.ts create mode 100644 apps/app/ui-tests-app/list-view/list-view.xml create mode 100644 apps/app/ui-tests-app/list-view/main-view-model.ts create mode 100644 apps/app/ui-tests-app/list-view/no-image.png diff --git a/apps/app/ui-tests-app/list-view/first-image.png b/apps/app/ui-tests-app/list-view/first-image.png new file mode 100644 index 0000000000000000000000000000000000000000..8d322529c74ecc7c49331705e225f512556d4aa9 GIT binary patch literal 990 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAjKZ-7sTE0F&0%JBdHe+UDaTz2sn zG8f1OiU1Yk62v8rrUhaMki-WD;i;3uEU|_oB>Eakt5%>0bV)-ov5w-`n1D7oB zF`(3bk;?VXtC|NmDS8yYUL^qc%M^Z0MYkG=Dr$4p{&{8g~bio2vy@50rYUFU*> z6*7C~@y~p+C8Noirz1yiO4Ioh`zA?E>QJ{A77}n-RK!_O8a9J-<`p)%vwYK73%19t zub;!_db{;P$r5&1UGv#zZ+i-~zi4uDRoOh3J#^=fo;eS0+Gy-jDv0G=6e-Xwb#t@A z+?VqeSN0fcN(OtHNeihla41U1J26cPo~)oYD|zaKHAzoXcu!2b-gxry1TO}e)kS4Z zr(TsDzcv5Mg~t*~%<4POHCPsSmz?@ADc^t3^kV|(8cHwrCtnYT9?@!gaGd zYq}b}BtmSr$T=&C$==_yF6{og-CrtS+mtFEyuh%lntdXRXlZqH%h9(<@_QC9s>?Gg zVXz8Qo04fMzp1fp^?web2doEvGHT3Pynba8F=xiuxRvp|Qn7w>lI{3+&!;E+ z?#jQENv%9S*>{5Os|S*Exdiz+R&g(UcVPK6&#YV5{MA&nrA3O$MM7BwZklv#+A7#_ z&cei!>89okiJM#c4s^~ivRm9bXNBeA%`;hM?x=5?_dQzW{fQJaR<3P)HfdK~#FDqy zY*@40;lfdFz1BHL_XR#zcR1@|Vw1hx557 zGfg37@7Fn>YvjpF4|9L|FW7B{)%ktyPc|i8Qe!cEwZ$t~L5#uWw(;M`{qNRaxElGY j=feM=`~Ne=F0fag9&tTH&FnBRKQMT@`njxgN@xNADMX{; literal 0 HcmV?d00001 diff --git a/apps/app/ui-tests-app/list-view/list-view.css b/apps/app/ui-tests-app/list-view/list-view.css new file mode 100644 index 000000000..20a57ed7d --- /dev/null +++ b/apps/app/ui-tests-app/list-view/list-view.css @@ -0,0 +1,8 @@ +Label, Button { + font-size: 8; +} + +ListView { + border-width: 1; + margin: 1; +} \ No newline at end of file diff --git a/apps/app/ui-tests-app/list-view/list-view.ts b/apps/app/ui-tests-app/list-view/list-view.ts new file mode 100644 index 000000000..16c8229d2 --- /dev/null +++ b/apps/app/ui-tests-app/list-view/list-view.ts @@ -0,0 +1,60 @@ +import { EventData } from 'data/observable'; +import { ObservableArray } from "data/observable-array"; +import { View, KeyedTemplate } from "ui/core/view"; +import { Page } from 'ui/page'; +import { ViewModel, Item } from './main-view-model'; +import { ListView } from "ui/list-view"; +import { Label } from "ui/label"; +import { GridLayout } from "ui/layouts/grid-layout"; +import { Color } from "color"; + +export function selectItemTemplate(item: Item, index: number, items: ObservableArray): string { + return item.id % 10 === 0 ? "red" : item.id % 2 === 0 ? "green" : "yellow"; +} + +export function pageLoaded(args: EventData) { + let page = args.object; + page.bindingContext = new ViewModel(); + + let lv4 = page.getViewById("lv4"); + lv4.itemTemplateSelector = (item: Item, index: number, items: ObservableArray) => { + return index % 10 === 0 ? "red" : index % 2 === 0 ? "green" : "yellow"; + }; + + let createLabel = (backgroundColor: Color) => { + let label = new Label(); + label.bind({ + sourceProperty: null, + targetProperty: "text", + expression: "$value" + }); + label.style.backgroundColor = backgroundColor; + return label; + }; + + lv4.itemTemplates = new Array( + { + key: "red", + createView: () => { return createLabel(new Color("red")); } + }, + { + key: "green", + createView: () => { return createLabel(new Color("green")); } + }, + { + key: "yellow", + createView: () => { return createLabel(new Color("yellow")); } + } + ); +} + +let scrollToBottom = true; +export function onScroll(args: EventData){ + let page = (args.object).page; + let gridLayout = page.getViewById("grid-layout"); + for (let i = 0, length = gridLayout.getChildrenCount(); i < length; i++){ + let listView = gridLayout.getChildAt(i); + listView.scrollToIndex(scrollToBottom ? listView.items.length - 1 : 0); + } + scrollToBottom = !scrollToBottom; +} \ No newline at end of file diff --git a/apps/app/ui-tests-app/list-view/list-view.xml b/apps/app/ui-tests-app/list-view/list-view.xml new file mode 100644 index 000000000..791dea4ff --- /dev/null +++ b/apps/app/ui-tests-app/list-view/list-view.xml @@ -0,0 +1,50 @@ + + +