OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/chromeos/status_area_view.h" | 5 #include "chrome/browser/chromeos/status_area_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "app/gfx/canvas.h" | 9 #include "app/gfx/canvas.h" |
10 #include "app/l10n_util.h" | 10 #include "app/l10n_util.h" |
11 #include "app/theme_provider.h" | 11 #include "app/theme_provider.h" |
12 #include "base/string_util.h" | 12 #include "base/string_util.h" |
13 #include "chrome/app/chrome_dll_resource.h" | 13 #include "chrome/app/chrome_dll_resource.h" |
14 #include "chrome/browser/browser.h" | 14 #include "chrome/browser/browser.h" |
15 #include "chrome/browser/browser_window.h" | 15 #include "chrome/browser/browser_window.h" |
16 #include "chrome/browser/chromeos/clock_menu_button.h" | 16 #include "chrome/browser/chromeos/clock_menu_button.h" |
| 17 #include "chrome/browser/chromeos/language_menu_button.h" |
17 #include "chrome/browser/chromeos/network_menu_button.h" | 18 #include "chrome/browser/chromeos/network_menu_button.h" |
18 #include "chrome/browser/chromeos/power_menu_button.h" | 19 #include "chrome/browser/chromeos/power_menu_button.h" |
19 #include "chrome/browser/chromeos/status_area_button.h" | 20 #include "chrome/browser/chromeos/status_area_button.h" |
20 #if !defined(TOOLKIT_VIEWS) | 21 #if !defined(TOOLKIT_VIEWS) |
21 #include "chrome/browser/gtk/browser_window_gtk.h" | 22 #include "chrome/browser/gtk/browser_window_gtk.h" |
22 #else | 23 #else |
23 #include "chrome/browser/views/frame/browser_view.h" | 24 #include "chrome/browser/views/frame/browser_view.h" |
24 #endif | 25 #endif |
25 #include "chrome/browser/profile.h" | 26 #include "chrome/browser/profile.h" |
26 #include "chrome/common/pref_names.h" | 27 #include "chrome/common/pref_names.h" |
27 #include "chrome/common/pref_service.h" | 28 #include "chrome/common/pref_service.h" |
28 #include "grit/chromium_strings.h" | 29 #include "grit/chromium_strings.h" |
29 #include "grit/generated_resources.h" | 30 #include "grit/generated_resources.h" |
30 #include "grit/theme_resources.h" | 31 #include "grit/theme_resources.h" |
31 #include "views/controls/menu/menu.h" | 32 #include "views/controls/menu/menu.h" |
32 #include "views/controls/menu/menu_2.h" | 33 #include "views/controls/menu/menu_2.h" |
33 | 34 |
34 namespace chromeos { | 35 namespace chromeos { |
35 | 36 |
36 // Number of pixels to pad on the left border. | 37 // Number of pixels to pad on the left border. |
37 const int kLeftBorder = 1; | 38 const int kLeftBorder = 1; |
38 // Number of pixels to separate the clock from the next item on the right. | 39 // Number of pixels to separate the clock from the next item on the right. |
39 const int kClockSeparation = 4; | 40 const int kClockSeparation = 4; |
| 41 // Number of pixels to separate the language selector from the next item |
| 42 // on the right. |
| 43 const int kLanguageSeparation = 4; |
40 | 44 |
41 // BrowserWindowGtk tiles its image with this offset | 45 // BrowserWindowGtk tiles its image with this offset |
42 const int kCustomFrameBackgroundVerticalOffset = 15; | 46 const int kCustomFrameBackgroundVerticalOffset = 15; |
43 | 47 |
44 class OptionsMenuModel : public menus::SimpleMenuModel, | 48 class OptionsMenuModel : public menus::SimpleMenuModel, |
45 public menus::SimpleMenuModel::Delegate { | 49 public menus::SimpleMenuModel::Delegate { |
46 public: | 50 public: |
47 // These extra command IDs must be unique when combined with the options, | 51 // These extra command IDs must be unique when combined with the options, |
48 // so we just pick up the numbering where that stops. | 52 // so we just pick up the numbering where that stops. |
49 enum OtherCommands { | 53 enum OtherCommands { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 | 123 |
120 // Default to opening new tabs on the left. | 124 // Default to opening new tabs on the left. |
121 StatusAreaView::OpenTabsMode StatusAreaView::open_tabs_mode_ = | 125 StatusAreaView::OpenTabsMode StatusAreaView::open_tabs_mode_ = |
122 StatusAreaView::OPEN_TABS_ON_LEFT; | 126 StatusAreaView::OPEN_TABS_ON_LEFT; |
123 | 127 |
124 StatusAreaView::StatusAreaView(Browser* browser, | 128 StatusAreaView::StatusAreaView(Browser* browser, |
125 gfx::NativeWindow window) | 129 gfx::NativeWindow window) |
126 : browser_(browser), | 130 : browser_(browser), |
127 window_(window), | 131 window_(window), |
128 clock_view_(NULL), | 132 clock_view_(NULL), |
| 133 language_view_(NULL), |
129 network_view_(NULL), | 134 network_view_(NULL), |
130 battery_view_(NULL), | 135 battery_view_(NULL), |
131 menu_view_(NULL) { | 136 menu_view_(NULL) { |
132 } | 137 } |
133 | 138 |
134 void StatusAreaView::Init() { | 139 void StatusAreaView::Init() { |
135 ThemeProvider* theme = browser_->profile()->GetThemeProvider(); | 140 ThemeProvider* theme = browser_->profile()->GetThemeProvider(); |
136 | 141 |
| 142 // Language. |
| 143 language_view_ = new LanguageMenuButton(browser_); |
| 144 AddChildView(language_view_); |
| 145 |
137 // Clock. | 146 // Clock. |
138 clock_view_ = new ClockMenuButton(browser_); | 147 clock_view_ = new ClockMenuButton(browser_); |
139 AddChildView(clock_view_); | 148 AddChildView(clock_view_); |
140 | 149 |
141 // Battery. | 150 // Battery. |
142 battery_view_ = new PowerMenuButton(); | 151 battery_view_ = new PowerMenuButton(); |
143 AddChildView(battery_view_); | 152 AddChildView(battery_view_); |
144 | 153 |
145 // Network. | 154 // Network. |
146 network_view_ = new NetworkMenuButton(window_); | 155 network_view_ = new NetworkMenuButton(window_); |
(...skipping 10 matching lines...) Expand all Loading... |
157 // We only turn on/off the menu for views because | 166 // We only turn on/off the menu for views because |
158 // gtk version will not hide the toolbar in compact | 167 // gtk version will not hide the toolbar in compact |
159 // navigation bar mode. | 168 // navigation bar mode. |
160 menu_view_->SetVisible( | 169 menu_view_->SetVisible( |
161 !browser_->window()->IsToolbarVisible()); | 170 !browser_->window()->IsToolbarVisible()); |
162 #endif | 171 #endif |
163 } | 172 } |
164 | 173 |
165 gfx::Size StatusAreaView::GetPreferredSize() { | 174 gfx::Size StatusAreaView::GetPreferredSize() { |
166 // Start with padding. | 175 // Start with padding. |
167 int result_w = kLeftBorder + kClockSeparation; | 176 int result_w = kLeftBorder + kClockSeparation + kLanguageSeparation; |
168 int result_h = 0; | 177 int result_h = 0; |
169 for (int i = 0; i < GetChildViewCount(); i++) { | 178 for (int i = 0; i < GetChildViewCount(); i++) { |
170 views::View* cur = GetChildViewAt(i); | 179 views::View* cur = GetChildViewAt(i); |
171 if (cur->IsVisible()) { | 180 if (cur->IsVisible()) { |
172 gfx::Size cur_size = cur->GetPreferredSize(); | 181 gfx::Size cur_size = cur->GetPreferredSize(); |
173 // Add each width. | 182 // Add each width. |
174 result_w += cur_size.width(); | 183 result_w += cur_size.width(); |
175 // Use max height. | 184 // Use max height. |
176 result_h = std::max(result_h, cur_size.height()); | 185 result_h = std::max(result_h, cur_size.height()); |
177 } | 186 } |
(...skipping 10 matching lines...) Expand all Loading... |
188 int cur_y = (height() - cur_size.height()) / 2; | 197 int cur_y = (height() - cur_size.height()) / 2; |
189 | 198 |
190 // Handle odd number of pixels. | 199 // Handle odd number of pixels. |
191 cur_y += (height() - cur_size.height()) % 2; | 200 cur_y += (height() - cur_size.height()) % 2; |
192 | 201 |
193 // Put next in row horizontally, and center vertically. | 202 // Put next in row horizontally, and center vertically. |
194 cur->SetBounds(cur_x, cur_y, cur_size.width(), cur_size.height()); | 203 cur->SetBounds(cur_x, cur_y, cur_size.width(), cur_size.height()); |
195 | 204 |
196 cur_x += cur_size.width(); | 205 cur_x += cur_size.width(); |
197 | 206 |
198 // Buttons have built in padding, but clock doesn't. | 207 // Buttons have built in padding, but clock and language status don't. |
199 if (cur == clock_view_) | 208 if (cur == clock_view_) |
200 cur_x += kClockSeparation; | 209 cur_x += kClockSeparation; |
| 210 else if (cur == language_view_) |
| 211 cur_x += kLanguageSeparation; |
201 } | 212 } |
202 } | 213 } |
203 } | 214 } |
204 | 215 |
205 void StatusAreaView::Paint(gfx::Canvas* canvas) { | 216 void StatusAreaView::Paint(gfx::Canvas* canvas) { |
206 ThemeProvider* theme = browser_->profile()->GetThemeProvider(); | 217 ThemeProvider* theme = browser_->profile()->GetThemeProvider(); |
207 | 218 |
208 // Fill the background. | 219 // Fill the background. |
209 int image_name; | 220 int image_name; |
210 if (browser_->window()->IsActive()) { | 221 if (browser_->window()->IsActive()) { |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 void StatusAreaView::ExecuteCommand(int command_id) { | 309 void StatusAreaView::ExecuteCommand(int command_id) { |
299 browser_->ExecuteCommand(command_id); | 310 browser_->ExecuteCommand(command_id); |
300 } | 311 } |
301 | 312 |
302 void StatusAreaView::RunMenu(views::View* source, const gfx::Point& pt) { | 313 void StatusAreaView::RunMenu(views::View* source, const gfx::Point& pt) { |
303 CreateAppMenu(); | 314 CreateAppMenu(); |
304 app_menu_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT); | 315 app_menu_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT); |
305 } | 316 } |
306 | 317 |
307 } // namespace chromeos | 318 } // namespace chromeos |
OLD | NEW |