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