Move more public-api headers to devel-api. PART 3
[platform/core/uifw/dali-demo.git] / examples / size-negotiation / size-negotiation-example.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include "shared/view.h"
19 #include <dali/dali.h>
20 #include <dali-toolkit/dali-toolkit.h>
21 #include <dali-toolkit/devel-api/controls/popup/popup.h>
22 #include <dali-toolkit/devel-api/controls/table-view/table-view.h>
23
24 using namespace Dali;
25
26 using Dali::Toolkit::TextLabel;
27
28 // Define this so that it is interchangeable
29 // "DP" stands for Device independent Pixels
30 #define DP(x) DemoHelper::ScalePointSize(x)
31
32 struct ButtonItem
33 {
34   const char* name;
35   const char* text;
36 };
37
38
39 namespace
40 {
41
42 const char* const BACKGROUND_IMAGE = DALI_IMAGE_DIR "background-gradient.jpg";
43 const char* const TOOLBAR_IMAGE = DALI_IMAGE_DIR "top-bar.png";
44
45 const char* const TOOLBAR_TITLE = "Negotiate Size";
46 const int TOOLBAR_HEIGHT = 62;
47
48 const char* MENU_ICON_IMAGE = DALI_IMAGE_DIR "icon-cluster-none.png";
49
50 const char* const PUSHBUTTON_BUTTON_IMAGE = DALI_IMAGE_DIR "button-up.9.png";
51 const char* const PUSHBUTTON_PRESS_IMAGE = DALI_IMAGE_DIR "button-down.9.png";
52
53 const char* const POPUPS_MENU_ID = "POPUPS_MENU";
54 const char* const TABLEVIEW_MENU_ID = "TABLEVIEW_MENU";
55
56 const char* const POPUP_BUTTON_EMPTY_ID = "POPUP_BUTTON_EMPTY";
57 const char* const POPUP_BUTTON_TITLE_ID = "POPUP_BUTTON_TITLE";
58 const char* const POPUP_BUTTON_BUTTONS_1_ID = "POPUP_BUTTON_BUTTONS_1";
59 const char* const POPUP_BUTTON_BUTTONS_2_ID = "POPUP_BUTTON_BUTTONS_2";
60 const char* const POPUP_BUTTON_TITLE_BUTTONS_ID = "POPUP_BUTTON_TITLE_BUTTONS";
61 const char* const POPUP_BUTTON_CONTENT_TEXT_ID = "POPUP_BUTTON_CONTENT_TEXT";
62 const char* const POPUP_BUTTON_CONTENT_IMAGE_ID = "POPUP_BUTTON_CONTENT_IMAGE";
63 const char* const POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID = "POPUP_BUTTON_CONTENT_IMAGE_SCALE";
64 const char* const POPUP_BUTTON_CONTENT_IMAGE_FIT_ID = "POPUP_BUTTON_CONTENT_IMAGE_FIT";
65 const char* const POPUP_BUTTON_CONTENT_IMAGE_FILL_ID = "POPUP_BUTTON_CONTENT_IMAGE_FILL";
66 const char* const POPUP_BUTTON_TITLE_CONTENT_TEXT_ID = "POPUP_BUTTON_TITLE_CONTENT_TEXT";
67 const char* const POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS_ID = "POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS";
68 const char* const POPUP_BUTTON_COMPLEX_ID = "POPUP_BUTTON_COMPLEX";
69
70 const char* const TABLEVIEW_BUTTON_EMPTY_ID = "TABLEVIEW_BUTTON_EMPTY";
71 const char* const TABLEVIEW_BUTTON_1CELL_ID = "TABLEVIEW_BUTTON_1CELL";
72 const char* const TABLEVIEW_BUTTON_3CELL_ID = "TABLEVIEW_BUTTON_3CELL";
73 const char* const TABLEVIEW_BUTTON_3X3CELL_ID = "TABLEVIEW_BUTTON_3X3CELL";
74 const char* const TABLEVIEW_BUTTON_FIXED1_ID = "TABLEVIEW_BUTTON_FIXED1";
75 const char* const TABLEVIEW_BUTTON_FIXED2_ID = "TABLEVIEW_BUTTON_FIXED2";
76 const char* const TABLEVIEW_BUTTON_FIT1_ID = "TABLEVIEW_BUTTON_FIT1";
77 const char* const TABLEVIEW_BUTTON_FIT2_ID = "TABLEVIEW_BUTTON_FIT2";
78 const char* const TABLEVIEW_BUTTON_NATURAL1_ID = "TABLEVIEW_BUTTON_NATURAL1";
79 const char* const TABLEVIEW_BUTTON_NATURAL2_ID = "TABLEVIEW_BUTTON_NATURAL2";
80 const char* const TABLEVIEW_BUTTON_NATURAL3_ID = "TABLEVIEW_BUTTON_NATURAL3";
81
82 const char* const OKAY_BUTTON_ID = "OKAY_BUTTON";
83 const char* const CANCEL_BUTTON_ID = "CANCEL_BUTTON";
84
85 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.";
86 const char* const IMAGE1 = DALI_IMAGE_DIR "gallery-medium-5.jpg";
87 const char* const IMAGE2 = DALI_IMAGE_DIR "background-magnifier.jpg";
88 const char* const CHECKBOX_UNCHECKED_IMAGE = DALI_IMAGE_DIR "checkbox-unselected.png";
89 const char* const CHECKBOX_CHECKED_IMAGE = DALI_IMAGE_DIR "checkbox-selected.png";
90
91 const ButtonItem MENU_ITEMS[] = {
92     { POPUPS_MENU_ID,        "Popups" },
93     { TABLEVIEW_MENU_ID,     "TableView" }
94 };
95
96 const unsigned int MENU_ITEMS_COUNT = sizeof( MENU_ITEMS ) / sizeof( MENU_ITEMS[0] );
97
98 const ButtonItem POPUP_BUTTON_ITEMS[] = {
99     { POPUP_BUTTON_COMPLEX_ID,                    "Complex" },
100     { POPUP_BUTTON_EMPTY_ID,                      "Empty" },
101     { POPUP_BUTTON_TITLE_ID,                      "Title" },
102     { POPUP_BUTTON_BUTTONS_1_ID,                  "1 Button" },
103     { POPUP_BUTTON_BUTTONS_2_ID,                  "2 Buttons" },
104     { POPUP_BUTTON_TITLE_BUTTONS_ID,              "Title & Buttons" },
105     { POPUP_BUTTON_CONTENT_TEXT_ID,               "Text" },
106     { POPUP_BUTTON_CONTENT_IMAGE_ID,              "Image" },
107     { POPUP_BUTTON_CONTENT_IMAGE_SCALE_ID,        "Image Scale" },
108     { POPUP_BUTTON_CONTENT_IMAGE_FIT_ID,          "Image Fit" },
109     { POPUP_BUTTON_CONTENT_IMAGE_FILL_ID,         "Image Fill" },
110     { POPUP_BUTTON_TITLE_CONTENT_TEXT_ID,         "Title Text" },
111     { POPUP_BUTTON_TITLE_CONTENT_TEXT_BUTTONS_ID, "Title, text, buttons" }
112
113 };
114
115 const int POPUP_BUTTON_ITEMS_COUNT = sizeof( POPUP_BUTTON_ITEMS ) / sizeof( POPUP_BUTTON_ITEMS[0] );
116
117 const ButtonItem TABLEVIEW_BUTTON_ITEMS[] = {
118     { TABLEVIEW_BUTTON_EMPTY_ID,                    "Empty" },
119     { TABLEVIEW_BUTTON_1CELL_ID,                    "1 Cell" },
120     { TABLEVIEW_BUTTON_3CELL_ID,                    "3 Cell" },
121     { TABLEVIEW_BUTTON_3X3CELL_ID,                  "3x3 Cells" },
122     { TABLEVIEW_BUTTON_FIXED1_ID,                   "Fixed 1" },
123     { TABLEVIEW_BUTTON_FIXED2_ID,                   "Fixed 2" },
124     { TABLEVIEW_BUTTON_FIT1_ID,                     "Fit Top Bottom" },
125     { TABLEVIEW_BUTTON_FIT2_ID,                     "Fit Middle" },
126     { TABLEVIEW_BUTTON_NATURAL1_ID,                 "Natural 1" },
127     { TABLEVIEW_BUTTON_NATURAL2_ID,                 "Natural 2" },
128     { TABLEVIEW_BUTTON_NATURAL3_ID,                 "Natural 3" },
129 };
130
131 const unsigned int TABLEVIEW_BUTTON_ITEMS_COUNT = sizeof( TABLEVIEW_BUTTON_ITEMS ) / sizeof( TABLEVIEW_BUTTON_ITEMS[0] );
132
133 }  // namespace
134
135
136
137 /**
138  * This example shows the usage of size negotiation.
139  */
140 class SizeNegotiationController: public ConnectionTracker, public Toolkit::ItemFactory
141 {
142 public:
143
144   SizeNegotiationController( Application& application )
145     : mApplication( application ),
146       mMenuShown( false ),
147       mDemoState( POPUP )
148   {
149     // Connect to the Application's Init signal
150     mApplication.InitSignal().Connect( this, &SizeNegotiationController::Create );
151   }
152
153   ~SizeNegotiationController()
154   {
155     // Nothing to do here
156   }
157
158   void Create( Application& application )
159   {
160     // The Init signal is received once (only) during the Application lifetime
161
162     DemoHelper::RequestThemeChange();
163
164     Stage stage = Stage::GetCurrent();
165
166     // Respond to key events
167     stage.KeyEventSignal().Connect(this, &SizeNegotiationController::OnKeyEvent);
168
169     // Creates a default view with a default tool bar.
170     // The view is added to the stage.
171     mContentLayer = DemoHelper::CreateView( application,
172                                             mView,
173                                             mToolBar,
174                                             BACKGROUND_IMAGE,
175                                             TOOLBAR_IMAGE,
176                                             std::string("") );
177
178     mTitleActor = DemoHelper::CreateToolBarLabel( "CUSTOM_TOOLBAR_TITLE" );
179
180     SetTitle();
181
182     // Create menu button
183     Toolkit::PushButton viewButton = Toolkit::PushButton::New();
184     viewButton.SetBackgroundImage( ResourceImage::New( MENU_ICON_IMAGE ) );
185     viewButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnMenu );
186     mToolBar.AddControl( viewButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalLeft, DemoHelper::DEFAULT_MODE_SWITCH_PADDING  );
187
188     // Add title to the tool bar.
189     const float padding( DemoHelper::DEFAULT_VIEW_STYLE.mToolBarPadding );
190     mToolBar.AddControl( mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Toolkit::Alignment::HorizontalCenter, Toolkit::Alignment::Padding( padding, padding, padding, padding ) );
191
192     mItemView = Toolkit::ItemView::New( *this );
193     mItemView.SetParentOrigin( ParentOrigin::CENTER );
194     mItemView.SetAnchorPoint( AnchorPoint::CENTER );
195     mItemView.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
196
197     // Use a grid layout for tests
198     Vector2 stageSize = stage.GetSize();
199     Toolkit::ItemLayoutPtr gridLayout = Toolkit::DefaultItemLayout::New( Toolkit::DefaultItemLayout::LIST );
200     Vector3 itemSize;
201     gridLayout->GetItemSize( 0, Vector3( stageSize ), itemSize );
202     itemSize.height = stageSize.y / 10;
203     gridLayout->SetItemSize( itemSize );
204     mItemView.AddLayout( *gridLayout );
205
206     mItemView.ActivateLayout( 0, Vector3(stageSize.x, stageSize.y, stageSize.x), 0.0f );
207
208     mContentLayer.Add( mItemView );
209   }
210
211   void SetTitle()
212   {
213     std::string subTitle = "";
214
215     switch( mDemoState )
216     {
217       case POPUP:
218       {
219         subTitle = "Popups";
220         break;
221       }
222
223       case TABLEVIEW:
224       {
225         subTitle = "TableView";
226         break;
227       }
228
229       default:
230       {
231         break;
232       }
233     }
234
235     mTitleActor.SetProperty( Toolkit::TextLabel::Property::TEXT, std::string( std::string( TOOLBAR_TITLE ) + ": " + subTitle ) );
236   }
237
238   bool OnMenu( Toolkit::Button button )
239   {
240     ShowMenu();
241     return true;
242   }
243
244   void ShowMenu()
245   {
246     Stage stage = Stage::GetCurrent();
247     const float popupWidth = stage.GetSize().x * 0.5f;
248
249     mMenu = Toolkit::Popup::New();
250     mMenu.SetParentOrigin( ParentOrigin::TOP_LEFT );
251     mMenu.SetAnchorPoint( AnchorPoint::TOP_LEFT );
252     mMenu.HideTail();
253     mMenu.OutsideTouchedSignal().Connect( this, &SizeNegotiationController::HideMenu );
254     mMenu.SetSize( popupWidth, 0.0f );
255     mMenu.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
256
257     Toolkit::TableView tableView = Toolkit::TableView::New( 0, 0 );
258     tableView.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
259     tableView.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
260     mMenu.Add( tableView );
261
262     for( unsigned int i = 0; i < MENU_ITEMS_COUNT; ++i )
263     {
264       Toolkit::PushButton menuButton = Toolkit::PushButton::New();
265       menuButton.SetName( MENU_ITEMS[ i ].name );
266       menuButton.SetLabel( MENU_ITEMS[ i ].text );
267       menuButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnMenuSelect );
268
269       tableView.Add( menuButton );
270       tableView.SetFitHeight( i );
271     }
272
273     // Show the menu
274     mMenu.Show();
275     mMenuShown = true;
276   }
277
278   void HideMenu()
279   {
280     if( mMenu )
281     {
282       mMenu.Hide();
283       mMenu.Reset();
284     }
285
286     mMenuShown = false;
287   }
288
289   bool OnMenuSelect( Toolkit::Button button )
290   {
291     bool refresh = false;
292
293     if( button.GetName() == POPUPS_MENU_ID )
294     {
295       if( mDemoState != POPUP )
296       {
297         refresh = true;
298         mDemoState = POPUP;
299       }
300     }
301     else if( button.GetName() == TABLEVIEW_MENU_ID )
302     {
303       if( mDemoState != TABLEVIEW )
304       {
305         refresh = true;
306         mDemoState = TABLEVIEW;
307       }
308     }
309
310     if( refresh )
311     {
312       SetTitle();
313
314       mItemView.Refresh();
315     }
316
317     HideMenu();
318     return true;
319   }
320
321   Toolkit::Popup CreatePopup()
322   {
323     Stage stage = Stage::GetCurrent();
324     const float POPUP_WIDTH_DP = stage.GetSize().width * 0.75f;
325
326     Toolkit::Popup popup = Toolkit::Popup::New();
327     popup.SetName( "POPUP" );
328     popup.SetParentOrigin( ParentOrigin::CENTER );
329     popup.SetAnchorPoint( AnchorPoint::CENTER );
330     popup.SetSize( POPUP_WIDTH_DP, 0.0f );
331     popup.HideTail();
332
333     popup.OutsideTouchedSignal().Connect( this, &SizeNegotiationController::OnPopupOutsideTouched );
334
335     return popup;
336   }
337
338   bool OnButtonClicked( Toolkit::Button button )
339   {
340     if( button.GetName() == POPUP_BUTTON_EMPTY_ID )
341     {
342       mPopup = CreatePopup();
343
344       mPopup.Show();
345     }
346     else if( button.GetName() == POPUP_BUTTON_TITLE_ID )
347     {
348       mPopup = CreatePopup();
349       mPopup.SetTitle( "Popup!" );
350
351       mPopup.Show();
352     }
353     else if( button.GetName() == POPUP_BUTTON_BUTTONS_1_ID )
354     {
355       mPopup = CreatePopup();
356
357       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
358       okayButton.SetName( OKAY_BUTTON_ID );
359       okayButton.SetLabel( "OK!" );
360       okayButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
361       okayButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
362
363       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
364
365       mPopup.AddButton( okayButton );
366
367       mPopup.Show();
368     }
369     else if( button.GetName() == POPUP_BUTTON_BUTTONS_2_ID )
370     {
371       mPopup = CreatePopup();
372
373       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
374       cancelButton.SetName( CANCEL_BUTTON_ID );
375       cancelButton.SetLabel( "Cancel" );
376       cancelButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
377       cancelButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
378
379       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
380
381       mPopup.AddButton( cancelButton );
382
383       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
384       okayButton.SetName( OKAY_BUTTON_ID );
385       okayButton.SetLabel( "OK!" );
386       okayButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
387       okayButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
388
389       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
390
391       mPopup.AddButton( okayButton );
392
393       mPopup.Show();
394     }
395     else if( button.GetName() == POPUP_BUTTON_TITLE_BUTTONS_ID )
396     {
397       mPopup = CreatePopup();
398       mPopup.SetTitle( "Popup!" );
399
400       Toolkit::PushButton cancelButton = Toolkit::PushButton::New();
401       cancelButton.SetName( CANCEL_BUTTON_ID );
402       cancelButton.SetLabel( "Cancel" );
403       cancelButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
404       cancelButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
405
406       cancelButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
407
408       mPopup.AddButton( cancelButton );
409
410       Toolkit::PushButton okayButton = Toolkit::PushButton::New();
411       okayButton.SetName( OKAY_BUTTON_ID );
412       okayButton.SetLabel( "OK!" );
413       okayButton.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
414       okayButton.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
415
416       okayButton.ClickedSignal().Connect( this, &SizeNegotiationController::OnButtonClicked );
417
418       mPopup.AddButton( okayButton );
419
420       mPopup.Show();
421     }
422     else if( button.GetName() == POPUP_BUTTON_CONTENT_TEXT_ID )
423     {
424       mPopup = CreatePopup();
425
426       TextLabel text = TextLabel::New( CONTENT_TEXT );
427       text.SetName( "POPUP_CONTENT_TEXT" );
428       text.SetProperty( TextLabel::Property::MULTI_LINE, true );
429       text.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
430       text.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
431       text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
432       text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
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( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
445       image.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
457       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
458
459       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
460       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
471       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
472
473       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
474       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
475       image.SetSizeScalePolicy( SizeScalePolicy::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
486       mPopup.SetSizeModeFactor( Vector3( 0.75f, 0.5f, 1.0f ) );
487
488       ImageActor image = ImageActor::New( ResourceImage::New( IMAGE2 ) );
489       image.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
490       image.SetSizeScalePolicy( SizeScalePolicy::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.SetProperty( TextLabel::Property::MULTI_LINE, true );
504       text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
505       text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
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.SetProperty( TextLabel::Property::MULTI_LINE, true );
520       text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
521       text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
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( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
557       content.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::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.SetProperty( Toolkit::TextLabel::Property::MULTI_LINE, true );
566         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
567         text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
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( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
577         image.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
586         root.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
658
659       Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
660       backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
676
677       {
678         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
679         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
706
707       // Column 0
708       {
709         Actor backing = Toolkit::CreateSolidColorActor( Vector4( 1.0f, 0.0f, 0.0f, 1.0f ) );
710         backing.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
776         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
777         text.SetParentOrigin( ParentOrigin::CENTER );
778         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
787         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
788         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
798         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
799         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
826         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
827         text.SetAnchorPoint( AnchorPoint::CENTER );
828         text.SetParentOrigin( ParentOrigin::CENTER );
829         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
839         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
840         text.SetAnchorPoint( AnchorPoint::CENTER );
841         text.SetParentOrigin( ParentOrigin::CENTER );
842         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
852         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
853         text.SetAnchorPoint( AnchorPoint::CENTER );
854         text.SetParentOrigin( ParentOrigin::CENTER );
855         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
898
899         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
900         text.SetAnchorPoint( AnchorPoint::CENTER );
901         text.SetParentOrigin( ParentOrigin::CENTER );
902         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
944
945         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
946         text.SetAnchorPoint( AnchorPoint::CENTER );
947         text.SetParentOrigin( ParentOrigin::CENTER );
948         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
959         backing.SetSize( 0.0f, 200.0f );
960
961         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fit" );
962         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
975
976         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fill" );
977         text.SetAnchorPoint( AnchorPoint::CENTER );
978         text.SetParentOrigin( ParentOrigin::CENTER );
979         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
996       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
997       mPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
998
999       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
1000       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1001       table.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
1063       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
1064       mPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
1065
1066       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
1067       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1068       table.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1075         backing.SetResizePolicy( ResizePolicy::FIXED, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
1114       mPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
1115       mPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
1116
1117       Toolkit::TableView table = Toolkit::TableView::New( 3, 1 );
1118       table.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
1119       table.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
1126
1127         Toolkit::TextLabel text = Toolkit::TextLabel::New( "Fixed" );
1128         text.SetAnchorPoint( AnchorPoint::CENTER );
1129         text.SetParentOrigin( ParentOrigin::CENTER );
1130         text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::FILL_TO_PARENT, Dimension::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( ResizePolicy::USE_NATURAL_SIZE, Dimension::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::Control  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 }