1 // Copyright (c) 2011 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/ui/views/database_info_view.h" 6 7 #include <algorithm> 8 9 #include "base/i18n/time_formatting.h" 10 #include "base/utf_string_conversions.h" 11 #include "grit/generated_resources.h" 12 #include "ui/base/l10n/l10n_util.h" 13 #include "ui/gfx/color_utils.h" 14 #include "views/controls/label.h" 15 #include "views/controls/textfield/textfield.h" 16 #include "views/layout/grid_layout.h" 17 #include "views/layout/layout_constants.h" 18 19 static const int kDatabaseInfoViewBorderSize = 1; 20 static const int kDatabaseInfoViewInsetSize = 3; 21 22 /////////////////////////////////////////////////////////////////////////////// 23 // DatabaseInfoView, public: 24 25 DatabaseInfoView::DatabaseInfoView() 26 : name_value_field_(NULL), 27 description_value_field_(NULL), 28 size_value_field_(NULL), 29 last_modified_value_field_(NULL) { 30 } 31 32 DatabaseInfoView::~DatabaseInfoView() { 33 } 34 35 void DatabaseInfoView::SetDatabaseInfo( 36 const BrowsingDataDatabaseHelper::DatabaseInfo& database_info) { 37 name_value_field_->SetText(database_info.database_name.empty() ? 38 UTF16ToWide( 39 l10n_util::GetStringUTF16(IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME)) : 40 UTF8ToWide(database_info.database_name)); 41 description_value_field_->SetText(UTF8ToWide(database_info.description)); 42 size_value_field_->SetText( 43 FormatBytes(database_info.size, 44 GetByteDisplayUnits(database_info.size), 45 true)); 46 last_modified_value_field_->SetText( 47 base::TimeFormatFriendlyDateAndTime(database_info.last_modified)); 48 EnableDatabaseDisplay(true); 49 } 50 51 void DatabaseInfoView::EnableDatabaseDisplay(bool enabled) { 52 name_value_field_->SetEnabled(enabled); 53 description_value_field_->SetEnabled(enabled); 54 size_value_field_->SetEnabled(enabled); 55 last_modified_value_field_->SetEnabled(enabled); 56 } 57 58 void DatabaseInfoView::ClearDatabaseDisplay() { 59 const std::wstring kEmpty; 60 description_value_field_->SetText(kEmpty); 61 size_value_field_->SetText(kEmpty); 62 last_modified_value_field_->SetText(kEmpty); 63 EnableDatabaseDisplay(false); 64 } 65 66 /////////////////////////////////////////////////////////////////////////////// 67 // DatabaseInfoView, views::View overrides: 68 69 void DatabaseInfoView::ViewHierarchyChanged(bool is_add, 70 views::View* parent, 71 views::View* child) { 72 if (is_add && child == this) 73 Init(); 74 } 75 76 /////////////////////////////////////////////////////////////////////////////// 77 // DatabaseInfoView, private: 78 79 void DatabaseInfoView::Init() { 80 SkColor border_color = color_utils::GetSysSkColor(COLOR_3DSHADOW); 81 views::Border* border = views::Border::CreateSolidBorder( 82 kDatabaseInfoViewBorderSize, border_color); 83 set_border(border); 84 85 views::Label* name_label = new views::Label( 86 UTF16ToWide(l10n_util::GetStringUTF16(IDS_COOKIES_COOKIE_NAME_LABEL))); 87 name_value_field_ = new views::Textfield; 88 views::Label* description_label = new views::Label( 89 UTF16ToWide(l10n_util::GetStringUTF16( 90 IDS_COOKIES_WEB_DATABASE_DESCRIPTION_LABEL))); 91 description_value_field_ = new views::Textfield; 92 views::Label* size_label = new views::Label( 93 UTF16ToWide(l10n_util::GetStringUTF16( 94 IDS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL))); 95 size_value_field_ = new views::Textfield; 96 views::Label* last_modified_label = new views::Label( 97 UTF16ToWide(l10n_util::GetStringUTF16( 98 IDS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL))); 99 last_modified_value_field_ = new views::Textfield; 100 101 using views::GridLayout; 102 103 GridLayout* layout = new GridLayout(this); 104 layout->SetInsets(kDatabaseInfoViewInsetSize, 105 kDatabaseInfoViewInsetSize, 106 kDatabaseInfoViewInsetSize, 107 kDatabaseInfoViewInsetSize); 108 SetLayoutManager(layout); 109 110 int three_column_layout_id = 0; 111 views::ColumnSet* column_set = layout->AddColumnSet(three_column_layout_id); 112 column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0, 113 GridLayout::USE_PREF, 0, 0); 114 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); 115 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 116 GridLayout::USE_PREF, 0, 0); 117 118 layout->StartRow(0, three_column_layout_id); 119 layout->AddView(name_label); 120 layout->AddView(name_value_field_); 121 layout->StartRow(0, three_column_layout_id); 122 layout->AddView(description_label); 123 layout->AddView(description_value_field_); 124 layout->AddPaddingRow(0, views::kRelatedControlSmallVerticalSpacing); 125 layout->StartRow(0, three_column_layout_id); 126 layout->AddView(size_label); 127 layout->AddView(size_value_field_); 128 layout->AddPaddingRow(0, views::kRelatedControlSmallVerticalSpacing); 129 layout->StartRow(0, three_column_layout_id); 130 layout->AddView(last_modified_label); 131 layout->AddView(last_modified_value_field_); 132 133 // Color these borderless text areas the same as the containing dialog. 134 SkColor text_area_background = color_utils::GetSysSkColor(COLOR_3DFACE); 135 // Now that the Textfields are in the view hierarchy, we can initialize them. 136 name_value_field_->SetReadOnly(true); 137 name_value_field_->RemoveBorder(); 138 name_value_field_->SetBackgroundColor(text_area_background); 139 description_value_field_->SetReadOnly(true); 140 description_value_field_->RemoveBorder(); 141 description_value_field_->SetBackgroundColor(text_area_background); 142 size_value_field_->SetReadOnly(true); 143 size_value_field_->RemoveBorder(); 144 size_value_field_->SetBackgroundColor(text_area_background); 145 last_modified_value_field_->SetReadOnly(true); 146 last_modified_value_field_->RemoveBorder(); 147 last_modified_value_field_->SetBackgroundColor(text_area_background); 148 } 149