blob: 42361225388e4abbb501ccd616ada245f75d87f7 [file] [log] [blame]
// 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_FOLDER_VIEW_CONTROLLER_H_
#define IOS_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_FOLDER_VIEW_CONTROLLER_H_
#import <UIKit/UIKit.h>
#include <set>
@class BookmarkFolderViewController;
namespace bookmarks {
class BookmarkModel;
class BookmarkNode;
} // namespace bookmarks
@protocol BookmarkFolderViewControllerDelegate
// Called when a bookmark folder is selected. |folder| is the newly selected
// folder.
- (void)folderPicker:(BookmarkFolderViewController*)folderPicker
didFinishWithFolder:(const bookmarks::BookmarkNode*)folder;
// Called when the user is done with the picker, either by tapping the Cancel or
// the Back button.
- (void)folderPickerDidCancel:(BookmarkFolderViewController*)folderPicker;
@end
// A folder selector view controller.
//
// This controller monitors the state of the bookmark model, so changes to the
// bookmark model can affect this controller's state.
// The bookmark model is assumed to be loaded, thus also not to be NULL.
@interface BookmarkFolderViewController : UIViewController
@property(nonatomic, weak) id<BookmarkFolderViewControllerDelegate> delegate;
// The current nodes (bookmarks or folders) that are considered for a move.
@property(nonatomic, assign, readonly)
const std::set<const bookmarks::BookmarkNode*>& editedNodes;
// Initializes the view controller with a bookmarks model. |allowsNewFolders|
// will instruct the controller to provide the necessary UI to create a folder.
// |bookmarkModel| must not be NULL and must be loaded.
// |editedNodes| affects which cells can be selected, since it is not possible
// to move a node into its subnode.
// |allowsCancel| puts a cancel and done button in the navigation bar instead of
// a back button, which is needed if this view controller is presented modally.
- (instancetype)
initWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel
allowsNewFolders:(BOOL)allowsNewFolders
editedNodes:(const std::set<const bookmarks::BookmarkNode*>&)nodes
allowsCancel:(BOOL)allowsCancel
selectedFolder:(const bookmarks::BookmarkNode*)selectedFolder;
// This method changes the currently selected folder and updates the UI. The
// delegate is not notified of the change.
- (void)changeSelectedFolder:(const bookmarks::BookmarkNode*)selectedFolder;
#pragma mark UIScrollViewDelegate
// Updates the MDCAppBar with changes to the collection view scroll state. Must
// be called by subclasses if they override this method in order to maintain
// this functionality.
- (void)scrollViewDidScroll:(UIScrollView*)scrollView NS_REQUIRES_SUPER;
// Updates the MDCAppBar with changes to the collection view scroll state. Must
// be called by subclasses if they override this method in order to maintain
// this functionality.
- (void)scrollViewDidEndDragging:(UIScrollView*)scrollView
willDecelerate:(BOOL)decelerate NS_REQUIRES_SUPER;
// Updates the MDCAppBar with changes to the collection view scroll state. Must
// be called by subclasses if they override this method in order to maintain
// this functionality.
- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView
NS_REQUIRES_SUPER;
// Updates the MDCAppBar with changes to the collection view scroll state. Must
// be called by subclasses if they override this method in order to maintain
// this functionality.
- (void)scrollViewWillEndDragging:(UIScrollView*)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint*)targetContentOffset
NS_REQUIRES_SUPER;
@end
#endif // IOS_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_FOLDER_VIEW_CONTROLLER_H_