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

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

Issue 2673006: AutoFill Profiles dialog implemented according to new mocks on Mac (Closed)
Patch Set: Revisions based on review comments. Created 10 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
Index: chrome/browser/cocoa/disclosure_view_controller.mm
diff --git a/chrome/browser/cocoa/disclosure_view_controller.mm b/chrome/browser/cocoa/disclosure_view_controller.mm
deleted file mode 100644
index 4e1b8f20c3520feff15fc823f21769127e101851..0000000000000000000000000000000000000000
--- a/chrome/browser/cocoa/disclosure_view_controller.mm
+++ /dev/null
@@ -1,246 +0,0 @@
-// Copyright (c) 2010 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 "chrome/browser/cocoa/disclosure_view_controller.h"
-#include "base/logging.h"
-
-namespace {
-const NSInteger kClosedBoxHeight = 20;
-const CGFloat kDisclosureAnimationDurationSeconds = .2;
-NSString* const kKVODisclosedKey = @"disclosed";
-}
-
-// This class externalizes the state of the disclosure control. When the
-// disclosure control is pressed it changes the state of this object. In turn
-// the KVO machinery detects the change to |disclosed| and signals the
-// |observeValueForKeyPath| call in the |DisclosureViewController|.
-@interface DisclosureViewState : NSObject {
- @private
- NSCellStateValue disclosed_;
-}
-@property (nonatomic) NSCellStateValue disclosed;
-@end
-
-@implementation DisclosureViewState
-@synthesize disclosed = disclosed_;
-@end
-
-@interface DisclosureViewController(PrivateMethods)
-
-- (void)initFrameSize:(NSCellStateValue)state;
-- (NSRect)openStateFrameSize:(NSRect)startFrame;
-- (NSRect)closedStateFrameSize:(NSRect)startFrame;
-- (void)startAnimations:(NSView*)view
- start:(NSRect)startFrame
- end:(NSRect)endFrame;
-- (void)discloseDetails:(NSCellStateValue)state;
-- (void)setContentViewVisibility;
-- (void)observeValueForKeyPath:(NSString*)keyPath
- ofObject:(id)object
- change:(NSDictionary*)change
- context:(void*)context;
-
-@end
-
-@implementation DisclosureViewController
-
-@synthesize disclosureState = disclosureState_;
-
-- (void)awakeFromNib {
- // Create the disclosure state.
- [self setDisclosureState:[[[DisclosureViewState alloc] init] autorelease]];
-
- // Set up the initial disclosure state before we install the observer.
- // We don't want our animations firing before we're done initializing.
- [disclosureState_ setValue:[NSNumber numberWithInt:initialDisclosureState_]
- forKey:kKVODisclosedKey];
-
- // Pick up "open" height from the initial state of the view in the nib.
- openHeight_ = [[self view] frame].size.height;
-
- // Set frame size according to initial disclosure state.
- [self initFrameSize:initialDisclosureState_];
-
- // Set content visibility according to initial disclosure state.
- [self setContentViewVisibility];
-
- // Setup observers so that when disclosure state changes we resize frame
- // accordingly.
- [disclosureState_ addObserver:self forKeyPath:kKVODisclosedKey
- options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld
- context:nil];
-}
-
-- (id)initWithNibName:(NSString *)nibNameOrNil
- bundle:(NSBundle *)nibBundleOrNil
- disclosure:(NSCellStateValue)disclosureState {
- if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
- initialDisclosureState_ = disclosureState;
- }
- return self;
-}
-
-- (void)dealloc {
- [disclosureState_ removeObserver:self forKeyPath:kKVODisclosedKey];
- [animation_ stopAnimation];
- [disclosureState_ release];
- [super dealloc];
-}
-
-@end
-
-@implementation DisclosureViewController(PrivateMethods)
-
-// Initializes the view's frame geometry based on the input |state|.
-// If the |state| is NSOnState then the frame size corresponds to "open".
-// If the |state| is NSOffState then the frame size corresponds to "closed".
-// The |origin.x| and |size.width| remain unchanged, but the |origin.y| and
-// |size.height| may vary.
-- (void)initFrameSize:(NSCellStateValue)state {
- if (state == NSOnState) {
- [[self view] setFrame:[self openStateFrameSize:[[self view] frame]]];
- }
- else if (state == NSOffState) {
- [[self view] setFrame:[self closedStateFrameSize:[[self view] frame]]];
- }
- else {
- NOTREACHED();
- }
-}
-
-// Computes the frame geometry during the "open" state of the disclosure view.
-- (NSRect)openStateFrameSize:(NSRect)startFrame {
- return NSMakeRect(startFrame.origin.x,
- startFrame.size.height - openHeight_ +
- startFrame.origin.y,
- startFrame.size.width,
- openHeight_);
-}
-
-// Computes the frame geometry during the "closed" state of the disclosure view.
-- (NSRect)closedStateFrameSize:(NSRect)startFrame {
- return NSMakeRect(startFrame.origin.x,
- startFrame.size.height - kClosedBoxHeight +
- startFrame.origin.y,
- startFrame.size.width,
- kClosedBoxHeight);
-}
-
-// Animates the opening or closing of the disclosure view. The |startFrame|
-// specifies the frame geometry at the beginning of the animation and the
-// |endFrame| specifies the geometry at the end of the animation. The input
-// |view| is view managed by this controller.
-- (void)startAnimations:(NSView*)view
- start:(NSRect)startFrame
- end:(NSRect)endFrame
-{
- // Setup dictionary describing animation.
- // Create the attributes dictionary for the first view.
- NSMutableDictionary* dictionary;
- dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
- // Specify which view to modify.
- view, NSViewAnimationTargetKey,
- // Specify the starting position of the view.
- [NSValue valueWithRect:startFrame], NSViewAnimationStartFrameKey,
- // Change the ending position of the view.
- [NSValue valueWithRect:endFrame], NSViewAnimationEndFrameKey,
- nil];
-
- // Stop any existing animation.
- [animation_ stopAnimation];
-
- // Create the view animation object.
- animation_.reset([[NSViewAnimation alloc] initWithViewAnimations:
- [NSArray arrayWithObject:dictionary]]);
-
- // Set some additional attributes for the animation.
- [animation_ setDuration:kDisclosureAnimationDurationSeconds];
- [animation_ setAnimationCurve:NSAnimationEaseIn];
-
- // Set self as delegate so we can toggle visibility at end of animation.
- [animation_ setDelegate:self];
-
- // Run the animation.
- [animation_ startAnimation];
-}
-
-// NSAnimationDelegate method. Before starting the animation we show the
-// |detailedView_|.
-- (BOOL)animationShouldStart:(NSAnimation*)animation {
- [detailedView_ setHidden:NO];
- return YES;
-}
-
-// NSAnimationDelegate method. If animation stops before ending we release
-// our animation object.
-- (void)animationDidStop:(NSAnimation*)animation {
- animation_.reset();
-}
-
-// NSAnimationDelegate method. Once the disclosure animation is over we set
-// content view visibility to match disclosure state.
-// |animation_| reference is relinquished at end of animation.
-- (void)animationDidEnd:(NSAnimation*)animation {
- [self setContentViewVisibility];
- animation_.reset();
-}
-
-// This method is invoked when the disclosure state changes. It computes
-// the appropriate view frame geometry and then initiates the animation to
-// change that geometry.
-- (void)discloseDetails:(NSCellStateValue)state {
- NSRect startFrame = [[self view] frame];
- NSRect endFrame = startFrame;
-
- if (state == NSOnState) {
- endFrame = [self openStateFrameSize:startFrame];
- } else if (state == NSOffState) {
- endFrame = [self closedStateFrameSize:startFrame];
- } else {
- NOTREACHED();
- return;
- }
-
- [self startAnimations:[self view] start:startFrame end:endFrame];
-}
-
-// Sets the "hidden" state of the content view according to the current
-// disclosure state. We do this so that the view hierarchy knows to remove
-// undisclosed content from the first responder chain.
-- (void)setContentViewVisibility {
- NSCellStateValue disclosed = [[disclosureState_ valueForKey:kKVODisclosedKey]
- intValue];
-
- if (disclosed == NSOnState) {
- [detailedView_ setHidden:NO];
- } else if (disclosed == NSOffState) {
- [detailedView_ setHidden:YES];
- } else {
- NOTREACHED();
- return;
- }
-}
-
-// The |DisclosureViewController| is an observer of an instance of a
-// |DisclosureViewState| object. This object lives within the controller's
-// nib file. When the KVO machinery detects a change to the state
-// it triggers this call and we initiate the change in frame geometry of the
-// view.
-- (void)observeValueForKeyPath:(NSString*)keyPath
- ofObject:(id)object
- change:(NSDictionary*)change
- context:(void*)context {
- if ([keyPath isEqualToString:kKVODisclosedKey]) {
- NSCellStateValue newValue =
- [[change objectForKey:NSKeyValueChangeNewKey] intValue];
- NSCellStateValue oldValue =
- [[change objectForKey:NSKeyValueChangeOldKey] intValue];
-
- if (newValue != oldValue) {
- [self discloseDetails:newValue];
- }
- }
-}
-
-@end
« no previous file with comments | « chrome/browser/cocoa/disclosure_view_controller.h ('k') | chrome/browser/cocoa/disclosure_view_controller_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698