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); |
+} |