diff options
| author | Kristian Monsen <kristianm@google.com> | 2011-05-11 20:53:37 +0100 |
|---|---|---|
| committer | Kristian Monsen <kristianm@google.com> | 2011-05-16 13:54:48 +0100 |
| commit | 21d179b334e59e9a3bfcaed4c4430bef1bc5759d (patch) | |
| tree | 64e2bb6da27af6a5c93ca34f6051584aafbfcb9e /chrome/browser/cocoa/search_engine_dialog_controller.mm | |
| parent | 0c63f00edd6ed0482fd5cbcea937ca088baf7858 (diff) | |
| download | external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.zip external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.gz external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.bz2 | |
Merge Chromium at 10.0.621.0: Initial merge by git.
Change-Id: I070cc91c608dfa4a968a5a54c173260765ac8097
Diffstat (limited to 'chrome/browser/cocoa/search_engine_dialog_controller.mm')
| -rw-r--r-- | chrome/browser/cocoa/search_engine_dialog_controller.mm | 285 |
1 files changed, 0 insertions, 285 deletions
diff --git a/chrome/browser/cocoa/search_engine_dialog_controller.mm b/chrome/browser/cocoa/search_engine_dialog_controller.mm deleted file mode 100644 index 0888050..0000000 --- a/chrome/browser/cocoa/search_engine_dialog_controller.mm +++ /dev/null @@ -1,285 +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/search_engine_dialog_controller.h" - -#include <algorithm> - -#include "app/l10n_util_mac.h" -#include "app/resource_bundle.h" -#include "base/mac_util.h" -#include "base/nsimage_cache_mac.h" -#include "base/sys_string_conversions.h" -#include "base/time.h" -#include "chrome/browser/profile.h" -#include "chrome/browser/search_engines/template_url.h" -#include "chrome/browser/search_engines/template_url_model.h" -#include "chrome/browser/search_engines/template_url_model_observer.h" -#include "grit/generated_resources.h" -#include "grit/theme_resources.h" -#import "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" - -// Horizontal spacing between search engine choices. -const int kSearchEngineSpacing = 20; - -// Vertical spacing between the search engine logo and the button underneath. -const int kLogoButtonSpacing = 10; - -// Width of a label used in place of a logo. -const int kLogoLabelWidth = 170; - -// Height of a label used in place of a logo. -const int kLogoLabelHeight = 25; - -@interface SearchEngineDialogController (Private) -- (void)onTemplateURLModelChanged; -- (void)buildSearchEngineView; -- (NSView*)viewForSearchEngine:(const TemplateURL*)engine - atIndex:(size_t)index; -- (IBAction)searchEngineSelected:(id)sender; -@end - -class SearchEngineDialogControllerBridge : - public base::RefCounted<SearchEngineDialogControllerBridge>, - public TemplateURLModelObserver { - public: - SearchEngineDialogControllerBridge(SearchEngineDialogController* controller); - - // TemplateURLModelObserver - virtual void OnTemplateURLModelChanged(); - - private: - SearchEngineDialogController* controller_; -}; - -SearchEngineDialogControllerBridge::SearchEngineDialogControllerBridge( - SearchEngineDialogController* controller) : controller_(controller) { -} - -void SearchEngineDialogControllerBridge::OnTemplateURLModelChanged() { - [controller_ onTemplateURLModelChanged]; - MessageLoop::current()->QuitNow(); -} - -@implementation SearchEngineDialogController - -@synthesize profile = profile_; -@synthesize randomize = randomize_; - -- (id)init { - NSString* nibpath = - [mac_util::MainAppBundle() pathForResource:@"SearchEngineDialog" - ofType:@"nib"]; - self = [super initWithWindowNibPath:nibpath owner:self]; - if (self != nil) { - bridge_ = new SearchEngineDialogControllerBridge(self); - } - return self; -} - -- (void)dealloc { - [super dealloc]; -} - -- (IBAction)showWindow:(id)sender { - searchEnginesModel_ = profile_->GetTemplateURLModel(); - searchEnginesModel_->AddObserver(bridge_.get()); - - if (searchEnginesModel_->loaded()) { - MessageLoop::current()->PostTask( - FROM_HERE, - NewRunnableMethod( - bridge_.get(), - &SearchEngineDialogControllerBridge::OnTemplateURLModelChanged)); - } else { - searchEnginesModel_->Load(); - } - MessageLoop::current()->Run(); -} - -- (void)onTemplateURLModelChanged { - searchEnginesModel_->RemoveObserver(bridge_.get()); - - // Add the search engines in the search_engines_model_ to the buttons list. - // The first three will always be from prepopulated data. - std::vector<const TemplateURL*> templateUrls = - searchEnginesModel_->GetTemplateURLs(); - - // If we have fewer than two search engines, end the search engine dialog - // immediately, leaving the imported default search engine setting intact. - if (templateUrls.size() < 2) { - return; - } - - NSWindow* win = [self window]; - - [win setBackgroundColor:[NSColor whiteColor]]; - - NSImage* headerImage = ResourceBundle::GetSharedInstance(). - GetNativeImageNamed(IDR_SEARCH_ENGINE_DIALOG_TOP); - [headerImageView_ setImage:headerImage]; - - // Is the user's default search engine included in the first three - // prepopulated set? If not, we need to expand the dialog to include a fourth - // engine. - const TemplateURL* defaultSearchEngine = - searchEnginesModel_->GetDefaultSearchProvider(); - - std::vector<const TemplateURL*>::iterator engineIter = - templateUrls.begin(); - for (int i = 0; engineIter != templateUrls.end(); ++i, ++engineIter) { - if (i < 3) { - choices_.push_back(*engineIter); - } else { - if (*engineIter == defaultSearchEngine) - choices_.push_back(*engineIter); - } - } - - // Randomize the order of the logos if the option has been set. - if (randomize_) { - int seed = static_cast<int>(base::Time::Now().ToInternalValue()); - srand(seed); - std::random_shuffle(choices_.begin(), choices_.end()); - } - - [self buildSearchEngineView]; - - // Display the dialog. - NSInteger choice = [NSApp runModalForWindow:win]; - searchEnginesModel_->SetDefaultSearchProvider(choices_.at(choice)); -} - -- (void)buildSearchEngineView { - scoped_nsobject<NSMutableArray> searchEngineViews - ([[NSMutableArray alloc] init]); - - for (size_t i = 0; i < choices_.size(); ++i) - [searchEngineViews addObject:[self viewForSearchEngine:choices_.at(i) - atIndex:i]]; - - NSSize newOverallSize = NSZeroSize; - for (NSView* view in searchEngineViews.get()) { - NSRect engineFrame = [view frame]; - engineFrame.origin = NSMakePoint(newOverallSize.width, 0); - [searchEngineView_ addSubview:view]; - [view setFrame:engineFrame]; - newOverallSize = NSMakeSize( - newOverallSize.width + NSWidth(engineFrame) + kSearchEngineSpacing, - std::max(newOverallSize.height, NSHeight(engineFrame))); - } - newOverallSize.width -= kSearchEngineSpacing; - - // Resize the window to fit (and because it's bound on all sides it will - // resize the search engine view). - NSSize currentOverallSize = [searchEngineView_ bounds].size; - NSSize deltaSize = NSMakeSize( - newOverallSize.width - currentOverallSize.width, - newOverallSize.height - currentOverallSize.height); - NSSize windowDeltaSize = [searchEngineView_ convertSize:deltaSize toView:nil]; - NSRect windowFrame = [[self window] frame]; - windowFrame.size.width += windowDeltaSize.width; - windowFrame.size.height += windowDeltaSize.height; - [[self window] setFrame:windowFrame display:NO]; -} - -- (NSView*)viewForSearchEngine:(const TemplateURL*)engine - atIndex:(size_t)index { - bool useImages = false; -#if defined(GOOGLE_CHROME_BUILD) - useImages = true; -#endif - - // Make the engine identifier. - NSView* engineIdentifier = nil; // either the logo or the text label - - int logoId = engine->logo_id(); - if (useImages && logoId > 0) { - NSImage* logoImage = - ResourceBundle::GetSharedInstance().GetNativeImageNamed(logoId); - NSRect logoBounds = NSZeroRect; - logoBounds.size = [logoImage size]; - NSImageView* logoView = - [[[NSImageView alloc] initWithFrame:logoBounds] autorelease]; - [logoView setImage:logoImage]; - [logoView setEditable:NO]; - - // Tooltip text provides accessibility. - [logoView setToolTip:base::SysWideToNSString(engine->short_name())]; - engineIdentifier = logoView; - } else { - // No logo -- we must show a text label. - NSRect labelBounds = NSMakeRect(0, 0, kLogoLabelWidth, kLogoLabelHeight); - NSTextField* labelField = - [[[NSTextField alloc] initWithFrame:labelBounds] autorelease]; - [labelField setBezeled:NO]; - [labelField setEditable:NO]; - [labelField setSelectable:NO]; - - scoped_nsobject<NSMutableParagraphStyle> paragraphStyle( - [[NSMutableParagraphStyle alloc] init]); - [paragraphStyle setAlignment:NSCenterTextAlignment]; - NSDictionary* attrs = [NSDictionary dictionaryWithObjectsAndKeys: - [NSFont boldSystemFontOfSize:13], NSFontAttributeName, - paragraphStyle.get(), NSParagraphStyleAttributeName, - nil]; - - NSString* value = base::SysWideToNSString(engine->short_name()); - scoped_nsobject<NSAttributedString> attrValue( - [[NSAttributedString alloc] initWithString:value - attributes:attrs]); - - [labelField setAttributedStringValue:attrValue.get()]; - - engineIdentifier = labelField; - } - - // Make the "Choose" button. - scoped_nsobject<NSButton> chooseButton( - [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 100, 34)]); - [chooseButton setBezelStyle:NSRoundedBezelStyle]; - [[chooseButton cell] setFont:[NSFont systemFontOfSize: - [NSFont systemFontSizeForControlSize:NSRegularControlSize]]]; - [chooseButton setTitle:l10n_util::GetNSStringWithFixup(IDS_FR_SEARCH_CHOOSE)]; - [GTMUILocalizerAndLayoutTweaker sizeToFitView:chooseButton.get()]; - [chooseButton setTag:index]; - [chooseButton setTarget:self]; - [chooseButton setAction:@selector(searchEngineSelected:)]; - - // Put 'em together. - NSRect engineIdentifierFrame = [engineIdentifier frame]; - NSRect chooseButtonFrame = [chooseButton frame]; - - NSRect containingViewFrame = NSZeroRect; - containingViewFrame.size.width += engineIdentifierFrame.size.width; - containingViewFrame.size.height += engineIdentifierFrame.size.height; - containingViewFrame.size.height += kLogoButtonSpacing; - containingViewFrame.size.height += chooseButtonFrame.size.height; - - NSView* containingView = - [[[NSView alloc] initWithFrame:containingViewFrame] autorelease]; - - [containingView addSubview:engineIdentifier]; - engineIdentifierFrame.origin.y = - chooseButtonFrame.size.height + kLogoButtonSpacing; - [engineIdentifier setFrame:engineIdentifierFrame]; - - [containingView addSubview:chooseButton]; - chooseButtonFrame.origin.x = - int((containingViewFrame.size.width - chooseButtonFrame.size.width) / 2); - [chooseButton setFrame:chooseButtonFrame]; - - return containingView; -} - -- (NSFont*)mainLabelFont { - return [NSFont boldSystemFontOfSize:13]; -} - -- (IBAction)searchEngineSelected:(id)sender { - [[self window] close]; - [NSApp stopModalWithCode:[sender tag]]; -} - -@end |
