summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/first_run_customize_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/first_run_customize_view.cc')
-rw-r--r--chrome/browser/views/first_run_customize_view.cc253
1 files changed, 253 insertions, 0 deletions
diff --git a/chrome/browser/views/first_run_customize_view.cc b/chrome/browser/views/first_run_customize_view.cc
new file mode 100644
index 0000000..6b8263a
--- /dev/null
+++ b/chrome/browser/views/first_run_customize_view.cc
@@ -0,0 +1,253 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "chrome/browser/views/first_run_customize_view.h"
+
+#include "chrome/app/locales/locale_settings.h"
+#include "chrome/app/theme/theme_resources.h"
+#include "chrome/browser/importer.h"
+#include "chrome/browser/first_run.h"
+#include "chrome/browser/shell_integration.h"
+#include "chrome/browser/standard_layout.h"
+#include "chrome/browser/user_metrics.h"
+#include "chrome/common/l10n_util.h"
+#include "chrome/common/resource_bundle.h"
+#include "chrome/views/checkbox.h"
+#include "chrome/views/combo_box.h"
+#include "chrome/views/image_view.h"
+#include "chrome/views/label.h"
+#include "chrome/views/throbber.h"
+#include "chrome/views/window.h"
+
+#include "generated_resources.h"
+
+FirstRunCustomizeView::FirstRunCustomizeView(Profile* profile,
+ ImporterHost* importer_host)
+ : FirstRunViewBase(profile),
+ main_label_(NULL),
+ import_cbox_(NULL),
+ default_browser_cbox_(NULL),
+ import_from_combo_(NULL),
+ shortcuts_label_(NULL),
+ desktop_shortcut_cbox_(NULL),
+ quick_shortcut_cbox_(NULL),
+ customize_observer_(NULL) {
+ importer_host_ = importer_host;
+ DCHECK(importer_host_);
+ SetupControls();
+}
+
+FirstRunCustomizeView::~FirstRunCustomizeView() {
+}
+
+ChromeViews::CheckBox* FirstRunCustomizeView::MakeCheckBox(int label_id) {
+ ChromeViews::CheckBox* cbox =
+ new ChromeViews::CheckBox(l10n_util::GetString(label_id));
+ cbox->SetListener(this);
+ AddChildView(cbox);
+ return cbox;
+}
+
+void FirstRunCustomizeView::SetupControls() {
+ using ChromeViews::Label;
+ using ChromeViews::CheckBox;
+
+ main_label_ = new Label(l10n_util::GetString(IDS_FR_CUSTOMIZE_DLG_TEXT));
+ main_label_->SetMultiLine(true);
+ main_label_->SetHorizontalAlignment(Label::ALIGN_LEFT);
+ AddChildView(main_label_);
+
+ import_cbox_ = MakeCheckBox(IDS_FR_CUSTOMIZE_IMPORT);
+
+ import_from_combo_ = new ChromeViews::ComboBox(this);
+ AddChildView(import_from_combo_);
+
+ default_browser_cbox_ = MakeCheckBox(IDS_FR_CUSTOMIZE_DEFAULT_BROWSER);
+
+ shortcuts_label_ =
+ new Label(l10n_util::GetString(IDS_FR_CUSTOMIZE_SHORTCUTS));
+ shortcuts_label_->SetHorizontalAlignment(Label::ALIGN_LEFT);
+ AddChildView(shortcuts_label_);
+
+ // The two check boxes for the different shortcut creation.
+ desktop_shortcut_cbox_ = MakeCheckBox(IDS_FR_CUSTOM_SHORTCUT_DESKTOP);
+ desktop_shortcut_cbox_->SetIsSelected(true);
+
+ quick_shortcut_cbox_ = MakeCheckBox(IDS_FR_CUSTOM_SHORTCUT_QUICKL);
+ quick_shortcut_cbox_->SetIsSelected(true);
+}
+
+void FirstRunCustomizeView::GetPreferredSize(CSize *out) {
+ DCHECK(out);
+ *out = ChromeViews::Window::GetLocalizedContentsSize(
+ IDS_FIRSTRUNCUSTOMIZE_DIALOG_WIDTH_CHARS,
+ IDS_FIRSTRUNCUSTOMIZE_DIALOG_HEIGHT_LINES).ToSIZE();
+}
+
+void FirstRunCustomizeView::Layout() {
+ FirstRunViewBase::Layout();
+
+ const int kVertSpacing = 8;
+ const int kComboExtraPad = 8;
+
+ CSize canvas;
+ GetPreferredSize(&canvas);
+
+ // Welcome label goes in to to the left. It does not go across the
+ // entire window because the background gets busy on the right.
+ CSize pref_size;
+ main_label_->GetPreferredSize(&pref_size);
+ main_label_->SetBounds(kPanelHorizMargin, kPanelVertMargin,
+ canvas.cx - pref_size.cx, pref_size.cy);
+ AdjustDialogWidth(main_label_);
+
+ int next_v_space = background_image()->GetY() +
+ background_image()->GetHeight() + kPanelVertMargin;
+
+ import_cbox_->GetPreferredSize(&pref_size);
+ import_cbox_->SetBounds(kPanelHorizMargin, next_v_space,
+ pref_size.cx, pref_size.cy);
+
+ import_cbox_->SetIsSelected(true);
+
+ int x_offset = import_cbox_->GetX() +
+ import_cbox_->GetWidth();
+
+ import_from_combo_->GetPreferredSize(&pref_size);
+ import_from_combo_->SetBounds(x_offset, next_v_space,
+ pref_size.cx + kComboExtraPad, pref_size.cy);
+
+ AdjustDialogWidth(import_from_combo_);
+
+ next_v_space = import_cbox_->GetY() + import_cbox_->GetHeight() +
+ kUnrelatedControlVerticalSpacing;
+
+ default_browser_cbox_->GetPreferredSize(&pref_size);
+ default_browser_cbox_->SetBounds(kPanelHorizMargin, next_v_space,
+ pref_size.cx, pref_size.cy);
+
+ AdjustDialogWidth(default_browser_cbox_);
+
+ next_v_space += default_browser_cbox_->GetHeight() +
+ kUnrelatedControlVerticalSpacing;
+
+ shortcuts_label_->GetPreferredSize(&pref_size);
+ shortcuts_label_->SetBounds(kPanelHorizMargin, next_v_space,
+ pref_size.cx, pref_size.cy);
+
+ AdjustDialogWidth(shortcuts_label_);
+
+ next_v_space += shortcuts_label_->GetHeight() +
+ kRelatedControlVerticalSpacing;
+
+ desktop_shortcut_cbox_->GetPreferredSize(&pref_size);
+ desktop_shortcut_cbox_->SetBounds(kPanelHorizMargin, next_v_space,
+ pref_size.cx, pref_size.cy);
+
+ AdjustDialogWidth(desktop_shortcut_cbox_);
+
+ next_v_space += desktop_shortcut_cbox_->GetHeight() +
+ kRelatedControlVerticalSpacing;
+
+ quick_shortcut_cbox_->GetPreferredSize(&pref_size);
+ quick_shortcut_cbox_->SetBounds(kPanelHorizMargin, next_v_space,
+ pref_size.cx, pref_size.cy);
+
+ AdjustDialogWidth(quick_shortcut_cbox_);
+}
+
+void FirstRunCustomizeView::ButtonPressed(ChromeViews::NativeButton* sender) {
+ if (import_cbox_ == sender) {
+ // Disable the import combobox if the user unchecks the checkbox.
+ import_from_combo_->SetEnabled(import_cbox_->IsSelected());
+ }
+}
+
+int FirstRunCustomizeView::GetItemCount(ChromeViews::ComboBox* source) {
+ return importer_host_->GetAvailableProfileCount();
+}
+
+std::wstring FirstRunCustomizeView::GetItemAt(ChromeViews::ComboBox* source,
+ int index) {
+ return importer_host_->GetSourceProfileNameAt(index);
+}
+
+std::wstring FirstRunCustomizeView::GetWindowTitle() const {
+ return l10n_util::GetString(IDS_FR_CUSTOMIZE_DLG_TITLE);
+}
+
+bool FirstRunCustomizeView::Accept() {
+ if (!IsDialogButtonEnabled(DIALOGBUTTON_OK))
+ return false;
+
+ DisableButtons();
+ import_cbox_->SetEnabled(false);
+ import_from_combo_->SetEnabled(false);
+ default_browser_cbox_->SetEnabled(false);
+ desktop_shortcut_cbox_->SetEnabled(false);
+ quick_shortcut_cbox_->SetEnabled(false);
+
+ if (desktop_shortcut_cbox_->IsSelected()) {
+ UserMetrics::RecordAction(L"FirstRunCustom_Do_DesktopShortcut", profile_);
+ CreateDesktopShortcut();
+ }
+ if (quick_shortcut_cbox_->IsSelected()) {
+ UserMetrics::RecordAction(L"FirstRunCustom_Do_QuickLShortcut", profile_);
+ CreateQuickLaunchShortcut();
+ }
+ if (!import_cbox_->IsSelected()) {
+ UserMetrics::RecordAction(L"FirstRunCustom_No_Import", profile_);
+ } else {
+ int browser_selected = import_from_combo_->GetSelectedItem();
+ FirstRun::ImportSettings(profile_, browser_selected,
+ GetDefaultImportItems(), dialog_->GetHWND());
+ }
+ if (default_browser_cbox_->IsSelected()) {
+ UserMetrics::RecordAction(L"FirstRunCustom_Do_DefBrowser", profile_);
+ ShellIntegration::SetAsDefaultBrowser();
+ }
+
+ if (customize_observer_)
+ customize_observer_->CustomizeAccepted();
+
+ // Exit the message loop we were started with so that startup can continue.
+ MessageLoop::current()->Quit();
+
+ return true;
+}
+
+bool FirstRunCustomizeView::Cancel() {
+ if (customize_observer_)
+ customize_observer_->CustomizeCanceled();
+
+ // Don't quit the message loop in this case - we're still showing the main
+ // First run dialog box underneath ourselves.
+
+ return true;
+}