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

Side by Side Diff: chrome/browser/ui/cocoa/search_engine_list_model.mm

Issue 6339002: [Mac] Consolidate all files relating to preferences in a subdir of c/b/ui/coc... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 | Annotate | Revision Log
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 "chrome/browser/ui/cocoa/search_engine_list_model.h"
6
7 #include "base/sys_string_conversions.h"
8 #include "chrome/browser/search_engines/template_url.h"
9 #include "chrome/browser/search_engines/template_url_model.h"
10 #include "chrome/browser/search_engines/template_url_model_observer.h"
11
12 NSString* const kSearchEngineListModelChangedNotification =
13 @"kSearchEngineListModelChangedNotification";
14
15 @interface SearchEngineListModel(Private)
16 - (void)buildEngineList;
17 @end
18
19 // C++ bridge from TemplateURLModel to our Obj-C model. When it's told about
20 // model changes, notifies us to rebuild the list.
21 class SearchEngineObserver : public TemplateURLModelObserver {
22 public:
23 SearchEngineObserver(SearchEngineListModel* notify)
24 : notify_(notify) { }
25 virtual ~SearchEngineObserver() { };
26
27 private:
28 // TemplateURLModelObserver methods.
29 virtual void OnTemplateURLModelChanged() { [notify_ buildEngineList]; }
30
31 SearchEngineListModel* notify_; // weak, owns us
32 };
33
34 @implementation SearchEngineListModel
35
36 // The windows code allows for a NULL |model| and checks for it throughout
37 // the code, though I'm not sure why. We follow suit.
38 - (id)initWithModel:(TemplateURLModel*)model {
39 if ((self = [super init])) {
40 model_ = model;
41 if (model_) {
42 observer_.reset(new SearchEngineObserver(self));
43 model_->Load();
44 model_->AddObserver(observer_.get());
45 [self buildEngineList];
46 }
47 }
48 return self;
49 }
50
51 - (void)dealloc {
52 if (model_)
53 model_->RemoveObserver(observer_.get());
54 [super dealloc];
55 }
56
57 // Returns an array of NSString's corresponding to the user-visible names of the
58 // search engines.
59 - (NSArray*)searchEngines {
60 return engines_.get();
61 }
62
63 - (void)setSearchEngines:(NSArray*)engines {
64 engines_.reset([engines retain]);
65
66 // Tell anyone who's listening that something has changed so they need to
67 // adjust the UI.
68 [[NSNotificationCenter defaultCenter]
69 postNotificationName:kSearchEngineListModelChangedNotification
70 object:nil];
71 }
72
73 // Walks the model and builds an array of NSStrings to display to the user.
74 // Assumes there is a non-NULL model.
75 - (void)buildEngineList {
76 scoped_nsobject<NSMutableArray> engines([[NSMutableArray alloc] init]);
77
78 typedef std::vector<const TemplateURL*> TemplateURLs;
79 TemplateURLs modelURLs = model_->GetTemplateURLs();
80 for (size_t i = 0; i < modelURLs.size(); ++i) {
81 if (modelURLs[i]->ShowInDefaultList())
82 [engines addObject:base::SysWideToNSString(modelURLs[i]->short_name())];
83 }
84
85 [self setSearchEngines:engines.get()];
86 }
87
88 // The index into |-searchEngines| of the current default search engine.
89 // -1 if there is no default.
90 - (NSInteger)defaultIndex {
91 if (!model_) return -1;
92
93 NSInteger index = 0;
94 const TemplateURL* defaultSearchProvider = model_->GetDefaultSearchProvider();
95 if (defaultSearchProvider) {
96 typedef std::vector<const TemplateURL*> TemplateURLs;
97 TemplateURLs urls = model_->GetTemplateURLs();
98 for (std::vector<const TemplateURL*>::iterator it = urls.begin();
99 it != urls.end(); ++it) {
100 const TemplateURL* url = *it;
101 // Skip all the URLs not shown on the default list.
102 if (!url->ShowInDefaultList())
103 continue;
104 if (url->id() == defaultSearchProvider->id())
105 return index;
106 ++index;
107 }
108 }
109 return -1;
110 }
111
112 - (void)setDefaultIndex:(NSInteger)index {
113 if (model_) {
114 typedef std::vector<const TemplateURL*> TemplateURLs;
115 TemplateURLs urls = model_->GetTemplateURLs();
116 for (std::vector<const TemplateURL*>::iterator it = urls.begin();
117 it != urls.end(); ++it) {
118 const TemplateURL* url = *it;
119 // Skip all the URLs not shown on the default list.
120 if (!url->ShowInDefaultList())
121 continue;
122 if (0 == index) {
123 model_->SetDefaultSearchProvider(url);
124 return;
125 }
126 --index;
127 }
128 DCHECK(false);
129 }
130 }
131
132 // Return TRUE if the default is managed via policy.
133 - (BOOL)isDefaultManaged {
134 return model_->is_default_search_managed();
135 }
136 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698