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