• 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