OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/views/page_info_bubble_view.h" | 5 #include "chrome/browser/views/page_info_bubble_view.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/resource_bundle.h" | |
9 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
10 #include "chrome/browser/browser_list.h" | 9 #include "chrome/browser/browser_list.h" |
11 #include "chrome/browser/certificate_viewer.h" | 10 #include "chrome/browser/certificate_viewer.h" |
12 #include "chrome/browser/views/frame/browser_view.h" | 11 #include "chrome/browser/views/frame/browser_view.h" |
13 #include "chrome/browser/views/info_bubble.h" | 12 #include "chrome/browser/views/info_bubble.h" |
14 #include "chrome/browser/views/toolbar_view.h" | 13 #include "chrome/browser/views/toolbar_view.h" |
15 #include "grit/generated_resources.h" | 14 #include "grit/generated_resources.h" |
16 #include "grit/locale_settings.h" | 15 #include "grit/locale_settings.h" |
17 #include "grit/theme_resources.h" | |
18 #include "views/controls/image_view.h" | 16 #include "views/controls/image_view.h" |
19 #include "views/controls/label.h" | 17 #include "views/controls/label.h" |
20 #include "views/controls/separator.h" | 18 #include "views/controls/separator.h" |
21 #include "views/grid_layout.h" | 19 #include "views/grid_layout.h" |
22 #include "views/widget/widget.h" | 20 #include "views/widget/widget.h" |
23 #include "views/window/window.h" | 21 #include "views/window/window.h" |
24 | 22 |
25 namespace { | 23 namespace { |
26 | 24 |
27 // Layout constants. | 25 // Layout constants. |
28 const int kHGapToBorder = 11; | 26 const int kHGapToBorder = 11; |
29 const int kVGapToImage = 10; | 27 const int kVGapToImage = 10; |
30 const int kVGapToHeadline = 7; | 28 const int kVGapToHeadline = 7; |
31 const int kHGapImageToDescription = 6; | 29 const int kHGapImageToDescription = 6; |
32 const int kTextPaddingRight = 10; | 30 const int kTextPaddingRight = 10; |
33 const int kPaddingBelowSeparator = 4; | 31 const int kPaddingBelowSeparator = 4; |
34 const int kPaddingAboveSeparator = 13; | 32 const int kPaddingAboveSeparator = 13; |
35 const int kIconOffset = 28; | 33 const int kIconOffset = 28; |
36 | 34 |
37 // A section contains an image that shows a status (good or bad), a title, an | 35 // A section contains an image that shows a status (good or bad), a title, an |
38 // optional head-line (in bold) and a description. | 36 // optional head-line (in bold) and a description. |
39 class Section : public views::View, | 37 class Section : public views::View, |
40 public views::LinkController { | 38 public views::LinkController { |
41 public: | 39 public: |
42 Section(PageInfoBubbleView* owner, | 40 Section(PageInfoBubbleView* owner, |
43 const PageInfoModel::SectionInfo& section_info, | 41 const PageInfoModel::SectionInfo& section_info, |
| 42 const SkBitmap* status_icon, |
44 bool show_cert); | 43 bool show_cert); |
45 virtual ~Section(); | 44 virtual ~Section(); |
46 | 45 |
47 // views::View methods: | 46 // views::View methods: |
48 virtual int GetHeightForWidth(int w); | 47 virtual int GetHeightForWidth(int w); |
49 virtual void Layout(); | 48 virtual void Layout(); |
50 | 49 |
51 // views::LinkController methods: | 50 // views::LinkController methods: |
52 virtual void LinkActivated(views::Link* source, int event_flags); | 51 virtual void LinkActivated(views::Link* source, int event_flags); |
53 | 52 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 views::GridLayout::USE_PREF, // Size type. | 107 views::GridLayout::USE_PREF, // Size type. |
109 0, // Ignored for USE_PREF. | 108 0, // Ignored for USE_PREF. |
110 0); // Minimum size. | 109 0); // Minimum size. |
111 | 110 |
112 int count = model_.GetSectionCount(); | 111 int count = model_.GetSectionCount(); |
113 for (int i = 0; i < count; ++i) { | 112 for (int i = 0; i < count; ++i) { |
114 PageInfoModel::SectionInfo info = model_.GetSectionInfo(i); | 113 PageInfoModel::SectionInfo info = model_.GetSectionInfo(i); |
115 layout->StartRow(0, 0); | 114 layout->StartRow(0, 0); |
116 // TODO(finnur): Remove title from the info struct, since it is | 115 // TODO(finnur): Remove title from the info struct, since it is |
117 // not used anymore. | 116 // not used anymore. |
118 layout->AddView(new Section(this, info, cert_id_ > 0)); | 117 const SkBitmap* icon = model_.GetIconImage(info.icon_id); |
| 118 layout->AddView(new Section(this, info, icon, cert_id_ > 0)); |
119 | 119 |
120 // Add separator after all sections. | 120 // Add separator after all sections. |
121 layout->AddPaddingRow(0, kPaddingAboveSeparator); | 121 layout->AddPaddingRow(0, kPaddingAboveSeparator); |
122 layout->StartRow(0, 0); | 122 layout->StartRow(0, 0); |
123 layout->AddView(new views::Separator()); | 123 layout->AddView(new views::Separator()); |
124 layout->AddPaddingRow(0, kPaddingBelowSeparator); | 124 layout->AddPaddingRow(0, kPaddingBelowSeparator); |
125 } | 125 } |
126 | 126 |
127 // Then add the help center link at the bottom. | 127 // Then add the help center link at the bottom. |
128 layout->StartRow(0, 0); | 128 layout->StartRow(0, 0); |
129 help_center_link_ = | 129 help_center_link_ = |
130 new views::Link(l10n_util::GetString(IDS_PAGE_INFO_HELP_CENTER_LINK)); | 130 new views::Link(l10n_util::GetString(IDS_PAGE_INFO_HELP_CENTER_LINK)); |
131 help_center_link_->SetController(this); | 131 help_center_link_->SetController(this); |
132 layout->AddView(help_center_link_); | 132 layout->AddView(help_center_link_); |
133 } | 133 } |
134 | 134 |
135 gfx::Size PageInfoBubbleView::GetPreferredSize() { | 135 gfx::Size PageInfoBubbleView::GetPreferredSize() { |
136 gfx::Size size(views::Window::GetLocalizedContentsSize( | 136 gfx::Size size(views::Window::GetLocalizedContentsSize( |
137 IDS_PAGEINFOBUBBLE_WIDTH_CHARS, IDS_PAGEINFOBUBBLE_HEIGHT_LINES)); | 137 IDS_PAGEINFOBUBBLE_WIDTH_CHARS, IDS_PAGEINFOBUBBLE_HEIGHT_LINES)); |
138 size.set_height(0); | 138 size.set_height(0); |
139 | 139 |
140 int count = model_.GetSectionCount(); | 140 int count = model_.GetSectionCount(); |
141 for (int i = 0; i < count; ++i) { | 141 for (int i = 0; i < count; ++i) { |
142 PageInfoModel::SectionInfo info = model_.GetSectionInfo(i); | 142 PageInfoModel::SectionInfo info = model_.GetSectionInfo(i); |
143 Section section(this, info, cert_id_ > 0); | 143 const SkBitmap* icon = model_.GetIconImage(info.icon_id); |
| 144 Section section(this, info, icon, cert_id_ > 0); |
144 size.Enlarge(0, section.GetHeightForWidth(size.width())); | 145 size.Enlarge(0, section.GetHeightForWidth(size.width())); |
145 } | 146 } |
146 | 147 |
147 // Calculate how much space the separators take up (with padding). | 148 // Calculate how much space the separators take up (with padding). |
148 views::Separator separator; | 149 views::Separator separator; |
149 gfx::Size separator_size = separator.GetPreferredSize(); | 150 gfx::Size separator_size = separator.GetPreferredSize(); |
150 gfx::Size separator_plus_padding(0, separator_size.height() + | 151 gfx::Size separator_plus_padding(0, separator_size.height() + |
151 kPaddingAboveSeparator + | 152 kPaddingAboveSeparator + |
152 kPaddingBelowSeparator); | 153 kPaddingBelowSeparator); |
153 | 154 |
(...skipping 17 matching lines...) Expand all Loading... |
171 GURL url = GURL(l10n_util::GetStringUTF16(IDS_PAGE_INFO_HELP_CENTER)); | 172 GURL url = GURL(l10n_util::GetStringUTF16(IDS_PAGE_INFO_HELP_CENTER)); |
172 Browser* browser = BrowserList::GetLastActive(); | 173 Browser* browser = BrowserList::GetLastActive(); |
173 browser->OpenURL(url, GURL(), NEW_FOREGROUND_TAB, PageTransition::LINK); | 174 browser->OpenURL(url, GURL(), NEW_FOREGROUND_TAB, PageTransition::LINK); |
174 } | 175 } |
175 | 176 |
176 //////////////////////////////////////////////////////////////////////////////// | 177 //////////////////////////////////////////////////////////////////////////////// |
177 // Section | 178 // Section |
178 | 179 |
179 Section::Section(PageInfoBubbleView* owner, | 180 Section::Section(PageInfoBubbleView* owner, |
180 const PageInfoModel::SectionInfo& section_info, | 181 const PageInfoModel::SectionInfo& section_info, |
| 182 const SkBitmap* state_icon, |
181 bool show_cert) | 183 bool show_cert) |
182 : owner_(owner), | 184 : owner_(owner), |
183 info_(section_info), | 185 info_(section_info), |
184 status_image_(NULL), | 186 status_image_(NULL), |
185 link_(NULL) { | 187 link_(NULL) { |
186 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 188 if (state_icon) { |
187 | |
188 if (info_.type == PageInfoModel::SECTION_INFO_IDENTITY || | |
189 info_.type == PageInfoModel::SECTION_INFO_CONNECTION) { | |
190 status_image_ = new views::ImageView(); | 189 status_image_ = new views::ImageView(); |
191 switch (info_.state) { | 190 status_image_->SetImage(*state_icon); |
192 case PageInfoModel::SECTION_STATE_OK: | |
193 status_image_->SetImage(rb.GetBitmapNamed(IDR_PAGEINFO_GOOD)); | |
194 break; | |
195 case PageInfoModel::SECTION_STATE_WARNING_MAJOR: | |
196 status_image_->SetImage(rb.GetBitmapNamed(IDR_PAGEINFO_WARNING_MAJOR)); | |
197 break; | |
198 case PageInfoModel::SECTION_STATE_WARNING_MINOR: | |
199 status_image_->SetImage(rb.GetBitmapNamed(IDR_PAGEINFO_WARNING_MINOR)); | |
200 break; | |
201 case PageInfoModel::SECTION_STATE_ERROR: | |
202 status_image_->SetImage(rb.GetBitmapNamed(IDR_PAGEINFO_BAD)); | |
203 break; | |
204 default: | |
205 NOTREACHED(); // Do you need to add a case here? | |
206 } | |
207 AddChildView(status_image_); | |
208 } else if (info_.type == PageInfoModel::SECTION_INFO_FIRST_VISIT) { | |
209 status_image_ = new views::ImageView(); | |
210 status_image_->SetImage(info_.state == PageInfoModel::SECTION_STATE_OK ? | |
211 rb.GetBitmapNamed(IDR_PAGEINFO_INFO) : | |
212 rb.GetBitmapNamed(IDR_PAGEINFO_WARNING_MAJOR)); | |
213 AddChildView(status_image_); | 191 AddChildView(status_image_); |
214 } | 192 } |
215 | 193 |
216 headline_label_ = new views::Label(UTF16ToWideHack(info_.headline)); | 194 headline_label_ = new views::Label(UTF16ToWideHack(info_.headline)); |
217 headline_label_->SetFont( | 195 headline_label_->SetFont( |
218 headline_label_->font().DeriveFont(0, gfx::Font::BOLD)); | 196 headline_label_->font().DeriveFont(0, gfx::Font::BOLD)); |
219 headline_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); | 197 headline_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
220 AddChildView(headline_label_); | 198 AddChildView(headline_label_); |
221 | 199 |
222 description_label_ = new views::Label(UTF16ToWideHack(info_.description)); | 200 description_label_ = new views::Label(UTF16ToWideHack(info_.description)); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 PageInfoBubbleView* page_info_bubble = | 298 PageInfoBubbleView* page_info_bubble = |
321 new PageInfoBubbleView(parent, profile, url, ssl, show_history); | 299 new PageInfoBubbleView(parent, profile, url, ssl, show_history); |
322 InfoBubble* info_bubble = | 300 InfoBubble* info_bubble = |
323 InfoBubble::Show(browser_view->GetWidget(), bounds, | 301 InfoBubble::Show(browser_view->GetWidget(), bounds, |
324 BubbleBorder::TOP_LEFT, | 302 BubbleBorder::TOP_LEFT, |
325 page_info_bubble, page_info_bubble); | 303 page_info_bubble, page_info_bubble); |
326 page_info_bubble->set_info_bubble(info_bubble); | 304 page_info_bubble->set_info_bubble(info_bubble); |
327 } | 305 } |
328 | 306 |
329 } | 307 } |
OLD | NEW |