[Tizen] temporal API to make users use Container class
[platform/core/csapi/nui.git] / NUISamples / examples / flex-container.cs
1
2 using System;
3 using Tizen.NUI;
4 using Tizen.NUI.UIComponents;
5 using Tizen.NUI.BaseComponents;
6
7 namespace FlexContainerTest
8 {
9     public class SampleMain : NUIApplication
10     {
11         public readonly static string[] samples = new string[]
12         {
13             "AnimationSample",
14             "BasicElement",
15             "TextSample",
16             "ImageViewSample",
17             "EventSample",
18             "FlexContainer",
19             "FrameAnimationSample"
20         };
21
22         TextLabel[] label;
23         FlexContainer container;
24         View focusIndicator;
25         int numOfSamples;
26         PushButton pushButton1, pushButton2;
27         private int _cnt;
28         private Animation _ani;
29
30         protected override void OnCreate()
31         {
32             base.OnCreate();
33
34             Window.Instance.BackgroundColor = new Color(0.1f, 0.8f, 0.1f, 1.0f);
35
36             container = new FlexContainer();
37             container.Size2D = new Size2D(Window.Instance.Size.Width, Window.Instance.Size.Height);
38             container.PivotPoint = PivotPoint.TopLeft;
39             container.Padding = new Vector4(100, 100, 100, 100);
40
41             container.FlexWrap = FlexContainer.WrapType.Wrap;
42             container.FlexDirection = FlexContainer.FlexDirectionType.Column;
43
44             Window.Instance.Add(container);
45
46             numOfSamples = samples.GetLength(0);
47             Tizen.Log.Debug("NUI", "NUM = " + numOfSamples);
48             label = new TextLabel[numOfSamples];
49             for (int i = 0; i < numOfSamples; i++)
50             {
51                 label[i] = new TextLabel();
52                 label[i].Focusable = true;
53                 label[i].BackgroundColor = Color.Red;
54                 //label[i].Size = new Size(100, 50, 0);
55                 label[i].Text = samples[i];
56                 label[i].FlexMargin = new Vector4(20, 20, 20, 20);
57                 label[i].PointSize = 10;
58                 label[i].Name = "label" + i.ToString();
59                 container.Add(label[i]);
60             }
61
62             //label[3].SetKeyInputFocus();  //removed
63             FocusManager.Instance.SetCurrentFocusView(label[3]);
64
65             FocusManager.Instance.PreFocusChange += Instance_PreFocusChange;
66             //added
67             FocusManager.Instance.FocusChanged += (sender, e) =>
68             {
69                 if(e.CurrentView) Tizen.Log.Debug("NUI", "FocusManager FocusChanged signal callback! e.CurrentView.Name=" + e.CurrentView.Name);
70                 else Tizen.Log.Debug("NUI", "FocusManager FocusChanged signal callback! e.CurrentView is null!");
71                 if (e.NextView) Tizen.Log.Debug("NUI", "FocusManager FocusChanged signal callback! e.NextView.Name=" + e.NextView.Name);
72                 else Tizen.Log.Debug("NUI", "FocusManager FocusChanged signal callback! e.NextView is null!");
73             };
74             //added
75             FocusManager.Instance.FocusedViewActivated += (sender, e) =>
76             {
77                 if (e.View) Tizen.Log.Debug("NUI", "FocusManager FocusedViewEnterKeyPressed signal callback! e.View.Name=" + e.View.Name);
78                 else Tizen.Log.Debug("NUI", "FocusManager FocusChanged signal callback! e.View is null!");
79             };
80
81             //added
82             Window.Instance.TouchEvent += (sender, e) =>
83             {
84                 Tizen.Log.Debug("NUI", "Window Touch signal callback! To avoid crash, when losing key focus, set here again unless the NextView is null");
85                 FocusManager.Instance.SetCurrentFocusView(label[3]);
86             };
87
88             //added
89             pushButton1 = new PushButton();
90             pushButton1.MinimumSize = new Size2D(400, 200);
91             pushButton1.LabelText = "+PreFocusChange";
92             pushButton1.ParentOrigin = ParentOrigin.TopLeft;
93             pushButton1.PivotPoint = PivotPoint.TopLeft;
94             pushButton1.Position2D = new Position2D(200, 800);
95             pushButton1.Clicked += (sender, e) =>
96             {
97                 Tizen.Log.Debug("NUI", "pushbutton1 clicked! add handler!");
98                 _cnt++;
99                 FocusManager.Instance.PreFocusChange += Instance_PreFocusChange;
100                 _ani.Finished += _ani_Finished;
101                 pushButton1.LabelText = "Add Handler" + _cnt;
102                 pushButton2.LabelText = "Remove Handler" + _cnt;
103                 return true;
104             };
105             Window.Instance.Add(pushButton1);
106
107             pushButton2 = new PushButton();
108             pushButton2.MinimumSize = new Size2D(400, 200);
109             pushButton2.LabelText = "-PreFocusChange";
110             pushButton2.ParentOrigin = ParentOrigin.TopLeft;
111             pushButton2.PivotPoint = PivotPoint.TopLeft;
112             pushButton2.Position2D = new Position2D(800, 800);
113             pushButton2.Clicked += (sender, e) =>
114             {
115                 Tizen.Log.Debug("NUI", "pushbutton2 clicked! remove handler!");
116                 _cnt--;
117                 FocusManager.Instance.PreFocusChange -= Instance_PreFocusChange;
118                 _ani.Finished -= _ani_Finished;
119                 pushButton1.LabelText = "Add Handler" + _cnt;
120                 pushButton2.LabelText = "Remove Handler" + _cnt;
121                 return true;
122             };
123             Window.Instance.Add(pushButton2);
124
125             //added
126             _ani = new Animation(2000);
127             _ani.AnimateTo(pushButton1, "Opacity", 0.0f);
128             _ani.AnimateTo(pushButton2, "Opacity", 0.0f);
129             _ani.EndAction = Animation.EndActions.Discard;
130             _ani.Finished += _ani_Finished;
131
132         }
133
134         private void _ani_Finished(object sender, EventArgs e)
135         {
136             Tizen.Log.Debug("NUI", "_ani finished! _cnt=" + _cnt);
137         }
138
139         private View Instance_PreFocusChange(object source, FocusManager.PreFocusChangeEventArgs e)
140         {
141             View nextView;
142             Tizen.Log.Debug("NUI", "Instance_PreFocusChange = " + e.Direction.ToString());
143
144             //added
145             if (e.CurrentView == null) e.CurrentView = label[0];
146             if (e.ProposedView == null) e.ProposedView = label[0];
147
148             int index = Array.FindIndex(label, x => x == e.CurrentView);
149
150             Tizen.Log.Debug("NUI", "index = " + index);
151
152             switch (e.Direction)
153             {
154                 case View.FocusDirection.Up:
155                     index = (index + numOfSamples - 2) % numOfSamples;  //changed
156                     _ani.Play();
157                     break;
158                 case View.FocusDirection.Down:
159                     index = (index + 2) % numOfSamples; //changed
160                     Tizen.Log.Debug("NUI", "pushbutton1 Visible=" + pushButton1.Visible + "  pushbutton2 Visible=" + pushButton2.Visible); //added
161                     break;
162                 case View.FocusDirection.Left:
163                     //added
164                     pushButton1.Show();
165                     pushButton2.Show();
166                     break;
167                 case View.FocusDirection.Right:
168                     //added
169                     pushButton1.Hide();
170                     pushButton2.Hide();
171                     break;
172                 default:
173                     break;
174             }
175
176             Tizen.Log.Debug("NUI", "next index = " + index);
177             nextView = label[index];
178
179             if (e.CurrentView.HasFocus())
180             {
181                 //currentView?.ClearKeyInputFocus();  //removed
182             }
183             //nextView?.SetKeyInputFocus();  //removed
184
185             return nextView;
186         }
187
188         static void _Main(string[] args)
189         {
190
191             SampleMain sample = new SampleMain();
192             sample.Run(args);
193         }
194     }
195 }
196