| Index: chrome/browser/ui/cocoa/sidebar_controller.mm
|
| ===================================================================
|
| --- chrome/browser/ui/cocoa/sidebar_controller.mm (revision 115368)
|
| +++ chrome/browser/ui/cocoa/sidebar_controller.mm (working copy)
|
| @@ -1,178 +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/ui/cocoa/sidebar_controller.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include <Cocoa/Cocoa.h>
|
| -
|
| -#include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/prefs/pref_service.h"
|
| -#include "chrome/browser/sidebar/sidebar_manager.h"
|
| -#import "chrome/browser/ui/cocoa/view_id_util.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "content/browser/tab_contents/tab_contents.h"
|
| -
|
| -namespace {
|
| -
|
| -// By default sidebar width is 1/7th of the current page content width.
|
| -const CGFloat kDefaultSidebarWidthRatio = 1.0 / 7;
|
| -
|
| -// Never make the web part of the tab contents smaller than this (needed if the
|
| -// window is only a few pixels wide).
|
| -const int kMinWebWidth = 50;
|
| -
|
| -} // end namespace
|
| -
|
| -
|
| -@interface SidebarController (Private)
|
| -- (void)showSidebarContents:(TabContents*)sidebarContents;
|
| -- (void)resizeSidebarToNewWidth:(CGFloat)width;
|
| -@end
|
| -
|
| -
|
| -@implementation SidebarController
|
| -
|
| -- (id)initWithDelegate:(id<TabContentsControllerDelegate>)delegate {
|
| - if ((self = [super init])) {
|
| - splitView_.reset([[NSSplitView alloc] initWithFrame:NSZeroRect]);
|
| - [splitView_ setDividerStyle:NSSplitViewDividerStyleThin];
|
| - [splitView_ setVertical:YES];
|
| - [splitView_ setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
|
| - [splitView_ setDelegate:self];
|
| -
|
| - contentsController_.reset(
|
| - [[TabContentsController alloc] initWithContents:NULL
|
| - delegate:delegate]);
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)dealloc {
|
| - [splitView_ setDelegate:nil];
|
| - [super dealloc];
|
| -}
|
| -
|
| -- (NSSplitView*)view {
|
| - return splitView_.get();
|
| -}
|
| -
|
| -- (NSSplitView*)splitView {
|
| - return splitView_.get();
|
| -}
|
| -
|
| -- (void)updateSidebarForTabContents:(TabContents*)contents {
|
| - // Get the active sidebar content.
|
| - if (SidebarManager::GetInstance() == NULL) // Happens in tests.
|
| - return;
|
| -
|
| - TabContents* sidebarContents = NULL;
|
| - if (contents && SidebarManager::IsSidebarAllowed()) {
|
| - SidebarContainer* activeSidebar =
|
| - SidebarManager::GetInstance()->GetActiveSidebarContainerFor(contents);
|
| - if (activeSidebar)
|
| - sidebarContents = activeSidebar->sidebar_contents();
|
| - }
|
| -
|
| - TabContents* oldSidebarContents = [contentsController_ tabContents];
|
| - if (oldSidebarContents == sidebarContents)
|
| - return;
|
| -
|
| - // Adjust sidebar view.
|
| - [self showSidebarContents:sidebarContents];
|
| -
|
| - // Notify extensions.
|
| - SidebarManager::GetInstance()->NotifyStateChanges(
|
| - oldSidebarContents, sidebarContents);
|
| -}
|
| -
|
| -- (void)ensureContentsVisible {
|
| - [contentsController_ ensureContentsVisible];
|
| -}
|
| -
|
| -- (void)showSidebarContents:(TabContents*)sidebarContents {
|
| - [contentsController_ ensureContentsSizeDoesNotChange];
|
| -
|
| - NSArray* subviews = [splitView_ subviews];
|
| - if (sidebarContents) {
|
| - DCHECK_GE([subviews count], 1u);
|
| -
|
| - // Native view is a TabContentsViewCocoa object, whose ViewID was
|
| - // set to VIEW_ID_TAB_CONTAINER initially, so change it to
|
| - // VIEW_ID_SIDE_BAR_CONTAINER here.
|
| - view_id_util::SetID(
|
| - sidebarContents->GetNativeView(), VIEW_ID_SIDE_BAR_CONTAINER);
|
| -
|
| - CGFloat sidebarWidth = 0;
|
| - if ([subviews count] == 1) {
|
| - // Load the default split offset.
|
| - sidebarWidth = g_browser_process->local_state()->GetInteger(
|
| - prefs::kExtensionSidebarWidth);
|
| - if (sidebarWidth < 0) {
|
| - // Initial load, set to default value.
|
| - sidebarWidth =
|
| - NSWidth([splitView_ frame]) * kDefaultSidebarWidthRatio;
|
| - }
|
| - [splitView_ addSubview:[contentsController_ view]];
|
| - } else {
|
| - DCHECK_EQ([subviews count], 2u);
|
| - sidebarWidth = NSWidth([[subviews objectAtIndex:1] frame]);
|
| - }
|
| -
|
| - // Make sure |sidebarWidth| isn't too large or too small.
|
| - sidebarWidth = std::min(sidebarWidth,
|
| - NSWidth([splitView_ frame]) - kMinWebWidth);
|
| - DCHECK_GE(sidebarWidth, 0) << "kMinWebWidth needs to be smaller than "
|
| - << "smallest available tab contents space.";
|
| - sidebarWidth = std::max(static_cast<CGFloat>(0), sidebarWidth);
|
| -
|
| - [self resizeSidebarToNewWidth:sidebarWidth];
|
| - } else {
|
| - if ([subviews count] > 1) {
|
| - NSView* oldSidebarContentsView = [subviews objectAtIndex:1];
|
| - // Store split offset when hiding sidebar window only.
|
| - int sidebarWidth = NSWidth([oldSidebarContentsView frame]);
|
| - g_browser_process->local_state()->SetInteger(
|
| - prefs::kExtensionSidebarWidth, sidebarWidth);
|
| - [oldSidebarContentsView removeFromSuperview];
|
| - [splitView_ adjustSubviews];
|
| - }
|
| - }
|
| -
|
| - [contentsController_ changeTabContents:sidebarContents];
|
| -}
|
| -
|
| -- (void)resizeSidebarToNewWidth:(CGFloat)width {
|
| - NSArray* subviews = [splitView_ subviews];
|
| -
|
| - // It seems as if |-setPosition:ofDividerAtIndex:| should do what's needed,
|
| - // but I can't figure out how to use it. Manually resize web and sidebar.
|
| - // TODO(alekseys): either make setPosition:ofDividerAtIndex: work or to add a
|
| - // category on NSSplitView to handle manual resizing.
|
| - NSView* sidebarView = [subviews objectAtIndex:1];
|
| - NSRect sidebarFrame = [sidebarView frame];
|
| - sidebarFrame.size.width = width;
|
| - [sidebarView setFrame:sidebarFrame];
|
| -
|
| - NSView* webView = [subviews objectAtIndex:0];
|
| - NSRect webFrame = [webView frame];
|
| - webFrame.size.width =
|
| - NSWidth([splitView_ frame]) - ([splitView_ dividerThickness] + width);
|
| - [webView setFrame:webFrame];
|
| -
|
| - [splitView_ adjustSubviews];
|
| -}
|
| -
|
| -// NSSplitViewDelegate protocol.
|
| -- (BOOL)splitView:(NSSplitView *)splitView
|
| - shouldAdjustSizeOfSubview:(NSView *)subview {
|
| - // Return NO for the sidebar view to indicate that it should not be resized
|
| - // automatically. The sidebar keeps the width set by the user.
|
| - if ([[splitView_ subviews] indexOfObject:subview] == 1)
|
| - return NO;
|
| - return YES;
|
| -}
|
| -
|
| -@end
|
|
|