15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/table_model.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/i18n/string_compare.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_skia.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TableColumn -----------------------------------------------------------------
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TableColumn::TableColumn()
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : id(0),
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      title(),
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      alignment(LEFT),
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      width(-1),
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      percent(),
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      min_visible_width(0),
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      sortable(false) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TableColumn::TableColumn(int id, Alignment alignment, int width, float percent)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : id(id),
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      title(l10n_util::GetStringUTF16(id)),
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      alignment(alignment),
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      width(width),
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      percent(percent),
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      min_visible_width(0),
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      sortable(false) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TableModel -----------------------------------------------------------------
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used for sorting.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static icu::Collator* collator = NULL;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::ImageSkia TableModel::GetIcon(int row) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gfx::ImageSkia();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 TableModel::GetTooltip(int row) {
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return base::string16();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TableModel::ShouldIndent(int row) {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TableModel::HasGroups() {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TableModel::Groups TableModel::GetGroups() {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If you override HasGroups to return true, you must override this as
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // well.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return std::vector<Group>();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int TableModel::GetGroupID(int row) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If you override HasGroups to return true, you must override this as
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // well.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int TableModel::CompareValues(int row1, int row2, int column_id) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(row1 >= 0 && row1 < RowCount() &&
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         row2 >= 0 && row2 < RowCount());
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 value1 = GetText(row1, column_id);
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 value2 = GetText(row2, column_id);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  icu::Collator* collator = GetCollator();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (collator)
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return base::i18n::CompareString16WithCollator(collator, value1, value2);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TableModel::ClearCollator() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete collator;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  collator = NULL;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)icu::Collator* TableModel::GetCollator() {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!collator) {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UErrorCode create_status = U_ZERO_ERROR;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    collator = icu::Collator::createInstance(create_status);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!U_SUCCESS(create_status)) {
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      collator = NULL;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return collator;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ui
103