[dali_1.0.48] Merge branch 'devel/master'
[platform/core/uifw/dali-demo.git] / examples / size-negotiation / size-negotiation-example.cpp
1 /*
2  * Copyright (c) 2014 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 // Define this so that it is interchangeable
28 // "DP" stands for Device independent Pixels
29 #define DP(x) DemoHelper::ScalePointSize(x)
30
31 struct ButtonItem
32 {
33   const char* name;
34   const char* text;
35 };
36
37
38 namespace
39 {
40
41 const char* const BACKGROUND_IMAGE = DALI_IMAGE_DIR "background-gradient.jpg";
42 const char* const TOOLBAR_IMAGE = DALI_IMAGE_DIR "top-bar.png";
43
44 const char* const TOOLBAR_TITLE = "Negotiate Size";
45 const int TOOLBAR_HEIGHT = 62;
46
47 const char* MENU_ICON_IMAGE = DALI_IMAGE_DIR "icon-cluster-none.png";
48 const char* MENU_ICON_IMAGE_SELECTED = DALI_IMAGE_DIR "icon-cluster-none-selected.png";
49
50 const char* const POPUPS_MENU_ID = "POPUPS_MENU";
51 const char* const TABLEVIEW_MENU_ID = "TABLEVIEW_MENU";
52
53 const char* const POPUP_BUTTON_EMPTY_ID = "POPUP_BUTTON_EMPTY";
54 const char* const POPUP_BUTTON_TITLE_ID = "POPUP_BUTTON_TITLE";
55 const char* const POPUP_BUTTON_BUTTONS_1_ID = "POPUP_BUTTON_BUTTONS_1";
56 const char* const POPUP_BUTTON_BUTTONS_2_ID = "POPUP_BUTTON_BUTTONS_2";
57 const char* const POPUP_BUTTON_TITLE_BUTTONS_ID = "POPUP_BUTTON_TITLE_BUTTONS";
58 const char* const POPUP_BUTTON_CONTENT_TEXT_ID = "POPUP_BUTTON_CONTENT_TEXT";
59 const char* const POPUP_BUTTON_CONTENT_IMAGE_ID = "POPUP_BUTTON_CONTENT_IMAGE";
60 const char* const POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID = "POPUP_BUTTON_CONTENT_IMAGE_SCALE";
61 const char* const POPUP_BUTTON_CONTENT_IMAGE_FIT_ID = "POPUP_BUTTON_CONTENT_IMAGE_FIT";
62 const char* const POPUP_BUTTON_CONTENT_IMAGE_FILL_ID = "POPUP_BUTTON_CONTENT_IMAGE_FILL";
63 const char* const POPUP_BUTTON_TITLE_CONTENT_TEXT_ID = "POPUP_BUTTON_TITLE_CONTENT_TEXT";
64 const char* const POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS_ID = "POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS";
65 const char* const POPUP_BUTTON_COMPLEX_ID = "POPUP_BUTTON_COMPLEX";
66
67 const char* const TABLEVIEW_BUTTON_EMPTY_ID = "TABLEVIEW_BUTTON_EMPTY";
68 const char* const TABLEVIEW_BUTTON_1CELL_ID = "TABLEVIEW_BUTTON_1CELL";
69 const char* const TABLEVIEW_BUTTON_3CELL_ID = "TABLEVIEW_BUTTON_3CELL";
70 const char* const TABLEVIEW_BUTTON_3X3CELL_ID = "TABLEVIEW_BUTTON_3X3CELL";
71 const char* const TABLEVIEW_BUTTON_FIXED1_ID = "TABLEVIEW_BUTTON_FIXED1";
72 const char* const TABLEVIEW_BUTTON_FIXED2_ID = "TABLEVIEW_BUTTON_FIXED2";
73 const char* const TABLEVIEW_BUTTON_FIT1_ID = "TABLEVIEW_BUTTON_FIT1";
74 const char* const TABLEVIEW_BUTTON_FIT2_ID = "TABLEVIEW_BUTTON_FIT2";
75 const char* const TABLEVIEW_BUTTON_NATURAL1_ID = "TABLEVIEW_BUTTON_NATURAL1";
76 const char* const TABLEVIEW_BUTTON_NATURAL2_ID = "TABLEVIEW_BUTTON_NATURAL2";
77 const char* const TABLEVIEW_BUTTON_NATURAL3_ID = "TABLEVIEW_BUTTON_NATURAL3";
78
79 const char* const OKAY_BUTTON_ID = "OKAY_BUTTON";
80 const char* const CANCEL_BUTTON_ID = "CANCEL_BUTTON";
81
82 const char* const CONTENT_TEXT = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
83 const char* const IMAGE1 = DALI_IMAGE_DIR "gallery-medium-5.jpg";
84 const char* const IMAGE2 = DALI_IMAGE_DIR "background-magnifier.jpg";
85 const char* const CHECKBOX_UNCHECKED_IMAGE = DALI_IMAGE_DIR "checkbox-unselected.png";
86 const char* const CHECKBOX_CHECKED_IMAGE = DALI_IMAGE_DIR "checkbox-selected.png";
87
88 const ButtonItem MENU_ITEMS[] = {
89     { POPUPS_MENU_ID,        "Popups" },
90     { TABLEVIEW_MENU_ID,     "TableView" }
91 };
92
93 const unsigned int MENU_ITEMS_COUNT = sizeof( MENU_ITEMS ) / sizeof( MENU_ITEMS[0] );
94
95 const ButtonItem POPUP_BUTTON_ITEMS[] = {
96     { POPUP_BUTTON_COMPLEX_ID,                    "Complex" },
97     { POPUP_BUTTON_EMPTY_ID,                      "Empty" },
98     { POPUP_BUTTON_TITLE_ID,                      "Title" },
99     { POPUP_BUTTON_BUTTONS_1_ID,                  "1 Button" },
100     { POPUP_BUTTON_BUTTONS_2_ID,                  "2 Buttons" },
101     { POPUP_BUTTON_TITLE_BUTTONS_ID,              "Title & Buttons" },
102     { POPUP_BUTTON_CONTENT_TEXT_ID,               "Text" },
103     { POPUP_BUTTON_CONTENT_IMAGE_ID,              "Image" },
104     { POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID,        "Image Scale" },
105     { POPUP_BUTTON_CONTENT_IMAGE_FIT_ID,          "Image Fit" },
106     { POPUP_BUTTON_CONTENT_IMAGE_FILL_ID,         "Image Fill" },
107     { POPUP_BUTTON_TITLE_CONTENT_TEXT_ID,         "Title Text" },
108     { POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS_ID, "Title, text, buttons" }
109
110 };
111
112 const int POPUP_BUTTON_ITEMS_COUNT = sizeof( POPUP_BUTTON_ITEMS ) / sizeof( POPUP_BUTTON_ITEMS[0] );
113
114 const ButtonItem TABLEVIEW_BUTTON_ITEMS[] = {
115     { TABLEVIEW_BUTTON_EMPTY_ID,                    "Empty" },
116     { TABLEVIEW_BUTTON_1CELL_ID,                    "1 Cell" },
117     { TABLEVIEW_BUTTON_3CELL_ID,                    "3 Cell" },
118     { TABLEVIEW_BUTTON_3X3CELL_ID,                  "3x3 Cells" },
119     { TABLEVIEW_BUTTON_FIXED1_ID,                   "Fixed 1" },
120     { TABLEVIEW_BUTTON_FIXED2_ID,                   "Fixed 2" },
121     { TABLEVIEW_BUTTON_FIT1_ID,                     "Fit Top Bottom" },
122     { TABLEVIEW_BUTTON_FIT2_ID,                     "Fit Middle" },
123     { TABLEVIEW_BUTTON_NATURAL1_ID,                 "Natural 1" },
124     { TABLEVIEW_BUTTON_NATURAL2_ID,                 "Natural 2" },
125     { TABLEVIEW_BUTTON_NATURAL3_ID,                 "Natural 3" },
126 };
127
128 const unsigned int TABLEVIEW_BUTTON_ITEMS_COUNT = sizeof( TABLEVIEW_BUTTON_ITEMS ) / sizeof( TABLEVIEW_BUTTON_ITEMS[0] );
129
130 }  // namespace
131
132
133
134 /**
135  * This example shows the usage of size negotiation.
136  */
137 class SizeNegotiationController: public ConnectionTracker, public Toolkit::ItemFactory
138 {
139 public:
140
141   SizeNegotiationController( Application& application )
142     : mApplication( application ),
143       mMenuShown( false ),
144       mDemoState( POPUP )
145   {
146     // Connect to the Application's Init signal
147     mApplication.InitSignal().Connect( this, &SizeNegotiationController::Create );
148   }
149
150   ~SizeNegotiationController()
151   {
152     // Nothing to do here
153   }
154
155   void Create( Application& application )
156   {
157     // The Init signal is received once (only) during the Application lifetime
158
159     Stage stage = Stage::GetCurrent();
160
161     // Respond to key events
162     stage.KeyEventSignal().Connect(this, &SizeNegotiationController::OnKeyEvent);
163
164     // Creates a default view with a default tool bar.
165     // The view is added to the stage.
166     mContentLayer = DemoHelper::CreateView( application,
167                                             mView,
168                                             mToolBar,
169                                             BACKGROUND_IMAGE,
170                                             TOOLBAR_IMAGE,
171                                             std::string("") );
172
173     mTitleActor = DemoHelper::CreateToolBarLabel( "CUSTOM_TOOLBAR_TITLE" );
174
175     SetTitle();
176
177     // Create menu button
178     Toolkit::PushButton viewButton = Toolkit::PushButton::New();
179     viewButton.SetButtonImage( ResourceImage::New( MENU_ICON_IMAGE ) );
180     viewButton.SetSelectedImage( ResourceImage::New( MENU_ICON_IMAGE_SELECTED ) );
181     viewButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnMenu );
182     mToolBar.AddControl( viewButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalLeft, DemoHelper::DEFAULT_MODE_SWITCH_PADDING  );
183
184     // Add title to the tool bar.
185     const float padding( DemoHelper::DEFAULT_VIEW_STYLE.mToolBarPadding );
186     mToolBar.AddControl( mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Toolkit::Alignment::HorizontalCenter, Toolkit::Alignment::Padding( padding, padding, padding, padding ) );
187
188     mItemView = Toolkit::ItemView::New( *this );
189     mItemView.SetParentOrigin( ParentOrigin::CENTER );
190     mItemView.SetAnchorPoint( AnchorPoint::CENTER );
191     mItemView.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
192
193     // Use a grid layout for tests
194     Vector2 stageSize = stage.GetSize();
195     Toolkit::ItemLayoutPtr gridLayout = Toolkit::DefaultItemLayout::New( Toolkit::DefaultItemLayout::LIST );
196     Vector3 itemSize;
197     gridLayout->GetItemSize( 0, Vector3( stageSize ), itemSize );
198     itemSize.height = stageSize.y / 10;
199     gridLayout->SetItemSize( itemSize );
200     mItemView.AddLayout( *gridLayout );
201
202     mItemView.ActivateLayout( 0, Vector3(stageSize.x, stageSize.y, stageSize.x), 0.0f );
203
204     mContentLayer.Add( mItemView );
205   }
206
207   void SetTitle()
208   {
209     std::string subTitle = "";
210
211     switch( mDemoState )
212     {
213       case POPUP:
214       {
215         subTitle = "Popups";
216         break;
217       }
218
219       case TABLEVIEW:
220       {
221         subTitle = "TableView";
222         break;
223       }
224
225       default:
226       {
227         break;
228       }
229     }
230
231     mTitleActor.SetProperty( Toolkit::TextLabel::Property::TEXT, std::string( std::string( TOOLBAR_TITLE ) + ": " + subTitle ) );
232   }
233
234   bool OnMenu( Toolkit::Button button )
235   {
236     ShowMenu();
237     return true;
238   }
239
240   void ShowMenu()
241   {
242     Stage stage = Stage::GetCurrent();
243     const float popupWidth = stage.GetSize().x * 0.5f;
244
245     mMenu = Toolkit::Popup::New();
246     mMenu.SetParentOrigin( ParentOrigin::TOP_LEFT );
247     mMenu.SetAnchorPoint( AnchorPoint::TOP_LEFT );
248     mMenu.HideTail();
249     mMenu.OutsideTouchedSignal().Connect( this, &SizeNegotiationController::HideMenu );
250     mMenu.SetSize( popupWidth, 0.0f );
251     mMenu.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
252
253     Toolkit::TableView tableView = Toolkit::TableView::New( 0, 0 );
254     tableView.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
255     tableView.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
256     mMenu.Add( tableView );
257
258     for( unsigned int i = 0; i < MENU_ITEMS_COUNT; ++i )
259     {
260       Toolkit::PushButton menuButton = Toolkit::PushButton::New();
261       menuButton.SetName( MENU_ITEMS[ i ].name );
262       menuButton.SetLabel( MENU_ITEMS[ i ].text );
263       menuButton.SetButtonImage( Actor() );
264       menuButton.SetSelectedImage( Actor() );
265       menuButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnMenuSelect );
266
267       tableView.Add( menuButton );
268       tableView.SetFitHeight( i );
269     }
270
271     // Show the menu
272     mMenu.Show();
273     mMenuShown = true;
274   }
275
276   void HideMenu()
277   {
278     if( mMenu )
279     {
280       mMenu.Hide();
281       mMenu.Reset();
282     }
283
284     mMenuShown = false;
285   }
286
287   bool OnMenuSelect( Toolkit::Button button )
288   {
289     bool refresh = false;
290
291     if( button.GetName() == POPUPS_MENU_ID )
292     {
293       if( mDemoState != POPUP )
294       {
295         refresh = true;
296         mDemoState = POPUP;
297       }
298     }
299     else if( button.GetName() == TABLEVIEW_MENU_ID )
300     {
301       if( mDemoState != TABLEVIEW )
302       {
303         refresh = true;
304         mDemoState = TABLEVIEW;
305       }
306     }
307
308     if( refresh )
309     {
310       SetTitle();
311
312       mItemView.Refresh();
313     }
314
315     HideMenu();
316     return true;
317   }
318
319   Toolkit::Popup CreatePopup()
320   {
321     Stage stage = Stage::GetCurrent();
322     const float POPUP_WIDTH_DP = stage.GetSize().width * 0.75f;
323
324     Toolkit::Popup popup = Toolkit::Popup::New();
325     popup.SetName( "POPUP" );
326     popup.SetParentOrigin( ParentOrigin::CENTER );
327     popup.SetAnchorPoint( AnchorPoint::CENTER );
328     popup.SetSize( POPUP_WIDTH_DP, 0.0f );
329     popup.HideTail();
330
331     popup.OutsideTouchedSignal().Connect( this, &SizeNegotiationController::OnPopupOutsideTouched );
332
333     return popup;
334   }
335
336   bool OnButtonClicked( Toolkit::Button button )
337   {
338     if( button.GetName() == POPUP_BUTTON_EMPTY_ID )
339     {
340       mPopup = CreatePopup();
341
342       mPopup.Show();
343     }
344     else if( button.GetName() == POPUP_BUTTON_TITLE_ID )
345     {
346       mPopup = CreatePopup();
347       mPopup.SetTitle( "Popup!" );
348
349       mPopup.Show();
350     }
351     else if( button.GetName() == POPUP_BUTTON_BUTTONS_1_ID )
352     {
353       mPopup = CreatePopup();
354
355       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
356       okayButton.SetName( OKAY_BUTTON_ID );
357       okayButton.SetLabel( "OK!" );
358
359       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
360
361       mPopup.AddButton( okayButton );
362
363       mPopup.Show();
364     }
365     else if( button.GetName() == POPUP_BUTTON_BUTTONS_2_ID )
366     {
367       mPopup = CreatePopup();
368
369       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
370       cancelButton.SetName( CANCEL_BUTTON_ID );
371       cancelButton.SetLabel( "Cancel" );
372
373       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
374
375       mPopup.AddButton( cancelButton );
376
377       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
378       okayButton.SetName( OKAY_BUTTON_ID );
379       okayButton.SetLabel( "OK!" );
380
381       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
382
383       mPopup.AddButton( okayButton );
384
385       mPopup.Show();
386     }
387     else if( button.GetName() == POPUP_BUTTON_TITLE_BUTTONS_ID )
388     {
389       mPopup = CreatePopup();
390       mPopup.SetTitle( "Popup!" );
391
392       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
393       cancelButton.SetName( CANCEL_BUTTON_ID );
394       cancelButton.SetLabel( "Cancel" );
395
396       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
397
398       mPopup.AddButton( cancelButton );
399
400       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
401       okayButton.SetName( OKAY_BUTTON_ID );
402       okayButton.SetLabel( "OK!" );
403
404       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
405
406       mPopup.AddButton( okayButton );
407
408       mPopup.Show();
409     }
410     else if( button.GetName() == POPUP_BUTTON_CONTENT_TEXT_ID )
411     {
412       mPopup = CreatePopup();
413
414       TextLabel text = TextLabel::New( CONTENT_TEXT );
415       text.SetName( "POPUP_CONTENT_TEXT" );
416       text.SetProperty( TextLabel::Property::MULTI_LINE, true );
417       text.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
418       text.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
419       text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
420       text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
421       text.SetPadding( Padding( 20.0f, 20.0f, 20.0f, 20.0f ) );
422
423       mPopup.Add( text );
424
425       mPopup.Show();
426     }
427     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_ID )
428     {
429       mPopup = CreatePopup();
430
431       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
432       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
433       image.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
434       image.SetPadding( Padding( 20.0f, 20.0f, 20.0f, 20.0f ) );
435
436       mPopup.Add( image );
437
438       mPopup.Show();
439     }
440     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID )
441     {
442       mPopup = CreatePopup();
443
444       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
445       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
446
447       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
448       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
449
450       mPopup.Add( image );
451
452       mPopup.Show();
453     }
454     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_FIT_ID )
455     {
456       mPopup = CreatePopup();
457
458       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
459       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
460
461       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
462       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
463       image.SetSizeScalePolicy( SizeScalePolicy::FIT_WITH_ASPECT_RATIO );
464
465       mPopup.Add( image );
466
467       mPopup.Show();
468     }
469     else if( button.GetName() == POPUP_BUTTON_CONTENT_IMAGE_FILL_ID )
470     {
471       mPopup = CreatePopup();
472
473       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
474       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
475
476       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
477       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
478       image.SetSizeScalePolicy( SizeScalePolicy::FILL_WITH_ASPECT_RATIO );
479
480       mPopup.Add( image );
481
482       mPopup.Show();
483     }
484     else if( button.GetName() == POPUP_BUTTON_TITLE_CONTENT_TEXT_ID )
485     {
486       mPopup = CreatePopup();
487       mPopup.SetTitle( "Popup!" );
488
489       Toolkit::TextLabel text = Toolkit::TextLabel::New( CONTENT_TEXT );
490       text.SetName( "POPUP_CONTENT_TEXT" );
491       text.SetProperty( TextLabel::Property::MULTI_LINE, true );
492       text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
493       text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
494       text.SetPadding( Padding( 20.0f, 20.0f, 20.0f, 20.0f ) );
495
496       mPopup.Add( text );
497
498       mPopup.Show();
499     }
500     else if( button.GetName() == POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS_ID )
501     {
502       mPopup = CreatePopup();
503       mPopup.SetTitle( "Popup!" );
504
505       Toolkit::TextLabel text = Toolkit::TextLabel::New( CONTENT_TEXT );
506       text.SetName( "POPUP_CONTENT_TEXT" );
507       text.SetProperty( TextLabel::Property::MULTI_LINE, true );
508       text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
509       text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
510       text.SetPadding( Padding( 10.0f, 10.0f, 20.0f, 0.0f ) );
511
512       mPopup.Add( text );
513
514       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
515       cancelButton.SetName( CANCEL_BUTTON_ID );
516       cancelButton.SetLabel( "Cancel" );
517
518       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
519
520       mPopup.AddButton( cancelButton );
521
522       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
523       okayButton.SetName( OKAY_BUTTON_ID );
524       okayButton.SetLabel( "OK!" );
525
526       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
527
528       mPopup.AddButton( okayButton );
529
530       mPopup.Show();
531     }
532     else if( button.GetName() == POPUP_BUTTON_COMPLEX_ID )
533     {
534       mPopup = CreatePopup();
535       mPopup.SetTitle( "Warning" );
536
537       // Content
538       Toolkit::TableView content = Toolkit::TableView::New( 2, 2 );
539       content.SetName( "COMPLEX_TABLEVIEW" );
540       content.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
541       content.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
542       content.SetFitHeight( 0 );
543       content.SetFitHeight( 1 );
544       content.SetPadding( Padding( 20.0f, 20.0f, 20.0f, 0.0f ) );
545
546       // Text
547       {
548         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Do you really want to quit?" );
549         text.SetProperty( Toolkit::TextLabel::Property::MULTI_LINE, true );
550         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
551         text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
552
553         content.AddChild( text, Toolkit::TableView::CellPosition( 0, 0 ) );
554       }
555
556       // Image
557       {
558         ImageActor image = ImageActor::New( ResourceImage::New( IMAGE1 ) );
559         image.SetName( "COMPLEX_IMAGE" );
560         image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
561         image.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
562         image.SetPadding( Padding( 20.0f, 0.0f, 0.0f, 0.0f ) );
563         content.AddChild( image, Toolkit::TableView::CellPosition( 0, 1 ) );
564       }
565
566       // Text 2
567       {
568         Toolkit::TableView root = Toolkit::TableView::New( 1, 2 );
569         root.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
570         root.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
571         root.SetFitHeight( 0 );
572         root.SetFitWidth( 0 );
573         root.SetPadding( Padding( 0.0f, 0.0f, 0.0f, 20.0f ) );
574
575         Toolkit::CheckBoxButton checkBox = Toolkit::CheckBoxButton::New();
576         checkBox.SetSize( 48, 48 );
577
578         root.AddChild( checkBox, Toolkit::TableView::CellPosition( 0, 0 ) );
579
580         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Don't show again" );
581         Actor textActor = text;
582         textActor.SetPadding( Padding( 20.0f, 0.0f, 0.0f, 10.0f ) );
583
584         root.AddChild( text, Toolkit::TableView::CellPosition( 0, 1 ) );
585
586         content.AddChild( root, Toolkit::TableView::CellPosition( 1, 0 ) );
587       }
588
589       mPopup.Add( content );
590
591       // Buttons
592       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
593       cancelButton.SetName( CANCEL_BUTTON_ID );
594       cancelButton.SetLabel( "Cancel" );
595
596       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
597
598       mPopup.AddButton( cancelButton );
599
600       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
601       okayButton.SetName( OKAY_BUTTON_ID );
602       okayButton.SetLabel( "OK!" );
603
604       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
605
606       mPopup.AddButton( okayButton );
607
608       mPopup.Show();
609     }
610     else if( button.GetName() == TABLEVIEW_BUTTON_EMPTY_ID )
611     {
612       mPopup = CreatePopup();
613       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
614       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
615
616
617       Toolkit::TableView table = Toolkit::TableView::New( 0, 0 );
618       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
619
620       mPopup.Add( table );
621
622       mPopup.Show();
623     }
624     else if( button.GetName() == TABLEVIEW_BUTTON_1CELL_ID )
625     {
626       mPopup = CreatePopup();
627       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
628       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
629
630
631       Toolkit::TableView table = Toolkit::TableView::New( 0, 0 );
632       table.SetName( "TABLEVIEW_BUTTON_1CELL_ID" );
633       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
634
635       Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
636       backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
637       table.Add( backing );
638
639       mPopup.Add( table );
640
641       mPopup.Show();
642     }
643     else if( button.GetName() == TABLEVIEW_BUTTON_3CELL_ID )
644     {
645       mPopup = CreatePopup();
646       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
647       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
648
649
650       Toolkit::TableView table = Toolkit::TableView::New( 0, 0 );
651       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
652
653       {
654         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
655         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
656         table.Add( backing );
657       }
658       {
659         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
660         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
661         table.Add( backing );
662       }
663       {
664         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
665         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
666         table.Add( backing );
667       }
668
669       mPopup.Add( table );
670
671       mPopup.Show();
672     }
673     else if( button.GetName() == TABLEVIEW_BUTTON_3X3CELL_ID )
674     {
675       mPopup = CreatePopup();
676       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
677       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
678
679
680       Toolkit::TableView table = Toolkit::TableView::New( 3, 3 );
681       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
682
683       // Column 0
684       {
685         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
686         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
687         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 0 ) );
688       }
689       {
690         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
691         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
692         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 0 ) );
693       }
694       {
695         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
696         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
697         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 0 ) );
698       }
699
700       // Column 1
701       {
702         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 1.0f, 1.0f ) );
703         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
704         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 1 ) );
705       }
706       {
707         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
708         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
709         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 1 ) );
710       }
711       {
712         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 0.0f, 1.0f, 1.0f ) );
713         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
714         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 1 ) );
715       }
716
717       // Column 2
718       {
719         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 0.0f, 0.0f, 1.0f ) );
720         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
721         table.AddChild( backing, Toolkit::TableView::CellPosition( 0, 2 ) );
722       }
723       {
724         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.5f, 0.5f, 0.5f, 1.0f ) );
725         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
726         table.AddChild( backing, Toolkit::TableView::CellPosition( 1, 2 ) );
727       }
728       {
729         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.5f, 0.0f, 1.0f ) );
730         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
731         table.AddChild( backing, Toolkit::TableView::CellPosition( 2, 2 ) );
732       }
733
734       mPopup.Add( table );
735
736       mPopup.Show();
737     }
738     else if( button.GetName() == TABLEVIEW_BUTTON_FIXED1_ID )
739     {
740       mPopup = CreatePopup();
741       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
742       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
743
744
745       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
746       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
747       table.SetFixedHeight( 0, 50.0f );
748
749       {
750         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
751         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
752         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
753         text.SetParentOrigin( ParentOrigin::CENTER );
754         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
755         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
756         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
757         backing.Add( text );
758         table.Add( backing );
759       }
760       {
761         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
762         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
763         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
764         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
765         text.SetParentOrigin( ParentOrigin::CENTER );
766         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
767         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
768         backing.Add( text );
769         table.Add( backing );
770       }
771       {
772         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
773         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
774         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
775         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
776         text.SetParentOrigin( ParentOrigin::CENTER );
777         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
778         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
779         backing.Add( text );
780         table.Add( backing );
781       }
782
783       mPopup.Add( table );
784
785       mPopup.Show();
786     }
787     else if( button.GetName() == TABLEVIEW_BUTTON_FIXED2_ID )
788     {
789       mPopup = CreatePopup();
790       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
791       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
792
793
794       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
795       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
796       table.SetFixedHeight( 0, 50.0f );
797       table.SetFixedHeight( 2, 50.0f );
798
799       {
800         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
801         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
802         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
803         text.SetAnchorPoint( AnchorPoint::CENTER );
804         text.SetParentOrigin( ParentOrigin::CENTER );
805         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
806         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
807         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
808
809         backing.Add( text );
810         table.Add( backing );
811       }
812       {
813         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
814         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
815         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
816         text.SetAnchorPoint( AnchorPoint::CENTER );
817         text.SetParentOrigin( ParentOrigin::CENTER );
818         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
819         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
820         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
821
822         backing.Add( text );
823         table.Add( backing );
824       }
825       {
826         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
827         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
828         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
829         text.SetAnchorPoint( AnchorPoint::CENTER );
830         text.SetParentOrigin( ParentOrigin::CENTER );
831         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
832         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
833         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
834
835         backing.Add( text );
836         table.Add( backing );
837       }
838
839       mPopup.Add( table );
840
841       mPopup.Show();
842     }
843     else if( button.GetName() == TABLEVIEW_BUTTON_FIT1_ID )
844     {
845       mPopup = CreatePopup();
846       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
847       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
848
849
850       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
851       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
852       table.SetFitHeight( 0 );
853       table.SetFitHeight( 2 );
854
855       {
856         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
857         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
858         backing.SetSize( 0.0f, 100.0f );
859
860         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
861         text.SetAnchorPoint( AnchorPoint::CENTER );
862         text.SetParentOrigin( ParentOrigin::CENTER );
863         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
864         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
865         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
866
867         backing.Add( text );
868
869         table.Add( backing );
870       }
871       {
872         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
873         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
874
875         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
876         text.SetAnchorPoint( AnchorPoint::CENTER );
877         text.SetParentOrigin( ParentOrigin::CENTER );
878         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
879         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
880         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
881
882         backing.Add( text );
883
884         table.Add( backing );
885       }
886       {
887         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
888         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
889         backing.SetSize( 0.0f, 100.0f );
890
891         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
892         text.SetAnchorPoint( AnchorPoint::CENTER );
893         text.SetParentOrigin( ParentOrigin::CENTER );
894         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
895         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
896         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
897
898         backing.Add( text );
899
900         table.Add( backing );
901       }
902
903       mPopup.Add( table );
904
905       mPopup.Show();
906     }
907     else if( button.GetName() == TABLEVIEW_BUTTON_FIT2_ID )
908     {
909       mPopup = CreatePopup();
910       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
911       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
912
913       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
914       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
915       table.SetFitHeight( 1 );
916
917       {
918         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
919         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
920
921         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
922         text.SetAnchorPoint( AnchorPoint::CENTER );
923         text.SetParentOrigin( ParentOrigin::CENTER );
924         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
925         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
926         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
927
928         backing.Add( text );
929
930         table.Add( backing );
931       }
932       {
933         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
934         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
935         backing.SetSize( 0.0f, 200.0f );
936
937         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
938         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
939         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
940         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
941
942         text.SetAnchorPoint( AnchorPoint::CENTER );
943         text.SetParentOrigin( ParentOrigin::CENTER );
944         backing.Add( text );
945
946         table.Add( backing );
947       }
948       {
949         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
950         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
951
952         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
953         text.SetAnchorPoint( AnchorPoint::CENTER );
954         text.SetParentOrigin( ParentOrigin::CENTER );
955         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
956         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
957         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
958
959         backing.Add( text );
960
961         table.Add( backing );
962       }
963
964       mPopup.Add( table );
965
966       mPopup.Show();
967     }
968     else if( button.GetName() == TABLEVIEW_BUTTON_NATURAL1_ID )
969     {
970       mPopup = CreatePopup();
971       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
972       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
973       mPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
974
975       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
976       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
977       table.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
978       table.SetFitHeight( 0 );
979       table.SetFitHeight( 1 );
980       table.SetFitHeight( 2 );
981
982       {
983         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
984         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
985         backing.SetSize( 0.0f, 100.0f );
986
987         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
988         text.SetAnchorPoint( AnchorPoint::CENTER );
989         text.SetParentOrigin( ParentOrigin::CENTER );
990         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
991         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
992         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
993
994         backing.Add( text );
995
996         table.Add( backing );
997       }
998       {
999         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 1.0f, 0.0f, 1.0f ) );
1000         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1001         backing.SetSize( 0.0f, 200.0f );
1002
1003         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
1004         text.SetAnchorPoint( AnchorPoint::CENTER );
1005         text.SetParentOrigin( ParentOrigin::CENTER );
1006         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
1007         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
1008         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
1009
1010         backing.Add( text );
1011
1012         table.Add( backing );
1013       }
1014       {
1015         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
1016         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1017         backing.SetSize( 0.0f, 300.0f );
1018
1019         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
1020         text.SetAnchorPoint( AnchorPoint::CENTER );
1021         text.SetParentOrigin( ParentOrigin::CENTER );
1022         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
1023         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
1024         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
1025
1026         backing.Add( text );
1027
1028         table.Add( backing );
1029       }
1030
1031       mPopup.Add( table );
1032
1033       mPopup.Show();
1034     }
1035     else if( button.GetName() == TABLEVIEW_BUTTON_NATURAL2_ID )
1036     {
1037       mPopup = CreatePopup();
1038       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
1039       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
1040       mPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
1041
1042       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
1043       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1044       table.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
1045       table.SetFitHeight( 0 );
1046       table.SetFitHeight( 1 );
1047
1048       {
1049         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
1050         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1051         backing.SetResizePolicy( ResizePolicy::FIXED, Dimension::HEIGHT );
1052         backing.SetSize( 0.0f, 100.0f );
1053
1054         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
1055         text.SetAnchorPoint( AnchorPoint::CENTER );
1056         text.SetParentOrigin( ParentOrigin::CENTER );
1057         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
1058         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
1059         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
1060
1061         backing.Add( text );
1062
1063         table.Add( backing );
1064       }
1065       {
1066         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
1067         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1068         backing.SetSize( 0.0f, 200.0f );
1069
1070         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
1071         text.SetAnchorPoint( AnchorPoint::CENTER );
1072         text.SetParentOrigin( ParentOrigin::CENTER );
1073         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
1074         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
1075         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
1076
1077         backing.Add( text );
1078
1079         table.Add( backing );
1080       }
1081
1082       mPopup.Add( table );
1083
1084       mPopup.Show();
1085     }
1086     else if( button.GetName() == TABLEVIEW_BUTTON_NATURAL3_ID )
1087     {
1088       mPopup = CreatePopup();
1089       mPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
1090       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
1091       mPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
1092
1093       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
1094       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1095       table.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
1096       table.SetFixedHeight( 0, 20.0f );
1097       table.SetFitHeight( 1 );
1098
1099       {
1100         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
1101         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
1102
1103         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
1104         text.SetAnchorPoint( AnchorPoint::CENTER );
1105         text.SetParentOrigin( ParentOrigin::CENTER );
1106         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
1107         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
1108         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
1109
1110         backing.Add( text );
1111
1112         table.Add( backing );
1113       }
1114       {
1115         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 0.0f, 1.0f, 0.0f, 1.0f ) );
1116         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1117         backing.SetSize( 0.0f, 200.0f );
1118
1119         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
1120         text.SetAnchorPoint( AnchorPoint::CENTER );
1121         text.SetParentOrigin( ParentOrigin::CENTER );
1122         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
1123         text.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
1124         text.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
1125
1126         backing.Add( text );
1127
1128         table.Add( backing );
1129       }
1130
1131       mPopup.Add( table );
1132
1133       mPopup.Show();
1134     }
1135     else if( button.GetName() == OKAY_BUTTON_ID || button.GetName() == CANCEL_BUTTON_ID )
1136     {
1137       if( mPopup )
1138       {
1139         mPopup.Hide();
1140       }
1141     }
1142
1143     return true;
1144   }
1145
1146   void OnPopupOutsideTouched()
1147   {
1148     if( mPopup )
1149     {
1150       mPopup.Hide();
1151     }
1152   }
1153
1154   void OnKeyEvent( const KeyEvent& event )
1155   {
1156     if( event.state == KeyEvent::Down )
1157     {
1158       if( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) )
1159       {
1160         // Exit application when click back or escape.
1161         mApplication.Quit();
1162       }
1163     }
1164   }
1165
1166 public: // From ItemFactory
1167
1168   /**
1169    * @brief Return the number of items to display in the item view
1170    *
1171    * @return Return the number of items to display
1172    */
1173   virtual unsigned int GetNumberOfItems()
1174   {
1175     switch( mDemoState )
1176     {
1177       case POPUP:
1178       {
1179         return POPUP_BUTTON_ITEMS_COUNT;
1180       }
1181
1182       case TABLEVIEW:
1183       {
1184         return TABLEVIEW_BUTTON_ITEMS_COUNT;
1185       }
1186
1187       default:
1188       {
1189         break;
1190       }
1191     }
1192
1193     return 0;
1194   }
1195
1196   /**
1197    * @brief Create a new item to populate the item view with
1198    *
1199    * @param[in] itemId The index of the item to create
1200    * @return Return the created actor for the given ID
1201    */
1202   virtual Actor NewItem(unsigned int itemId)
1203   {
1204     const ButtonItem* buttonDataArray = NULL;
1205     switch( mDemoState )
1206     {
1207       case POPUP:
1208       {
1209         buttonDataArray = POPUP_BUTTON_ITEMS;
1210         break;
1211       }
1212
1213       case TABLEVIEW:
1214       {
1215         buttonDataArray = TABLEVIEW_BUTTON_ITEMS;
1216         break;
1217       }
1218
1219       default:
1220       {
1221         break;
1222       }
1223     }
1224
1225     if( buttonDataArray )
1226     {
1227       Toolkit::PushButton popupButton = Toolkit::PushButton::New();
1228       popupButton.SetName( buttonDataArray[ itemId ].name );
1229       popupButton.SetLabel( buttonDataArray[ itemId ].text );
1230       popupButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
1231
1232       popupButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
1233
1234       return popupButton;
1235     }
1236
1237     return Actor();
1238   }
1239
1240 private:
1241
1242   enum DemoState
1243   {
1244     POPUP,
1245     TABLEVIEW
1246   };
1247
1248   Application&      mApplication;
1249   Toolkit::Control  mView;                   ///< The View instance.
1250   Toolkit::ToolBar  mToolBar;                ///< The View's Toolbar.
1251   Layer             mContentLayer;           ///< Content layer
1252
1253   Toolkit::TextLabel mTitleActor;             ///< Title text
1254
1255   Toolkit::Popup    mMenu;                   ///< The navigation menu
1256   bool              mMenuShown;              ///< If the navigation menu is currently being displayed or not
1257
1258   Toolkit::Popup    mPopup;
1259
1260   Toolkit::ItemView mItemView;               ///< ItemView to hold test images
1261
1262   DemoState mDemoState;
1263 };
1264
1265 void RunTest( Application& application )
1266 {
1267   SizeNegotiationController test( application );
1268
1269   application.MainLoop();
1270 }
1271
1272 // Entry point for Linux & SLP applications
1273 //
1274 int main( int argc, char **argv )
1275 {
1276   Application application = Application::New( &argc, &argv, DALI_DEMO_THEME_PATH );
1277
1278   RunTest( application );
1279
1280   return 0;
1281 }