summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/bookmark_bar_controller.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/cocoa/bookmark_bar_controller.mm')
-rw-r--r--chrome/browser/cocoa/bookmark_bar_controller.mm127
1 files changed, 25 insertions, 102 deletions
diff --git a/chrome/browser/cocoa/bookmark_bar_controller.mm b/chrome/browser/cocoa/bookmark_bar_controller.mm
index d32ecbf..8fede00 100644
--- a/chrome/browser/cocoa/bookmark_bar_controller.mm
+++ b/chrome/browser/cocoa/bookmark_bar_controller.mm
@@ -14,6 +14,7 @@
#import "chrome/browser/cocoa/bookmark_editor_controller.h"
#import "chrome/browser/cocoa/bookmark_name_folder_controller.h"
#import "chrome/browser/cocoa/bookmark_menu_cocoa_controller.h"
+#import "chrome/browser/cocoa/view_resizer.h"
#include "chrome/browser/cocoa/nsimage_cache.h"
#include "chrome/browser/profile.h"
#include "chrome/common/pref_names.h"
@@ -31,15 +32,8 @@
namespace {
-// TODO(jrg): this is the right proportional height but overlaps the
-// "blue outline" of the omnibox. Fix.
-
// Our height, when opened.
const int kBookmarkBarHeight = 30;
-// How much to adjust our parent view.
-const int kBookmarkBarSuperviewHeightAdjustment = 25;
-// How much to adjust the web frame.
-const int kBookmarkBarWebframeHeightAdjustment = 25;
// Magic numbers from Cole
const CGFloat kDefaultBookmarkWidth = 150.0;
@@ -50,19 +44,17 @@ const CGFloat kBookmarkHorizontalPadding = 1.0;
@implementation BookmarkBarController
- (id)initWithProfile:(Profile*)profile
- parentView:(NSView*)parentView
- webContentView:(NSView*)webContentView
- infoBarsView:(NSView*)infoBarsView
- delegate:(id<BookmarkURLOpener>)delegate {
+ initialWidth:(float)initialWidth
+ resizeDelegate:(id<ViewResizer>)resizeDelegate
+ urlDelegate:(id<BookmarkURLOpener>)urlDelegate {
if ((self = [super initWithNibName:@"BookmarkBar"
bundle:mac_util::MainAppBundle()])) {
profile_ = profile;
+ initialWidth_ = initialWidth;
bookmarkModel_ = profile->GetBookmarkModel();
- parentView_ = parentView;
- webContentView_ = webContentView;
- infoBarsView_ = infoBarsView;
buttons_.reset([[NSMutableArray alloc] init]);
- delegate_ = delegate;
+ resizeDelegate_ = resizeDelegate;
+ urlDelegate_ = urlDelegate;
}
return self;
}
@@ -75,14 +67,11 @@ const CGFloat kBookmarkHorizontalPadding = 1.0;
- (void)awakeFromNib {
// We default to NOT open, which means height=0.
DCHECK([[self view] isHidden]); // Hidden so it's OK to change.
- NSRect frame = [[self view] frame];
- frame.size.height = 0;
- frame.size.width = [parentView_ frame].size.width;
- [[self view] setFrame:frame];
-
- // Make sure the nodes stay bottom-aligned.
- [[self view] setAutoresizingMask:(NSViewWidthSizable |
- NSViewMinYMargin)];
+
+ // Set our initial height to zero, since that is what the superview
+ // expects. We will resize ourselves open later if needed.
+ [[self view] setFrame:NSMakeRect(0, 0, initialWidth_, 0)];
+
// Be sure to enable the bar before trying to show it...
barIsEnabled_ = YES;
if (profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar))
@@ -135,82 +124,16 @@ const CGFloat kBookmarkHorizontalPadding = 1.0;
// determine desired state.
- (void)showBookmarkBar:(BOOL)show immediately:(BOOL)immediately {
if (barIsEnabled_ && (barShouldBeShown_ != show)) {
- contentViewHasOffset_ = show;
- [[self view] setHidden:show ? NO : YES];
+ if ([self view]) {
+ [[self view] setHidden:show ? NO : YES];
+ [resizeDelegate_ resizeView:[self view]
+ newHeight:(show ? kBookmarkBarHeight : 0)];
+ }
barShouldBeShown_ = show;
if (show) {
[self loaded:bookmarkModel_];
}
- [self applyContentAreaOffset:show immediately:immediately];
- }
-}
-
-// Apply a contents box offset to make (or remove) room for the
-// bookmark bar. If apply==YES, always make room (the contentView_ is
-// "full size"). If apply==NO we are trying to undo an offset. If no
-// offset there is nothing to undo.
-//
-// TODO(jrg): it is awkward we change the sizes of views for our
-// parent and siblings; ideally they change their own sizes.
-//
-// TODO(jrg): unlike windows, we process events while an animator is
-// running. Thus, if you resize the window while the bookmark bar is
-// animating, you'll mess things up. Fix.
-- (void)applyContentAreaOffset:(BOOL)apply immediately:(BOOL)immediately {
- if ([self view] == nil) {
- // We're too early, but awakeFromNib will call me again.
- return;
- }
- if (!contentViewHasOffset_ && apply) {
- // There is no offset to unconditionally apply.
- return;
- }
-
- // None of these locals are members of the Hall of Justice.
- NSRect superframe = [parentView_ frame];
- NSRect frame = [[self view] frame];
- NSRect webframe = [webContentView_ frame];
- NSRect infoframe = [infoBarsView_ frame];
- if (apply) {
- superframe.size.height += kBookmarkBarSuperviewHeightAdjustment;
- // TODO(jrg): y=0 if we add the bookmark bar before the parent
- // view (toolbar) is placed in the view hierarchy. A different
- // CL, where the bookmark bar is extracted from the toolbar nib,
- // may fix this awkwardness.
- if (superframe.origin.y > 0) {
- superframe.origin.y -= kBookmarkBarSuperviewHeightAdjustment;
- webframe.size.height -= kBookmarkBarWebframeHeightAdjustment;
- }
- frame.size.height += kBookmarkBarHeight;
- infoframe.origin.y -= kBookmarkBarWebframeHeightAdjustment;
- } else {
- superframe.size.height -= kBookmarkBarSuperviewHeightAdjustment;
- superframe.origin.y += kBookmarkBarSuperviewHeightAdjustment;
- frame.size.height -= kBookmarkBarHeight;
- webframe.size.height += kBookmarkBarWebframeHeightAdjustment;
- infoframe.origin.y += kBookmarkBarWebframeHeightAdjustment;
}
-
- // TODO(jrg): Animators can be a little fussy. Setting these three
- // off can sometimes causes races where the finish isn't as
- // expected. Fix, or clean out the animators as an option.
- // Odd racing is FAR worse than a lack of an animator.
- if (1 /* immediately */) {
- [parentView_ setFrame:superframe];
- [webContentView_ setFrame:webframe];
- [infoBarsView_ setFrame:infoframe];
- [[self view] setFrame:frame];
- } else {
- [[parentView_ animator] setFrame:superframe];
- [[webContentView_ animator] setFrame:webframe];
- [[infoBarsView_ animator] setFrame:infoframe];
- [[[self view] animator] setFrame:frame];
- }
-
- [[self view] setNeedsDisplay:YES];
- [parentView_ setNeedsDisplay:YES];
- [webContentView_ setNeedsDisplay:YES];
- [infoBarsView_ setNeedsDisplay:YES];
}
- (BOOL)isBookmarkBarVisible {
@@ -259,7 +182,7 @@ const CGFloat kBookmarkHorizontalPadding = 1.0;
- (IBAction)openBookmark:(id)sender {
BookmarkNode* node = [self nodeFromButton:sender];
- [delegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB];
+ [urlDelegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB];
}
// Given a NSMenuItem tag, return the appropriate bookmark node id.
@@ -382,17 +305,17 @@ const CGFloat kBookmarkHorizontalPadding = 1.0;
- (IBAction)openBookmarkInNewForegroundTab:(id)sender {
BookmarkNode* node = [self nodeFromMenuItem:sender];
- [delegate_ openBookmarkURL:node->GetURL() disposition:NEW_FOREGROUND_TAB];
+ [urlDelegate_ openBookmarkURL:node->GetURL() disposition:NEW_FOREGROUND_TAB];
}
- (IBAction)openBookmarkInNewWindow:(id)sender {
BookmarkNode* node = [self nodeFromMenuItem:sender];
- [delegate_ openBookmarkURL:node->GetURL() disposition:NEW_WINDOW];
+ [urlDelegate_ openBookmarkURL:node->GetURL() disposition:NEW_WINDOW];
}
- (IBAction)openBookmarkInIncognitoWindow:(id)sender {
BookmarkNode* node = [self nodeFromMenuItem:sender];
- [delegate_ openBookmarkURL:node->GetURL() disposition:OFF_THE_RECORD];
+ [urlDelegate_ openBookmarkURL:node->GetURL() disposition:OFF_THE_RECORD];
}
- (IBAction)editBookmark:(id)sender {
@@ -431,7 +354,7 @@ const CGFloat kBookmarkHorizontalPadding = 1.0;
for (int i = 0; i < node->GetChildCount(); i++) {
BookmarkNode* child = node->GetChild(i);
if (child->is_url())
- [delegate_ openBookmarkURL:child->GetURL()
+ [urlDelegate_ openBookmarkURL:child->GetURL()
disposition:NEW_BACKGROUND_TAB];
else
[self openBookmarkNodesRecursive:child];
@@ -572,7 +495,7 @@ const CGFloat kBookmarkHorizontalPadding = 1.0;
- (IBAction)openBookmarkMenuItem:(id)sender {
int64 tag = [self nodeIdFromMenuTag:[sender tag]];
const BookmarkNode* node = bookmarkModel_->GetNodeByID(tag);
- [delegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB];
+ [urlDelegate_ openBookmarkURL:node->GetURL() disposition:CURRENT_TAB];
}
// Add all items from the given model to our bookmark bar.
@@ -700,8 +623,8 @@ const CGFloat kBookmarkHorizontalPadding = 1.0;
[self loaded:model];
}
-- (void)setDelegate:(id<BookmarkURLOpener>)delegate {
- delegate_ = delegate;
+- (void)setUrlDelegate:(id<BookmarkURLOpener>)urlDelegate {
+ urlDelegate_ = urlDelegate;
}
- (NSArray*)buttons {