summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/uninstall_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/uninstall_view.cc')
-rw-r--r--chrome/browser/views/uninstall_view.cc150
1 files changed, 150 insertions, 0 deletions
diff --git a/chrome/browser/views/uninstall_view.cc b/chrome/browser/views/uninstall_view.cc
new file mode 100644
index 0000000..2ecbc43
--- /dev/null
+++ b/chrome/browser/views/uninstall_view.cc
@@ -0,0 +1,150 @@
+// Copyright (c) 2009 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/uninstall_view.h"
+
+#include "app/l10n_util.h"
+#include "base/message_loop.h"
+#include "base/process_util.h"
+#include "chrome/browser/shell_integration.h"
+#include "chrome/common/result_codes.h"
+#include "chrome/installer/util/browser_distribution.h"
+#include "chrome/installer/util/shell_util.h"
+#include "views/controls/button/checkbox.h"
+#include "views/controls/label.h"
+#include "views/standard_layout.h"
+
+#include "grit/chromium_strings.h"
+
+UninstallView::UninstallView(int& user_selection)
+ : confirm_label_(NULL),
+ delete_profile_(NULL),
+ change_default_browser_(NULL),
+ browsers_combo_(NULL),
+ browsers_(NULL),
+ user_selection_(user_selection) {
+ SetupControls();
+}
+
+UninstallView::~UninstallView() {
+ // Exit the message loop we were started with so that uninstall can continue.
+ MessageLoop::current()->Quit();
+}
+
+void UninstallView::SetupControls() {
+ using views::ColumnSet;
+ using views::GridLayout;
+
+ GridLayout* layout = CreatePanelGridLayout(this);
+ SetLayoutManager(layout);
+
+ // Message to confirm uninstallation.
+ int column_set_id = 0;
+ ColumnSet* column_set = layout->AddColumnSet(column_set_id);
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
+ GridLayout::USE_PREF, 0, 0);
+ layout->StartRow(0, column_set_id);
+ confirm_label_ = new views::Label(l10n_util::GetString(IDS_UNINSTALL_VERIFY));
+ confirm_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
+ layout->AddView(confirm_label_);
+
+ layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing);
+
+ // The "delete profile" check box.
+ ++column_set_id;
+ column_set = layout->AddColumnSet(column_set_id);
+ column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing);
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
+ GridLayout::USE_PREF, 0, 0);
+ layout->StartRow(0, column_set_id);
+ delete_profile_ = new views::Checkbox(
+ l10n_util::GetString(IDS_UNINSTALL_DELETE_PROFILE));
+ layout->AddView(delete_profile_);
+
+ // Set default browser combo box
+ if (BrowserDistribution::GetDistribution()->CanSetAsDefault() &&
+ ShellIntegration::IsDefaultBrowser()) {
+ browsers_.reset(new BrowsersMap());
+ ShellUtil::GetRegisteredBrowsers(browsers_.get());
+ if (!browsers_->empty()) {
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+
+ ++column_set_id;
+ column_set = layout->AddColumnSet(column_set_id);
+ column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing);
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
+ GridLayout::USE_PREF, 0, 0);
+ column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing);
+ column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
+ GridLayout::USE_PREF, 0, 0);
+ layout->StartRow(0, column_set_id);
+ change_default_browser_ = new views::Checkbox(
+ l10n_util::GetString(IDS_UNINSTALL_SET_DEFAULT_BROWSER));
+ change_default_browser_->set_listener(this);
+ layout->AddView(change_default_browser_);
+ browsers_combo_ = new views::Combobox(this);
+ layout->AddView(browsers_combo_);
+ browsers_combo_->SetEnabled(false);
+ }
+ }
+
+ layout->AddPaddingRow(0, kRelatedControlSmallVerticalSpacing);
+}
+
+bool UninstallView::Accept() {
+ user_selection_ = ResultCodes::NORMAL_EXIT;
+ if (delete_profile_->checked())
+ user_selection_ = ResultCodes::UNINSTALL_DELETE_PROFILE;
+ if (change_default_browser_ && change_default_browser_->checked()) {
+ int index = browsers_combo_->selected_item();
+ BrowsersMap::const_iterator it = browsers_->begin();
+ std::advance(it, index);
+ base::LaunchApp((*it).second, false, true, NULL);
+ }
+ return true;
+}
+
+bool UninstallView::Cancel() {
+ user_selection_ = ResultCodes::UNINSTALL_USER_CANCEL;
+ return true;
+}
+
+std::wstring UninstallView::GetDialogButtonLabel(
+ MessageBoxFlags::DialogButton button) const {
+ // We only want to give custom name to OK button - 'Uninstall'. Cancel
+ // button remains same.
+ std::wstring label = L"";
+ if (button == MessageBoxFlags::DIALOGBUTTON_OK)
+ label = l10n_util::GetString(IDS_UNINSTALL_BUTTON_TEXT);
+ return label;
+}
+
+void UninstallView::ButtonPressed(
+ views::Button* sender, const views::Event& event) {
+ if (change_default_browser_ == sender) {
+ // Disable the browsers combobox if the user unchecks the checkbox.
+ DCHECK(browsers_combo_);
+ browsers_combo_->SetEnabled(change_default_browser_->checked());
+ }
+}
+
+std::wstring UninstallView::GetWindowTitle() const {
+ return l10n_util::GetString(IDS_UNINSTALL_CHROME);
+}
+
+views::View* UninstallView::GetContentsView() {
+ return this;
+}
+
+int UninstallView::GetItemCount() {
+ DCHECK(!browsers_->empty());
+ return browsers_->size();
+}
+
+std::wstring UninstallView::GetItemAt(int index) {
+ DCHECK(index < (int) browsers_->size());
+ BrowsersMap::const_iterator it = browsers_->begin();
+ std::advance(it, index);
+ return (*it).first;
+}