Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2537)

Unified Diff: chrome/browser/gtk/import_progress_dialog_gtk.cc

Issue 114047: Add import progress indicator dialog. (Closed)
Patch Set: code review fixes Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/gtk/import_progress_dialog_gtk.h ('k') | chrome/browser/importer/firefox_importer_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/import_progress_dialog_gtk.cc
diff --git a/chrome/browser/gtk/import_progress_dialog_gtk.cc b/chrome/browser/gtk/import_progress_dialog_gtk.cc
new file mode 100644
index 0000000000000000000000000000000000000000..1dc828eac2bd10652df7b5bda4565b62994b697a
--- /dev/null
+++ b/chrome/browser/gtk/import_progress_dialog_gtk.cc
@@ -0,0 +1,202 @@
+// 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/gtk/import_progress_dialog_gtk.h"
+
+#include "app/l10n_util.h"
+#include "app/resource_bundle.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+
+namespace {
+void SetItemImportStatus(GtkWidget* chkbox, int res_id, bool is_done) {
+ std::string status = l10n_util::GetStringUTF8(res_id);
+ // Windows version of this has fancy throbbers to indicate progress. Here
+ // we rely on text until we can have something equivalent on Linux.
+ if (is_done)
+ status.append(" done.");
+ else
+ status.append(" importing...");
+ gtk_button_set_label(GTK_BUTTON(chkbox), status.c_str());
+}
+} // namespace
+
+// static
+void ImportProgressDialogGtk::StartImport(GtkWindow* parent,
+ int16 items,
+ ImporterHost* importer_host,
+ const ProfileInfo& browser_profile,
+ Profile* profile,
+ ImportObserver* observer,
+ bool first_run) {
+ ImportProgressDialogGtk* v = new ImportProgressDialogGtk(
+ WideToUTF16(browser_profile.description), items, importer_host, observer,
+ parent, browser_profile.browser_type == BOOKMARKS_HTML);
+
+ // In headless mode it means that we don't show the progress window, but it
+ // still need it to exist. No user interaction will be required.
+ if (!importer_host->is_headless())
+ v->ShowDialog();
+
+ importer_host->StartImportSettings(browser_profile, profile, items,
+ new ProfileWriter(profile),
+ first_run);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// ImporterHost::Observer implementation:
+void ImportProgressDialogGtk::ImportItemStarted(ImportItem item) {
+ DCHECK(items_ & item);
+ switch (item) {
+ case FAVORITES:
+ SetItemImportStatus(bookmarks_,
+ IDS_IMPORT_PROGRESS_STATUS_BOOKMARKS, false);
+ break;
+ case SEARCH_ENGINES:
+ SetItemImportStatus(search_engines_,
+ IDS_IMPORT_PROGRESS_STATUS_SEARCH, false);
+ break;
+ case PASSWORDS:
+ SetItemImportStatus(passwords_,
+ IDS_IMPORT_PROGRESS_STATUS_PASSWORDS, false);
+ break;
+ case HISTORY:
+ SetItemImportStatus(history_,
+ IDS_IMPORT_PROGRESS_STATUS_HISTORY, false);
+ break;
+ default:
+ break;
+ }
+}
+
+void ImportProgressDialogGtk::ImportItemEnded(ImportItem item) {
+ DCHECK(items_ & item);
+ switch (item) {
+ case FAVORITES:
+ SetItemImportStatus(bookmarks_,
+ IDS_IMPORT_PROGRESS_STATUS_BOOKMARKS, true);
+ break;
+ case SEARCH_ENGINES:
+ SetItemImportStatus(search_engines_,
+ IDS_IMPORT_PROGRESS_STATUS_SEARCH, true);
+ break;
+ case PASSWORDS:
+ SetItemImportStatus(passwords_,
+ IDS_IMPORT_PROGRESS_STATUS_PASSWORDS, true);
+ break;
+ case HISTORY:
+ SetItemImportStatus(history_,
+ IDS_IMPORT_PROGRESS_STATUS_HISTORY, true);
+ break;
+ default:
+ break;
+ }
+}
+
+void ImportProgressDialogGtk::ImportStarted() {
+ importing_ = true;
+}
+
+void ImportProgressDialogGtk::ImportEnded() {
+ importing_ = false;
+ importer_host_->SetObserver(NULL);
+ if (observer_)
+ observer_->ImportComplete();
+ CloseDialog();
+}
+
+ImportProgressDialogGtk::ImportProgressDialogGtk(const string16& source_profile,
+ int16 items, ImporterHost* importer_host, ImportObserver* observer,
+ GtkWindow* parent, bool bookmarks_import) :
+ parent_(parent), importing_(true), observer_(observer),
+ items_(items), importer_host_(importer_host) {
+ importer_host_->SetObserver(this);
+
+ // Build the dialog.
+ dialog_ = gtk_dialog_new_with_buttons(
+ l10n_util::GetStringUTF8(IDS_IMPORT_PROGRESS_TITLE).c_str(),
+ parent_,
+ (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR),
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ NULL);
+
+ GtkWidget* content_area = GTK_DIALOG(dialog_)->vbox;
+ gtk_box_set_spacing(GTK_BOX(content_area), 18);
+
+ GtkWidget* import_info = gtk_label_new(
+ l10n_util::GetStringFUTF8(IDS_IMPORT_PROGRESS_INFO,
+ source_profile).c_str());
+ gtk_label_set_single_line_mode(GTK_LABEL(import_info), FALSE);
+ gtk_box_pack_start(GTK_BOX(content_area), import_info, FALSE, FALSE, 0);
+
+ bookmarks_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_IMPORT_PROGRESS_STATUS_BOOKMARKS).c_str());
+ gtk_box_pack_start(GTK_BOX(content_area), bookmarks_, FALSE, FALSE, 0);
+ gtk_widget_set_sensitive(bookmarks_, FALSE);
+ if (items_ & FAVORITES)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bookmarks_), TRUE);
+
+ search_engines_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_IMPORT_PROGRESS_STATUS_SEARCH).c_str());
+ gtk_box_pack_start(GTK_BOX(content_area), search_engines_, FALSE, FALSE, 0);
+ gtk_widget_set_sensitive(search_engines_, FALSE);
+ if (items_ & SEARCH_ENGINES)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(search_engines_), TRUE);
+
+ passwords_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_IMPORT_PROGRESS_STATUS_PASSWORDS).c_str());
+ gtk_box_pack_start(GTK_BOX(content_area), passwords_, FALSE, FALSE, 0);
+ gtk_widget_set_sensitive(passwords_, FALSE);
+ if (items_ & PASSWORDS)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(passwords_), TRUE);
+
+ history_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_IMPORT_PROGRESS_STATUS_HISTORY).c_str());
+ gtk_box_pack_start(GTK_BOX(content_area), history_, FALSE, FALSE, 0);
+ gtk_widget_set_sensitive(history_, FALSE);
+ if (items_ & HISTORY)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(history_), TRUE);
+
+ g_signal_connect(dialog_, "response",
+ G_CALLBACK(HandleOnResponseDialog), this);
+ gtk_window_set_resizable(GTK_WINDOW(dialog_), FALSE);
+}
+
+void ImportProgressDialogGtk::CloseDialog() {
+ gtk_widget_destroy(dialog_);
+ dialog_ = NULL;
+ delete this;
+}
+
+void ImportProgressDialogGtk::OnDialogResponse(GtkWidget* widget,
+ int response) {
+ if (!importing_) {
+ CloseDialog();
+ return;
+ }
+
+ // Only response to the dialog is to close it so we hide immediately.
+ gtk_widget_hide_all(dialog_);
+ if (response == GTK_RESPONSE_REJECT)
+ importer_host_->Cancel();
+}
+
+void ImportProgressDialogGtk::ShowDialog() {
+ gtk_widget_show_all(dialog_);
+}
+
+
+void StartImportingWithUI(GtkWindow* parent,
+ int16 items,
+ ImporterHost* importer_host,
+ const ProfileInfo& browser_profile,
+ Profile* profile,
+ ImportObserver* observer,
+ bool first_run) {
+ DCHECK(items != 0);
+ ImportProgressDialogGtk::StartImport(parent, items, importer_host,
+ browser_profile, profile, observer,
+ first_run);
+}
« no previous file with comments | « chrome/browser/gtk/import_progress_dialog_gtk.h ('k') | chrome/browser/importer/firefox_importer_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698