Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(746)

Unified Diff: chrome/browser/cocoa/download_shelf_controller.mm

Issue 93129: Initial download shelf on OS X.... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: fix download_uitest Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/cocoa/download_shelf_controller.h ('k') | chrome/browser/cocoa/download_shelf_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/cocoa/download_shelf_controller.mm
===================================================================
--- chrome/browser/cocoa/download_shelf_controller.mm (revision 0)
+++ chrome/browser/cocoa/download_shelf_controller.mm (revision 0)
@@ -0,0 +1,114 @@
+// 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 "download_shelf_controller.h"
+
+#include "base/mac_util.h"
+#import "chrome/browser/cocoa/browser_window_controller.h"
+#include "chrome/browser/cocoa/browser_window_cocoa.h"
+#include "chrome/browser/cocoa/download_shelf_mac.h"
+#import "chrome/browser/cocoa/download_shelf_view.h"
+
+
+@interface DownloadShelfController(Private)
+- (void)applyContentAreaOffset:(BOOL)apply;
+- (void)positionBar;
+- (void)showDownloadShelf:(BOOL)enable;
+@end
+
+
+@implementation DownloadShelfController
+
+- (id)initWithBrowser:(Browser*)browser
+ contentArea:(NSView*)content {
+ if ((self = [super initWithNibName:@"DownloadShelf"
+ bundle:mac_util::MainAppBundle()])) {
+ contentArea_ = content;
+ shelfHeight_ = [[self view] bounds].size.height;
+
+ [self positionBar];
+ [[[contentArea_ window] contentView] addSubview:[self view]];
+
+ // This calls show:, so it needs to be last.
+ bridge_.reset(new DownloadShelfMac(browser, self));
+ }
+ return self;
+}
+
+// Initializes the download shelf at the bottom edge of |contentArea_|.
+- (void)positionBar {
+ // Set the bar's height to zero and position it at the bottom of the
+ // content area, within the window's content view (as opposed to the
+ // tab strip, which is a sibling). We'll enlarge it and slide the
+ // content area up when we need to show this strip.
+ NSRect contentFrame = [contentArea_ frame];
+ NSRect barFrame = NSMakeRect(0, 0,
+ contentFrame.size.width, shelfHeight_);
+ [[self view] setFrame:barFrame];
+}
+
+// Called when the contentArea's frame changes. Enlarge the view to
+// stay with the bottom of the contentArea.
+- (void)resizeDownloadShelf {
+ NSRect barFrame = [[self view] frame];
+ barFrame.origin.y = 0;
+ barFrame.size.height = NSMinY([contentArea_ frame]);
+ [[self view] setFrame:barFrame];
+}
+
+// Show or hide the bar based on the value of |enable|. Handles animating the
+// resize of the content view.
+- (void)showDownloadShelf:(BOOL)enable {
+ contentAreaHasOffset_ = enable;
+ [[self view] setHidden:enable ? NO : YES];
+ [self applyContentAreaOffset:enable];
+
+ barIsVisible_ = enable;
+}
+
+// Apply a contents box offset to make (or remove) room for the
+// download shelf. 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.
+- (void)applyContentAreaOffset:(BOOL)apply {
+ if (!contentAreaHasOffset_ && apply) {
+ // There is no offset to unconditionally apply.
+ return;
+ }
+
+ NSRect frame = [contentArea_ frame];
+ if (apply) {
+ frame.origin.y += shelfHeight_;
+ frame.size.height -= shelfHeight_;
+ } else {
+ frame.origin.y -= shelfHeight_;
+ frame.size.height += shelfHeight_;
+ }
+
+ [[contentArea_ animator] setFrame:frame];
+ [[self view] setNeedsDisplay:YES];
+ [contentArea_ setNeedsDisplay:YES];
+}
+
+- (DownloadShelf*)bridge {
+ return bridge_.get();
+}
+
+- (BOOL)isVisible {
+ return barIsVisible_;
+}
+
+- (void)show:(id)sender {
+ [self showDownloadShelf:YES];
+}
+
+- (void)hide:(id)sender {
+ [self showDownloadShelf:NO];
+}
+
+- (void)addDownloadItem:(NSView*)view {
+ [[self view] addSubview:view];
+}
+
+@end
Property changes on: chrome/browser/cocoa/download_shelf_controller.mm
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/cocoa/download_shelf_controller.h ('k') | chrome/browser/cocoa/download_shelf_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698