+ // Create a third child actor with the cell alignment properties
+ Actor child3 = Actor::New();
+ child3.SetProperty(Actor::Property::SIZE, Vector2(5.f, 5.f));
+ child3.SetProperty(TableView::ChildProperty::CELL_HORIZONTAL_ALIGNMENT, "center");
+ child3.SetProperty(TableView::ChildProperty::CELL_VERTICAL_ALIGNMENT, "bottom");
+ tableView.Add(child3);
+
+ // store the actor in the first available cell
+ DALI_TEST_CHECK(tableView.GetChildAt(TableView::CellPosition(0, 0)) == child3)
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS(child3.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT), AnchorPoint::TOP_LEFT, TEST_LOCATION);
+ DALI_TEST_EQUALS(child3.GetCurrentProperty<Vector3>(Actor::Property::PARENT_ORIGIN), ParentOrigin::TOP_LEFT, TEST_LOCATION);
+ DALI_TEST_EQUALS(child3.GetCurrentProperty<Vector3>(Actor::Property::POSITION), Vector3(2.5f, 5.0f, 0.0f), TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliTableViewGetChildAtN(void)
+{
+ ToolkitTestApplication application;
+
+ TableView tableView = TableView::New(10, 10);
+
+ Actor actor = tableView.GetChildAt(TableView::CellPosition(200, 200));
+ DALI_TEST_CHECK(!actor);
+
+ END_TEST;
+}
+
+int UtcDaliTableViewAddChildN(void)
+{
+ ToolkitTestApplication application;
+
+ TableView tableView = TableView::New(10, 10);
+ DALI_TEST_CHECK(tableView.AddChild(Actor::New(), TableView::CellPosition(0, 0)));
+ DALI_TEST_CHECK(!tableView.AddChild(Actor::New(), TableView::CellPosition(0, 0)));
+
+ END_TEST;
+}
+
+int UtcDaliTableViewInsertRowAtZero(void)
+{
+ ToolkitTestApplication application;
+
+ TableView tableView = TableView::New(10, 10);
+ DALI_TEST_CHECK(tableView.AddChild(Actor::New(), TableView::CellPosition(0, 0, 10, 10)));
+ tableView.InsertRow(0);
+
+ DALI_TEST_CHECK(tableView.GetRows() == 11);
+
+ END_TEST;
+}
+
+int UtcDaliTableViewDeleteRowAtZero(void)
+{
+ ToolkitTestApplication application;
+
+ TableView tableView = TableView::New(10, 10);
+ DALI_TEST_CHECK(tableView.AddChild(Actor::New(), TableView::CellPosition(0, 0, 10, 10)));
+ tableView.DeleteRow(0);
+
+ DALI_TEST_CHECK(tableView.GetRows() == 9);
+
+ END_TEST;
+}
+
+int UtcDaliTableViewInsertColumnAtZero(void)
+{
+ ToolkitTestApplication application;
+
+ TableView tableView = TableView::New(10, 10);
+ DALI_TEST_CHECK(tableView.AddChild(Actor::New(), TableView::CellPosition(0, 0, 10, 10)));
+ tableView.InsertColumn(0);
+
+ DALI_TEST_CHECK(tableView.GetColumns() == 11);
+
+ END_TEST;
+}
+
+int UtcDaliTableViewDeleteColumnAtZero(void)
+{
+ ToolkitTestApplication application;
+
+ TableView tableView = TableView::New(10, 10);
+ DALI_TEST_CHECK(tableView.AddChild(Actor::New(), TableView::CellPosition(0, 0, 10, 10)));
+ tableView.DeleteColumn(0);
+
+ DALI_TEST_CHECK(tableView.GetColumns() == 9);
+
+ END_TEST;
+}
+
+int UtcDaliTableViewTypeRegistry(void)
+{
+ ToolkitTestApplication application;
+
+ TypeRegistry typeRegistry = TypeRegistry::Get();
+ DALI_TEST_CHECK(typeRegistry);
+
+ TypeInfo typeInfo = typeRegistry.GetTypeInfo("TableView");
+ DALI_TEST_CHECK(typeInfo);
+
+ BaseHandle handle = typeInfo.CreateInstance();
+ DALI_TEST_CHECK(handle);
+
+ TableView view = TableView::DownCast(handle);
+ DALI_TEST_CHECK(view);
+
+ END_TEST;
+}
+
+int UtcDaliTableViewKeyboardFocus(void)
+{
+ ToolkitTestApplication application;
+
+ TableView tableView = TableView::New(4, 4);
+ tableView.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
+ tableView.SetProperty(Dali::Actor::Property::NAME, "TableView");
+
+ for(int row = 0; row < 4; ++row)
+ {
+ for(int col = 0; col < 4; ++col)
+ {
+ Control control = Control::New();
+ std::ostringstream str;
+ str << row << "-" << col;
+ control.SetProperty(Dali::Actor::Property::NAME, str.str());
+ control.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
+ tableView.AddChild(control, TableView::CellPosition(row, col));
+ }
+ }
+
+ application.GetScene().Add(tableView);
+
+ application.SendNotification();
+ application.Render();
+
+ Actor firstFocusActor = Toolkit::Internal::GetImplementation(tableView).GetNextKeyboardFocusableActor(Actor(), Control::KeyboardFocus::RIGHT, true);
+ DALI_TEST_CHECK(firstFocusActor);
+ DALI_TEST_CHECK(firstFocusActor.GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-0");
+
+ KeyboardFocusManager manager = KeyboardFocusManager::Get();
+ manager.SetFocusGroupLoop(true);
+ manager.SetCurrentFocusActor(firstFocusActor);
+
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-0");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-1");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-2");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-3");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-0");
+
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-3");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-2");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-1");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-0");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "3-3");
+
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-0");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-1");
+
+ manager.MoveFocus(Control::KeyboardFocus::DOWN);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1");
+ manager.MoveFocus(Control::KeyboardFocus::DOWN);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "2-1");
+ manager.MoveFocus(Control::KeyboardFocus::DOWN);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "3-1");
+ manager.MoveFocus(Control::KeyboardFocus::DOWN);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-1");
+
+ manager.MoveFocus(Control::KeyboardFocus::UP);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "3-1");
+ manager.MoveFocus(Control::KeyboardFocus::UP);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "2-1");
+ manager.MoveFocus(Control::KeyboardFocus::UP);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1");
+ manager.MoveFocus(Control::KeyboardFocus::UP);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-1");
+
+ END_TEST;
+}
+
+int UtcDaliTableViewKeyboardFocusInNestedTableView(void)
+{
+ ToolkitTestApplication application;
+
+ TableView tableView = TableView::New(3, 3);
+ tableView.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
+ tableView.SetProperty(Dali::Actor::Property::NAME, "TableView");
+
+ for(int row = 0; row < 3; ++row)
+ {
+ for(int col = 0; col < 3; ++col)
+ {
+ std::ostringstream str;
+ str << row << "-" << col;
+
+ if(row == 1 && col == 1)
+ {
+ // Add a nested 2x2 table view in the middle cell of the parent table view
+ TableView childTableView = TableView::New(2, 2);
+ childTableView.SetProperty(Dali::Actor::Property::NAME, str.str());
+
+ for(int childRow = 0; childRow < 2; childRow++)
+ {
+ for(int childCol = 0; childCol < 2; childCol++)
+ {
+ Control control = Control::New();
+ std::ostringstream nameStr;
+ nameStr << row << "-" << col << "-" << childRow << "-" << childCol;
+ control.SetProperty(Dali::Actor::Property::NAME, nameStr.str());
+ control.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
+ childTableView.AddChild(control, TableView::CellPosition(childRow, childCol));
+ }
+ }
+ tableView.AddChild(childTableView, TableView::CellPosition(row, col));
+ }
+ else
+ {
+ Control control = Control::New();
+ control.SetProperty(Dali::Actor::Property::NAME, str.str());
+ control.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
+ tableView.AddChild(control, TableView::CellPosition(row, col));
+ }
+ }
+ }
+
+ application.GetScene().Add(tableView);
+
+ application.SendNotification();
+ application.Render();
+
+ Actor firstFocusActor = Toolkit::Internal::GetImplementation(tableView).GetNextKeyboardFocusableActor(Actor(), Control::KeyboardFocus::RIGHT, true);
+ DALI_TEST_CHECK(firstFocusActor);
+ DALI_TEST_CHECK(firstFocusActor.GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-0");
+
+ KeyboardFocusManager manager = KeyboardFocusManager::Get();
+ manager.SetFocusGroupLoop(false);
+ manager.SetCurrentFocusActor(firstFocusActor);
+
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-0");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-1");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-2");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-0");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-0-0");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-0-1");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-1-0");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-1-1");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-2");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "2-0");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "2-1");
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "2-2");
+
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "2-1");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "2-0");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-2");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-1-1");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-1-0");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-0-1");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-0-0");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-0");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-2");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-1");
+ manager.MoveFocus(Control::KeyboardFocus::LEFT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-0");
+
+ manager.MoveFocus(Control::KeyboardFocus::RIGHT);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-1");
+ manager.MoveFocus(Control::KeyboardFocus::DOWN);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-0-0");
+ manager.MoveFocus(Control::KeyboardFocus::DOWN);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-1-0");
+ manager.MoveFocus(Control::KeyboardFocus::DOWN);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "2-1");
+
+ manager.MoveFocus(Control::KeyboardFocus::UP);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-1-1");
+ manager.MoveFocus(Control::KeyboardFocus::UP);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "1-1-0-1");
+ manager.MoveFocus(Control::KeyboardFocus::UP);
+ DALI_TEST_CHECK(manager.GetCurrentFocusActor().GetProperty<std::string>(Dali::Actor::Property::NAME) == "0-1");
+