1// Copyright (c) 2012 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/download/download_in_progress_dialog_gtk.h" 6 7#include <gtk/gtk.h> 8 9#include "base/strings/string16.h" 10#include "base/strings/string_number_conversions.h" 11#include "chrome/browser/ui/browser.h" 12#include "chrome/browser/ui/gtk/gtk_util.h" 13#include "grit/chromium_strings.h" 14#include "grit/generated_resources.h" 15#include "ui/base/l10n/l10n_util.h" 16 17// static 18void DownloadInProgressDialogGtk::Show(Browser* browser, 19 gfx::NativeWindow parent_window) { 20 new DownloadInProgressDialogGtk(browser, parent_window); 21} 22 23DownloadInProgressDialogGtk::DownloadInProgressDialogGtk( 24 Browser* browser, 25 gfx::NativeWindow parent_window) 26 : browser_(browser) { 27 int download_count; 28 Browser::DownloadClosePreventionType dialog_type = 29 browser_->OkToCloseWithInProgressDownloads(&download_count); 30 31 std::string title_text; 32 std::string explanation_text; 33 std::string ok_button_text; 34 switch (dialog_type) { 35 case Browser::DOWNLOAD_CLOSE_BROWSER_SHUTDOWN: 36 if (download_count == 1) { 37 title_text = l10n_util::GetStringUTF8( 38 IDS_SINGLE_DOWNLOAD_REMOVE_CONFIRM_TITLE); 39 explanation_text = l10n_util::GetStringUTF8( 40 IDS_SINGLE_DOWNLOAD_REMOVE_CONFIRM_EXPLANATION); 41 } else { 42 title_text = l10n_util::GetStringUTF8( 43 IDS_MULTIPLE_DOWNLOADS_REMOVE_CONFIRM_TITLE); 44 explanation_text = l10n_util::GetStringUTF8( 45 IDS_MULTIPLE_DOWNLOADS_REMOVE_CONFIRM_EXPLANATION); 46 } 47 ok_button_text = l10n_util::GetStringUTF8( 48 IDS_DOWNLOAD_REMOVE_CONFIRM_OK_BUTTON_LABEL); 49 break; 50 case Browser::DOWNLOAD_CLOSE_LAST_WINDOW_IN_INCOGNITO_PROFILE: 51 if (download_count == 1) { 52 title_text = l10n_util::GetStringUTF8( 53 IDS_SINGLE_INCOGNITO_DOWNLOAD_REMOVE_CONFIRM_TITLE); 54 explanation_text = l10n_util::GetStringUTF8( 55 IDS_SINGLE_INCOGNITO_DOWNLOAD_REMOVE_CONFIRM_EXPLANATION); 56 } else { 57 title_text = l10n_util::GetStringUTF8( 58 IDS_MULTIPLE_INCOGNITO_DOWNLOADS_REMOVE_CONFIRM_TITLE); 59 explanation_text = l10n_util::GetStringUTF8( 60 IDS_MULTIPLE_INCOGNITO_DOWNLOADS_REMOVE_CONFIRM_EXPLANATION); 61 } 62 ok_button_text = l10n_util::GetStringUTF8( 63 IDS_INCOGNITO_DOWNLOAD_REMOVE_CONFIRM_OK_BUTTON_LABEL); 64 break; 65 default: 66 // This dialog should have been created within the same thread invocation 67 // as the original test that lead to us, so it should always not be ok 68 // to close. 69 NOTREACHED(); 70 } 71 std::string cancel_button_text = l10n_util::GetStringUTF8( 72 IDS_DOWNLOAD_REMOVE_CONFIRM_CANCEL_BUTTON_LABEL); 73 74 GtkWidget* dialog = gtk_message_dialog_new( 75 parent_window, 76 static_cast<GtkDialogFlags>(GTK_DIALOG_MODAL), 77 GTK_MESSAGE_QUESTION, 78 GTK_BUTTONS_NONE, 79 "%s", 80 title_text.c_str()); 81 gtk_dialog_add_button(GTK_DIALOG(dialog), 82 cancel_button_text.c_str(), GTK_RESPONSE_REJECT); 83 gtk_dialog_add_button(GTK_DIALOG(dialog), 84 ok_button_text.c_str(), GTK_RESPONSE_ACCEPT); 85 86 gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), 87 "%s", 88 explanation_text.c_str()); 89 90 g_signal_connect(dialog, "response", G_CALLBACK(OnResponseThunk), this); 91 92 gtk_widget_show_all(dialog); 93} 94 95DownloadInProgressDialogGtk::~DownloadInProgressDialogGtk() { 96} 97 98void DownloadInProgressDialogGtk::OnResponse(GtkWidget* dialog, 99 int response_id) { 100 gtk_widget_destroy(dialog); 101 browser_->InProgressDownloadResponse(response_id == GTK_RESPONSE_ACCEPT); 102 delete this; 103} 104