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