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