172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/generic_info_view.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h"
83f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/utf_string_conversions.h"
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/color_utils.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/label.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/textfield/textfield.h"
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/grid_layout.h"
1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/layout_constants.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGenericInfoView::GenericInfoView(int number_of_rows)
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    : number_of_rows_(number_of_rows), name_string_ids_(NULL) {
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(number_of_rows_ > 0);
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGenericInfoView::GenericInfoView(
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int number_of_rows, const int name_string_ids[])
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    : number_of_rows_(number_of_rows), name_string_ids_(name_string_ids) {
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(number_of_rows_ > 0);
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid GenericInfoView::SetNameByStringId(int row, int name_string_id) {
283f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  SetName(row, UTF16ToWide(l10n_util::GetStringUTF16(name_string_id)));
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid GenericInfoView::SetName(int row, const string16& name) {
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(name_views_.get());  // Can only be called after Init time.
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(row >= 0 && row < number_of_rows_);
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  name_views_[row]->SetText(name);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid GenericInfoView::SetValue(int row, const string16& name) {
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(value_views_.get());  // Can only be called after Init time.
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(row >= 0 && row < number_of_rows_);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  value_views_[row]->SetText(name);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid GenericInfoView::ViewHierarchyChanged(bool is_add,
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                           views::View* parent,
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                           views::View* child) {
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (is_add && child == this) {
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    InitGenericInfoView();
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (name_string_ids_) {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      for (int i = 0; i < number_of_rows_; ++i)
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        SetNameByStringId(i, name_string_ids_[i]);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid GenericInfoView::InitGenericInfoView() {
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const int kInfoViewBorderSize = 1;
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const int kInfoViewInsetSize = 3;
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const int kLayoutId = 0;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SkColor border_color = color_utils::GetSysSkColor(COLOR_3DSHADOW);
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::Border* border = views::Border::CreateSolidBorder(
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      kInfoViewBorderSize, border_color);
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  set_border(border);
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  using views::GridLayout;
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GridLayout* layout = new GridLayout(this);
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->SetInsets(kInfoViewInsetSize, kInfoViewInsetSize,
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    kInfoViewInsetSize, kInfoViewInsetSize);
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SetLayoutManager(layout);
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::ColumnSet* column_set = layout->AddColumnSet(kLayoutId);
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        GridLayout::USE_PREF, 0, 0);
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        GridLayout::USE_PREF, 0, 0);
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  name_views_.reset(new views::Label* [number_of_rows_]);
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  value_views_.reset(new views::Textfield* [number_of_rows_]);
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (int i = 0; i < number_of_rows_; ++i) {
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (i)
8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      layout->AddPaddingRow(0, views::kRelatedControlSmallVerticalSpacing);
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    name_views_[i] = new views::Label;
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    value_views_[i] = new views::Textfield;
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    AddRow(kLayoutId, layout, name_views_[i], value_views_[i]);
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid GenericInfoView::AddRow(
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int layout_id, views::GridLayout* layout, views::Label* name,
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    views::Textfield* value) {
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Add to the view hierarchy.
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->StartRow(0, layout_id);
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(name);
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  layout->AddView(value);
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Color these borderless text areas the same as the containing dialog.
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SkColor text_area_background = color_utils::GetSysSkColor(COLOR_3DFACE);
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Init them now that they're in the view hierarchy.
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  value->SetReadOnly(true);
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  value->RemoveBorder();
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  value->SetBackgroundColor(text_area_background);
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
107