// Copyright (c) 2009 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. #import #include @class BookmarkItem; @class BookmarkManagerController; // Controller for the bookmark tree view (the right pane). @interface BookmarkTreeController : NSObject { @private IBOutlet NSOutlineView* outline_; IBOutlet BookmarkManagerController* manager_; BookmarkItem* group_; BOOL showsLeaves_; BOOL flat_; } // If set, leaf (URL) bookmarks are shown; if not, they're hidden. @property BOOL showsLeaves; // If set, displays a flat list (no hierarchy). @property BOOL flat; // Controls the visibility of the "Folder" column (used with search/recents.) @property BOOL showsFolderColumn; // The top-level bookmark folder used as the root of the outline's tree. // Observable, bindable. @property (assign) BookmarkItem* group; // Controls whether leaf bookmarks or just folders are shown. // The currently selected item(s) in the outline. (Observable.) @property (retain) NSArray* selectedItems; // The currently selected single item; nil on multiple selection. (Observable.) @property (retain) BookmarkItem* selectedItem; // The currently selected or right-clicked items, for commands to act on. @property (readonly) NSArray* actionItems; // The parent folder and index at which items should be inserted/pasted. // Returns NO if insertion is not allowed. - (BOOL)getInsertionParent:(BookmarkItem**)outParent index:(NSUInteger*)outIndex; // Just returns whether insertion is allowed. - (BOOL)canInsert; // Expands a folder item (including any parent folders). // Returns YES on success, NO if it couldn't find the folder. - (BOOL)expandItem:(BookmarkItem*)item; // Expands parent folders, selects the item, and scrolls it into view: // Returns YES on success, NO if it couldn't find the item. - (BOOL)revealItem:(BookmarkItem*)item; // Action for the New Folder command. - (IBAction)newFolder:(id)sender; // Action for the Delete command; also invoked by the delete key. - (IBAction)delete:(id)sender; // Reveals the selected search/recent item in its real folder. - (IBAction)revealSelectedItem:(id)sender; // Opens the selected bookmark(s) in new tabs. - (IBAction)openItems:(id)sender; // Makes the selected bookmark's title editable. - (IBAction)editTitle:(id)sender; // Returns YES if an action should be enabled. - (BOOL)validateAction:(SEL)action; // Called by the BookmarkManagerController to notify the data model's changed. - (void)itemChanged:(BookmarkItem*)nodeItem childrenChanged:(BOOL)childrenChanged; @end // Drag/drop and copy/paste methods // (These are implemented in bookmark_tree_controller_paste.mm.) @interface BookmarkTreeController (Pasteboard) // One-time drag-n-drop setup; called from -awakeFromNib. - (void)registerDragTypes; - (IBAction)cut:(id)sender; - (IBAction)copy:(id)sender; - (IBAction)paste:(id)sender; @end // Exposed only for unit tests. @interface BookmarkTreeController (UnitTesting) @property (readonly) NSOutlineView* outline; - (BookmarkItem*)newFolderWithTitle:(NSString*)title; - (NSArray*)readPropertyListFromPasteboard:(NSPasteboard*)pb; - (BOOL)copyToPasteboard:(NSPasteboard*)pb; - (BOOL)pasteFromPasteboard:(NSPasteboard*)pb; - (BookmarkItem*)itemForDropOnItem:(BookmarkItem*)item proposedIndex:(NSInteger*)childIndex; - (void)moveItems:(NSArray*)items toFolder:(BookmarkItem*)dstParent atIndex:(int)dstIndex; @end // Outline view for bookmark tree; handles Cut/Copy/Paste and Delete key. @interface BookmarksOutlineView : NSOutlineView // The owning BookmarkTreeController (same as the delegate). @property (readonly) BookmarkTreeController* bookmarkController; @end