| Index: ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm
|
| diff --git a/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm b/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..69684bc730aab7abc81b0b4a97a70330faec54ac
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm
|
| @@ -0,0 +1,150 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// ====== New Architecture =====
|
| +// = This code is only used in the new iOS Chrome architecture. =
|
| +// ============================================================================
|
| +
|
| +#import "ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.h"
|
| +
|
| +#include "base/mac/foundation_util.h"
|
| +#import "ios/chrome/browser/ui/actions/settings_actions.h"
|
| +#import "ios/chrome/browser/ui/actions/tab_grid_actions.h"
|
| +#import "ios/chrome/browser/ui/tab_grid/tab_grid_tab_cell.h"
|
| +
|
| +#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| +#error "This file requires ARC support."
|
| +#endif
|
| +
|
| +namespace {
|
| +NSString* const kTabGridCellIdentifier = @"tabGridCell";
|
| +const CGFloat kSpace = 20;
|
| +const CGFloat kTabSize = 150;
|
| +}
|
| +
|
| +@interface TabGridViewController ()<SettingsActions,
|
| + TabGridActions,
|
| + UICollectionViewDataSource,
|
| + UICollectionViewDelegate>
|
| +@property(nonatomic, weak) UICollectionView* grid;
|
| +@end
|
| +
|
| +@implementation TabGridViewController
|
| +
|
| +@synthesize dataSource = _dataSource;
|
| +@synthesize actionDelegate = _actionDelegate;
|
| +@synthesize grid = _grid;
|
| +
|
| +- (void)viewDidLoad {
|
| + // Placeholder dark grey stripe at the top of the view.
|
| + UIView* stripe = [[UIView alloc] initWithFrame:CGRectZero];
|
| + stripe.translatesAutoresizingMaskIntoConstraints = NO;
|
| + stripe.backgroundColor = [UIColor darkGrayColor];
|
| + [self.view addSubview:stripe];
|
| +
|
| + // Placeholder settings button at in the stripe.
|
| + UIButton* settings = [UIButton buttonWithType:UIButtonTypeSystem];
|
| + settings.translatesAutoresizingMaskIntoConstraints = NO;
|
| + [settings setTitle:@"⚙" forState:UIControlStateNormal];
|
| + settings.titleLabel.font = [UIFont systemFontOfSize:24.0];
|
| + [settings addTarget:nil
|
| + action:@selector(showSettings:)
|
| + forControlEvents:UIControlEventTouchUpInside];
|
| + [stripe addSubview:settings];
|
| +
|
| + [NSLayoutConstraint activateConstraints:@[
|
| + [stripe.heightAnchor constraintEqualToConstant:64.0],
|
| + [stripe.widthAnchor constraintEqualToAnchor:self.view.widthAnchor],
|
| + [stripe.topAnchor constraintEqualToAnchor:self.view.topAnchor],
|
| + [stripe.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor],
|
| + [settings.leadingAnchor
|
| + constraintEqualToAnchor:stripe.layoutMarginsGuide.leadingAnchor],
|
| + [settings.centerYAnchor constraintEqualToAnchor:stripe.centerYAnchor]
|
| + ]];
|
| +
|
| + UICollectionViewFlowLayout* layout =
|
| + [[UICollectionViewFlowLayout alloc] init];
|
| + layout.minimumLineSpacing = kSpace;
|
| + layout.minimumInteritemSpacing = kSpace;
|
| + layout.sectionInset = UIEdgeInsetsMake(kSpace, kSpace, kSpace, kSpace);
|
| + layout.itemSize = CGSizeMake(kTabSize, kTabSize);
|
| +
|
| + UICollectionView* grid = [[UICollectionView alloc] initWithFrame:CGRectZero
|
| + collectionViewLayout:layout];
|
| + grid.translatesAutoresizingMaskIntoConstraints = NO;
|
| + grid.backgroundColor = [UIColor blackColor];
|
| +
|
| + [self.view addSubview:grid];
|
| + self.grid = grid;
|
| + self.grid.dataSource = self;
|
| + self.grid.delegate = self;
|
| + [self.grid registerClass:[TabGridTabCell class]
|
| + forCellWithReuseIdentifier:kTabGridCellIdentifier];
|
| +
|
| + [NSLayoutConstraint activateConstraints:@[
|
| + [self.grid.topAnchor constraintEqualToAnchor:stripe.bottomAnchor],
|
| + [self.grid.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor],
|
| + [self.grid.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
|
| + [self.grid.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
|
| + ]];
|
| +}
|
| +
|
| +- (void)viewWillAppear:(BOOL)animated {
|
| + [self.grid reloadData];
|
| +}
|
| +
|
| +#pragma mark - UICollectionViewDataSource methods
|
| +
|
| +- (NSInteger)numberOfSectionsInCollectionView:
|
| + (UICollectionView*)collectionView {
|
| + return 1;
|
| +}
|
| +
|
| +- (NSInteger)collectionView:(UICollectionView*)collectionView
|
| + numberOfItemsInSection:(NSInteger)section {
|
| + return [self.dataSource numberOfTabsInTabGrid];
|
| +}
|
| +
|
| +- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView
|
| + cellForItemAtIndexPath:(nonnull NSIndexPath*)indexPath {
|
| + TabGridTabCell* cell =
|
| + base::mac::ObjCCastStrict<TabGridTabCell>([collectionView
|
| + dequeueReusableCellWithReuseIdentifier:kTabGridCellIdentifier
|
| + forIndexPath:indexPath]);
|
| + cell.contentView.backgroundColor = [UIColor purpleColor];
|
| + cell.selected = YES;
|
| + cell.label.text = [self.dataSource titleAtIndex:indexPath.item];
|
| + return cell;
|
| +}
|
| +
|
| +#pragma mark - UICollectionViewDelegate methods
|
| +
|
| +- (void)collectionView:(UICollectionView*)collectionView
|
| + didSelectItemAtIndexPath:(NSIndexPath*)indexPath {
|
| + [self.actionDelegate showTabAtIndexPath:indexPath];
|
| +}
|
| +
|
| +#pragma mark - ZoomTransitionDelegate methods
|
| +
|
| +- (CGRect)rectForZoomWithKey:(NSObject*)key inView:(UIView*)view {
|
| + NSIndexPath* cellPath = base::mac::ObjCCastStrict<NSIndexPath>(key);
|
| + if (!key)
|
| + return CGRectNull;
|
| + UICollectionViewCell* cell = [self.grid cellForItemAtIndexPath:cellPath];
|
| + return [view convertRect:cell.bounds fromView:cell];
|
| +}
|
| +
|
| +#pragma mark - SettingsActions
|
| +
|
| +- (void)showSettings:(id)sender {
|
| + [self.actionDelegate showSettings];
|
| +}
|
| +
|
| +#pragma mark - TabGridActions
|
| +
|
| +- (void)showTabGrid:(id)sender {
|
| + [self.actionDelegate showTabGrid];
|
| +}
|
| +
|
| +@end
|
|
|