| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/app_list/views/apps_grid_view.h" | 5 #include "ui/app_list/views/apps_grid_view.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 GetItemViewAt(0)->bounds().size()); | 142 GetItemViewAt(0)->bounds().size()); |
| 143 rect.Offset(col * rect.width(), row * rect.height()); | 143 rect.Offset(col * rect.width(), row * rect.height()); |
| 144 return rect; | 144 return rect; |
| 145 } | 145 } |
| 146 | 146 |
| 147 PaginationModel* GetPaginationModel() { | 147 PaginationModel* GetPaginationModel() { |
| 148 return apps_grid_view_->pagination_model(); | 148 return apps_grid_view_->pagination_model(); |
| 149 } | 149 } |
| 150 | 150 |
| 151 // Points are in |apps_grid_view_|'s coordinates. | 151 // Points are in |apps_grid_view_|'s coordinates. |
| 152 void SimulateDrag(AppsGridView::Pointer pointer, | 152 AppListItemView* SimulateDrag(AppsGridView::Pointer pointer, |
| 153 const gfx::Point& from, | 153 const gfx::Point& from, |
| 154 const gfx::Point& to) { | 154 const gfx::Point& to) { |
| 155 AppListItemView* view = GetItemViewForPoint(from); | 155 AppListItemView* view = GetItemViewForPoint(from); |
| 156 DCHECK(view); | 156 DCHECK(view); |
| 157 | 157 |
| 158 gfx::Point translated_from = gfx::PointAtOffsetFromOrigin( | 158 gfx::Point translated_from = gfx::PointAtOffsetFromOrigin( |
| 159 from - view->bounds().origin()); | 159 from - view->bounds().origin()); |
| 160 gfx::Point translated_to = gfx::PointAtOffsetFromOrigin( | 160 gfx::Point translated_to = gfx::PointAtOffsetFromOrigin( |
| 161 to - view->bounds().origin()); | 161 to - view->bounds().origin()); |
| 162 | 162 |
| 163 ui::MouseEvent pressed_event(ui::ET_MOUSE_PRESSED, | 163 ui::MouseEvent pressed_event(ui::ET_MOUSE_PRESSED, |
| 164 translated_from, from, 0, 0); | 164 translated_from, from, 0, 0); |
| 165 apps_grid_view_->InitiateDrag(view, pointer, pressed_event); | 165 apps_grid_view_->InitiateDrag(view, pointer, pressed_event); |
| 166 | 166 |
| 167 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, | 167 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, |
| 168 translated_to, to, 0, 0); | 168 translated_to, to, 0, 0); |
| 169 apps_grid_view_->UpdateDragFromItem(pointer, drag_event); | 169 apps_grid_view_->UpdateDragFromItem(pointer, drag_event); |
| 170 return view; |
| 170 } | 171 } |
| 171 | 172 |
| 172 void SimulateKeyPress(ui::KeyboardCode key_code) { | 173 void SimulateKeyPress(ui::KeyboardCode key_code) { |
| 173 ui::KeyEvent key_event(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE); | 174 ui::KeyEvent key_event(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE); |
| 174 apps_grid_view_->OnKeyPressed(key_event); | 175 apps_grid_view_->OnKeyPressed(key_event); |
| 175 } | 176 } |
| 176 | 177 |
| 177 scoped_ptr<AppListTestModel> model_; | 178 scoped_ptr<AppListTestModel> model_; |
| 178 scoped_ptr<AppsGridView> apps_grid_view_; | 179 scoped_ptr<AppsGridView> apps_grid_view_; |
| 179 scoped_ptr<AppsGridViewTestApi> test_api_; | 180 scoped_ptr<AppsGridViewTestApi> test_api_; |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 409 | 410 |
| 410 // Dragging the last item over the folder, the folder won't accept the new | 411 // Dragging the last item over the folder, the folder won't accept the new |
| 411 // item. | 412 // item. |
| 412 SimulateDrag(AppsGridView::MOUSE, from, to); | 413 SimulateDrag(AppsGridView::MOUSE, from, to); |
| 413 apps_grid_view_->EndDrag(false); | 414 apps_grid_view_->EndDrag(false); |
| 414 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); | 415 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); |
| 415 EXPECT_EQ(kMaxFolderItems, folder_item->ChildItemCount()); | 416 EXPECT_EQ(kMaxFolderItems, folder_item->ChildItemCount()); |
| 416 test_api_->LayoutToIdealBounds(); | 417 test_api_->LayoutToIdealBounds(); |
| 417 } | 418 } |
| 418 | 419 |
| 420 // Check that moving items around doesn't allow a drop to happen into a full |
| 421 // folder. |
| 422 TEST_F(AppsGridViewTest, MouseDragMaxItemsInFolderWithMovement) { |
| 423 EnsureFoldersEnabled(); |
| 424 |
| 425 // Create and add a folder with 16 items in it. |
| 426 size_t kTotalItems = kMaxFolderItems; |
| 427 model_->CreateAndPopulateFolderWithApps(kTotalItems); |
| 428 EXPECT_EQ(1u, model_->top_level_item_list()->item_count()); |
| 429 EXPECT_EQ(AppListFolderItem::kItemType, |
| 430 model_->top_level_item_list()->item_at(0)->GetItemType()); |
| 431 AppListFolderItem* folder_item = static_cast<AppListFolderItem*>( |
| 432 model_->top_level_item_list()->item_at(0)); |
| 433 EXPECT_EQ(kTotalItems, folder_item->ChildItemCount()); |
| 434 |
| 435 // Create and add another item. |
| 436 model_->PopulateAppWithId(kTotalItems); |
| 437 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); |
| 438 EXPECT_EQ(folder_item->id(), model_->top_level_item_list()->item_at(0)->id()); |
| 439 EXPECT_EQ(model_->GetItemName(kMaxFolderItems), |
| 440 model_->top_level_item_list()->item_at(1)->id()); |
| 441 |
| 442 AppListItemView* folder_view = |
| 443 GetItemViewForPoint(GetItemTileRectAt(0, 0).CenterPoint()); |
| 444 |
| 445 // Drag the new item to the left so that the grid reorders. |
| 446 gfx::Point from = GetItemTileRectAt(0, 1).CenterPoint(); |
| 447 gfx::Point to = GetItemTileRectAt(0, 0).bottom_left(); |
| 448 AppListItemView* dragged_view = SimulateDrag(AppsGridView::MOUSE, from, to); |
| 449 test_api_->LayoutToIdealBounds(); |
| 450 |
| 451 // The grid now looks like | blank | folder |. |
| 452 EXPECT_EQ(NULL, GetItemViewForPoint(GetItemTileRectAt(0, 0).CenterPoint())); |
| 453 EXPECT_EQ(folder_view, |
| 454 GetItemViewForPoint(GetItemTileRectAt(0, 1).CenterPoint())); |
| 455 |
| 456 // Move onto the folder and end the drag. |
| 457 to = GetItemTileRectAt(0, 1).CenterPoint(); |
| 458 gfx::Point translated_to = |
| 459 gfx::PointAtOffsetFromOrigin(to - dragged_view->bounds().origin()); |
| 460 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, translated_to, to, 0, 0); |
| 461 apps_grid_view_->UpdateDragFromItem(AppsGridView::MOUSE, drag_event); |
| 462 apps_grid_view_->EndDrag(false); |
| 463 |
| 464 // The item should not have moved into the folder. |
| 465 EXPECT_EQ(2u, model_->top_level_item_list()->item_count()); |
| 466 EXPECT_EQ(kMaxFolderItems, folder_item->ChildItemCount()); |
| 467 test_api_->LayoutToIdealBounds(); |
| 468 } |
| 469 |
| 419 TEST_F(AppsGridViewTest, MouseDragItemReorder) { | 470 TEST_F(AppsGridViewTest, MouseDragItemReorder) { |
| 420 // This test assumes Folders are enabled. | 471 // This test assumes Folders are enabled. |
| 421 EnsureFoldersEnabled(); | 472 EnsureFoldersEnabled(); |
| 422 | 473 |
| 423 model_->PopulateApps(4); | 474 model_->PopulateApps(4); |
| 424 EXPECT_EQ(4u, model_->top_level_item_list()->item_count()); | 475 EXPECT_EQ(4u, model_->top_level_item_list()->item_count()); |
| 425 EXPECT_EQ(std::string("Item 0,Item 1,Item 2,Item 3"), | 476 EXPECT_EQ(std::string("Item 0,Item 1,Item 2,Item 3"), |
| 426 model_->GetModelContent()); | 477 model_->GetModelContent()); |
| 427 | 478 |
| 428 // Dragging an item towards its neighbours should not reorder until the drag | 479 // Dragging an item towards its neighbours should not reorder until the drag |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 AppListItemView* item_view = GetItemViewAt(0); | 791 AppListItemView* item_view = GetItemViewAt(0); |
| 741 ASSERT_TRUE(item_view); | 792 ASSERT_TRUE(item_view); |
| 742 const views::Label* title_label = item_view->title(); | 793 const views::Label* title_label = item_view->title(); |
| 743 EXPECT_FALSE(title_label->GetTooltipText( | 794 EXPECT_FALSE(title_label->GetTooltipText( |
| 744 title_label->bounds().CenterPoint(), &actual_tooltip)); | 795 title_label->bounds().CenterPoint(), &actual_tooltip)); |
| 745 EXPECT_EQ(title, base::UTF16ToUTF8(title_label->text())); | 796 EXPECT_EQ(title, base::UTF16ToUTF8(title_label->text())); |
| 746 } | 797 } |
| 747 | 798 |
| 748 } // namespace test | 799 } // namespace test |
| 749 } // namespace app_list | 800 } // namespace app_list |
| OLD | NEW |