| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 #include "base/sys_string_conversions.h" | 5 #include "base/sys_string_conversions.h" |
| 6 #include "chrome/browser/bookmarks/bookmark_model.h" | 6 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 7 #include "chrome/browser/browser.h" | 7 #include "chrome/browser/browser.h" |
| 8 #include "chrome/browser/browser_list.h" | 8 #include "chrome/browser/browser_list.h" |
| 9 #import "chrome/browser/cocoa/bookmark_bar_bridge.h" | 9 #import "chrome/browser/cocoa/bookmark_bar_bridge.h" |
| 10 #import "chrome/browser/cocoa/bookmark_bar_controller.h" | 10 #import "chrome/browser/cocoa/bookmark_bar_controller.h" |
| 11 #import "chrome/browser/cocoa/bookmark_bar_view.h" | 11 #import "chrome/browser/cocoa/bookmark_bar_view.h" |
| 12 #import "chrome/browser/cocoa/bookmark_button_cell.h" | 12 #import "chrome/browser/cocoa/bookmark_button_cell.h" |
| 13 #import "chrome/browser/cocoa/cocoa_utils.h" |
| 13 #include "chrome/browser/profile.h" | 14 #include "chrome/browser/profile.h" |
| 14 #include "chrome/common/pref_names.h" | 15 #include "chrome/common/pref_names.h" |
| 15 #include "chrome/common/pref_service.h" | 16 #include "chrome/common/pref_service.h" |
| 16 | 17 |
| 18 using namespace CocoaUtils; |
| 19 |
| 17 @interface BookmarkBarController(Private) | 20 @interface BookmarkBarController(Private) |
| 18 - (void)applyContentAreaOffset:(BOOL)apply; | 21 - (void)applyContentAreaOffset:(BOOL)apply; |
| 19 - (void)positionBar; | 22 - (void)positionBar; |
| 20 - (void)showBookmarkBar:(BOOL)enable; | 23 - (void)showBookmarkBar:(BOOL)enable; |
| 21 @end | 24 @end |
| 22 | 25 |
| 23 namespace { | 26 namespace { |
| 24 const int kBookmarkBarHeight = 30; | 27 const int kBookmarkBarHeight = 30; |
| 25 // Magic numbers from Cole | 28 // Magic numbers from Cole |
| 26 const CGFloat kDefaultBookmarkWidth = 150.0; | 29 const CGFloat kDefaultBookmarkWidth = 150.0; |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 // TODO(jrg): add an openBookmarkInBackground() for ctrl-click which | 145 // TODO(jrg): add an openBookmarkInBackground() for ctrl-click which |
| 143 // has a different disposition. | 146 // has a different disposition. |
| 144 - (void)openBookmark:(id)sender { | 147 - (void)openBookmark:(id)sender { |
| 145 BookmarkNode* node = static_cast<BookmarkNode*>([[[sender cell] | 148 BookmarkNode* node = static_cast<BookmarkNode*>([[[sender cell] |
| 146 representedObject] | 149 representedObject] |
| 147 pointerValue]); | 150 pointerValue]); |
| 148 DCHECK(node); | 151 DCHECK(node); |
| 149 [delegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB]; | 152 [delegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB]; |
| 150 } | 153 } |
| 151 | 154 |
| 152 // Return an NSCell suitable for a bookmark button. | 155 // Return an autoreleased NSCell suitable for a bookmark button. |
| 153 - (NSCell *)cellForBookmarkNode:(BookmarkNode*)node frame:(NSRect)frame { | 156 - (NSCell *)cellForBookmarkNode:(BookmarkNode*)node frame:(NSRect)frame { |
| 154 NSString* title = base::SysWideToNSString(node->GetTitle()); | 157 NSString* title = base::SysWideToNSString(node->GetTitle()); |
| 155 NSButtonCell *cell = [[[BookmarkButtonCell alloc] initTextCell:nil] | 158 NSButtonCell *cell = [[[BookmarkButtonCell alloc] initTextCell:nil] |
| 156 autorelease]; | 159 autorelease]; |
| 157 DCHECK(cell); | 160 DCHECK(cell); |
| 158 [cell setRepresentedObject:[NSValue valueWithPointer:node]]; | 161 [cell setRepresentedObject:[NSValue valueWithPointer:node]]; |
| 159 [cell setButtonType:NSMomentaryPushInButton]; | 162 [cell setButtonType:NSMomentaryPushInButton]; |
| 160 [cell setBezelStyle:NSShadowlessSquareBezelStyle]; | 163 [cell setBezelStyle:NSShadowlessSquareBezelStyle]; |
| 161 [cell setShowsBorderOnlyWhileMouseInside:YES]; | 164 [cell setShowsBorderOnlyWhileMouseInside:YES]; |
| 162 | 165 |
| 163 // TODO(jrg): add the real image. Find or write an SkBitmap-to-NSImage helper
. | 166 // The favicon may be NULL if we haven't loaded it yet. Bookmarks |
| 164 // For now I'm using the nav icon just to have something. | 167 // (and their icons) are loaded on the IO thread to speed launch. |
| 165 [cell setImage:[NSImage imageNamed:@"nav"]]; | 168 const SkBitmap& favicon = bookmarkModel_->GetFavIcon(node); |
| 166 [cell setImagePosition:NSImageLeft]; | 169 if (!favicon.isNull()) { |
| 170 NSImage* image = SkBitmapToNSImage(favicon); |
| 171 if (image) { |
| 172 [cell setImage:image]; |
| 173 [cell setImagePosition:NSImageLeft]; |
| 174 } |
| 175 } |
| 167 | 176 |
| 168 [cell setTitle:title]; | 177 [cell setTitle:title]; |
| 169 [cell setControlSize:NSSmallControlSize]; | 178 [cell setControlSize:NSSmallControlSize]; |
| 170 [cell setAlignment:NSLeftTextAlignment]; | 179 [cell setAlignment:NSLeftTextAlignment]; |
| 171 [cell setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; | 180 [cell setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; |
| 172 [cell setWraps:NO]; | 181 [cell setWraps:NO]; |
| 173 [cell setLineBreakMode:NSLineBreakByTruncatingMiddle]; | 182 [cell setLineBreakMode:NSLineBreakByTruncatingMiddle]; |
| 174 [cell setBordered:NO]; | 183 [cell setBordered:NO]; |
| 175 return cell; | 184 return cell; |
| 176 } | 185 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 url_string.c_str()]; | 245 url_string.c_str()]; |
| 237 [button setToolTip:tooltip]; | 246 [button setToolTip:tooltip]; |
| 238 } | 247 } |
| 239 // Finally, add it to the bookmark bar. | 248 // Finally, add it to the bookmark bar. |
| 240 [bookmarkBarView_ addSubview:button]; | 249 [bookmarkBarView_ addSubview:button]; |
| 241 } | 250 } |
| 242 } | 251 } |
| 243 | 252 |
| 244 // TODO(jrg): for now this is brute force. | 253 // TODO(jrg): for now this is brute force. |
| 245 - (void)loaded:(BookmarkModel*)model { | 254 - (void)loaded:(BookmarkModel*)model { |
| 255 DCHECK(model == bookmarkModel_); |
| 246 // Do nothing if not visible or too early | 256 // Do nothing if not visible or too early |
| 247 if ((barIsVisible_ == NO) || !model->IsLoaded()) | 257 if ((barIsVisible_ == NO) || !model->IsLoaded()) |
| 248 return; | 258 return; |
| 249 // Else brute force nuke and build. | 259 // Else brute force nuke and build. |
| 250 BookmarkNode* node = model->GetBookmarkBarNode(); | 260 BookmarkNode* node = model->GetBookmarkBarNode(); |
| 251 [self clearBookmarkBar]; | 261 [self clearBookmarkBar]; |
| 252 [self addNodesToBar:node]; | 262 [self addNodesToBar:node]; |
| 253 } | 263 } |
| 254 | 264 |
| 255 - (void)beingDeleted:(BookmarkModel*)model { | 265 - (void)beingDeleted:(BookmarkModel*)model { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 268 parent:(BookmarkNode*)oldParent index:(int)index { | 278 parent:(BookmarkNode*)oldParent index:(int)index { |
| 269 [self loaded:model]; | 279 [self loaded:model]; |
| 270 } | 280 } |
| 271 | 281 |
| 272 // TODO(jrg): for now this is brute force. | 282 // TODO(jrg): for now this is brute force. |
| 273 - (void)nodeChanged:(BookmarkModel*)model | 283 - (void)nodeChanged:(BookmarkModel*)model |
| 274 node:(BookmarkNode*)node { | 284 node:(BookmarkNode*)node { |
| 275 [self loaded:model]; | 285 [self loaded:model]; |
| 276 } | 286 } |
| 277 | 287 |
| 288 // TODO(jrg): linear searching is bad. |
| 289 // Need a BookmarkNode-->NSCell mapping. |
| 278 - (void)nodeFavIconLoaded:(BookmarkModel*)model | 290 - (void)nodeFavIconLoaded:(BookmarkModel*)model |
| 279 node:(BookmarkNode*)node { | 291 node:(BookmarkNode*)node { |
| 280 // TODO(jrg): no icons yet | 292 NSArray* views = [bookmarkBarView_ subviews]; |
| 293 for (NSButton* button in views) { |
| 294 NSButtonCell* cell = [button cell]; |
| 295 void* pointer = [[cell representedObject] pointerValue]; |
| 296 BookmarkNode* cellnode = static_cast<BookmarkNode*>(pointer); |
| 297 if (cellnode == node) { |
| 298 NSImage* image = SkBitmapToNSImage(bookmarkModel_->GetFavIcon(node)); |
| 299 if (image) { |
| 300 [cell setImage:image]; |
| 301 [cell setImagePosition:NSImageLeft]; |
| 302 } |
| 303 return; |
| 304 } |
| 305 } |
| 281 } | 306 } |
| 282 | 307 |
| 283 // TODO(jrg): for now this is brute force. | 308 // TODO(jrg): for now this is brute force. |
| 284 - (void)nodeChildrenReordered:(BookmarkModel*)model | 309 - (void)nodeChildrenReordered:(BookmarkModel*)model |
| 285 node:(BookmarkNode*)node { | 310 node:(BookmarkNode*)node { |
| 286 [self loaded:model]; | 311 [self loaded:model]; |
| 287 } | 312 } |
| 288 | 313 |
| 289 - (NSView*)view { | 314 - (NSView*)view { |
| 290 return bookmarkBarView_; | 315 return bookmarkBarView_; |
| 291 } | 316 } |
| 292 | 317 |
| 293 @end | 318 @end |
| OLD | NEW |