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
DownloadInProgressDialogView(Browser * browser)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
~DownloadInProgressDialogView()92 DownloadInProgressDialogView::~DownloadInProgressDialogView() {}
93
GetPreferredSize()94 gfx::Size DownloadInProgressDialogView::GetPreferredSize() {
95 return dialog_dimensions_;
96 }
97
GetDialogButtonLabel(MessageBoxFlags::DialogButton button) const98 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
GetDefaultDialogButton() const107 int DownloadInProgressDialogView::GetDefaultDialogButton() const {
108 return MessageBoxFlags::DIALOGBUTTON_CANCEL;
109 }
110
Cancel()111 bool DownloadInProgressDialogView::Cancel() {
112 browser_->InProgressDownloadResponse(false);
113 return true;
114 }
115
Accept()116 bool DownloadInProgressDialogView::Accept() {
117 browser_->InProgressDownloadResponse(true);
118 return true;
119 }
120
IsModal() const121 bool DownloadInProgressDialogView::IsModal() const {
122 return true;
123 }
124
GetWindowTitle() const125 std::wstring DownloadInProgressDialogView::GetWindowTitle() const {
126 return UTF16ToWideHack(product_name_);
127 }
128
GetContentsView()129 views::View* DownloadInProgressDialogView::GetContentsView() {
130 return this;
131 }
132