[dali_1.1.18] Merge branch 'devel/master'
[platform/core/uifw/dali-demo.git] / examples / size-negotiation / size-negotiation-example.cpp
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include "shared/view.h"
19 #include <dali/dali.h>
20 #include <dali-toolkit/dali-toolkit.h>
21 #include <dali-toolkit/devel-api/controls/popup/popup.h>
22
23 using namespace Dali;
24
25 using Dali::Toolkit::TextLabel;
26
27 struct ButtonItem
28 {
29   const char* name;
30   const char* text;
31 };
32
33 namespace
34 {
35
36 const char* const BACKGROUND_IMAGE = DEMO_IMAGE_DIR "background-gradient.jpg";
37 const char* const TOOLBAR_IMAGE = DEMO_IMAGE_DIR "top-bar.png";
38 const char* const IMAGE = DEMO_IMAGE_DIR "background-magnifier.jpg";
39
40 const char* const TOOLBAR_TITLE = "Negotiate Size";
41
42 // This example contains size negotiation tests for TableView and Popup.
43 const char* const TABLEVIEW_BUTTON_1CELL_ID = "TABLEVIEW_BUTTON_1CELL";
44 const char* const TABLEVIEW_BUTTON_3CELL_ID = "TABLEVIEW_BUTTON_3CELL";
45 const char* const TABLEVIEW_BUTTON_3X3CELL_ID = "TABLEVIEW_BUTTON_3X3CELL";
46 const char* const TABLEVIEW_BUTTON_FIXED1_ID = "TABLEVIEW_BUTTON_FIXED1";
47 const char* const TABLEVIEW_BUTTON_FIXED2_ID = "TABLEVIEW_BUTTON_FIXED2";
48 const char* const TABLEVIEW_BUTTON_FIT1_ID = "TABLEVIEW_BUTTON_FIT1";
49 const char* const TABLEVIEW_BUTTON_FIT2_ID = "TABLEVIEW_BUTTON_FIT2";
50 const char* const TABLEVIEW_BUTTON_NATURAL1_ID = "TABLEVIEW_BUTTON_NATURAL1";
51 const char* const TABLEVIEW_BUTTON_NATURAL2_ID = "TABLEVIEW_BUTTON_NATURAL2";
52 const char* const TABLEVIEW_BUTTON_NATURAL3_ID = "TABLEVIEW_BUTTON_NATURAL3";
53 const char* const POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID = "POPUP_BUTTON_CONTENT_IMAGE_SCALE";
54 const char* const POPUP_BUTTON_CONTENT_IMAGE_FIT_ID = "POPUP_BUTTON_CONTENT_IMAGE_FIT";
55 const char* const POPUP_BUTTON_CONTENT_IMAGE_FILL_ID = "POPUP_BUTTON_CONTENT_IMAGE_FILL";
56
57 const ButtonItem TABLEVIEW_BUTTON_ITEMS[] = {
58     { TABLEVIEW_BUTTON_1CELL_ID,                    "1 Cell" },
59     { TABLEVIEW_BUTTON_3CELL_ID,                    "3 Cell" },
60     { TABLEVIEW_BUTTON_3X3CELL_ID,                  "3x3 Cells" },
61     { TABLEVIEW_BUTTON_FIXED1_ID,                   "Fixed 1" },
62     { TABLEVIEW_BUTTON_FIXED2_ID,                   "Fixed 2" },
63     { TABLEVIEW_BUTTON_FIT1_ID,                     "Fit Top Bottom" },
64     { TABLEVIEW_BUTTON_FIT2_ID,                     "Fit Middle" },
65     { TABLEVIEW_BUTTON_NATURAL1_ID,                 "Natural 1" },
66     { TABLEVIEW_BUTTON_NATURAL2_ID,                 "Natural 2" },
67     { TABLEVIEW_BUTTON_NATURAL3_ID,                 "Natural 3" },
68     { POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID,          "Image Scale" },
69     { POPUP_BUTTON_CONTENT_IMAGE_FIT_ID,            "Image Fit" },
70     { POPUP_BUTTON_CONTENT_IMAGE_FILL_ID,           "Image Fill" },
71 };
72
73 const unsigned int TABLEVIEW_BUTTON_ITEMS_COUNT = sizeof( TABLEVIEW_BUTTON_ITEMS ) / sizeof( TABLEVIEW_BUTTON_ITEMS[0] );
74
75 }  // anonymous namespace
76
77
78 /**
79  * This example shows the usage of size negotiation.
80  */
81 class SizeNegotiationController: public ConnectionTracker, public Toolkit::ItemFactory
82 {
83 public:
84
85   SizeNegotiationController( Application& application )
86     : mApplication( application )
87   {
88     // Connect to the Application's Init signal
89     mApplication.InitSignal().Connect( this, &SizeNegotiationController::Create );
90   }
91
92   ~SizeNegotiationController()
93   {
94     // Nothing to do here
95   }
96
97   void Create( Application& application )
98   {
99     // The Init signal is received once (only) during the Application lifetime
100     Stage stage = Stage::GetCurrent();
101
102     // Respond to key events
103     stage.KeyEventSignal().Connect(this, &SizeNegotiationController::OnKeyEvent);
104
105     // Creates a default view with a default tool bar.
106     // The view is added to the stage.
107     mContentLayer = DemoHelper::CreateView( application,
108                                             mView,
109                                             mToolBar,
110                                             BACKGROUND_IMAGE,
111                                             TOOLBAR_IMAGE,
112                                             std::string("") );
113
114     mTitleActor = DemoHelper::CreateToolBarLabel( "CUSTOM_TOOLBAR_TITLE" );
115     mTitleActor.SetProperty( Toolkit::TextLabel::Property::TEXT, TOOLBAR_TITLE );
116
117     // Add title to the tool bar.
118     const float padding( DemoHelper::DEFAULT_VIEW_STYLE.mToolBarPadding );
119     mToolBar.AddControl( mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Toolkit::Alignment::HorizontalCenter, Toolkit::Alignment::Padding( padding, padding, padding, padding ) );
120
121     mItemView = Toolkit::ItemView::New( *this );
122     mItemView.SetParentOrigin( ParentOrigin::CENTER );
123     mItemView.SetAnchorPoint( AnchorPoint::CENTER );
124     mItemView.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
125
126     // Use a grid layout for tests
127     Vector2 stageSize = stage.GetSize();
128     Toolkit::ItemLayoutPtr gridLayout = Toolkit::DefaultItemLayout::New( Toolkit::DefaultItemLayout::LIST );
129     Vector3 itemSize;
130     gridLayout->GetItemSize( 0, Vector3( stageSize ), itemSize );
131     itemSize.height = stageSize.y / 10;
132     gridLayout->SetItemSize( itemSize );
133     mItemView.AddLayout( *gridLayout );
134
135     mItemView.ActivateLayout( 0, Vector3(stageSize.x, stageSize.y, stageSize.x), 0.0f );
136
137     mContentLayer.Add( mItemView );
138   }
139
140   void StagePopup( Toolkit::Popup popup )
141   {
142     Stage::GetCurrent().Add( popup );
143     popup.SetDisplayState( Toolkit::Popup::SHOWN );
144   }
145
146   void OnPopupOutsideTouched()
147   {
148     if( mPopup )
149     {
150       mPopup.SetDisplayState( Toolkit::Popup::HIDDEN );
151     }
152   }
153
154   void PopupHidden()
155   {
156     if( mPopup )
157     {
158       mPopup.Unparent();
159       mPopup.Reset();
160     }
161   }
162
163   Toolkit::Popup CreatePopup()
164   {
165     Stage stage = Stage::GetCurrent();
166     const float POPUP_WIDTH_DP = stage.GetSize().width * 0.75f;
167
168     Toolkit::Popup popup = Toolkit::Popup::New();
169     popup.SetName( "popup" );
170     popup.SetParentOrigin( ParentOrigin::CENTER );
171     popup.SetAnchorPoint( AnchorPoint::CENTER );
172     popup.SetSize( POPUP_WIDTH_DP, 0.0f );
173     popup.SetProperty( Toolkit::Popup::Property::TAIL_VISIBILITY, false );
174
175     popup.OutsideTouchedSignal().Connect( this, &SizeNegotiationController::OnPopupOutsideTouched );
176     popup.HiddenSignal().Connect( this, &SizeNegotiationController::PopupHidden );
177
178     return popup;
179   }
180
181   bool OnButtonClicked( Toolkit::Button button )
182   {
183     if( button.GetName() == TABLEVIEW_BUTTON_1CELL_ID )
184     {
185       mPopup = CreatePopup();
186       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
187       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
188
189       Toolkit::TableView table = Toolkit::TableView::New( 0, 0 );
190       table.SetName( "TABLEVIEW_BUTTON_1CELL_ID" );
191       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
192
193       Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
194       backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
195       table.Add( backing );
196
197       mPopup.Add( table );
198
199       StagePopup( mPopup );
200     }
201     else if( button.GetName() == TABLEVIEW_BUTTON_3CELL_ID )
202     {
203       mPopup = CreatePopup();
204       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
205       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
206
207       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
208       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
209
210       {
211         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
212         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
213         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 0 ) );
214       }
215       {
216         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
217         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
218         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 0 ) );
219       }
220       {
221         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
222         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
223         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 0 ) );
224       }
225
226       mPopup.SetContent( table );
227
228       StagePopup( mPopup );
229     }
230     else if( button.GetName() == TABLEVIEW_BUTTON_3X3CELL_ID )
231     {
232       mPopup = CreatePopup();
233       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
234       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
235
236       Toolkit::TableView table = Toolkit::TableView::New( 3, 3 );
237       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
238
239       // Column 0
240       {
241         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
242         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
243         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 0 ) );
244       }
245       {
246         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
247         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
248         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 0 ) );
249       }
250       {
251         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
252         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
253         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 0 ) );
254       }
255
256       // Column 1
257       {
258         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 1.0f, 1.0f ) );
259         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
260         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 1 ) );
261       }
262       {
263         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
264         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
265         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 1 ) );
266       }
267       {
268         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 0.0f, 1.0f, 1.0f ) );
269         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
270         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 1 ) );
271       }
272
273       // Column 2
274       {
275         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 0.0f, 0.0f, 1.0f ) );
276         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
277         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 2 ) );
278       }
279       {
280         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.5f, 0.5f, 0.5f, 1.0f ) );
281         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
282         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 2 ) );
283       }
284       {
285         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.5f, 0.0f, 1.0f ) );
286         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
287         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 2 ) );
288       }
289
290       mPopup.Add( table );
291
292       StagePopup( mPopup );
293     }
294     else if( button.GetName() == TABLEVIEW_BUTTON_FIXED1_ID )
295     {
296       mPopup = CreatePopup();
297       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
298       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
299
300       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
301       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
302       table.SetFixedHeight( 0, 50.0f );
303
304       {
305         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
306         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
307         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
308         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
309         text.SetParentOrigin( ParentOrigin::CENTER );
310         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
311         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
312         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
313         backing.Add( text );
314         table.Add( backing );
315       }
316       {
317         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
318         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
319         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
320         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
321         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
322         text.SetParentOrigin( ParentOrigin::CENTER );
323         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
324         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
325         backing.Add( text );
326         table.Add( backing );
327       }
328       {
329         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
330         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
331         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
332         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
333         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
334         text.SetParentOrigin( ParentOrigin::CENTER );
335         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
336         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
337         backing.Add( text );
338         table.Add( backing );
339       }
340
341       mPopup.Add( table );
342
343       StagePopup( mPopup );
344     }
345     else if( button.GetName() == TABLEVIEW_BUTTON_FIXED2_ID )
346     {
347       mPopup = CreatePopup();
348       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
349       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
350
351       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
352       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
353       table.SetFixedHeight( 0, 50.0f );
354       table.SetFixedHeight( 2, 50.0f );
355
356       {
357         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
358         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
359         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
360         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
361         text.SetAnchorPoint( AnchorPoint::CENTER );
362         text.SetParentOrigin( ParentOrigin::CENTER );
363         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
364         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
365         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
366
367         backing.Add( text );
368         table.Add( backing );
369       }
370       {
371         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
372         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
373         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
374         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
375         text.SetAnchorPoint( AnchorPoint::CENTER );
376         text.SetParentOrigin( ParentOrigin::CENTER );
377         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
378         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
379         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
380
381         backing.Add( text );
382         table.Add( backing );
383       }
384       {
385         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
386         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
387         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
388         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
389         text.SetAnchorPoint( AnchorPoint::CENTER );
390         text.SetParentOrigin( ParentOrigin::CENTER );
391         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
392         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
393         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
394
395         backing.Add( text );
396         table.Add( backing );
397       }
398
399       mPopup.Add( table );
400
401       StagePopup( mPopup );
402     }
403     else if( button.GetName() == TABLEVIEW_BUTTON_FIT1_ID )
404     {
405       mPopup = CreatePopup();
406       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
407       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
408
409       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
410       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
411       table.SetFitHeight( 0 );
412       table.SetFitHeight( 2 );
413
414       {
415         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
416         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
417         backing.SetSize( 0.0f, 100.0f );
418
419         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
420         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
421         text.SetAnchorPoint( AnchorPoint::CENTER );
422         text.SetParentOrigin( ParentOrigin::CENTER );
423         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
424         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
425         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
426
427         backing.Add( text );
428
429         table.Add( backing );
430       }
431       {
432         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
433         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
434
435         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
436         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
437         text.SetAnchorPoint( AnchorPoint::CENTER );
438         text.SetParentOrigin( ParentOrigin::CENTER );
439         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
440         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
441         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
442
443         backing.Add( text );
444
445         table.Add( backing );
446       }
447       {
448         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
449         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
450         backing.SetSize( 0.0f, 100.0f );
451
452         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
453         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
454         text.SetAnchorPoint( AnchorPoint::CENTER );
455         text.SetParentOrigin( ParentOrigin::CENTER );
456         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
457         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
458         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
459
460         backing.Add( text );
461
462         table.Add( backing );
463       }
464
465       mPopup.Add( table );
466
467       StagePopup( mPopup );
468     }
469     else if( button.GetName() == TABLEVIEW_BUTTON_FIT2_ID )
470     {
471       mPopup = CreatePopup();
472       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
473       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
474
475       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
476       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
477       table.SetFitHeight( 1 );
478
479       {
480         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
481         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
482
483         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
484         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
485         text.SetAnchorPoint( AnchorPoint::CENTER );
486         text.SetParentOrigin( ParentOrigin::CENTER );
487         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
488         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
489         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
490
491         backing.Add( text );
492
493         table.Add( backing );
494       }
495       {
496         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
497         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
498         backing.SetSize( 0.0f, 200.0f );
499
500         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
501         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
502         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
503         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
504         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
505
506         text.SetAnchorPoint( AnchorPoint::CENTER );
507         text.SetParentOrigin( ParentOrigin::CENTER );
508         backing.Add( text );
509
510         table.Add( backing );
511       }
512       {
513         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
514         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
515
516         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
517         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
518         text.SetAnchorPoint( AnchorPoint::CENTER );
519         text.SetParentOrigin( ParentOrigin::CENTER );
520         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
521         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
522         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
523
524         backing.Add( text );
525
526         table.Add( backing );
527       }
528
529       mPopup.Add( table );
530
531       StagePopup( mPopup );
532     }
533     else if( button.GetName() == TABLEVIEW_BUTTON_NATURAL1_ID )
534     {
535       mPopup = CreatePopup();
536       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
537       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
538       mPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
539
540       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
541       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
542       table.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
543       table.SetFitHeight( 0 );
544       table.SetFitHeight( 1 );
545       table.SetFitHeight( 2 );
546
547       {
548         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
549         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
550         backing.SetSize( 0.0f, 100.0f );
551
552         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
553         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
554         text.SetAnchorPoint( AnchorPoint::CENTER );
555         text.SetParentOrigin( ParentOrigin::CENTER );
556         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
557         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
558         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
559
560         backing.Add( text );
561
562         table.Add( backing );
563       }
564       {
565         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
566         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
567         backing.SetSize( 0.0f, 200.0f );
568
569         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
570         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
571         text.SetAnchorPoint( AnchorPoint::CENTER );
572         text.SetParentOrigin( ParentOrigin::CENTER );
573         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
574         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
575         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
576
577         backing.Add( text );
578
579         table.Add( backing );
580       }
581       {
582         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
583         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
584         backing.SetSize( 0.0f, 300.0f );
585
586         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
587         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
588         text.SetAnchorPoint( AnchorPoint::CENTER );
589         text.SetParentOrigin( ParentOrigin::CENTER );
590         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
591         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
592         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
593
594         backing.Add( text );
595
596         table.Add( backing );
597       }
598
599       mPopup.Add( table );
600
601       StagePopup( mPopup );
602     }
603     else if( button.GetName() == TABLEVIEW_BUTTON_NATURAL2_ID )
604     {
605       mPopup = CreatePopup();
606       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
607       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
608       mPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
609
610       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
611       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
612       table.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
613       table.SetFitHeight( 0 );
614       table.SetFitHeight( 1 );
615
616       {
617         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
618         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
619         backing.SetResizePolicy( ResizePolicy::FIXED, Dimension::HEIGHT );
620         backing.SetSize( 0.0f, 100.0f );
621
622         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
623         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
624         text.SetAnchorPoint( AnchorPoint::CENTER );
625         text.SetParentOrigin( ParentOrigin::CENTER );
626         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
627         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
628         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
629
630         backing.Add( text );
631
632         table.Add( backing );
633       }
634       {
635         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
636         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
637         backing.SetSize( 0.0f, 200.0f );
638
639         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
640         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
641         text.SetAnchorPoint( AnchorPoint::CENTER );
642         text.SetParentOrigin( ParentOrigin::CENTER );
643         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
644         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
645         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
646
647         backing.Add( text );
648
649         table.Add( backing );
650       }
651
652       mPopup.Add( table );
653
654       StagePopup( mPopup );
655     }
656     else if( button.GetName() == TABLEVIEW_BUTTON_NATURAL3_ID )
657     {
658       mPopup = CreatePopup();
659       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
660       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
661       mPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
662
663       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
664       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
665       table.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
666       table.SetFixedHeight( 0, 20.0f );
667       table.SetFitHeight( 1 );
668
669       {
670         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
671         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
672
673         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
674         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
675         text.SetAnchorPoint( AnchorPoint::CENTER );
676         text.SetParentOrigin( ParentOrigin::CENTER );
677         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
678         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
679         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
680
681         backing.Add( text );
682
683         table.Add( backing );
684       }
685       {
686         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
687         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
688         backing.SetSize( 0.0f, 200.0f );
689
690         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
691         text.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
692         text.SetAnchorPoint( AnchorPoint::CENTER );
693         text.SetParentOrigin( ParentOrigin::CENTER );
694         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
695         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
696         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
697
698         backing.Add( text );
699
700         table.Add( backing );
701       }
702       mPopup.Add( table );
703
704       StagePopup( mPopup );
705     }
706     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID )
707     {
708       mPopup = CreatePopup();
709       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
710       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
711
712       Toolkit::ImageView image = Toolkit::ImageView::New( IMAGE );
713       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
714
715       mPopup.Add( image );
716
717       StagePopup( mPopup );
718     }
719     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_FIT_ID )
720     {
721       mPopup = CreatePopup();
722       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
723       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
724
725       Toolkit::ImageView image = Toolkit::ImageView::New( IMAGE );
726       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
727       image.SetSizeScalePolicy( SizeScalePolicy::FIT_WITH_ASPECT_RATIO );
728
729       mPopup.Add( image );
730
731       StagePopup( mPopup );
732     }
733     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_FILL_ID )
734     {
735       mPopup = CreatePopup();
736       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
737       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
738
739       Toolkit::ImageView image = Toolkit::ImageView::New( IMAGE );
740       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
741       image.SetSizeScalePolicy( SizeScalePolicy::FILL_WITH_ASPECT_RATIO );
742
743       mPopup.Add( image );
744
745       StagePopup( mPopup );
746     }
747
748     return true;
749   }
750
751   void OnKeyEvent( const KeyEvent& event )
752   {
753     if( event.state == KeyEvent::Down )
754     {
755       if( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) )
756       {
757         // Exit application when click back or escape.
758         mApplication.Quit();
759       }
760     }
761   }
762
763 public: // From ItemFactory
764
765   /**
766    * @brief Return the number of items to display in the item view
767    *
768    * @return Return the number of items to display
769    */
770   virtual unsigned int GetNumberOfItems()
771   {
772     return TABLEVIEW_BUTTON_ITEMS_COUNT;
773   }
774
775   /**
776    * @brief Create a new item to populate the item view with
777    *
778    * @param[in] itemId The index of the item to create
779    * @return Return the created actor for the given ID
780    */
781   virtual Actor NewItem(unsigned int itemId)
782   {
783     Toolkit::PushButton popupButton = Toolkit::PushButton::New();
784     popupButton.SetName( TABLEVIEW_BUTTON_ITEMS[ itemId ].name );
785     popupButton.SetLabelText( TABLEVIEW_BUTTON_ITEMS[ itemId ].text );
786     popupButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
787
788     popupButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
789
790     return popupButton;
791   }
792
793 private:
794
795   Application&       mApplication;
796   Toolkit::Control   mView;                  ///< The View instance.
797   Toolkit::ToolBar   mToolBar;               ///< The View's Toolbar.
798   Layer              mContentLayer;          ///< Content layer.
799
800   Toolkit::TextLabel mTitleActor;            ///< Title text.
801   Toolkit::Popup     mMenu;                  ///< The navigation menu todor.
802   Toolkit::Popup     mPopup;                 ///< The current example popup.
803
804   Toolkit::ItemView  mItemView;              ///< ItemView to hold test images.
805
806 };
807
808 void RunTest( Application& application )
809 {
810   SizeNegotiationController test( application );
811
812   application.MainLoop();
813 }
814
815 // Entry point for Linux & SLP applications
816 int main( int argc, char **argv )
817 {
818   Application application = Application::New( &argc, &argv, DEMO_THEME_PATH );
819
820   RunTest( application );
821
822   return 0;
823 }