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