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