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

Side by Side Diff: chrome/browser/back_forward_menu_model.cc

Issue 126092: Begin to upgrade BackForwardMenuModelViews to use new menu API.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 6 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
OLDNEW
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include "chrome/browser/back_forward_menu_model.h" 7 #include "chrome/browser/back_forward_menu_model.h"
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "app/resource_bundle.h"
10 #include "chrome/browser/browser.h" 11 #include "chrome/browser/browser.h"
11 #include "chrome/browser/metrics/user_metrics.h" 12 #include "chrome/browser/metrics/user_metrics.h"
12 #include "chrome/browser/tab_contents/navigation_controller.h" 13 #include "chrome/browser/tab_contents/navigation_controller.h"
13 #include "chrome/browser/tab_contents/navigation_entry.h" 14 #include "chrome/browser/tab_contents/navigation_entry.h"
14 #include "chrome/browser/tab_contents/tab_contents.h" 15 #include "chrome/browser/tab_contents/tab_contents.h"
15 #include "chrome/common/url_constants.h" 16 #include "chrome/common/url_constants.h"
16 #include "grit/generated_resources.h" 17 #include "grit/generated_resources.h"
18 #include "grit/theme_resources.h"
17 #include "net/base/registry_controlled_domain.h" 19 #include "net/base/registry_controlled_domain.h"
18 20
19 const int BackForwardMenuModel::kMaxHistoryItems = 12; 21 const int BackForwardMenuModel::kMaxHistoryItems = 12;
20 const int BackForwardMenuModel::kMaxChapterStops = 5; 22 const int BackForwardMenuModel::kMaxChapterStops = 5;
21 23
24 BackForwardMenuModel::BackForwardMenuModel(Browser* browser,
25 ModelType model_type)
26 : browser_(browser),
27 test_tab_contents_(NULL),
28 model_type_(model_type) {
29 }
30
22 int BackForwardMenuModel::GetHistoryItemCount() const { 31 int BackForwardMenuModel::GetHistoryItemCount() const {
23 TabContents* contents = GetTabContents(); 32 TabContents* contents = GetTabContents();
24 int items = 0; 33 int items = 0;
25 34
26 if (model_type_ == FORWARD_MENU_DELEGATE) { 35 if (model_type_ == FORWARD_MENU) {
27 // Only count items from n+1 to end (if n is current entry) 36 // Only count items from n+1 to end (if n is current entry)
28 items = contents->controller().entry_count() - 37 items = contents->controller().entry_count() -
29 contents->controller().GetCurrentEntryIndex() - 1; 38 contents->controller().GetCurrentEntryIndex() - 1;
30 } else { 39 } else {
31 items = contents->controller().GetCurrentEntryIndex(); 40 items = contents->controller().GetCurrentEntryIndex();
32 } 41 }
33 42
34 if (items > kMaxHistoryItems) 43 if (items > kMaxHistoryItems)
35 items = kMaxHistoryItems; 44 items = kMaxHistoryItems;
36 else if (items < 0) 45 else if (items < 0)
37 items = 0; 46 items = 0;
38 47
39 return items; 48 return items;
40 } 49 }
41 50
42 int BackForwardMenuModel::GetChapterStopCount(int history_items) const { 51 int BackForwardMenuModel::GetChapterStopCount(int history_items) const {
43 TabContents* contents = GetTabContents(); 52 TabContents* contents = GetTabContents();
44 53
45 int chapter_stops = 0; 54 int chapter_stops = 0;
46 int current_entry = contents->controller().GetCurrentEntryIndex(); 55 int current_entry = contents->controller().GetCurrentEntryIndex();
47 56
48 if (history_items == kMaxHistoryItems) { 57 if (history_items == kMaxHistoryItems) {
49 int chapter_id = current_entry; 58 int chapter_id = current_entry;
50 if (model_type_ == FORWARD_MENU_DELEGATE) { 59 if (model_type_ == FORWARD_MENU) {
51 chapter_id += history_items; 60 chapter_id += history_items;
52 } else { 61 } else {
53 chapter_id -= history_items; 62 chapter_id -= history_items;
54 } 63 }
55 64
56 do { 65 do {
57 chapter_id = GetIndexOfNextChapterStop(chapter_id, 66 chapter_id = GetIndexOfNextChapterStop(chapter_id,
58 model_type_ == FORWARD_MENU_DELEGATE); 67 model_type_ == FORWARD_MENU);
59 if (chapter_id != -1) 68 if (chapter_id != -1)
60 ++chapter_stops; 69 ++chapter_stops;
61 } while (chapter_id != -1 && chapter_stops < kMaxChapterStops); 70 } while (chapter_id != -1 && chapter_stops < kMaxChapterStops);
62 } 71 }
63 72
64 return chapter_stops; 73 return chapter_stops;
65 } 74 }
66 75
67 int BackForwardMenuModel::GetTotalItemCount() const { 76 int BackForwardMenuModel::GetTotalItemCount() const {
68 int items = GetHistoryItemCount(); 77 int items = GetHistoryItemCount();
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 return L""; 215 return L"";
207 216
208 NavigationEntry* entry = GetNavigationEntry(menu_id); 217 NavigationEntry* entry = GetNavigationEntry(menu_id);
209 return UTF16ToWideHack(entry->GetTitleForDisplay( 218 return UTF16ToWideHack(entry->GetTitleForDisplay(
210 &GetTabContents()->controller())); 219 &GetTabContents()->controller()));
211 } 220 }
212 221
213 const SkBitmap& BackForwardMenuModel::GetItemIcon(int menu_id) const { 222 const SkBitmap& BackForwardMenuModel::GetItemIcon(int menu_id) const {
214 DCHECK(ItemHasIcon(menu_id)); 223 DCHECK(ItemHasIcon(menu_id));
215 224
225 if (menu_id == GetTotalItemCount()) {
226 return *ResourceBundle::GetSharedInstance().GetBitmapNamed(
227 IDR_HISTORY_FAVICON);
228 }
229
216 NavigationEntry* entry = GetNavigationEntry(menu_id); 230 NavigationEntry* entry = GetNavigationEntry(menu_id);
217 return entry->favicon().bitmap(); 231 return entry->favicon().bitmap();
218 } 232 }
219 233
220 bool BackForwardMenuModel::ItemHasIcon(int menu_id) const { 234 bool BackForwardMenuModel::ItemHasIcon(int menu_id) const {
221 // Using "id" not "id - 1" because the last item "Show Full History" 235 return menu_id - 1 < GetTotalItemCount() && !IsSeparator(menu_id);
222 // doesn't have an icon.
223 return menu_id < GetTotalItemCount() && !IsSeparator(menu_id);
224 } 236 }
225 237
226 bool BackForwardMenuModel::ItemHasCommand(int menu_id) const { 238 bool BackForwardMenuModel::ItemHasCommand(int menu_id) const {
227 return menu_id - 1 < GetTotalItemCount() && !IsSeparator(menu_id); 239 return menu_id - 1 < GetTotalItemCount() && !IsSeparator(menu_id);
228 } 240 }
229 241
230 std::wstring BackForwardMenuModel::GetShowFullHistoryLabel() const { 242 std::wstring BackForwardMenuModel::GetShowFullHistoryLabel() const {
231 return l10n_util::GetString(IDS_SHOWFULLHISTORY_LINK); 243 return l10n_util::GetString(IDS_SHOWFULLHISTORY_LINK);
232 } 244 }
233 245
234 TabContents* BackForwardMenuModel::GetTabContents() const { 246 TabContents* BackForwardMenuModel::GetTabContents() const {
235 // We use the test tab contents if the unit test has specified it. 247 // We use the test tab contents if the unit test has specified it.
236 return test_tab_contents_ ? test_tab_contents_ : 248 return test_tab_contents_ ? test_tab_contents_ :
237 browser_->GetSelectedTabContents(); 249 browser_->GetSelectedTabContents();
238 } 250 }
239 251
240 int BackForwardMenuModel::MenuIdToNavEntryIndex(int menu_id) const { 252 int BackForwardMenuModel::MenuIdToNavEntryIndex(int menu_id) const {
241 TabContents* contents = GetTabContents(); 253 TabContents* contents = GetTabContents();
242 int history_items = GetHistoryItemCount(); 254 int history_items = GetHistoryItemCount();
243 255
244 DCHECK(menu_id > 0); 256 DCHECK(menu_id > 0);
245 257
246 // Convert anything above the History items separator. 258 // Convert anything above the History items separator.
247 if (menu_id <= history_items) { 259 if (menu_id <= history_items) {
248 if (model_type_ == FORWARD_MENU_DELEGATE) { 260 if (model_type_ == FORWARD_MENU) {
249 // The |menu_id| is relative to our current position, so we need to add. 261 // The |menu_id| is relative to our current position, so we need to add.
250 menu_id += contents->controller().GetCurrentEntryIndex(); 262 menu_id += contents->controller().GetCurrentEntryIndex();
251 } else { 263 } else {
252 // Back menu is reverse. 264 // Back menu is reverse.
253 menu_id = contents->controller().GetCurrentEntryIndex() - menu_id; 265 menu_id = contents->controller().GetCurrentEntryIndex() - menu_id;
254 } 266 }
255 return menu_id; 267 return menu_id;
256 } 268 }
257 if (menu_id == history_items + 1) 269 if (menu_id == history_items + 1)
258 return -1; // Don't translate the separator for history items. 270 return -1; // Don't translate the separator for history items.
259 271
260 if (menu_id >= history_items + 1 + GetChapterStopCount(history_items) + 1) 272 if (menu_id >= history_items + 1 + GetChapterStopCount(history_items) + 1)
261 return -1; // This is beyond the last chapter stop so we abort. 273 return -1; // This is beyond the last chapter stop so we abort.
262 274
263 // This menu item is a chapter stop located between the two separators. 275 // This menu item is a chapter stop located between the two separators.
264 menu_id = FindChapterStop(history_items, 276 menu_id = FindChapterStop(history_items,
265 model_type_ == FORWARD_MENU_DELEGATE, 277 model_type_ == FORWARD_MENU,
266 menu_id - history_items - 1 - 1); 278 menu_id - history_items - 1 - 1);
267 279
268 return menu_id; 280 return menu_id;
269 } 281 }
270 282
271 NavigationEntry* BackForwardMenuModel::GetNavigationEntry(int menu_id) const { 283 NavigationEntry* BackForwardMenuModel::GetNavigationEntry(int menu_id) const {
272 int index = MenuIdToNavEntryIndex(menu_id); 284 int index = MenuIdToNavEntryIndex(menu_id);
273 return GetTabContents()->controller().GetEntryAtIndex(index); 285 return GetTabContents()->controller().GetEntryAtIndex(index);
274 } 286 }
275 287
276 std::wstring BackForwardMenuModel::BuildActionName( 288 std::wstring BackForwardMenuModel::BuildActionName(
277 const std::wstring& action, int index) const { 289 const std::wstring& action, int index) const {
278 DCHECK(!action.empty()); 290 DCHECK(!action.empty());
279 DCHECK(index >= -1); 291 DCHECK(index >= -1);
280 std::wstring metric_string; 292 std::wstring metric_string;
281 if (model_type_ == FORWARD_MENU_DELEGATE) 293 if (model_type_ == FORWARD_MENU)
282 metric_string += L"ForwardMenu_"; 294 metric_string += L"ForwardMenu_";
283 else 295 else
284 metric_string += L"BackMenu_"; 296 metric_string += L"BackMenu_";
285 metric_string += action; 297 metric_string += action;
286 if (index != -1) 298 if (index != -1)
287 metric_string += IntToWString(index); 299 metric_string += IntToWString(index);
288 return metric_string; 300 return metric_string;
289 } 301 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698