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

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

Issue 193040: [Mac] Implement the search engine manager (Closed)
Patch Set: Final patch Created 11 years, 3 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/edit_search_engine_cocoa_controller.mm
diff --git a/chrome/browser/cocoa/edit_search_engine_cocoa_controller.mm b/chrome/browser/cocoa/edit_search_engine_cocoa_controller.mm
new file mode 100644
index 0000000000000000000000000000000000000000..133e6178398ddef9b383ab4a79e086d3bc4ad66d
--- /dev/null
+++ b/chrome/browser/cocoa/edit_search_engine_cocoa_controller.mm
@@ -0,0 +1,131 @@
+// 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 "chrome/browser/cocoa/edit_search_engine_cocoa_controller.h"
+
+#include "app/l10n_util_mac.h"
+#include "app/resource_bundle.h"
+#import "base/mac_util.h"
+#include "base/sys_string_conversions.h"
+#include "chrome/browser/search_engines/template_url_model.h"
+#include "grit/app_resources.h"
+#include "grit/generated_resources.h"
+
+@implementation EditSearchEngineCocoaController
+
+- (id)initWithProfile:(Profile*)profile
+ delegate:(EditSearchEngineControllerDelegate*)delegate
+ templateURL:(const TemplateURL*)url {
+ DCHECK(profile);
+ NSString* nibpath = [mac_util::MainAppBundle()
+ pathForResource:@"EditSearchEngine"
+ ofType:@"nib"];
+ if ((self = [super initWithWindowNibPath:nibpath owner:self])) {
+ profile_ = profile;
+ templateURL_ = url;
+ controller_.reset(
+ new EditSearchEngineController(templateURL_, delegate, profile_));
+ }
+ return self;
+}
+
+- (void)awakeFromNib {
+ DCHECK([self window]);
+ DCHECK_EQ(self, [[self window] delegate]);
+ ResourceBundle& bundle = ResourceBundle::GetSharedInstance();
+ goodImage_.reset([bundle.GetNSImageNamed(IDR_INPUT_GOOD) retain]);
+ badImage_.reset([bundle.GetNSImageNamed(IDR_INPUT_ALERT) retain]);
+ if (templateURL_) {
+ // Defaults to |..._NEW_WINDOW_TITLE|.
+ [[self window] setTitle:l10n_util::GetNSString(
+ IDS_SEARCH_ENGINES_EDITOR_EDIT_WINDOW_TITLE)];
+ [nameField_ setStringValue:
+ base::SysWideToNSString(templateURL_->short_name())];
+ [keywordField_ setStringValue:
+ base::SysWideToNSString(templateURL_->keyword())];
+ [urlField_ setStringValue:
+ base::SysWideToNSString(templateURL_->url()->DisplayURL())];
+ [urlField_ setEnabled:(templateURL_->prepopulate_id() == 0)];
+ }
+ // When creating a new keyword, this will mark the fields as "invalid" and
+ // will not let the user save. If this is an edit, then this will set all
+ // the images to the "valid" state.
+ [self validateFields];
+}
+
+// When the window closes, clean ourselves up.
+- (void)windowWillClose:(NSNotification*)notif {
+ [self autorelease];
+}
+
+- (IBAction)cancel:(id)sender {
+ [[self window] close];
+}
+
+- (IBAction)save:(id)sender {
+ DCHECK([self validateFields]);
+ std::wstring title = base::SysNSStringToWide([nameField_ stringValue]);
+ std::wstring keyword = base::SysNSStringToWide([keywordField_ stringValue]);
+ std::wstring url = base::SysNSStringToWide([urlField_ stringValue]);
+ controller_->AcceptAddOrEdit(title, keyword, url);
+ [[self window] close];
+}
+
+// Delegate method for the text fields.
+
+- (void)controlTextDidChange:(NSNotification*)notif {
+ [self validateFields];
+}
+
+- (void)controlTextDidEndEditing:(NSNotification*)notif {
+ [self validateFields];
+}
+
+// Private --------------------------------------------------------------------
+
+// Sets the appropriate image and tooltip based on a boolean |valid|.
+- (void)setIsValid:(BOOL)valid
+ toolTip:(int)messageID
+ forImageView:(NSImageView*)imageView
+ textField:(NSTextField*)textField {
+ NSImage* image = (valid) ? goodImage_ : badImage_;
+ [imageView setImage:image];
+
+ NSString* toolTip = nil;
+ if (!valid)
+ toolTip = l10n_util::GetNSString(messageID);
+ [textField setToolTip:toolTip];
+ [imageView setToolTip:toolTip];
+}
+
+// This sets the image state for all the controls and enables or disables the
+// done button. Returns YES if all the fields are valid.
+- (BOOL)validateFields {
+ std::wstring title = base::SysNSStringToWide([nameField_ stringValue]);
+ BOOL titleValid = controller_->IsTitleValid(title);
+ [self setIsValid:titleValid
+ toolTip:IDS_SEARCH_ENGINES_INVALID_TITLE_TT
+ forImageView:nameImage_
+ textField:nameField_];
+
+ std::wstring keyword = base::SysNSStringToWide([keywordField_ stringValue]);
+ BOOL keywordValid = controller_->IsKeywordValid(keyword);
+ [self setIsValid:keywordValid
+ toolTip:IDS_SEARCH_ENGINES_INVALID_KEYWORD_TT
+ forImageView:keywordImage_
+ textField:keywordField_];
+
+ std::wstring url = base::SysNSStringToWide([urlField_ stringValue]);
+ BOOL urlValid = controller_->IsURLValid(url);
+ [self setIsValid:urlValid
+ toolTip:IDS_SEARCH_ENGINES_INVALID_URL_TT
+ forImageView:urlImage_
+ textField:urlField_];
+
+ BOOL isValid = (titleValid && keywordValid && urlValid);
+ [doneButton_ setEnabled:isValid];
+ return isValid;
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698