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

Side by Side Diff: chrome/browser/cocoa/keyword_editor_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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import <Cocoa/Cocoa.h>
6
7 #import "base/mac_util.h"
8 #include "base/sys_string_conversions.h"
9 #import "chrome/browser/cocoa/edit_search_engine_cocoa_controller.h"
10 #import "chrome/browser/cocoa/keyword_editor_cocoa_controller.h"
11 #include "chrome/browser/profile.h"
12 #include "chrome/browser/search_engines/template_url_table_model.h"
13 #include "grit/generated_resources.h"
14
15 @interface KeywordEditorCocoaController (Private)
16 - (void)adjustEditingButtons;
17 - (void)editKeyword:(id)sender;
18 @end
19
20 // KeywordEditorModelObserver -------------------------------------------------
21
22 KeywordEditorModelObserver::KeywordEditorModelObserver(
23 KeywordEditorCocoaController* controller) : controller_(controller) {
24 }
25
26 KeywordEditorModelObserver::~KeywordEditorModelObserver() {
27 }
28
29 // Notification that the template url model has changed in some way.
30 void KeywordEditorModelObserver::OnTemplateURLModelChanged() {
31 [controller_ modelChanged];
32 }
33
34 void KeywordEditorModelObserver::OnEditedKeyword(
35 const TemplateURL* template_url,
36 const std::wstring& title,
37 const std::wstring& keyword,
38 const std::wstring& url) {
39 KeywordEditorController* controller = [controller_ controller];
40 if (template_url) {
41 controller->ModifyTemplateURL(template_url, title, keyword, url);
42 } else {
43 controller->AddTemplateURL(title, keyword, url);
44 }
45 }
46
47 // KeywordEditorCocoaController -----------------------------------------------
48
49 @implementation KeywordEditorCocoaController
50
51 - (id)initWithProfile:(Profile*)profile {
52 DCHECK(profile);
53 NSString* nibpath = [mac_util::MainAppBundle()
54 pathForResource:@"KeywordEditor"
55 ofType:@"nib"];
56 if ((self = [super initWithWindowNibPath:nibpath owner:self])) {
57 profile_ = profile;
58 controller_.reset(new KeywordEditorController(profile_));
59 observer_.reset(new KeywordEditorModelObserver(self));
60 controller_->url_model()->AddObserver(observer_.get());
61 }
62 return self;
63 }
64
65 - (void)dealloc {
66 controller_->url_model()->RemoveObserver(observer_.get());
67 [super dealloc];
68 }
69
70 - (void)awakeFromNib {
71 [self adjustEditingButtons];
72 [tableView_ setDoubleAction:@selector(editKeyword:)];
73 [tableView_ setTarget:self];
74 }
75
76 // When the window closes, clean ourselves up.
77 - (void)windowWillClose:(NSNotification*)notif {
78 [self autorelease];
79 }
80
81 - (void)modelChanged {
82 [tableView_ reloadData];
83 }
84
85 - (KeywordEditorController*)controller {
86 return controller_.get();
87 }
88
89 - (IBAction)addKeyword:(id)sender {
90 // The controller will release itself when the window closes.
91 EditSearchEngineCocoaController* editor =
92 [[EditSearchEngineCocoaController alloc] initWithProfile:profile_
93 delegate:observer_.get()
94 templateURL:NULL];
95 [[editor window] makeKeyAndOrderFront:self];
96 }
97
98 - (void)editKeyword:(id)sender {
99 const NSInteger clickedRow = [tableView_ clickedRow];
100 if (clickedRow == -1)
101 return;
102 const TemplateURL* url = controller_->GetTemplateURL(clickedRow);
103 // The controller will release itself when the window closes.
104 EditSearchEngineCocoaController* editor =
105 [[EditSearchEngineCocoaController alloc] initWithProfile:profile_
106 delegate:observer_.get()
107 templateURL:url];
108 [[editor window] makeKeyAndOrderFront:self];
109 }
110
111 - (IBAction)deleteKeyword:(id)sender {
112 NSIndexSet* selection = [tableView_ selectedRowIndexes];
113 DCHECK_GT([selection count], 0U);
114 NSUInteger index = [selection lastIndex];
115 while (index != NSNotFound) {
116 controller_->RemoveTemplateURL(index);
117 index = [selection indexLessThanIndex:index];
118 }
119 }
120
121 - (IBAction)makeDefault:(id)sender {
122 NSIndexSet* selection = [tableView_ selectedRowIndexes];
123 DCHECK_EQ([selection count], 1U);
124 controller_->MakeDefaultTemplateURL([selection firstIndex]);
125 }
126
127 // Table View Data Source -----------------------------------------------------
128
129 - (NSInteger)numberOfRowsInTableView:(NSTableView*)aTableView {
130 return controller_->table_model()->RowCount();
131 }
132
133 - (id)tableView:(NSTableView*)tv
134 objectValueForTableColumn:(NSTableColumn*)tableColumn
135 row:(NSInteger)row {
136 NSString* identifier = [tableColumn identifier];
137 int columnID = -1;
138 if ([identifier isEqualToString:@"name"]) {
139 columnID = IDS_SEARCH_ENGINES_EDITOR_DESCRIPTION_COLUMN;
140 } else if ([identifier isEqualToString:@"keyword"]) {
141 columnID = IDS_SEARCH_ENGINES_EDITOR_KEYWORD_COLUMN;
142 }
143 DCHECK_NE(columnID, -1);
144 std::wstring text = controller_->table_model()->GetText(row, columnID);
145 return base::SysWideToNSString(text);
146 }
147
148 // Table View Delegate --------------------------------------------------------
149
150 // When the selection in the table view changes, we need to adjust buttons.
151 - (void)tableViewSelectionDidChange:(NSNotification*)aNotification {
152 [self adjustEditingButtons];
153 }
154
155 - (NSCell*)tableView:(NSTableView *)tableView
156 dataCellForTableColumn:(NSTableColumn*)tableColumn
157 row:(NSInteger)row {
158 static const CGFloat kCellFontSize = 12.0;
159 NSCell* cell = [tableColumn dataCellForRow:row];
160 const TemplateURL* defaultEngine =
161 controller_->url_model()->GetDefaultSearchProvider();
162 if (controller_->table_model()->IndexOfTemplateURL(defaultEngine) == row) {
163 [cell setFont:[NSFont boldSystemFontOfSize:kCellFontSize]];
164 } else {
165 [cell setFont:[NSFont systemFontOfSize:kCellFontSize]];
166 }
167 return cell;
168 }
169
170 // Private --------------------------------------------------------------------
171
172 // This function appropriately sets the enabled states on the table's editing
173 // buttons.
174 - (void)adjustEditingButtons {
175 // Delete button.
176 NSIndexSet* selection = [tableView_ selectedRowIndexes];
177 BOOL canRemove = ([selection count] > 0);
178 NSUInteger index = [selection firstIndex];
179 while (canRemove && index != NSNotFound) {
180 const TemplateURL& url =
181 controller_->table_model()->GetTemplateURL(index);
182 if (!controller_->CanRemove(&url))
183 canRemove = NO;
184 index = [selection indexGreaterThanIndex:index];
185 }
186 [removeButton_ setEnabled:canRemove];
187
188 // Make default button.
189 if ([selection count] != 1) {
190 [makeDefaultButton_ setEnabled:NO];
191 } else {
192 const TemplateURL& url =
193 controller_->table_model()->GetTemplateURL([selection firstIndex]);
194 [makeDefaultButton_ setEnabled:controller_->CanMakeDefault(&url)];
195 }
196 }
197
198 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698