| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
| 6 #include <vector> | 6 #include <vector> |
| 7 #import "chrome/browser/ui/cocoa/draggable_button.h" | 7 #import "chrome/browser/ui/cocoa/draggable_button.h" |
| 8 #import "chrome/browser/ui/cocoa/themed_window.h" | 8 #import "chrome/browser/ui/cocoa/themed_window.h" |
| 9 #include "ui/base/window_open_disposition.h" | 9 #include "ui/base/window_open_disposition.h" |
| 10 | 10 |
| 11 @class BookmarkBarFolderController; | 11 @class BookmarkBarFolderController; |
| 12 @class BookmarkButton; | 12 @class BookmarkButton; |
| 13 class BookmarkNode; | |
| 14 @class BrowserWindowController; | 13 @class BrowserWindowController; |
| 15 class ThemeService; | 14 class ThemeService; |
| 16 | 15 |
| 17 namespace bookmarks { | 16 namespace bookmarks { |
| 18 class BookmarkModel; | 17 class BookmarkModel; |
| 18 class BookmarkNode; |
| 19 } | 19 } |
| 20 | 20 |
| 21 // Protocol for a BookmarkButton's delegate, responsible for doing | 21 // Protocol for a BookmarkButton's delegate, responsible for doing |
| 22 // things on behalf of a bookmark button. | 22 // things on behalf of a bookmark button. |
| 23 @protocol BookmarkButtonDelegate | 23 @protocol BookmarkButtonDelegate |
| 24 | 24 |
| 25 // Fill the given pasteboard with appropriate data when the given button is | 25 // Fill the given pasteboard with appropriate data when the given button is |
| 26 // dragged. Since the delegate has no way of providing pasteboard data later, | 26 // dragged. Since the delegate has no way of providing pasteboard data later, |
| 27 // all data must actually be put into the pasteboard and not merely promised. | 27 // all data must actually be put into the pasteboard and not merely promised. |
| 28 - (void)fillPasteboard:(NSPasteboard*)pboard | 28 - (void)fillPasteboard:(NSPasteboard*)pboard |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 to:(NSPoint)point | 100 to:(NSPoint)point |
| 101 copy:(BOOL)copy; | 101 copy:(BOOL)copy; |
| 102 | 102 |
| 103 // Determine if the pasteboard from |info| has dragging data containing | 103 // Determine if the pasteboard from |info| has dragging data containing |
| 104 // bookmark(s) and perform the drag and return YES, otherwise return NO. | 104 // bookmark(s) and perform the drag and return YES, otherwise return NO. |
| 105 - (BOOL)dragBookmarkData:(id<NSDraggingInfo>)info; | 105 - (BOOL)dragBookmarkData:(id<NSDraggingInfo>)info; |
| 106 | 106 |
| 107 // Determine if the drag pasteboard has any drag data of type | 107 // Determine if the drag pasteboard has any drag data of type |
| 108 // kBookmarkDictionaryListPboardType and, if so, return those elements | 108 // kBookmarkDictionaryListPboardType and, if so, return those elements |
| 109 // otherwise return an empty vector. | 109 // otherwise return an empty vector. |
| 110 - (std::vector<const BookmarkNode*>)retrieveBookmarkNodeData; | 110 - (std::vector<const bookmarks::BookmarkNode*>)retrieveBookmarkNodeData; |
| 111 | 111 |
| 112 // Return YES if we should show the drop indicator, else NO. In some | 112 // Return YES if we should show the drop indicator, else NO. In some |
| 113 // cases (e.g. hover open) we don't want to show the drop indicator. | 113 // cases (e.g. hover open) we don't want to show the drop indicator. |
| 114 // |point| is in the base coordinate system of the destination window; | 114 // |point| is in the base coordinate system of the destination window; |
| 115 // |it comes from an id<NSDraggingInfo>. | 115 // |it comes from an id<NSDraggingInfo>. |
| 116 - (BOOL)shouldShowIndicatorShownForPoint:(NSPoint)point; | 116 - (BOOL)shouldShowIndicatorShownForPoint:(NSPoint)point; |
| 117 | 117 |
| 118 // The x or y coordinate of (the middle of) the indicator to draw for | 118 // The x or y coordinate of (the middle of) the indicator to draw for |
| 119 // a drag of the source button to the given point (given in window | 119 // a drag of the source button to the given point (given in window |
| 120 // coordinates). | 120 // coordinates). |
| (...skipping 19 matching lines...) Expand all Loading... |
| 140 - (void)childFolderWillClose:(id<BookmarkButtonControllerProtocol>)child; | 140 - (void)childFolderWillClose:(id<BookmarkButtonControllerProtocol>)child; |
| 141 | 141 |
| 142 // Return a controller's folder controller for a subfolder, or nil. | 142 // Return a controller's folder controller for a subfolder, or nil. |
| 143 - (BookmarkBarFolderController*)folderController; | 143 - (BookmarkBarFolderController*)folderController; |
| 144 | 144 |
| 145 // Add a new folder controller as triggered by the given folder button. | 145 // Add a new folder controller as triggered by the given folder button. |
| 146 // If there is a current folder controller, close it. | 146 // If there is a current folder controller, close it. |
| 147 - (void)addNewFolderControllerWithParentButton:(BookmarkButton*)parentButton; | 147 - (void)addNewFolderControllerWithParentButton:(BookmarkButton*)parentButton; |
| 148 | 148 |
| 149 // Open all of the nodes for the given node with disposition. | 149 // Open all of the nodes for the given node with disposition. |
| 150 - (void)openAll:(const BookmarkNode*)node | 150 - (void)openAll:(const bookmarks::BookmarkNode*)node |
| 151 disposition:(WindowOpenDisposition)disposition; | 151 disposition:(WindowOpenDisposition)disposition; |
| 152 | 152 |
| 153 // There are several operations which may affect the contents of a bookmark | 153 // There are several operations which may affect the contents of a bookmark |
| 154 // button controller after it has been created, primary of which are | 154 // button controller after it has been created, primary of which are |
| 155 // cut/paste/delete and drag/drop. Such changes may involve coordinating | 155 // cut/paste/delete and drag/drop. Such changes may involve coordinating |
| 156 // the bookmark button contents of two controllers (such as when a bookmark is | 156 // the bookmark button contents of two controllers (such as when a bookmark is |
| 157 // dragged from one folder to another). The bookmark bar controller | 157 // dragged from one folder to another). The bookmark bar controller |
| 158 // coordinates in response to notifications propagated by the bookmark model | 158 // coordinates in response to notifications propagated by the bookmark model |
| 159 // through BookmarkBarBridge calls. The following three functions are | 159 // through BookmarkBarBridge calls. The following three functions are |
| 160 // implemented by the controllers and are dispatched by the bookmark bar | 160 // implemented by the controllers and are dispatched by the bookmark bar |
| 161 // controller in response to notifications coming in from the BookmarkBarBridge. | 161 // controller in response to notifications coming in from the BookmarkBarBridge. |
| 162 | 162 |
| 163 // Add a button for the given node to the bar or folder menu. This is safe | 163 // Add a button for the given node to the bar or folder menu. This is safe |
| 164 // to call when a folder menu window is open as that window will be updated. | 164 // to call when a folder menu window is open as that window will be updated. |
| 165 // And index of -1 means to append to the end (bottom). | 165 // And index of -1 means to append to the end (bottom). |
| 166 - (void)addButtonForNode:(const BookmarkNode*)node | 166 - (void)addButtonForNode:(const bookmarks::BookmarkNode*)node |
| 167 atIndex:(NSInteger)buttonIndex; | 167 atIndex:(NSInteger)buttonIndex; |
| 168 | 168 |
| 169 // Given a list or |urls| and |titles|, create new bookmark nodes and add | 169 // Given a list or |urls| and |titles|, create new bookmark nodes and add |
| 170 // them to the bookmark model such that they will be 1) added to the folder | 170 // them to the bookmark model such that they will be 1) added to the folder |
| 171 // represented by the button at |point| if it is a folder, or 2) inserted | 171 // represented by the button at |point| if it is a folder, or 2) inserted |
| 172 // into the parent of the non-folder bookmark at |point| in front of that | 172 // into the parent of the non-folder bookmark at |point| in front of that |
| 173 // button. Returns YES if at least one bookmark was added. | 173 // button. Returns YES if at least one bookmark was added. |
| 174 - (BOOL)addURLs:(NSArray*)urls withTitles:(NSArray*)titles at:(NSPoint)point; | 174 - (BOOL)addURLs:(NSArray*)urls withTitles:(NSArray*)titles at:(NSPoint)point; |
| 175 | 175 |
| 176 // Move a button from one place in the menu to another. This is safe | 176 // Move a button from one place in the menu to another. This is safe |
| 177 // to call when a folder menu window is open as that window will be updated. | 177 // to call when a folder menu window is open as that window will be updated. |
| 178 - (void)moveButtonFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex; | 178 - (void)moveButtonFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex; |
| 179 | 179 |
| 180 // Remove the bookmark button at the given index. Show the poof animation | 180 // Remove the bookmark button at the given index. Show the poof animation |
| 181 // if |animate:| is YES. It may be obvious, but this is safe | 181 // if |animate:| is YES. It may be obvious, but this is safe |
| 182 // to call when a folder menu window is open as that window will be updated. | 182 // to call when a folder menu window is open as that window will be updated. |
| 183 - (void)removeButton:(NSInteger)buttonIndex animate:(BOOL)poof; | 183 - (void)removeButton:(NSInteger)buttonIndex animate:(BOOL)poof; |
| 184 | 184 |
| 185 // Determine the controller containing the button representing |node|, if any. | 185 // Determine the controller containing the button representing |node|, if any. |
| 186 - (id<BookmarkButtonControllerProtocol>)controllerForNode: | 186 - (id<BookmarkButtonControllerProtocol>)controllerForNode: |
| 187 (const BookmarkNode*)node; | 187 (const bookmarks::BookmarkNode*)node; |
| 188 | 188 |
| 189 @end // @protocol BookmarkButtonControllerProtocol | 189 @end // @protocol BookmarkButtonControllerProtocol |
| 190 | 190 |
| 191 | 191 |
| 192 // Class for bookmark bar buttons that can be drag sources. | 192 // Class for bookmark bar buttons that can be drag sources. |
| 193 @interface BookmarkButton : DraggableButton<ThemedWindowDrawing> { | 193 @interface BookmarkButton : DraggableButton<ThemedWindowDrawing> { |
| 194 @private | 194 @private |
| 195 IBOutlet NSObject<BookmarkButtonDelegate>* delegate_; // Weak. | 195 IBOutlet NSObject<BookmarkButtonDelegate>* delegate_; // Weak. |
| 196 | 196 |
| 197 // Saved pointer to the BWC for the browser window that contains this button. | 197 // Saved pointer to the BWC for the browser window that contains this button. |
| 198 // Used to lock and release bar visibility during a drag. The pointer is | 198 // Used to lock and release bar visibility during a drag. The pointer is |
| 199 // saved because the bookmark button is no longer a part of a window at the | 199 // saved because the bookmark button is no longer a part of a window at the |
| 200 // end of a drag operation (or, in fact, can be dragged to a completely | 200 // end of a drag operation (or, in fact, can be dragged to a completely |
| 201 // different window), so there is no way to retrieve the same BWC object after | 201 // different window), so there is no way to retrieve the same BWC object after |
| 202 // a drag. | 202 // a drag. |
| 203 BrowserWindowController* visibilityDelegate_; // weak | 203 BrowserWindowController* visibilityDelegate_; // weak |
| 204 | 204 |
| 205 NSPoint dragMouseOffset_; | 205 NSPoint dragMouseOffset_; |
| 206 NSPoint dragEndScreenLocation_; | 206 NSPoint dragEndScreenLocation_; |
| 207 BOOL dragPending_; | 207 BOOL dragPending_; |
| 208 BOOL acceptsTrackIn_; | 208 BOOL acceptsTrackIn_; |
| 209 NSTrackingArea* area_; | 209 NSTrackingArea* area_; |
| 210 } | 210 } |
| 211 | 211 |
| 212 @property(assign, nonatomic) NSObject<BookmarkButtonDelegate>* delegate; | 212 @property(assign, nonatomic) NSObject<BookmarkButtonDelegate>* delegate; |
| 213 @property(assign, nonatomic) BOOL acceptsTrackIn; | 213 @property(assign, nonatomic) BOOL acceptsTrackIn; |
| 214 | 214 |
| 215 // Return the bookmark node associated with this button, or NULL. | 215 // Return the bookmark node associated with this button, or NULL. |
| 216 - (const BookmarkNode*)bookmarkNode; | 216 - (const bookmarks::BookmarkNode*)bookmarkNode; |
| 217 | 217 |
| 218 // Return YES if this is a folder button (the node has subnodes). | 218 // Return YES if this is a folder button (the node has subnodes). |
| 219 - (BOOL)isFolder; | 219 - (BOOL)isFolder; |
| 220 | 220 |
| 221 - (void)mouseDragged:(NSEvent*)theEvent; | 221 - (void)mouseDragged:(NSEvent*)theEvent; |
| 222 | 222 |
| 223 - (BOOL)acceptsTrackInFrom:(id)sender; | 223 - (BOOL)acceptsTrackInFrom:(id)sender; |
| 224 | 224 |
| 225 // At this time we represent an empty folder (e.g. the string | 225 // At this time we represent an empty folder (e.g. the string |
| 226 // '(empty)') as a disabled button with no associated node. | 226 // '(empty)') as a disabled button with no associated node. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 | 259 |
| 260 // Key for userInfo dict of a kPulseBookmarkButtonNotification. | 260 // Key for userInfo dict of a kPulseBookmarkButtonNotification. |
| 261 // Value is a [NSValue valueWithPointer:]; pointer is a (const BookmarkNode*). | 261 // Value is a [NSValue valueWithPointer:]; pointer is a (const BookmarkNode*). |
| 262 extern NSString* const kBookmarkKey; | 262 extern NSString* const kBookmarkKey; |
| 263 | 263 |
| 264 // Key for userInfo dict of a kPulseBookmarkButtonNotification. | 264 // Key for userInfo dict of a kPulseBookmarkButtonNotification. |
| 265 // Value is a [NSNumber numberWithBool:] to turn pulsing on or off. | 265 // Value is a [NSNumber numberWithBool:] to turn pulsing on or off. |
| 266 extern NSString* const kBookmarkPulseFlagKey; | 266 extern NSString* const kBookmarkPulseFlagKey; |
| 267 | 267 |
| 268 }; | 268 }; |
| OLD | NEW |