Logo Search packages:      
Sourcecode: chromium-browser version File versions  Download package

advanced_page_view.cc

// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/views/options/advanced_page_view.h"

#include "app/l10n_util.h"
#include "app/message_box_flags.h"
#include "base/string_util.h"
#include "base/values.h"
#include "chrome/browser/options_util.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/views/options/advanced_contents_view.h"
#include "chrome/browser/views/options/managed_prefs_banner_view.h"
#include "chrome/common/chrome_constants.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
#include "views/controls/message_box_view.h"
#include "views/controls/button/native_button.h"
#include "views/controls/scroll_view.h"
#include "views/grid_layout.h"
#include "views/standard_layout.h"
#include "views/window/dialog_delegate.h"
#include "views/window/window.h"

namespace {

// A dialog box that asks the user to confirm resetting settings.
class ResetDefaultsConfirmBox : public views::DialogDelegate {
 public:
  // This box is modal to |parent_hwnd|.
  static void ShowConfirmBox(HWND parent_hwnd, AdvancedPageView* page_view) {
    // When the window closes, it will delete itself.
    new ResetDefaultsConfirmBox(parent_hwnd, page_view);
  }

 protected:
  // views::DialogDelegate
  virtual std::wstring GetDialogButtonLabel(
      MessageBoxFlags::DialogButton button) const {
    switch (button) {
      case MessageBoxFlags::DIALOGBUTTON_OK:
        return l10n_util::GetString(IDS_OPTIONS_RESET_OKLABEL);
      case MessageBoxFlags::DIALOGBUTTON_CANCEL:
        return l10n_util::GetString(IDS_OPTIONS_RESET_CANCELLABEL);
      default:
        break;
    }
    NOTREACHED();
    return std::wstring();
  }
  virtual std::wstring GetWindowTitle() const {
    return l10n_util::GetString(IDS_PRODUCT_NAME);
  }
  virtual bool Accept() {
    advanced_page_view_->ResetToDefaults();
    return true;
  }
  // views::WindowDelegate
  virtual void DeleteDelegate() { delete this; }
  virtual bool IsModal() const { return true; }
  virtual views::View* GetContentsView() { return message_box_view_; }

 private:
  ResetDefaultsConfirmBox(HWND parent_hwnd, AdvancedPageView* page_view)
      : advanced_page_view_(page_view) {
    int dialog_width = views::Window::GetLocalizedContentsWidth(
        IDS_OPTIONS_RESET_CONFIRM_BOX_WIDTH_CHARS);
    // Also deleted when the window closes.
    message_box_view_ = new MessageBoxView(
        MessageBoxFlags::kFlagHasMessage | MessageBoxFlags::kFlagHasOKButton,
        l10n_util::GetString(IDS_OPTIONS_RESET_MESSAGE).c_str(),
        std::wstring(),
        dialog_width);
    views::Window::CreateChromeWindow(parent_hwnd, gfx::Rect(), this)->Show();
  }
  virtual ~ResetDefaultsConfirmBox() { }

  MessageBoxView* message_box_view_;
  AdvancedPageView* advanced_page_view_;

  DISALLOW_COPY_AND_ASSIGN(ResetDefaultsConfirmBox);
};

}  // namespace

///////////////////////////////////////////////////////////////////////////////
// AdvancedPageView, public:

AdvancedPageView::AdvancedPageView(Profile* profile)
    : advanced_scroll_view_(NULL),
      reset_to_default_button_(NULL),
      OptionsPageView(profile) {
}

AdvancedPageView::~AdvancedPageView() {
}

void AdvancedPageView::ResetToDefaults() {
  OptionsUtil::ResetToDefaults(profile());
}

///////////////////////////////////////////////////////////////////////////////
// AdvancedPageView, views::ButtonListener implementation:

void AdvancedPageView::ButtonPressed(
    views::Button* sender, const views::Event& event) {
  if (sender == reset_to_default_button_) {
     UserMetricsRecordAction(UserMetricsAction("Options_ResetToDefaults"),
                             NULL);
     ResetDefaultsConfirmBox::ShowConfirmBox(
         GetWindow()->GetNativeWindow(), this);
  }
}

///////////////////////////////////////////////////////////////////////////////
// AdvancedPageView, OptionsPageView implementation:

void AdvancedPageView::InitControlLayout() {
  reset_to_default_button_ = new views::NativeButton(
      this, l10n_util::GetString(IDS_OPTIONS_RESET));
  advanced_scroll_view_ = new AdvancedScrollViewContainer(profile());

  using views::GridLayout;
  using views::ColumnSet;

  GridLayout* layout = CreatePanelGridLayout(this);
  SetLayoutManager(layout);

  const int single_column_view_set_id = 0;
  ColumnSet* column_set = layout->AddColumnSet(single_column_view_set_id);
  column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
                        GridLayout::USE_PREF, 0, 0);
  layout->StartRow(0, single_column_view_set_id);
  layout->AddView(
      new ManagedPrefsBannerView(profile()->GetPrefs(), OPTIONS_PAGE_ADVANCED));

  layout->StartRow(1, single_column_view_set_id);
  layout->AddView(advanced_scroll_view_);
  layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);

  layout->StartRow(0, single_column_view_set_id);
  layout->AddView(reset_to_default_button_, 1, 1,
                  GridLayout::TRAILING, GridLayout::CENTER);
}

Generated by  Doxygen 1.6.0   Back to index