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