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/local_storage_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 kLocalStorageInfoViewBorderSize = 1; 20 static const int kLocalStorageInfoViewInsetSize = 3; 21 22 /////////////////////////////////////////////////////////////////////////////// 23 // LocalStorageInfoView, public: 24 25 LocalStorageInfoView::LocalStorageInfoView() 26 : origin_value_field_(NULL), 27 size_value_field_(NULL), 28 last_modified_value_field_(NULL) { 29 } 30 31 LocalStorageInfoView::~LocalStorageInfoView() { 32 } 33 34 void LocalStorageInfoView::SetLocalStorageInfo( 35 const BrowsingDataLocalStorageHelper::LocalStorageInfo& 36 local_storage_info) { 37 origin_value_field_->SetText(UTF8ToWide(local_storage_info.origin)); 38 size_value_field_->SetText( 39 FormatBytes(local_storage_info.size, 40 GetByteDisplayUnits(local_storage_info.size), 41 true)); 42 last_modified_value_field_->SetText( 43 base::TimeFormatFriendlyDateAndTime(local_storage_info.last_modified)); 44 EnableLocalStorageDisplay(true); 45 } 46 47 void LocalStorageInfoView::EnableLocalStorageDisplay(bool enabled) { 48 origin_value_field_->SetEnabled(enabled); 49 size_value_field_->SetEnabled(enabled); 50 last_modified_value_field_->SetEnabled(enabled); 51 } 52 53 void LocalStorageInfoView::ClearLocalStorageDisplay() { 54 std::wstring no_cookie_string = 55 UTF16ToWide(l10n_util::GetStringUTF16(IDS_COOKIES_COOKIE_NONESELECTED)); 56 origin_value_field_->SetText(no_cookie_string); 57 size_value_field_->SetText(no_cookie_string); 58 last_modified_value_field_->SetText(no_cookie_string); 59 EnableLocalStorageDisplay(false); 60 } 61 62 /////////////////////////////////////////////////////////////////////////////// 63 // LocalStorageInfoView, views::View overrides: 64 65 void LocalStorageInfoView::ViewHierarchyChanged(bool is_add, 66 views::View* parent, 67 views::View* child) { 68 if (is_add && child == this) 69 Init(); 70 } 71 72 /////////////////////////////////////////////////////////////////////////////// 73 // LocalStorageInfoView, private: 74 75 void LocalStorageInfoView::Init() { 76 SkColor border_color = color_utils::GetSysSkColor(COLOR_3DSHADOW); 77 views::Border* border = views::Border::CreateSolidBorder( 78 kLocalStorageInfoViewBorderSize, border_color); 79 set_border(border); 80 81 views::Label* origin_label = new views::Label(UTF16ToWide( 82 l10n_util::GetStringUTF16(IDS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL))); 83 origin_value_field_ = new views::Textfield; 84 views::Label* size_label = new views::Label(UTF16ToWide( 85 l10n_util::GetStringUTF16(IDS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL))); 86 size_value_field_ = new views::Textfield; 87 views::Label* last_modified_label = new views::Label(UTF16ToWide( 88 l10n_util::GetStringUTF16( 89 IDS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL))); 90 last_modified_value_field_ = new views::Textfield; 91 92 using views::GridLayout; 93 94 GridLayout* layout = new GridLayout(this); 95 layout->SetInsets(kLocalStorageInfoViewInsetSize, 96 kLocalStorageInfoViewInsetSize, 97 kLocalStorageInfoViewInsetSize, 98 kLocalStorageInfoViewInsetSize); 99 SetLayoutManager(layout); 100 101 int three_column_layout_id = 0; 102 views::ColumnSet* column_set = layout->AddColumnSet(three_column_layout_id); 103 column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0, 104 GridLayout::USE_PREF, 0, 0); 105 column_set->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); 106 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 107 GridLayout::USE_PREF, 0, 0); 108 109 layout->StartRow(0, three_column_layout_id); 110 layout->AddView(origin_label); 111 layout->AddView(origin_value_field_); 112 layout->AddPaddingRow(0, views::kRelatedControlSmallVerticalSpacing); 113 layout->StartRow(0, three_column_layout_id); 114 layout->AddView(size_label); 115 layout->AddView(size_value_field_); 116 layout->AddPaddingRow(0, views::kRelatedControlSmallVerticalSpacing); 117 layout->StartRow(0, three_column_layout_id); 118 layout->AddView(last_modified_label); 119 layout->AddView(last_modified_value_field_); 120 121 // Color these borderless text areas the same as the containing dialog. 122 SkColor text_area_background = color_utils::GetSysSkColor(COLOR_3DFACE); 123 // Now that the Textfields are in the view hierarchy, we can initialize them. 124 origin_value_field_->SetReadOnly(true); 125 origin_value_field_->RemoveBorder(); 126 origin_value_field_->SetBackgroundColor(text_area_background); 127 size_value_field_->SetReadOnly(true); 128 size_value_field_->RemoveBorder(); 129 size_value_field_->SetBackgroundColor(text_area_background); 130 last_modified_value_field_->SetReadOnly(true); 131 last_modified_value_field_->RemoveBorder(); 132 last_modified_value_field_->SetBackgroundColor(text_area_background); 133 } 134 135