| 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 #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 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 struct Index { | 228 struct Index { |
| 229 Index() : page(-1), slot(-1) {} | 229 Index() : page(-1), slot(-1) {} |
| 230 Index(int page, int slot) : page(page), slot(slot) {} | 230 Index(int page, int slot) : page(page), slot(slot) {} |
| 231 | 231 |
| 232 bool operator==(const Index& other) const { | 232 bool operator==(const Index& other) const { |
| 233 return page == other.page && slot == other.slot; | 233 return page == other.page && slot == other.slot; |
| 234 } | 234 } |
| 235 bool operator!=(const Index& other) const { | 235 bool operator!=(const Index& other) const { |
| 236 return page != other.page || slot != other.slot; | 236 return page != other.page || slot != other.slot; |
| 237 } | 237 } |
| 238 bool operator<(const Index& other) const { |
| 239 if (page != other.page) |
| 240 return page < other.page; |
| 241 |
| 242 return slot < other.slot; |
| 243 } |
| 238 | 244 |
| 239 int page; // Which page an item view is on. | 245 int page; // Which page an item view is on. |
| 240 int slot; // Which slot in the page an item view is in. | 246 int slot; // Which slot in the page an item view is in. |
| 241 }; | 247 }; |
| 242 | 248 |
| 243 int tiles_per_page() const { return cols_ * rows_per_page_; } | 249 int tiles_per_page() const { return cols_ * rows_per_page_; } |
| 244 | 250 |
| 245 // Updates from model. | 251 // Updates from model. |
| 246 void Update(); | 252 void Update(); |
| 247 | 253 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 259 // struct above with page/slot info of where to display the item. | 265 // struct above with page/slot info of where to display the item. |
| 260 Index GetIndexFromModelIndex(int model_index) const; | 266 Index GetIndexFromModelIndex(int model_index) const; |
| 261 int GetModelIndexFromIndex(const Index& index) const; | 267 int GetModelIndexFromIndex(const Index& index) const; |
| 262 | 268 |
| 263 void SetSelectedItemByIndex(const Index& index); | 269 void SetSelectedItemByIndex(const Index& index); |
| 264 bool IsValidIndex(const Index& index) const; | 270 bool IsValidIndex(const Index& index) const; |
| 265 | 271 |
| 266 Index GetIndexOfView(const views::View* view) const; | 272 Index GetIndexOfView(const views::View* view) const; |
| 267 views::View* GetViewAtIndex(const Index& index) const; | 273 views::View* GetViewAtIndex(const Index& index) const; |
| 268 | 274 |
| 275 // Gets the index of the AppListItemView at the end of the view model. |
| 276 Index GetLastViewIndex() const; |
| 277 |
| 269 void MoveSelected(int page_delta, int slot_x_delta, int slot_y_delta); | 278 void MoveSelected(int page_delta, int slot_x_delta, int slot_y_delta); |
| 270 | 279 |
| 271 void CalculateIdealBounds(); | 280 void CalculateIdealBounds(); |
| 272 void AnimateToIdealBounds(); | 281 void AnimateToIdealBounds(); |
| 273 | 282 |
| 274 // Invoked when the given |view|'s current bounds and target bounds are on | 283 // Invoked when the given |view|'s current bounds and target bounds are on |
| 275 // different rows. To avoid moving diagonally, |view| would be put into a | 284 // different rows. To avoid moving diagonally, |view| would be put into a |
| 276 // slot prior |target| and fade in while moving to |target|. In the meanwhile, | 285 // slot prior |target| and fade in while moving to |target|. In the meanwhile, |
| 277 // a layer copy of |view| would start at |current| and fade out while moving | 286 // a layer copy of |view| would start at |current| and fade out while moving |
| 278 // to succeeding slot of |current|. |animate_current| controls whether to run | 287 // to succeeding slot of |current|. |animate_current| controls whether to run |
| 279 // fading out animation from |current|. |animate_target| controls whether to | 288 // fading out animation from |current|. |animate_target| controls whether to |
| 280 // run fading in animation to |target|. | 289 // run fading in animation to |target|. |
| 281 void AnimationBetweenRows(views::View* view, | 290 void AnimationBetweenRows(views::View* view, |
| 282 bool animate_current, | 291 bool animate_current, |
| 283 const gfx::Rect& current, | 292 const gfx::Rect& current, |
| 284 bool animate_target, | 293 bool animate_target, |
| 285 const gfx::Rect& target); | 294 const gfx::Rect& target); |
| 286 | 295 |
| 287 // Extracts drag location info from |event| into |drag_point|. | 296 // Extracts drag location info from |event| into |drag_point|. |
| 288 void ExtractDragLocation(const ui::LocatedEvent& event, | 297 void ExtractDragLocation(const ui::LocatedEvent& event, |
| 289 gfx::Point* drag_point); | 298 gfx::Point* drag_point); |
| 290 | 299 |
| 291 // Calculates reorder and folder drop targets based on |drag_point|. | 300 // Updates |reorder_drop_target_|, |folder_drop_target_| and |drop_attempt_| |
| 292 // |drag_point| is in the grid view's coordinates. When | 301 // based on |drag_view_|'s position. |
| 293 // |use_page_button_hovering| is true and |drag_point| is hovering on a page | 302 void CalculateDropTarget(); |
| 294 // button, use the last slot on that page as drop target. | |
| 295 void CalculateDropTarget(const gfx::Point& drag_point, | |
| 296 bool use_page_button_hovering); | |
| 297 | 303 |
| 298 // Same as CalculateDropTarget, but with folder UI enabled. The drop target | 304 // If |point| is a valid folder drop target, returns true and sets |
| 299 // can be either a target for re-ordering, or a target folder to move the | 305 // |drop_target| to the index of the view to do a folder drop for. |
| 300 // dragged item into if |drag_view_| enters its re-ordering or folder | 306 bool CalculateFolderDropTarget(const gfx::Point& point, |
| 301 // dropping circle. | 307 Index* drop_target) const; |
| 302 void CalculateDropTargetWithFolderEnabled(const gfx::Point& drag_point, | 308 |
| 303 bool use_page_button_hovering); | 309 // Calculates the reorder target |point| and sets |drop_target| to the index |
| 310 // of the view to reorder. |
| 311 void CalculateReorderDropTarget(const gfx::Point& point, |
| 312 Index* drop_target) const; |
| 304 | 313 |
| 305 // Prepares |drag_and_drop_host_| for dragging. |grid_location| contains | 314 // Prepares |drag_and_drop_host_| for dragging. |grid_location| contains |
| 306 // the drag point in this grid view's coordinates. | 315 // the drag point in this grid view's coordinates. |
| 307 void StartDragAndDropHostDrag(const gfx::Point& grid_location); | 316 void StartDragAndDropHostDrag(const gfx::Point& grid_location); |
| 308 | 317 |
| 309 // Dispatch the drag and drop update event to the dnd host (if needed). | 318 // Dispatch the drag and drop update event to the dnd host (if needed). |
| 310 void DispatchDragEventToDragAndDropHost( | 319 void DispatchDragEventToDragAndDropHost( |
| 311 const gfx::Point& location_in_screen_coordinates); | 320 const gfx::Point& location_in_screen_coordinates); |
| 312 | 321 |
| 313 // Starts the page flip timer if |drag_point| is in left/right side page flip | 322 // Starts the page flip timer if |drag_point| is in left/right side page flip |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 // changing the size of it. If |immediate| is set the change will be | 390 // changing the size of it. If |immediate| is set the change will be |
| 382 // immediately applied - otherwise it will change gradually. | 391 // immediately applied - otherwise it will change gradually. |
| 383 // If |hide| is set the view will get hidden, otherwise it gets shown. | 392 // If |hide| is set the view will get hidden, otherwise it gets shown. |
| 384 void SetViewHidden(views::View* view, bool hide, bool immediate); | 393 void SetViewHidden(views::View* view, bool hide, bool immediate); |
| 385 | 394 |
| 386 // Whether the folder drag-and-drop UI should be enabled. | 395 // Whether the folder drag-and-drop UI should be enabled. |
| 387 bool EnableFolderDragDropUI(); | 396 bool EnableFolderDragDropUI(); |
| 388 | 397 |
| 389 // Whether target specified by |drap_target| can accept more items to be | 398 // Whether target specified by |drap_target| can accept more items to be |
| 390 // dropped into it. | 399 // dropped into it. |
| 391 bool CanDropIntoTarget(const Index& drop_target); | 400 bool CanDropIntoTarget(const Index& drop_target) const; |
| 392 | |
| 393 // Calculates the visual index of the nearest tile for which |drag_view_| | |
| 394 // enters either its re-ordering or folder dropping circle. | |
| 395 void CalculateNearestTileForDragView(); | |
| 396 | |
| 397 // Calculates |nearest_tile| in which |vertex| of the |drag_view| is | |
| 398 // enclosed. | |
| 399 // *|nearest_tile| and *|d_min| will be updated based on the calculation. | |
| 400 // *|d_min| is the distance between |nearest_tile| and |drag_view_|. | |
| 401 void CalculateNearestTileForVertex( | |
| 402 const gfx::Point& vertex, Index* nearest_tile, int* d_min); | |
| 403 | |
| 404 // Returns the bounds of the tile in which |point| is enclosed if there | |
| 405 // is a valid item sits on the tile. | |
| 406 gfx::Rect GetTileBoundsForPoint(const gfx::Point& point, Index* tile_index); | |
| 407 | 401 |
| 408 // Returns the size of the entire tile grid. | 402 // Returns the size of the entire tile grid. |
| 409 gfx::Size GetTileGridSize() const; | 403 gfx::Size GetTileGridSize() const; |
| 410 | 404 |
| 411 // Gets the expected bounds of a tile located at |row| and |col| on the | 405 // Returns the slot number which the given |point| falls into or the closest |
| 412 // current page. | 406 // slot if |point| is outside the page's bounds. |
| 407 Index GetNearestTileIndexForPoint(const gfx::Point& point) const; |
| 408 |
| 409 // Gets the bounds of the tile located at |slot| on the current page. |
| 410 gfx::Rect GetExpectedTileBounds(int slot) const; |
| 411 |
| 412 // Gets the bounds of the tile located at |row| and |col| on the current page. |
| 413 gfx::Rect GetExpectedTileBounds(int row, int col) const; | 413 gfx::Rect GetExpectedTileBounds(int row, int col) const; |
| 414 | 414 |
| 415 // Returns true if the slot of |index| is the last possible slot to drop | |
| 416 // an item, i.e. first empty slot next to the last item on the last page. | |
| 417 bool IsLastPossibleDropTarget(const Index& index) const; | |
| 418 | |
| 419 // Gets the item view located at |slot| on the current page. If there is | 415 // Gets the item view located at |slot| on the current page. If there is |
| 420 // no item located at |slot|, returns NULL. | 416 // no item located at |slot|, returns NULL. |
| 421 views::View* GetViewAtSlotOnCurrentPage(int slot); | 417 views::View* GetViewAtSlotOnCurrentPage(int slot); |
| 422 | 418 |
| 423 // Sets state of the view with |target_index| to |is_target_folder| for | 419 // Sets state of the view with |target_index| to |is_target_folder| for |
| 424 // dropping |drag_view_|. | 420 // dropping |drag_view_|. |
| 425 void SetAsFolderDroppingTarget(const Index& target_index, | 421 void SetAsFolderDroppingTarget(const Index& target_index, |
| 426 bool is_target_folder); | 422 bool is_target_folder); |
| 427 | 423 |
| 428 // Invoked when |reorder_timer_| fires to show re-order preview UI. | 424 // Invoked when |reorder_timer_| fires to show re-order preview UI. |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 #endif | 509 #endif |
| 514 | 510 |
| 515 Pointer drag_pointer_; | 511 Pointer drag_pointer_; |
| 516 | 512 |
| 517 // The most recent reorder drop target. | 513 // The most recent reorder drop target. |
| 518 Index reorder_drop_target_; | 514 Index reorder_drop_target_; |
| 519 | 515 |
| 520 // The most recent folder drop target. | 516 // The most recent folder drop target. |
| 521 Index folder_drop_target_; | 517 Index folder_drop_target_; |
| 522 | 518 |
| 519 // The index where an empty slot has been left as a placeholder for the |
| 520 // reorder drop target. This updates when the reorder animation triggers. |
| 521 Index reorder_placeholder_; |
| 522 |
| 523 // The current action that ending a drag will perform. | 523 // The current action that ending a drag will perform. |
| 524 DropAttempt drop_attempt_; | 524 DropAttempt drop_attempt_; |
| 525 | 525 |
| 526 // Timer for re-ordering the |drop_target_| and |drag_view_|. | 526 // Timer for re-ordering the |drop_target_| and |drag_view_|. |
| 527 base::OneShotTimer<AppsGridView> reorder_timer_; | 527 base::OneShotTimer<AppsGridView> reorder_timer_; |
| 528 | 528 |
| 529 // Timer for dropping |drag_view_| into the folder containing | 529 // Timer for dropping |drag_view_| into the folder containing |
| 530 // the |drop_target_|. | 530 // the |drop_target_|. |
| 531 base::OneShotTimer<AppsGridView> folder_dropping_timer_; | 531 base::OneShotTimer<AppsGridView> folder_dropping_timer_; |
| 532 | 532 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 | 564 |
| 565 // True if the drag_view_ item is a folder item being dragged for reparenting. | 565 // True if the drag_view_ item is a folder item being dragged for reparenting. |
| 566 bool dragging_for_reparent_item_; | 566 bool dragging_for_reparent_item_; |
| 567 | 567 |
| 568 DISALLOW_COPY_AND_ASSIGN(AppsGridView); | 568 DISALLOW_COPY_AND_ASSIGN(AppsGridView); |
| 569 }; | 569 }; |
| 570 | 570 |
| 571 } // namespace app_list | 571 } // namespace app_list |
| 572 | 572 |
| 573 #endif // UI_APP_LIST_VIEWS_APPS_GRID_VIEW_H_ | 573 #endif // UI_APP_LIST_VIEWS_APPS_GRID_VIEW_H_ |
| OLD | NEW |