blob: d09ebc90dfdc476e1d5bf0f03a132665d2cc39b0 [file] [log] [blame]
// Copyright 2015 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.
#ifndef IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_SWITCHER_PANEL_CONTROLLER_H_
#define IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_SWITCHER_PANEL_CONTROLLER_H_
#import <UIKit/UIKit.h>
#include "base/ios/block_types.h"
#import "ios/chrome/browser/ui/tab_switcher/tab_switcher_model.h"
#import "ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_cell.h"
namespace ios {
class ChromeBrowserState;
}
@class TabSwitcherLocalSessionCell;
@class TabSwitcherPanelController;
@protocol TabSwitcherPanelControllerDelegate<NSObject>
// Called when the user selects the cell representing the distant tab |tab|.
- (void)tabSwitcherPanelController:
(TabSwitcherPanelController*)tabSwitcherPanelController
didSelectDistantTab:(synced_sessions::DistantTab*)tab;
// Called when the user selects the cell representing the local tab |tab|.
- (void)tabSwitcherPanelController:
(TabSwitcherPanelController*)tabSwitcherPanelController
didSelectLocalTab:(Tab*)tab;
// Called when the user pressed the close button on the cell representing the
// local tab |tab|.
- (void)tabSwitcherPanelController:
(TabSwitcherPanelController*)tabSwitcherPanelController
didCloseLocalTab:(Tab*)tab;
// Called when the overlay view visibility changed.
- (void)tabSwitcherPanelControllerDidUpdateOverlayViewVisibility:
(TabSwitcherPanelController*)tabSwitcherPanelController;
@end
@class TabSwitcherPanelView;
// The tab switcher panel controller manages a panel view.
// It can manage either distant or local sessions and uses a TabSwitcherModel
// as its data source.
@class TabSwitcherCache;
@interface TabSwitcherPanelController : NSObject
@property(unsafe_unretained, nonatomic, readonly) TabSwitcherPanelView* view;
@property(nonatomic, unsafe_unretained) id<TabSwitcherPanelControllerDelegate>
delegate;
@property(nonatomic, readonly) TabSwitcherSessionType sessionType;
// Initializes a controller for a view showing local tabs. |offTheRecord|
// determines whether the tabs will be shown for the incognito browser state or
// not. |model| is used to populate the view and must not be nil.
- (instancetype)initWithModel:(TabSwitcherModel*)model
forLocalSessionOfType:(TabSwitcherSessionType)type
withCache:(TabSwitcherCache*)cache
browserState:(ios::ChromeBrowserState*)browserState;
// Initializes a controller for a view showing the tabs of a distant session.
// |model| is used to populate the view and must not be nil.
- (instancetype)initWithModel:(TabSwitcherModel*)model
forDistantSessionWithTag:(std::string const&)sessionTag
browserState:(ios::ChromeBrowserState*)browserState;
// Tells the controller that the collectionview's content may need to be
// updated.
- (void)updateCollectionViewIfNeeded;
// Returns the tag of the distant session.
- (std::string)sessionTag;
// Returns true if the new tab button should be shown.
- (BOOL)shouldShowNewTabButton;
// Scrolls the collection view so that the tab cell at the given index is
// visible.
- (void)scrollTabIndexToVisible:(NSInteger)index triggerLayout:(BOOL)layout;
// Returns the cell for the tab at the given index.
// This methods should only be used for animation purpose.
- (TabSwitcherLocalSessionCell*)localSessionCellForTabAtIndex:(NSInteger)index;
- (CGRect)localSessionCellFrameForTabAtIndex:(NSInteger)index;
// Reloads cells.
- (void)reload;
- (UICollectionView*)collectionView;
// Returns the distantSession owned and displayed by this controller.
- (const synced_sessions::DistantSession*)distantSession;
@end
#endif // IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_SWITCHER_PANEL_CONTROLLER_H_