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

Unified Diff: ios/chrome/browser/ui/bookmarks/bookmark_collection_view.h

Issue 2586993002: Upstream Chrome on iOS source code [3/11]. (Closed)
Patch Set: Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/ui/bookmarks/bookmark_collection_view.h
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_collection_view.h b/ios/chrome/browser/ui/bookmarks/bookmark_collection_view.h
new file mode 100644
index 0000000000000000000000000000000000000000..7f0d6323efa19f3dcf874b646faf108224b84168
--- /dev/null
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_collection_view.h
@@ -0,0 +1,232 @@
+// Copyright 2014 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_BOOKMARKS_BOOKMARK_COLLECTION_VIEW_H_
+#define IOS_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_COLLECTION_VIEW_H_
+
+#import <UIKit/UIKit.h>
+
+#include <set>
+#include <vector>
+
+#import "ios/chrome/browser/ui/bookmarks/bookmark_collection_cells.h"
+#import "ios/chrome/browser/ui/bookmarks/bookmark_home_primary_view.h"
+#include "ios/chrome/browser/ui/bookmarks/bookmark_model_bridge_observer.h"
+#import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h"
+
+@class BookmarkCollectionView;
+class GURL;
+@protocol UrlLoader;
+
+namespace bookmarks {
+class BookmarkModel;
+class BookmarkNode;
+} // namespace bookmarks
+
+namespace ios {
+class ChromeBrowserState;
+} // namespace ios
+
+// This protocol is provided for subclasses, and is not used in this class.
+@protocol BookmarkCollectionViewDelegate<NSObject>
+
+// This method tells the delegate to add the node and cell
+// to the list of those being edited.
+- (void)bookmarkCollectionView:(BookmarkCollectionView*)view
+ cell:(UICollectionViewCell*)cell
+ addNodeForEditing:(const bookmarks::BookmarkNode*)node;
+
+// This method tells the delegate to remove the node and cell from the list of
+// those being edited.
+- (void)bookmarkCollectionView:(BookmarkCollectionView*)view
+ cell:(UICollectionViewCell*)cell
+ removeNodeForEditing:(const bookmarks::BookmarkNode*)node;
+
+// The delegate is responsible for keeping track of the nodes being edited.
+- (const std::set<const bookmarks::BookmarkNode*>&)nodesBeingEdited;
+
+// This method tells the delegate that the collection view was scrolled.
+- (void)bookmarkCollectionViewDidScroll:(BookmarkCollectionView*)view;
+- (void)bookmarkCollectionView:(BookmarkCollectionView*)view
+ selectedUrlForNavigation:(const GURL&)url;
+
+// The user selected the menu button at the index path.
+- (void)bookmarkCollectionView:(BookmarkCollectionView*)view
+ wantsMenuForBookmark:(const bookmarks::BookmarkNode*)node
+ onView:(UIView*)view
+ forCell:(BookmarkItemCell*)cell;
+
+// The user performed a long press on the bookmark.
+- (void)bookmarkCollectionView:(BookmarkCollectionView*)view
+ didLongPressCell:(UICollectionViewCell*)cell
+ forBookmark:(const bookmarks::BookmarkNode*)node;
+
+// Returns true if a bookmarks promo cell should be shown.
+- (BOOL)bookmarkCollectionViewShouldShowPromoCell:(BookmarkCollectionView*)view;
+
+// Shows a sign-in view controller.
+- (void)bookmarkCollectionViewShowSignIn:(BookmarkCollectionView*)view;
+
+// Dismisses the promo.
+- (void)bookmarkCollectionViewDismissPromo:(BookmarkCollectionView*)view;
+
+@end
+
+// This is an abstract class.
+// It contains a collection view specific to bookmarks.
+// This class is responsible for the UI of the collection view.
+// Subclasses are responsible for handling the model layer.
+//
+// Note about the implementation of the |BookmarkHomePrimaryView| in this class:
+// * |contentPositionInPortraitOrientation|: Regardless of the current
+// orientation, returns the y of the content offset of the collection view
+// if it were to have portrait orientation.
+// * |applyContentPosition:|: Given a content position from portrait
+// orientation, change the content offset of the collection view to match
+// that position.
+// * |changeOrientation:|: Calls |updateCollectionView|.
+// * |setScrollsToTop:|: Applies |scrollsToTop| to the collection view.
+// * |setEditing:animated:|: This method updates the editing property, but has
+// no other effect. Subclasses must provide the actual functionality.
+@interface BookmarkCollectionView
+ : UIView<BookmarkHomePrimaryView, BookmarkModelBridgeObserver>
+
+// Designated initializer.
+- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
+ frame:(CGRect)frame;
+
+#pragma mark - Methods that subclasses can override
+
+// Callback whenever the collection view is scrolled.
+- (void)collectionViewScrolled;
+
+#pragma mark - Methods that subclasses must override (non-UI)
+
+// BookmarkModelBridgeObserver Callbacks
+// Instances of this class automatically observe the bookmark model.
+// The bookmark model has loaded.
+- (void)bookmarkModelLoaded;
+// The node has changed, but not its children.
+- (void)bookmarkNodeChanged:(const bookmarks::BookmarkNode*)bookmarkNode;
+// The node has not changed, but its children have.
+- (void)bookmarkNodeChildrenChanged:
+ (const bookmarks::BookmarkNode*)bookmarkNode;
+// The node has moved to a new parent folder.
+- (void)bookmarkNode:(const bookmarks::BookmarkNode*)bookmarkNode
+ movedFromParent:(const bookmarks::BookmarkNode*)oldParent
+ toParent:(const bookmarks::BookmarkNode*)newParent;
+// |node| was deleted from |folder|.
+- (void)bookmarkNodeDeleted:(const bookmarks::BookmarkNode*)node
+ fromFolder:(const bookmarks::BookmarkNode*)folder;
+// All non-permanent nodes have been removed.
+- (void)bookmarkModelRemovedAllNodes;
+
+// Called when a user is attempting to select a cell.
+// Returning NO prevents the cell from being selected.
+- (BOOL)shouldSelectCellAtIndexPath:(NSIndexPath*)indexPath;
+// Called when a cell is tapped outside of editing mode.
+- (void)didTapCellAtIndexPath:(NSIndexPath*)indexPath;
+// Called when a user selected a cell in the editing state.
+- (void)didAddCellForEditingAtIndexPath:(NSIndexPath*)indexPath;
+- (void)didRemoveCellForEditingAtIndexPath:(NSIndexPath*)indexPath;
+// Called when a user taps the menu button on a cell.
+- (void)didTapMenuButtonAtIndexPath:(NSIndexPath*)indexPath
+ onView:(UIView*)view
+ forCell:(BookmarkItemCell*)cell;
+
+// Whether a cell should show a button and of which type.
+- (bookmark_cell::ButtonType)buttonTypeForCellAtIndexPath:
+ (NSIndexPath*)indexPath;
+
+// Whether a long press at the cell at |indexPath| should be allowed.
+- (BOOL)allowLongPressForCellAtIndexPath:(NSIndexPath*)indexPath;
+// The |cell| at |indexPath| received a long press.
+- (void)didLongPressCell:(UICollectionViewCell*)cell
+ atIndexPath:(NSIndexPath*)indexPath;
+
+// Whether the cell has been selected in editing mode.
+- (BOOL)cellIsSelectedForEditingAtIndexPath:(NSIndexPath*)indexPath;
+
+// Updates the collection view based on the current state of all models and
+// contextual parameters, such as the interface orientation.
+- (void)updateCollectionView;
+
+// Returns the bookmark node associated with |indexPath|.
+- (const bookmarks::BookmarkNode*)nodeAtIndexPath:(NSIndexPath*)indexPath;
+
+#pragma mark - Methods that subclasses must override (UI)
+
+// The size of the header for |section|. A return value of CGSizeZero prevents
+// a header from showing.
+- (CGSize)headerSizeForSection:(NSInteger)section;
+// Create a cell for display at |indexPath|.
+- (UICollectionViewCell*)cellAtIndexPath:(NSIndexPath*)indexPath;
+// Create a header view for the element at |indexPath|.
+- (UICollectionReusableView*)headerAtIndexPath:(NSIndexPath*)indexPath;
+- (NSInteger)numberOfItemsInSection:(NSInteger)section;
+- (NSInteger)numberOfSections;
+
+#pragma mark - Methods that subclasses can override (UI)
+
+// The inset of the section.
+- (UIEdgeInsets)insetForSectionAtIndex:(NSInteger)section;
+// The size of the cell at |indexPath|.
+- (CGSize)cellSizeForIndexPath:(NSIndexPath*)indexPath;
+// The minimal horizontal space between items to respect between cells in
+// |section|.
+- (CGFloat)minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
+// The minimal vertical space between items to respect between cells in
+// |section|.
+- (CGFloat)minimumLineSpacingForSectionAtIndex:(NSInteger)section;
+// The text to display when there are no items in the collection. Default is
+// |IDS_IOS_BOOKMARK_NO_BOOKMARKS_LABEL|.
+- (NSString*)textWhenCollectionIsEmpty;
+
+#pragma mark - Convenience methods for subclasses
+
+- (BookmarkItemCell*)cellForBookmark:(const bookmarks::BookmarkNode*)node
+ indexPath:(NSIndexPath*)indexPath;
+- (BookmarkFolderCell*)cellForFolder:(const bookmarks::BookmarkNode*)node
+ indexPath:(NSIndexPath*)indexPath;
+
+// |animateMenuVisibility| refers to whether the change in the visibility of the
+// menu button is animated.
+// |animateSelectedState| refers to whether the change in the selected state (in
+// editing mode) of the cell is animated.
+// This method updates the visibility of the menu button.
+// This method updates the selected state of the cell (in editing mode).
+- (void)updateEditingStateOfCellAtIndexPath:(NSIndexPath*)indexPath
+ animateMenuVisibility:(BOOL)animateMenuVisibility
+ animateSelectedState:(BOOL)animateSelectedState;
+
+// Cancels all async loads of favicons. Subclasses should call this method when
+// the bookmark model is going through significant changes, then manually call
+// loadFaviconAtIndexPath: for everything that needs to be loaded; or
+// just reload relevant cells.
+- (void)cancelAllFaviconLoads;
+
+// Asynchronously loads favicon for given index path. The loads are cancelled
+// upon cell reuse automatically.
+- (void)loadFaviconAtIndexPath:(NSIndexPath*)indexPath;
+
+#pragma mark - Commonly used properties
+
+@property(nonatomic, assign, readonly) bookmarks::BookmarkModel* bookmarkModel;
+@property(nonatomic, assign, readonly) id<UrlLoader> loader;
+@property(nonatomic, assign, readonly) ios::ChromeBrowserState* browserState;
+
+#pragma mark - Editing
+
+@property(nonatomic, assign, readonly) BOOL editing;
+
+#pragma mark - Promo Cell
+
+// Return true if the section at the given index is a promo section.
+- (BOOL)isPromoSection:(NSInteger)section;
+- (BOOL)shouldShowPromoCell;
+- (BOOL)isPromoActive;
+
+@end
+
+#endif // IOS_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_COLLECTION_VIEW_H_

Powered by Google App Engine
This is Rietveld 408576698