Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: chrome/browser/chromeos/status/clock_menu_button.cc

Issue 6811025: Change status button menu implementation from Menu2 to MenuItemView. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Use MenuItemView convenience function. Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/chromeos/status/clock_menu_button.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 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 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/clock_menu_button.h" 5 #include "chrome/browser/chromeos/status/clock_menu_button.h"
6 6
7 #include "base/i18n/time_formatting.h" 7 #include "base/i18n/time_formatting.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
11 #include "chrome/browser/chromeos/cros/cros_library.h" 11 #include "chrome/browser/chromeos/cros/cros_library.h"
12 #include "chrome/browser/chromeos/status/status_area_host.h" 12 #include "chrome/browser/chromeos/status/status_area_host.h"
13 #include "grit/generated_resources.h" 13 #include "grit/generated_resources.h"
14 #include "ui/base/l10n/l10n_util.h" 14 #include "ui/base/l10n/l10n_util.h"
15 #include "ui/base/resource/resource_bundle.h" 15 #include "ui/base/resource/resource_bundle.h"
16 #include "ui/gfx/canvas.h" 16 #include "ui/gfx/canvas.h"
17 #include "ui/gfx/font.h" 17 #include "ui/gfx/font.h"
18 #include "views/window/window.h"
19
20 using views::MenuItemView;
oshima 2011/04/08 17:21:17 move this nito chromeos namespace.
rhashimoto 2011/04/14 00:58:54 The using declaration or the anonymous namespace c
21
22 namespace {
23
24 // MenuItemView item ids
25 enum {
26 CLOCK_DISPLAY_ITEM,
27 CLOCK_OPEN_OPTIONS_ITEM,
28 };
29
30 } // anonymous namespace
oshima 2011/04/08 17:21:17 two space before // just "namespace"
rhashimoto 2011/04/14 00:58:54 Done.
18 31
19 namespace chromeos { 32 namespace chromeos {
20 33
21 // Amount of slop to add into the timer to make sure we're into the next minute 34 // Amount of slop to add into the timer to make sure we're into the next minute
22 // when the timer goes off. 35 // when the timer goes off.
23 const int kTimerSlopSeconds = 1; 36 const int kTimerSlopSeconds = 1;
24 37
25 #if defined(CROS_FONTS_USING_BCI) 38 #if defined(CROS_FONTS_USING_BCI)
26 const int kFontSizeDelta = 0; 39 const int kFontSizeDelta = 0;
27 #else 40 #else
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 } 88 }
76 89
77 void ClockMenuButton::UpdateText() { 90 void ClockMenuButton::UpdateText() {
78 base::Time time(base::Time::Now()); 91 base::Time time(base::Time::Now());
79 SetText(UTF16ToWide(base::TimeFormatTimeOfDay(time))); 92 SetText(UTF16ToWide(base::TimeFormatTimeOfDay(time)));
80 SetTooltipText(UTF16ToWide(base::TimeFormatShortDate(time))); 93 SetTooltipText(UTF16ToWide(base::TimeFormatShortDate(time)));
81 SchedulePaint(); 94 SchedulePaint();
82 } 95 }
83 96
84 //////////////////////////////////////////////////////////////////////////////// 97 ////////////////////////////////////////////////////////////////////////////////
85 // ClockMenuButton, ui::MenuModel implementation: 98 // ClockMenuButton, views::MenuDelegate implementation:
99 std::wstring ClockMenuButton::GetLabel(int id) const
100 {
101 string16 label;
102 switch (id) {
103 case CLOCK_DISPLAY_ITEM:
104 label = base::TimeFormatFriendlyDate(base::Time::Now());
105 break;
oshima 2011/04/08 17:21:17 just use if I assume else case shouldn't happen? I
rhashimoto 2011/04/14 00:58:54 Done.
106 }
86 107
87 int ClockMenuButton::GetItemCount() const { 108 return UTF16ToWide(label);
88 // If options dialog is unavailable, don't count a separator and configure
89 // menu item.
90 return host_->ShouldOpenButtonOptions(this) ? 3 : 1;
91 } 109 }
92 110
93 ui::MenuModel::ItemType ClockMenuButton::GetTypeAt(int index) const { 111 bool ClockMenuButton::IsCommandEnabled(int id) const
94 // There's a separator between the current date and the menu item to open 112 {
95 // the options menu. 113 switch (id) {
96 return index == 1 ? ui::MenuModel::TYPE_SEPARATOR: 114 case CLOCK_DISPLAY_ITEM:
97 ui::MenuModel::TYPE_COMMAND; 115 return false;
oshima 2011/04/08 17:21:17 same here.
rhashimoto 2011/04/14 00:58:54 This one is disabled only for CLOCK_DISPLAY_ITEM.
116 default:
117 return true;
118 }
98 } 119 }
99 120
100 string16 ClockMenuButton::GetLabelAt(int index) const { 121 void ClockMenuButton::ExecuteCommand(int id)
101 if (index == 0) 122 {
102 return base::TimeFormatFriendlyDate(base::Time::Now()); 123 switch (id)
103 return l10n_util::GetStringUTF16(IDS_STATUSBAR_CLOCK_OPEN_OPTIONS_DIALOG); 124 {
104 } 125 case CLOCK_OPEN_OPTIONS_ITEM:
105 126 host_->OpenButtonOptions(this);
oshima 2011/04/08 17:21:17 same here
rhashimoto 2011/04/14 00:58:54 Done.
106 bool ClockMenuButton::IsEnabledAt(int index) const { 127 break;
107 // The 1st item is the current date, which is disabled. 128 }
108 return index != 0;
109 }
110
111 void ClockMenuButton::ActivatedAt(int index) {
112 host_->OpenButtonOptions(this);
113 } 129 }
114 130
115 /////////////////////////////////////////////////////////////////////////////// 131 ///////////////////////////////////////////////////////////////////////////////
116 // ClockMenuButton, PowerLibrary::Observer implementation: 132 // ClockMenuButton, PowerLibrary::Observer implementation:
117 133
118 void ClockMenuButton::SystemResumed() { 134 void ClockMenuButton::SystemResumed() {
119 UpdateText(); 135 UpdateText();
120 } 136 }
121 137
122 /////////////////////////////////////////////////////////////////////////////// 138 ///////////////////////////////////////////////////////////////////////////////
123 // ClockMenuButton, SystemLibrary::Observer implementation: 139 // ClockMenuButton, SystemLibrary::Observer implementation:
124 140
125 void ClockMenuButton::TimezoneChanged(const icu::TimeZone& timezone) { 141 void ClockMenuButton::TimezoneChanged(const icu::TimeZone& timezone) {
126 UpdateText(); 142 UpdateText();
127 } 143 }
128 144
129 //////////////////////////////////////////////////////////////////////////////// 145 ////////////////////////////////////////////////////////////////////////////////
130 // ClockMenuButton, views::ViewMenuDelegate implementation: 146 // ClockMenuButton, views::ViewMenuDelegate implementation:
131 147
132 void ClockMenuButton::RunMenu(views::View* source, const gfx::Point& pt) { 148 void ClockMenuButton::RunMenu(views::View* source, const gfx::Point& pt) {
133 if (!clock_menu_.get()) 149 if (!menu_.get()) {
134 clock_menu_.reset(new views::Menu2(this)); 150 menu_.reset(new MenuItemView(this));
135 else 151
136 clock_menu_->Rebuild(); 152 // Text for this item will be set by GetLabel().
137 clock_menu_->UpdateStates(); 153 menu_->AppendDelegateMenuItem(CLOCK_DISPLAY_ITEM);
138 clock_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT); 154
155 // If options dialog is unavailable, don't count a separator and configure
156 // menu item.
157 if (host_->ShouldOpenButtonOptions(this)) {
158 menu_->AppendSeparator();
159
160 const string16 clock_open_options_label =
161 l10n_util::GetStringUTF16(IDS_STATUSBAR_CLOCK_OPEN_OPTIONS_DIALOG);
162 menu_->AppendMenuItemWithLabel(
163 CLOCK_OPEN_OPTIONS_ITEM,
164 UTF16ToWide(clock_open_options_label));
165 }
166 }
167
168 gfx::Point screen_loc;
169 views::View::ConvertPointToScreen(source, &screen_loc);
170 gfx::Rect bounds(screen_loc, source->size());
oshima 2011/04/08 17:21:17 will RTL work with this?
rhashimoto 2011/04/14 00:58:54 I don't know, but this is how the WrenchMenu is im
171 menu_->RunMenuAt(
172 source->GetWindow()->GetNativeWindow(),
173 this,
174 bounds,
175 base::i18n::IsRTL() ? MenuItemView::TOPLEFT : MenuItemView::TOPRIGHT,
176 true);
139 } 177 }
140 178
141 } // namespace chromeos 179 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/status/clock_menu_button.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698