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 |