Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Side by Side Diff: ui/app_list/views/apps_grid_view.h

Issue 136303008: Implement ui for re-parenting an item from an app list folder to another position or folder in the … (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/app_list/views/apps_container_view.cc ('k') | ui/app_list/views/apps_grid_view.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef UI_APP_LIST_VIEWS_APPS_GRID_VIEW_H_ 5 #ifndef UI_APP_LIST_VIEWS_APPS_GRID_VIEW_H_
6 #define UI_APP_LIST_VIEWS_APPS_GRID_VIEW_H_ 6 #define UI_APP_LIST_VIEWS_APPS_GRID_VIEW_H_
7 7
8 #include <set> 8 #include <set>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/timer/timer.h" 12 #include "base/timer/timer.h"
13 #include "ui/app_list/app_list_export.h" 13 #include "ui/app_list/app_list_export.h"
14 #include "ui/app_list/app_list_model.h" 14 #include "ui/app_list/app_list_model.h"
15 #include "ui/app_list/app_list_model_observer.h" 15 #include "ui/app_list/app_list_model_observer.h"
16 #include "ui/app_list/pagination_model_observer.h" 16 #include "ui/app_list/pagination_model_observer.h"
17 #include "ui/base/models/list_model_observer.h" 17 #include "ui/base/models/list_model_observer.h"
18 #include "ui/compositor/layer_animation_observer.h" 18 #include "ui/compositor/layer_animation_observer.h"
19 #include "ui/gfx/image/image_skia_operations.h"
19 #include "ui/views/animation/bounds_animator.h" 20 #include "ui/views/animation/bounds_animator.h"
20 #include "ui/views/controls/button/button.h" 21 #include "ui/views/controls/button/button.h"
22 #include "ui/views/controls/image_view.h"
21 #include "ui/views/view.h" 23 #include "ui/views/view.h"
22 #include "ui/views/view_model.h" 24 #include "ui/views/view_model.h"
23 25
24 #if defined(OS_WIN) 26 #if defined(OS_WIN)
25 #include "ui/base/dragdrop/drag_source_win.h" 27 #include "ui/base/dragdrop/drag_source_win.h"
26 #endif 28 #endif
27 29
28 namespace content { 30 namespace content {
29 class WebContents; 31 class WebContents;
30 } 32 }
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 144
143 // Returns the item view of the item at |index|. 145 // Returns the item view of the item at |index|.
144 AppListItemView* GetItemViewAt(int index) const; 146 AppListItemView* GetItemViewAt(int index) const;
145 147
146 // Show or hide the top item views. 148 // Show or hide the top item views.
147 void SetTopItemViewsVisible(bool visible); 149 void SetTopItemViewsVisible(bool visible);
148 150
149 // Schedules an animation to show or hide the view. 151 // Schedules an animation to show or hide the view.
150 void ScheduleShowHideAnimation(bool show); 152 void ScheduleShowHideAnimation(bool show);
151 153
154 // Called to initiate drag for reparenting a folder item in root level grid
155 // view.
156 // Both |drag_view_rect| and |drag_pint| is in the coordinates of root level
157 // grid view.
158 void InitiateDragFromReparentItemInRootLevelGridView(
159 AppListItemView* original_drag_view,
160 const gfx::Rect& drag_view_rect,
161 const gfx::Point& drag_point);
162
163 // Updates drag in the root level grid view when receiving the drag event
164 // dispatched from the hidden grid view for reparenting a folder item.
165 void UpdateDragFromReparentItem(Pointer pointer,
166 const ui::LocatedEvent& event);
167
168 // Dispatches the drag event from hidden grid view to the top level grid view.
169 void DispatchDragEventForReparent(Pointer pointer,
170 const ui::LocatedEvent& event);
171
172 // Handles EndDrag event dispatched from the hidden folder grid view in the
173 // root level grid view to end reparenting a folder item.
174 // |events_forwarded_to_drag_drop_host|: True if the dragged item is dropped
175 // to the drag_drop_host, eg. dropped on shelf.
176 void EndDragFromReparentItemInRootLevel(
177 bool events_forwarded_to_drag_drop_host);
178
179 // Handles EndDrag event in the hidden folder grid view to end reparenting
180 // a folder item.
181 void EndDragForReparentInHiddenFolderGridView();
182
183 // Called when the folder item associated with the grid view is removed.
184 // The grid view must be inside a folder view.
185 void OnFolderItemRemoved();
186
152 // Return the view model for test purposes. 187 // Return the view model for test purposes.
153 const views::ViewModel* view_model_for_test() const { return &view_model_; } 188 const views::ViewModel* view_model_for_test() const { return &view_model_; }
154 189
155 // For test: Return if the drag and drop handler was set. 190 // For test: Return if the drag and drop handler was set.
156 bool has_drag_and_drop_host_for_test() { return NULL != drag_and_drop_host_; } 191 bool has_drag_and_drop_host_for_test() { return NULL != drag_and_drop_host_; }
157 192
158 // For test: Return if the drag and drop operation gets dispatched. 193 // For test: Return if the drag and drop operation gets dispatched.
159 bool forward_events_to_drag_and_drop_host_for_test() { 194 bool forward_events_to_drag_and_drop_host_for_test() {
160 return forward_events_to_drag_and_drop_host_; 195 return forward_events_to_drag_and_drop_host_;
161 } 196 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 void OnPageFlipTimer(); 304 void OnPageFlipTimer();
270 305
271 // Updates |model_| to move item represented by |item_view| to |target| slot. 306 // Updates |model_| to move item represented by |item_view| to |target| slot.
272 void MoveItemInModel(views::View* item_view, const Index& target); 307 void MoveItemInModel(views::View* item_view, const Index& target);
273 308
274 // Updates |model_| to move item represented by |item_view| into a folder 309 // Updates |model_| to move item represented by |item_view| into a folder
275 // containing item located at |target| slot, also update |view_model_| for 310 // containing item located at |target| slot, also update |view_model_| for
276 // the related view changes. 311 // the related view changes.
277 void MoveItemToFolder(views::View* item_view, const Index& target); 312 void MoveItemToFolder(views::View* item_view, const Index& target);
278 313
314 // Updates both data model and view_model_ for re-parenting a folder item to a
315 // new position in top level item list.
316 void ReparentItemForReorder(views::View* item_view, const Index& target);
317
318 // Updates both data model and view_model_ for re-parenting a folder item
319 // to anther folder target.
320 void ReparentItemToAnotherFolder(views::View* item_view, const Index& target);
321
322 // Updates both data model and view_model_ for removing last item from
323 // |source_folder| which is the parent folder of the re-parenting item.
324 void RemoveLastItemFromReparentItemFolder(AppListFolderItem* source_folder);
325
326 // If user does not drop the re-parenting folder item to any valid target,
327 // cancel the re-parenting action, let the item go back to its original
328 // parent folder with UI animation.
329 void CancelFolderItemReparent(AppListItemView* drag_item_view);
330
279 // Cancels any context menus showing for app items on the current page. 331 // Cancels any context menus showing for app items on the current page.
280 void CancelContextMenusOnCurrentPage(); 332 void CancelContextMenusOnCurrentPage();
281 333
282 // Returnes true if |point| lies within the bounds of this grid view plus a 334 // Returns true if |point| lies within the bounds of this grid view plus a
283 // buffer area surrounding it. 335 // buffer area surrounding it.
284 bool IsPointWithinDragBuffer(const gfx::Point& point) const; 336 bool IsPointWithinDragBuffer(const gfx::Point& point) const;
285 337
286 // Handles start page layout and transition animation. 338 // Handles start page layout and transition animation.
287 void LayoutStartPage(); 339 void LayoutStartPage();
288 340
289 // Overridden from views::ButtonListener: 341 // Overridden from views::ButtonListener:
290 virtual void ButtonPressed(views::Button* sender, 342 virtual void ButtonPressed(views::Button* sender,
291 const ui::Event& event) OVERRIDE; 343 const ui::Event& event) OVERRIDE;
292 344
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 views::View* GetViewAtSlotOnCurrentPage(int slot); 397 views::View* GetViewAtSlotOnCurrentPage(int slot);
346 398
347 // Sets state of the view with |target_index| to |is_target_folder| for 399 // Sets state of the view with |target_index| to |is_target_folder| for
348 // dropping |drag_view_|. 400 // dropping |drag_view_|.
349 void SetAsFolderDroppingTarget(const Index& target_index, 401 void SetAsFolderDroppingTarget(const Index& target_index,
350 bool is_target_folder); 402 bool is_target_folder);
351 403
352 // Invoked when |reorder_timer_| fires to show re-order preview UI. 404 // Invoked when |reorder_timer_| fires to show re-order preview UI.
353 void OnReorderTimer(); 405 void OnReorderTimer();
354 406
407 // Invoked when |folder_item_reparent_timer_| fires.
408 void OnFolderItemReparentTimer();
409
355 // Invoked when |folder_dropping_timer_| fires to show folder dropping 410 // Invoked when |folder_dropping_timer_| fires to show folder dropping
356 // preview UI. 411 // preview UI.
357 void OnFolderDroppingTimer(); 412 void OnFolderDroppingTimer();
358 413
414 // Updates drag state for dragging inside a folder's grid view.
415 void UpdateDragStateInsideFolder(Pointer pointer,
416 const ui::LocatedEvent& event);
417
418 // Returns true if drag event is happening in the root level AppsGridView
419 // for reparenting a folder item.
420 bool IsDraggingForReparentInRootLevelGridView() const;
421
422 // Returns true if drag event is happening in the hidden AppsGridView of the
423 // folder during reparenting a folder item.
424 bool IsDraggingForReprentInHiddenGridView() const;
425
426 // Returns the target icon bounds for |drag_item_view| to fly back
427 // to its parent |folder_item_view| in animation.
428 gfx::Rect GetTargetIconRectInFolder(AppListItemView* drag_item_view,
429 AppListItemView* folder_item_view);
430
359 AppListModel* model_; // Owned by AppListView. 431 AppListModel* model_; // Owned by AppListView.
360 AppListItemList* item_list_; // Not owned. 432 AppListItemList* item_list_; // Not owned.
361 AppsGridViewDelegate* delegate_; 433 AppsGridViewDelegate* delegate_;
362 PaginationModel* pagination_model_; // Owned by AppListController. 434 PaginationModel* pagination_model_; // Owned by AppListController.
363 PageSwitcher* page_switcher_view_; // Owned by views hierarchy. 435 PageSwitcher* page_switcher_view_; // Owned by views hierarchy.
364 views::WebView* start_page_view_; // Owned by views hierarchy. 436 views::WebView* start_page_view_; // Owned by views hierarchy.
365 437
366 gfx::Size icon_size_; 438 gfx::Size icon_size_;
367 int cols_; 439 int cols_;
368 int rows_per_page_; 440 int rows_per_page_;
(...skipping 30 matching lines...) Expand all
399 Index drop_target_; 471 Index drop_target_;
400 DropAttempt drop_attempt_; 472 DropAttempt drop_attempt_;
401 473
402 // Timer for re-ordering the |drop_target_| and |drag_view_|. 474 // Timer for re-ordering the |drop_target_| and |drag_view_|.
403 base::OneShotTimer<AppsGridView> reorder_timer_; 475 base::OneShotTimer<AppsGridView> reorder_timer_;
404 476
405 // Timer for dropping |drag_view_| into the folder containing 477 // Timer for dropping |drag_view_| into the folder containing
406 // the |drop_target_|. 478 // the |drop_target_|.
407 base::OneShotTimer<AppsGridView> folder_dropping_timer_; 479 base::OneShotTimer<AppsGridView> folder_dropping_timer_;
408 480
481 // Timer for dragging a folder item out of folder container ink bubble.
482 base::OneShotTimer<AppsGridView> folder_item_reparent_timer_;
483
409 // An application target drag and drop host which accepts dnd operations. 484 // An application target drag and drop host which accepts dnd operations.
410 ApplicationDragAndDropHost* drag_and_drop_host_; 485 ApplicationDragAndDropHost* drag_and_drop_host_;
411 486
412 // The drag operation is currently inside the dnd host and events get 487 // The drag operation is currently inside the dnd host and events get
413 // forwarded. 488 // forwarded.
414 bool forward_events_to_drag_and_drop_host_; 489 bool forward_events_to_drag_and_drop_host_;
415 490
416 // Last mouse drag location in this view's coordinates. 491 // Last mouse drag location in this view's coordinates.
417 gfx::Point last_drag_point_; 492 gfx::Point last_drag_point_;
418 493
419 // Timer to auto flip page when dragging an item near the left/right edges. 494 // Timer to auto flip page when dragging an item near the left/right edges.
420 base::OneShotTimer<AppsGridView> page_flip_timer_; 495 base::OneShotTimer<AppsGridView> page_flip_timer_;
421 496
422 // Target page to switch to when |page_flip_timer_| fires. 497 // Target page to switch to when |page_flip_timer_| fires.
423 int page_flip_target_; 498 int page_flip_target_;
424 499
425 // Delay in milliseconds of when |page_flip_timer_| should fire after user 500 // Delay in milliseconds of when |page_flip_timer_| should fire after user
426 // drags an item near the edges. 501 // drags an item near the edges.
427 int page_flip_delay_in_ms_; 502 int page_flip_delay_in_ms_;
428 503
429 views::BoundsAnimator bounds_animator_; 504 views::BoundsAnimator bounds_animator_;
430 505
431 // If true, AppsGridView is rending items at the root level of the app list. 506 // If true, AppsGridView is rending items at the root level of the app list.
432 bool is_root_level_; 507 bool is_root_level_;
433 508
434 // The most recent activated item view. 509 // The most recent activated item view.
435 AppListItemView* activated_item_view_; 510 AppListItemView* activated_item_view_;
436 511
512 // Tracks if drag_view_ is dragged out of the folder container bubble
513 // when dragging a item inside a folder.
514 bool drag_out_of_folder_container_;
515
516 // True if the drag_view_ item is a folder item being dragged for reparenting.
517 bool dragging_for_reparent_item_;
518
437 DISALLOW_COPY_AND_ASSIGN(AppsGridView); 519 DISALLOW_COPY_AND_ASSIGN(AppsGridView);
438 }; 520 };
439 521
440 } // namespace app_list 522 } // namespace app_list
441 523
442 #endif // UI_APP_LIST_VIEWS_APPS_GRID_VIEW_H_ 524 #endif // UI_APP_LIST_VIEWS_APPS_GRID_VIEW_H_
OLDNEW
« no previous file with comments | « ui/app_list/views/apps_container_view.cc ('k') | ui/app_list/views/apps_grid_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698