| OLD | NEW |
| (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 |
| OLD | NEW |