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/views/download/download_in_progress_dialog_view.h" 6 7 #include "base/string_number_conversions.h" 8 #include "base/utf_string_conversions.h" 9 #include "chrome/browser/download/download_manager.h" 10 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/ui/browser.h" 12 #include "grit/chromium_strings.h" 13 #include "grit/generated_resources.h" 14 #include "grit/locale_settings.h" 15 #include "ui/base/l10n/l10n_util.h" 16 #include "ui/base/resource/resource_bundle.h" 17 #include "ui/gfx/size.h" 18 #include "views/border.h" 19 #include "views/controls/label.h" 20 #include "views/layout/grid_layout.h" 21 #include "views/window/window.h" 22 23 DownloadInProgressDialogView::DownloadInProgressDialogView(Browser* browser) 24 : browser_(browser), 25 product_name_(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)) { 26 int download_count = browser->profile()->GetDownloadManager()-> 27 in_progress_count(); 28 29 std::wstring warning_text; 30 std::wstring explanation_text; 31 if (download_count == 1) { 32 warning_text = UTF16ToWide(l10n_util::GetStringFUTF16( 33 IDS_SINGLE_DOWNLOAD_REMOVE_CONFIRM_WARNING, 34 product_name_)); 35 explanation_text = UTF16ToWide(l10n_util::GetStringFUTF16( 36 IDS_SINGLE_DOWNLOAD_REMOVE_CONFIRM_EXPLANATION, 37 product_name_)); 38 ok_button_text_ = UTF16ToWide(l10n_util::GetStringUTF16( 39 IDS_SINGLE_DOWNLOAD_REMOVE_CONFIRM_OK_BUTTON_LABEL)); 40 cancel_button_text_ = UTF16ToWide(l10n_util::GetStringUTF16( 41 IDS_SINGLE_DOWNLOAD_REMOVE_CONFIRM_CANCEL_BUTTON_LABEL)); 42 } else { 43 warning_text = UTF16ToWide(l10n_util::GetStringFUTF16( 44 IDS_MULTIPLE_DOWNLOADS_REMOVE_CONFIRM_WARNING, 45 product_name_, 46 UTF8ToUTF16(base::IntToString(download_count)))); 47 explanation_text = UTF16ToWide(l10n_util::GetStringFUTF16( 48 IDS_MULTIPLE_DOWNLOADS_REMOVE_CONFIRM_EXPLANATION, 49 product_name_)); 50 ok_button_text_ = UTF16ToWide(l10n_util::GetStringUTF16( 51 IDS_MULTIPLE_DOWNLOADS_REMOVE_CONFIRM_OK_BUTTON_LABEL)); 52 cancel_button_text_ = UTF16ToWide(l10n_util::GetStringUTF16( 53 IDS_MULTIPLE_DOWNLOADS_REMOVE_CONFIRM_CANCEL_BUTTON_LABEL)); 54 } 55 56 // There are two lines of text: the bold warning label and the text 57 // explanation label. 58 views::GridLayout* layout = new views::GridLayout(this); 59 SetLayoutManager(layout); 60 const int columnset_id = 0; 61 views::ColumnSet* column_set = layout->AddColumnSet(columnset_id); 62 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::LEADING, 1, 63 views::GridLayout::USE_PREF, 0, 0); 64 65 gfx::Font bold_font = 66 ResourceBundle::GetSharedInstance().GetFont( 67 ResourceBundle::BaseFont).DeriveFont(0, gfx::Font::BOLD); 68 warning_ = new views::Label(warning_text, bold_font); 69 warning_->SetMultiLine(true); 70 warning_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 71 warning_->set_border(views::Border::CreateEmptyBorder(10, 10, 10, 10)); 72 layout->StartRow(0, columnset_id); 73 layout->AddView(warning_); 74 75 explanation_ = new views::Label(explanation_text); 76 explanation_->SetMultiLine(true); 77 explanation_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 78 explanation_->set_border(views::Border::CreateEmptyBorder(10, 10, 10, 10)); 79 layout->StartRow(0, columnset_id); 80 layout->AddView(explanation_); 81 82 dialog_dimensions_ = views::Window::GetLocalizedContentsSize( 83 IDS_DOWNLOAD_IN_PROGRESS_WIDTH_CHARS, 84 IDS_DOWNLOAD_IN_PROGRESS_MINIMUM_HEIGHT_LINES); 85 const int height = 86 warning_->GetHeightForWidth(dialog_dimensions_.width()) + 87 explanation_->GetHeightForWidth(dialog_dimensions_.width()); 88 dialog_dimensions_.set_height(std::max(height, 89 dialog_dimensions_.height())); 90 } 91 92 DownloadInProgressDialogView::~DownloadInProgressDialogView() {} 93 94 gfx::Size DownloadInProgressDialogView::GetPreferredSize() { 95 return dialog_dimensions_; 96 } 97 98 std::wstring DownloadInProgressDialogView::GetDialogButtonLabel( 99 MessageBoxFlags::DialogButton button) const { 100 if (button == MessageBoxFlags::DIALOGBUTTON_OK) 101 return ok_button_text_; 102 103 DCHECK_EQ(MessageBoxFlags::DIALOGBUTTON_CANCEL, button); 104 return cancel_button_text_; 105 } 106 107 int DownloadInProgressDialogView::GetDefaultDialogButton() const { 108 return MessageBoxFlags::DIALOGBUTTON_CANCEL; 109 } 110 111 bool DownloadInProgressDialogView::Cancel() { 112 browser_->InProgressDownloadResponse(false); 113 return true; 114 } 115 116 bool DownloadInProgressDialogView::Accept() { 117 browser_->InProgressDownloadResponse(true); 118 return true; 119 } 120 121 bool DownloadInProgressDialogView::IsModal() const { 122 return true; 123 } 124 125 std::wstring DownloadInProgressDialogView::GetWindowTitle() const { 126 return UTF16ToWideHack(product_name_); 127 } 128 129 views::View* DownloadInProgressDialogView::GetContentsView() { 130 return this; 131 } 132