1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/gtk/importer/import_lock_dialog_gtk.h" 6 7#include <gtk/gtk.h> 8 9#include "base/message_loop.h" 10#include "chrome/browser/importer/importer_host.h" 11#include "chrome/browser/importer/importer_lock_dialog.h" 12#include "chrome/browser/metrics/user_metrics.h" 13#include "chrome/browser/ui/gtk/gtk_util.h" 14#include "grit/chromium_strings.h" 15#include "grit/generated_resources.h" 16#include "ui/base/l10n/l10n_util.h" 17 18namespace importer { 19 20void ShowImportLockDialog(gfx::NativeWindow parent, 21 ImporterHost* importer_host) { 22 ImportLockDialogGtk::Show(parent, importer_host); 23 UserMetrics::RecordAction(UserMetricsAction("ImportLockDialogGtk_Shown")); 24} 25 26} // namespace importer 27 28// static 29void ImportLockDialogGtk::Show(GtkWindow* parent, ImporterHost* importer_host) { 30 new ImportLockDialogGtk(parent, importer_host); 31} 32 33ImportLockDialogGtk::ImportLockDialogGtk(GtkWindow* parent, 34 ImporterHost* importer_host) 35 : importer_host_(importer_host) { 36 // Build the dialog. 37 dialog_ = gtk_dialog_new_with_buttons( 38 l10n_util::GetStringUTF8(IDS_IMPORTER_LOCK_TITLE).c_str(), 39 parent, 40 (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR), 41 NULL); 42 43 gtk_util::AddButtonToDialog(dialog_, 44 l10n_util::GetStringUTF8(IDS_IMPORTER_LOCK_CANCEL).c_str(), 45 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT); 46 gtk_util::AddButtonToDialog(dialog_, 47 l10n_util::GetStringUTF8(IDS_IMPORTER_LOCK_OK).c_str(), 48 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT); 49 50 GtkWidget* content_area = GTK_DIALOG(dialog_)->vbox; 51 gtk_box_set_spacing(GTK_BOX(content_area), gtk_util::kContentAreaSpacing); 52 GtkWidget* label = gtk_label_new( 53 l10n_util::GetStringUTF8(IDS_IMPORTER_LOCK_TEXT).c_str()); 54 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); 55 gtk_box_pack_start(GTK_BOX(content_area), label, FALSE, FALSE, 0); 56 57 g_signal_connect(dialog_, "response", G_CALLBACK(OnResponseThunk), this); 58 gtk_window_set_resizable(GTK_WINDOW(dialog_), FALSE); 59 gtk_widget_show_all(dialog_); 60} 61 62ImportLockDialogGtk::~ImportLockDialogGtk() {} 63 64void ImportLockDialogGtk::OnResponse(GtkWidget* dialog, int response_id) { 65 if (response_id == GTK_RESPONSE_ACCEPT) { 66 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( 67 importer_host_.get(), &ImporterHost::OnImportLockDialogEnd, true)); 68 } else { 69 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( 70 importer_host_.get(), &ImporterHost::OnImportLockDialogEnd, false)); 71 } 72 gtk_widget_destroy(dialog_); 73 delete this; 74} 75