• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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/language_order_table_model.h"
6 
7 #include <set>
8 
9 #include "base/string_split.h"
10 #include "base/utf_string_conversions.h"
11 #include "chrome/browser/browser_process.h"
12 #include "ui/base/l10n/l10n_util.h"
13 #include "ui/base/models/table_model_observer.h"
14 
LanguageOrderTableModel()15 LanguageOrderTableModel::LanguageOrderTableModel()
16     : observer_(NULL) {
17 }
18 
~LanguageOrderTableModel()19 LanguageOrderTableModel::~LanguageOrderTableModel() {}
20 
SetAcceptLanguagesString(const std::string & language_list)21 void LanguageOrderTableModel::SetAcceptLanguagesString(
22     const std::string& language_list) {
23   std::vector<std::string> languages_vector;
24   base::SplitString(language_list, ',', &languages_vector);
25   languages_.clear();
26   std::set<std::string> added;
27   for (int i = 0; i < static_cast<int>(languages_vector.size()); i++) {
28     const std::string& language(languages_vector.at(i));
29     if (!language.empty() && added.count(language) == 0) {
30       languages_.push_back(language);
31       added.insert(language);
32     }
33   }
34   if (observer_)
35     observer_->OnModelChanged();
36 }
37 
SetObserver(ui::TableModelObserver * observer)38 void LanguageOrderTableModel::SetObserver(ui::TableModelObserver* observer) {
39   observer_ = observer;
40 }
41 
GetText(int row,int column_id)42 string16 LanguageOrderTableModel::GetText(int row, int column_id) {
43   DCHECK(row >= 0 && row < RowCount());
44   const std::string app_locale = g_browser_process->GetApplicationLocale();
45   return l10n_util::GetDisplayNameForLocale(languages_.at(row),
46                                             app_locale,
47                                             true);
48 }
49 
Add(const std::string & language)50 bool LanguageOrderTableModel::Add(const std::string& language) {
51   if (language.empty())
52     return false;
53   // Check for selecting duplicated language.
54   for (std::vector<std::string>::const_iterator cit = languages_.begin();
55        cit != languages_.end(); ++cit)
56     if (*cit == language)
57       return false;
58   languages_.push_back(language);
59   if (observer_)
60     observer_->OnItemsAdded(RowCount() - 1, 1);
61   return true;
62 }
63 
Remove(int index)64 void LanguageOrderTableModel::Remove(int index) {
65   DCHECK(index >= 0 && index < RowCount());
66   languages_.erase(languages_.begin() + index);
67   if (observer_)
68     observer_->OnItemsRemoved(index, 1);
69 }
70 
GetIndex(const std::string & language)71 int LanguageOrderTableModel::GetIndex(const std::string& language) {
72   if (language.empty())
73     return -1;
74 
75   int index = 0;
76   for (std::vector<std::string>::const_iterator cit = languages_.begin();
77       cit != languages_.end(); ++cit) {
78     if (*cit == language)
79       return index;
80 
81     index++;
82   }
83 
84   return -1;
85 }
86 
MoveDown(int index)87 void LanguageOrderTableModel::MoveDown(int index) {
88   if (index < 0 || index >= RowCount() - 1)
89     return;
90   std::string item = languages_.at(index);
91   languages_.erase(languages_.begin() + index);
92   if (index == RowCount() - 1)
93     languages_.push_back(item);
94   else
95     languages_.insert(languages_.begin() + index + 1, item);
96   if (observer_)
97     observer_->OnItemsChanged(0, RowCount());
98 }
99 
MoveUp(int index)100 void LanguageOrderTableModel::MoveUp(int index) {
101   if (index <= 0 || index >= static_cast<int>(languages_.size()))
102     return;
103   std::string item = languages_.at(index);
104   languages_.erase(languages_.begin() + index);
105   languages_.insert(languages_.begin() + index - 1, item);
106   if (observer_)
107     observer_->OnItemsChanged(0, RowCount());
108 }
109 
GetLanguageList()110 std::string LanguageOrderTableModel::GetLanguageList() {
111   return JoinString(languages_, ',');
112 }
113 
RowCount()114 int LanguageOrderTableModel::RowCount() {
115   return static_cast<int>(languages_.size());
116 }
117