keyword_editor_controller.cc revision dc0f95d653279beabeb9817299e2902918ba123e
1// Copyright (c) 2011 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#include "chrome/browser/ui/search_engines/keyword_editor_controller.h"
6
7#include "base/utf_string_conversions.h"
8#include "chrome/browser/metrics/user_metrics.h"
9#include "chrome/browser/prefs/pref_service.h"
10#include "chrome/browser/profiles/profile.h"
11#include "chrome/browser/search_engines/template_url.h"
12#include "chrome/browser/search_engines/template_url_model.h"
13#include "chrome/browser/ui/search_engines/template_url_table_model.h"
14#include "chrome/common/pref_names.h"
15
16KeywordEditorController::KeywordEditorController(Profile* profile)
17    : profile_(profile) {
18  table_model_.reset(new TemplateURLTableModel(profile->GetTemplateURLModel()));
19}
20
21KeywordEditorController::~KeywordEditorController() {
22}
23
24// static
25// TODO(rsesek): Other platforms besides Mac should remember window
26// placement. http://crbug.com/22269
27void KeywordEditorController::RegisterPrefs(PrefService* prefs) {
28  prefs->RegisterDictionaryPref(prefs::kKeywordEditorWindowPlacement);
29}
30
31int KeywordEditorController::AddTemplateURL(const string16& title,
32                                            const string16& keyword,
33                                            const std::string& url) {
34  DCHECK(!url.empty());
35
36  UserMetrics::RecordAction(UserMetricsAction("KeywordEditor_AddKeyword"),
37                            profile_);
38
39  TemplateURL* template_url = new TemplateURL();
40  template_url->set_short_name(title);
41  template_url->set_keyword(keyword);
42  template_url->SetURL(url, 0, 0);
43
44  // There's a bug (1090726) in TableView with groups enabled such that newly
45  // added items in groups ALWAYS appear at the end, regardless of the index
46  // passed in. Worse yet, the selected rows get messed up when this happens
47  // causing other problems. As a work around we always add the item to the end
48  // of the list.
49  const int new_index = table_model_->RowCount();
50  table_model_->Add(new_index, template_url);
51
52  return new_index;
53}
54
55void KeywordEditorController::ModifyTemplateURL(const TemplateURL* template_url,
56                                                const string16& title,
57                                                const string16& keyword,
58                                                const std::string& url) {
59  const int index = table_model_->IndexOfTemplateURL(template_url);
60  if (index == -1) {
61    // Will happen if url was deleted out from under us while the user was
62    // editing it.
63    return;
64  }
65
66  // Don't do anything if the entry didn't change.
67  if (template_url->short_name() == title &&
68      template_url->keyword() == keyword &&
69      ((url.empty() && !template_url->url()) ||
70       (!url.empty() && template_url->url() &&
71        template_url->url()->url() == url))) {
72    return;
73  }
74
75  table_model_->ModifyTemplateURL(index, title, keyword, url);
76
77  UserMetrics::RecordAction(UserMetricsAction("KeywordEditor_ModifiedKeyword"),
78                            profile_);
79}
80
81bool KeywordEditorController::CanEdit(const TemplateURL* url) const {
82  return !url_model()->is_default_search_managed() ||
83      url != url_model()->GetDefaultSearchProvider();
84}
85
86bool KeywordEditorController::CanMakeDefault(const TemplateURL* url) const {
87  return url_model()->CanMakeDefault(url);
88}
89
90bool KeywordEditorController::CanRemove(const TemplateURL* url) const {
91  return url != url_model()->GetDefaultSearchProvider();
92}
93
94void KeywordEditorController::RemoveTemplateURL(int index) {
95  table_model_->Remove(index);
96  UserMetrics::RecordAction(UserMetricsAction("KeywordEditor_RemoveKeyword"),
97                            profile_);
98}
99
100int KeywordEditorController::MakeDefaultTemplateURL(int index) {
101  return table_model_->MakeDefaultTemplateURL(index);
102}
103
104bool KeywordEditorController::loaded() const {
105  return url_model()->loaded();
106}
107
108const TemplateURL* KeywordEditorController::GetTemplateURL(int index) const {
109  return &table_model_->GetTemplateURL(index);
110}
111
112TemplateURLModel* KeywordEditorController::url_model() const {
113  return table_model_->template_url_model();
114}
115