| Index: ui/app_list/cocoa/apps_grid_controller.mm
|
| diff --git a/ui/app_list/cocoa/apps_grid_controller.mm b/ui/app_list/cocoa/apps_grid_controller.mm
|
| index 53ea288fcf367e776d2456fefc3612b01ba01d9d..455c441299ffa0a333853a11216eae07cee403fe 100644
|
| --- a/ui/app_list/cocoa/apps_grid_controller.mm
|
| +++ b/ui/app_list/cocoa/apps_grid_controller.mm
|
| @@ -4,6 +4,7 @@
|
|
|
| #import "ui/app_list/cocoa/apps_grid_controller.h"
|
|
|
| +#include "base/command_line.h"
|
| #include "base/mac/foundation_util.h"
|
| #include "base/macros.h"
|
| #include "ui/app_list/app_list_item.h"
|
| @@ -17,10 +18,8 @@
|
|
|
| namespace {
|
|
|
| -// OSX app list has hardcoded rows and columns for now.
|
| -const int kFixedRows = 4;
|
| +// OSX app list has hardcoded columns for now.
|
| const int kFixedColumns = 4;
|
| -const int kItemsPerPage = kFixedRows * kFixedColumns;
|
|
|
| // Padding space in pixels for fixed layout.
|
| const CGFloat kGridTopPadding = 1;
|
| @@ -34,11 +33,31 @@ const CGFloat kPreferredTileHeight = 98;
|
|
|
| const CGFloat kViewWidth =
|
| kFixedColumns * kPreferredTileWidth + 2 * kLeftRightPadding;
|
| -const CGFloat kViewHeight = kFixedRows * kPreferredTileHeight;
|
|
|
| const NSTimeInterval kScrollWhileDraggingDelay = 1.0;
|
| NSTimeInterval g_scroll_duration = 0.18;
|
|
|
| +const char kTestType[] = "test-type";
|
| +
|
| +int DetermineFixedRowCount() {
|
| + // This needs to be called before a delegate exists, since it is needed to
|
| + // determine the height of the view.
|
| + return [AppsGridController hasFewerRows] ? 3 : 4;
|
| +}
|
| +
|
| +int RowCount() {
|
| + static const int row_count = DetermineFixedRowCount();
|
| + return row_count;
|
| +}
|
| +
|
| +int ItemsPerPage() {
|
| + return RowCount() * kFixedColumns;
|
| +}
|
| +
|
| +CGFloat ViewHeight() {
|
| + return RowCount() * kPreferredTileHeight;
|
| +}
|
| +
|
| } // namespace
|
|
|
| @interface AppsGridController ()
|
| @@ -119,7 +138,7 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| return;
|
|
|
| [parent_ selectItemAtIndex:index];
|
| - [parent_ scrollToPage:index / kItemsPerPage];
|
| + [parent_ scrollToPage:index / ItemsPerPage()];
|
| }
|
|
|
| AppsGridController* parent_; // Weak, owns us.
|
| @@ -152,17 +171,21 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| return kScrollerPadding;
|
| }
|
|
|
| ++ (BOOL)hasFewerRows {
|
| + return !base::CommandLine::ForCurrentProcess()->HasSwitch(kTestType);
|
| +}
|
| +
|
| @synthesize paginationObserver = paginationObserver_;
|
|
|
| - (id)init {
|
| if ((self = [super init])) {
|
| bridge_.reset(new app_list::AppsGridDelegateBridge(self));
|
| NSSize cellSize = NSMakeSize(kPreferredTileWidth, kPreferredTileHeight);
|
| - dragManager_.reset(
|
| - [[AppsCollectionViewDragManager alloc] initWithCellSize:cellSize
|
| - rows:kFixedRows
|
| - columns:kFixedColumns
|
| - gridController:self]);
|
| + dragManager_.reset([[AppsCollectionViewDragManager alloc]
|
| + initWithCellSize:cellSize
|
| + rows:RowCount()
|
| + columns:kFixedColumns
|
| + gridController:self]);
|
| pages_.reset([[NSMutableArray alloc] init]);
|
| items_.reset([[NSMutableArray alloc] init]);
|
| [self loadAndSetView];
|
| @@ -357,7 +380,7 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| [[PageContainerView alloc] initWithFrame:NSZeroRect]);
|
|
|
| NSRect scrollFrame = NSMakeRect(0, kGridTopPadding, kViewWidth,
|
| - kViewHeight + kScrollerPadding);
|
| + ViewHeight() + kScrollerPadding);
|
| base::scoped_nsobject<ScrollViewWithNoScrollbars> scrollView(
|
| [[ScrollViewWithNoScrollbars alloc] initWithFrame:scrollFrame]);
|
| [scrollView setBorderType:NSNoBorder];
|
| @@ -403,9 +426,9 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| }
|
|
|
| - (AppsGridViewItem*)itemAtIndex:(size_t)itemIndex {
|
| - const size_t pageIndex = itemIndex / kItemsPerPage;
|
| + const size_t pageIndex = itemIndex / ItemsPerPage();
|
| return [self itemAtPageIndex:pageIndex
|
| - indexInPage:itemIndex - pageIndex * kItemsPerPage];
|
| + indexInPage:itemIndex - pageIndex * ItemsPerPage()];
|
| }
|
|
|
| - (NSUInteger)selectedItemIndex {
|
| @@ -414,7 +437,7 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| if (indexOnPage == NSNotFound)
|
| return NSNotFound;
|
|
|
| - return indexOnPage + visiblePage_ * kItemsPerPage;
|
| + return indexOnPage + visiblePage_ * ItemsPerPage();
|
| }
|
|
|
| - (NSButton*)selectedButton {
|
| @@ -437,7 +460,7 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| // Note there is always at least one page.
|
| size_t targetPages = 1;
|
| if ([items_ count] != 0)
|
| - targetPages = ([items_ count] - 1) / kItemsPerPage + 1;
|
| + targetPages = ([items_ count] - 1) / ItemsPerPage() + 1;
|
|
|
| const size_t currentPages = [self pageCount];
|
| // First see if the number of pages have changed.
|
| @@ -449,20 +472,19 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| } else {
|
| // Pages need to be added.
|
| for (size_t i = currentPages; i < targetPages; ++i) {
|
| - NSRect pageFrame = NSMakeRect(
|
| - kLeftRightPadding + kViewWidth * i, 0,
|
| - kViewWidth, kViewHeight);
|
| + NSRect pageFrame = NSMakeRect(kLeftRightPadding + kViewWidth * i, 0,
|
| + kViewWidth, ViewHeight());
|
| [pages_ addObject:[dragManager_ makePageWithFrame:pageFrame]];
|
| }
|
| }
|
|
|
| [[self pagesContainerView] setSubviews:pages_];
|
| - NSSize pagesSize = NSMakeSize(kViewWidth * targetPages, kViewHeight);
|
| + NSSize pagesSize = NSMakeSize(kViewWidth * targetPages, ViewHeight());
|
| [[self pagesContainerView] setFrameSize:pagesSize];
|
| [paginationObserver_ totalPagesChanged];
|
| }
|
|
|
| - const size_t startPage = startItemIndex / kItemsPerPage;
|
| + const size_t startPage = startItemIndex / ItemsPerPage();
|
| // All pages on or after |startPage| may need items added or removed.
|
| for (size_t pageIndex = startPage; pageIndex < targetPages; ++pageIndex) {
|
| [self updatePageContent:pageIndex
|
| @@ -484,7 +506,7 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| }
|
|
|
| NSRange inPageRange = NSIntersectionRange(
|
| - NSMakeRange(pageIndex * kItemsPerPage, kItemsPerPage),
|
| + NSMakeRange(pageIndex * ItemsPerPage(), ItemsPerPage()),
|
| NSMakeRange(0, [items_ count]));
|
| NSArray* pageContent = [items_ subarrayWithRange:inPageRange];
|
| [pageView setContent:pageContent];
|
| @@ -507,8 +529,8 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| [items_ insertObject:item
|
| atIndex:toIndex];
|
|
|
| - size_t fromPageIndex = fromIndex / kItemsPerPage;
|
| - size_t toPageIndex = toIndex / kItemsPerPage;
|
| + size_t fromPageIndex = fromIndex / ItemsPerPage();
|
| + size_t toPageIndex = toIndex / ItemsPerPage();
|
| if (fromPageIndex == toPageIndex) {
|
| [self updatePageContent:fromPageIndex
|
| resetModel:NO]; // Just reorder items.
|
| @@ -603,7 +625,7 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
|
|
| // If nothing is currently selected, select the first item on the page.
|
| if (oldIndex == NSNotFound) {
|
| - [self selectItemAtIndex:visiblePage_ * kItemsPerPage];
|
| + [self selectItemAtIndex:visiblePage_ * ItemsPerPage()];
|
| return YES;
|
| }
|
|
|
| @@ -629,8 +651,8 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| if (index >= [items_ count])
|
| return;
|
|
|
| - if (index / kItemsPerPage != visiblePage_)
|
| - [self scrollToPage:index / kItemsPerPage];
|
| + if (index / ItemsPerPage() != visiblePage_)
|
| + [self scrollToPage:index / ItemsPerPage()];
|
|
|
| [[self itemAtIndex:index] setSelected:YES];
|
| }
|
| @@ -645,39 +667,41 @@ class AppsGridDelegateBridge : public AppListItemListObserver {
|
| NSUInteger oldIndex = [self selectedItemIndex];
|
| // If nothing is currently selected, select the first item on the page.
|
| if (oldIndex == NSNotFound) {
|
| - [self selectItemAtIndex:visiblePage_ * kItemsPerPage];
|
| + [self selectItemAtIndex:visiblePage_ * ItemsPerPage()];
|
| return YES;
|
| }
|
|
|
| if (command == @selector(moveLeft:)) {
|
| - return oldIndex % kFixedColumns == 0 ?
|
| - [self moveSelectionByDelta:-kItemsPerPage + kFixedColumns - 1] :
|
| - [self moveSelectionByDelta:-1];
|
| + return oldIndex % kFixedColumns == 0
|
| + ? [self moveSelectionByDelta:-ItemsPerPage() + kFixedColumns - 1]
|
| + : [self moveSelectionByDelta:-1];
|
| }
|
|
|
| if (command == @selector(moveRight:)) {
|
| - return oldIndex % kFixedColumns == kFixedColumns - 1 ?
|
| - [self moveSelectionByDelta:+kItemsPerPage - kFixedColumns + 1] :
|
| - [self moveSelectionByDelta:1];
|
| + return oldIndex % kFixedColumns == kFixedColumns - 1
|
| + ? [self moveSelectionByDelta:+ItemsPerPage() - kFixedColumns + 1]
|
| + : [self moveSelectionByDelta:1];
|
| }
|
|
|
| if (command == @selector(moveUp:)) {
|
| - return oldIndex / kFixedColumns % kFixedRows == 0 ?
|
| - NO : [self moveSelectionByDelta:-kFixedColumns];
|
| + return oldIndex / kFixedColumns % RowCount() == 0
|
| + ? NO
|
| + : [self moveSelectionByDelta:-kFixedColumns];
|
| }
|
|
|
| if (command == @selector(moveDown:)) {
|
| - return oldIndex / kFixedColumns % kFixedRows == kFixedRows - 1 ?
|
| - NO : [self moveSelectionByDelta:kFixedColumns];
|
| + return oldIndex / kFixedColumns % RowCount() == RowCount() - 1
|
| + ? NO
|
| + : [self moveSelectionByDelta:kFixedColumns];
|
| }
|
|
|
| if (command == @selector(pageUp:) ||
|
| command == @selector(scrollPageUp:))
|
| - return [self moveSelectionByDelta:-kItemsPerPage];
|
| + return [self moveSelectionByDelta:-ItemsPerPage()];
|
|
|
| if (command == @selector(pageDown:) ||
|
| command == @selector(scrollPageDown:))
|
| - return [self moveSelectionByDelta:kItemsPerPage];
|
| + return [self moveSelectionByDelta:ItemsPerPage()];
|
|
|
| return NO;
|
| }
|
|
|