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