Home | History | Annotate | Download | only in views
      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