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