[NUI] Add CommonUI Samples (#951)
[platform/core/csapi/tizenfx.git] / test / NUITestSample / CommonUI_Samples / Samples / FlexibleViewSample.cs
1 using System;
2 using Tizen.NUI;
3 using Tizen.NUI.BaseComponents;
4 using Tizen.NUI.CommonUI;
5 using System.Collections.Generic;
6
7 namespace NuiCommonUiSamples
8 {
9     public class ListItemData
10     {
11         private string str;
12
13         public ListItemData(int i)
14         {
15             str = "Text" + i.ToString();
16         }
17
18         public string TextString
19         {
20             get
21             {
22                 return str;
23             }
24         }
25     }
26
27     public class ListItemView : View
28     {
29         private TextLabel mText;
30
31         public ListItemView()
32         {
33             mText = new TextLabel();
34             mText.WidthResizePolicy = ResizePolicyType.FillToParent;
35             mText.HeightResizePolicy = ResizePolicyType.FillToParent;
36             mText.PointSize = 22;
37             mText.HorizontalAlignment = HorizontalAlignment.Center;
38             mText.VerticalAlignment = VerticalAlignment.Center;
39             Add(mText);
40         }
41
42         public string MainText
43         {
44             get
45             {
46                 return mText.Text;
47             }
48             set
49             {
50                 mText.Text = value;
51             }
52         }
53     }
54
55     public class ListBridge : Tizen.NUI.CommonUI.FlexibleView.Adapter
56     {
57         private List<ListItemData> mDatas;
58
59         public ListBridge(List<ListItemData> datas)
60         {
61             mDatas = datas;
62         }
63
64         public void InsertData(int position)
65         {
66             mDatas.Insert(position, new ListItemData(1000 + position));
67             NotifyItemInserted(position);
68         }
69
70         public void RemoveData(int position)
71         {
72             mDatas.RemoveAt(position);
73             NotifyItemRemoved(position);
74         }
75
76         public override Tizen.NUI.CommonUI.FlexibleView.ViewHolder OnCreateViewHolder(int viewType)
77         {
78             Tizen.NUI.CommonUI.FlexibleView.ViewHolder viewHolder = new Tizen.NUI.CommonUI.FlexibleView.ViewHolder(new ListItemView());
79             //Console.WriteLine($"OnCreateViewHolder... viewType: {viewType} viewID: {viewHolder.ItemView.ID}");
80
81             return viewHolder;
82         }
83
84         public override void OnBindViewHolder(Tizen.NUI.CommonUI.FlexibleView.ViewHolder holder, int position)
85         {
86             //Console.WriteLine($"OnBindItemView... position: {position}");
87             ListItemData listItemData = mDatas[position];
88
89             ListItemView listItemView = holder.ItemView as ListItemView;
90             listItemView.Name = "Item" + position;
91             //Random rd = new Random();
92             listItemView.SizeWidth = 150;
93             listItemView.SizeHeight = 60;
94             if (listItemView != null)
95             {
96                 listItemView.MainText = String.Format("{0:D2}", position) + " : " + listItemData.TextString;
97             }
98             listItemView.Margin = new Extents(2, 2, 2, 2);
99             if (position % 2 == 0)
100                 listItemView.BackgroundColor = Color.Cyan;
101             else
102                 listItemView.BackgroundColor = Color.Yellow;
103         }
104
105         public override void OnDestroyViewHolder(Tizen.NUI.CommonUI.FlexibleView.ViewHolder holder)
106         {
107             //Console.WriteLine($"OnDestroyViewHolder... viewID: {holder.ItemView?.ID}");
108             if (holder.ItemView != null)
109             {
110                 holder.ItemView.Dispose();
111             }
112         }
113
114         public override int GetItemCount()
115         {
116             return mDatas.Count;
117         }
118
119         public override void OnFocusChange(Tizen.NUI.CommonUI.FlexibleView flexibleView, int previousFocus, int currentFocus)
120         {
121             Tizen.NUI.CommonUI.FlexibleView.ViewHolder previousFocusView = flexibleView.FindViewHolderForAdapterPosition(previousFocus);
122             if (previousFocusView != null)
123             {
124                 //Console.WriteLine($"previousFocus {previousFocus.AdapterPosition}");
125                 if (previousFocusView.AdapterPosition % 2 == 0)
126                     previousFocusView.ItemView.BackgroundColor = Color.Cyan;
127                 else
128                     previousFocusView.ItemView.BackgroundColor = Color.Yellow;
129                 //previousFocus.SizeWidth = 150;
130                 //previousFocus.SizeHeight = 60;
131                 //NotifyItemChanged(previousFocus.AdapterPosition);
132             }
133             Tizen.NUI.CommonUI.FlexibleView.ViewHolder currentFocusView = flexibleView.FindViewHolderForAdapterPosition(currentFocus);
134             if (currentFocusView != null)
135             {
136                 //Console.WriteLine($"currentFocus {currentFocus.AdapterPosition}");
137                 currentFocusView.ItemView.BackgroundColor = Color.Magenta;
138                 //currentFocus.SizeWidth = 200;
139                 //currentFocus.SizeHeight = 100;
140                 //NotifyItemChanged(currentFocus.AdapterPosition);
141             }
142         }
143
144         public override void OnViewAttachedToWindow(Tizen.NUI.CommonUI.FlexibleView.ViewHolder holder)
145         {
146             //Console.WriteLine($"+Attached: {holder.AdapterPosition}");
147         }
148
149         public override void OnViewDetachedFromWindow(Tizen.NUI.CommonUI.FlexibleView.ViewHolder holder)
150         {
151             //Console.WriteLine($" --Detached: {holder.AdapterPosition}");
152         }
153
154     }
155
156     public class FlexibleView : IExample
157     {
158         private SampleLayout root;
159         private Tizen.NUI.CommonUI.FlexibleView flexibleView1;
160         private Tizen.NUI.CommonUI.FlexibleView flexibleView2;
161         private ListBridge adapter;
162
163         private ScrollBar scrollBar1;
164         private ScrollBar scrollBar2;
165
166         public void Activate()
167         {
168             Window.Instance.BackgroundColor = Color.White;
169             root = new SampleLayout(false);
170             root.HeaderText = "FlexibleView";
171
172             flexibleView1 = new Tizen.NUI.CommonUI.FlexibleView();
173             flexibleView1.Name = "FlexibleView1";
174             flexibleView1.Position2D = new Position2D(300, 20);
175             flexibleView1.Size2D = new Size2D(400, 450);
176             flexibleView1.Padding = new Extents(10, 10, 10, 10);
177             flexibleView1.BackgroundColor = new Color(0.0f, 0.0f, 0.0f, 0.4f);
178
179             List<ListItemData> dataList = new List<ListItemData>();
180             for (int i = 0; i < 131; ++i)
181             {
182                 dataList.Add(new ListItemData(i));
183             }
184             adapter = new ListBridge(dataList);
185             flexibleView1.SetAdapter(adapter);
186
187             LinearLayoutManager layoutManager1 = new LinearLayoutManager(LinearLayoutManager.VERTICAL);
188             //GridLayoutManager layoutManager1 = new GridLayoutManager(3, LinearLayoutManager.VERTICAL);
189             flexibleView1.SetLayoutManager(layoutManager1);
190
191             root.Add(flexibleView1);
192
193             scrollBar1 = new ScrollBar("DAScrollbar");
194             scrollBar1.Direction = ScrollBar.DirectionType.Vertical;
195             scrollBar1.Position2D = new Position2D(394, 2);
196             scrollBar1.Size2D = new Size2D(4, 446);
197             scrollBar1.ThumbSize = new Size2D(4, 30);
198             flexibleView1.AttachScrollBar(scrollBar1);
199
200
201             flexibleView2 = new Tizen.NUI.CommonUI.FlexibleView();
202             flexibleView2.Name = "FlexibleView2";
203             flexibleView2.Position2D = new Position2D(150, 520);
204             flexibleView2.Size2D = new Size2D(700, 200);
205             flexibleView2.Padding = new Extents(10, 10, 10, 10);
206             flexibleView2.BackgroundColor = new Color(0.0f, 0.0f, 0.0f, 0.4f);
207
208             flexibleView2.SetAdapter(adapter);
209
210             GridLayoutManager layoutManager2 = new GridLayoutManager(3, LinearLayoutManager.HORIZONTAL);
211             flexibleView2.SetLayoutManager(layoutManager2);
212
213             root.Add(flexibleView2);
214
215             scrollBar2 = new ScrollBar("DAScrollbar");
216             scrollBar2.Position2D = new Position2D(2, 194);
217             scrollBar2.Size2D = new Size2D(696, 4);
218             scrollBar2.ThumbSize = new Size2D(30, 4);
219             flexibleView2.AttachScrollBar(scrollBar2);
220
221         }
222
223
224         public void Deactivate()
225         {
226             flexibleView1.DetachScrollBar();
227             scrollBar1.Dispose();
228             flexibleView2.DetachScrollBar();
229             scrollBar2.Dispose();
230
231             root.Remove(flexibleView1);
232             flexibleView1.Dispose();
233             root.Remove(flexibleView2);
234             flexibleView2.Dispose();
235
236             root.Dispose();
237         }
238     }
239 }