| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this |
| 2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
| 3 // LICENSE file. | 3 // LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/app_menu_model.h" | 5 #include "chrome/browser/app_menu_model.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "chrome/app/chrome_dll_resource.h" | 9 #include "chrome/app/chrome_dll_resource.h" |
| 10 #include "chrome/browser/browser.h" | 10 #include "chrome/browser/browser.h" |
| 11 #include "chrome/browser/defaults.h" | 11 #include "chrome/browser/defaults.h" |
| 12 #include "chrome/browser/sync/profile_sync_service.h" | 12 #include "chrome/browser/sync/profile_sync_service.h" |
| 13 #include "chrome/browser/sync/sync_ui_util.h" | 13 #include "chrome/browser/sync/sync_ui_util.h" |
| 14 #include "chrome/common/chrome_switches.h" | 14 #include "chrome/common/chrome_switches.h" |
| 15 #include "grit/chromium_strings.h" | 15 #include "grit/chromium_strings.h" |
| 16 #include "grit/generated_resources.h" | 16 #include "grit/generated_resources.h" |
| 17 | 17 |
| 18 // TODO(akalin): Now that AppMenuModel handles the sync item |
| 19 // dynamically, we don't need to refresh the menu on Windows/Linux. |
| 20 // Remove that code and make sure it works. |
| 21 |
| 18 AppMenuModel::AppMenuModel(menus::SimpleMenuModel::Delegate* delegate, | 22 AppMenuModel::AppMenuModel(menus::SimpleMenuModel::Delegate* delegate, |
| 19 Browser* browser) | 23 Browser* browser) |
| 20 : menus::SimpleMenuModel(delegate), | 24 : menus::SimpleMenuModel(delegate), |
| 21 browser_(browser) { | 25 browser_(browser), |
| 26 // For now, we assume that sync cannot be enabled/disabled after |
| 27 // launch. |
| 28 sync_item_enabled_(ProfileSyncService::IsSyncEnabled()), |
| 29 sync_item_index_(-1) { |
| 22 Build(); | 30 Build(); |
| 23 } | 31 } |
| 24 | 32 |
| 25 AppMenuModel::~AppMenuModel() { | 33 AppMenuModel::~AppMenuModel() { |
| 26 } | 34 } |
| 27 | 35 |
| 36 bool AppMenuModel::IsLabelDynamicAt(int index) const { |
| 37 return IsSyncItem(index) || SimpleMenuModel::IsLabelDynamicAt(index); |
| 38 } |
| 39 |
| 40 string16 AppMenuModel::GetLabelAt(int index) const { |
| 41 return IsSyncItem(index) ? |
| 42 GetSyncMenuLabel() : SimpleMenuModel::GetLabelAt(index); |
| 43 } |
| 44 |
| 28 void AppMenuModel::Build() { | 45 void AppMenuModel::Build() { |
| 29 AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB); | 46 AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB); |
| 30 AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW); | 47 AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW); |
| 31 AddItemWithStringId(IDC_NEW_INCOGNITO_WINDOW, IDS_NEW_INCOGNITO_WINDOW); | 48 AddItemWithStringId(IDC_NEW_INCOGNITO_WINDOW, IDS_NEW_INCOGNITO_WINDOW); |
| 32 // Enumerate profiles asynchronously and then create the parent menu item. | 49 // Enumerate profiles asynchronously and then create the parent menu item. |
| 33 // We will create the child menu items for this once the asynchronous call is | 50 // We will create the child menu items for this once the asynchronous call is |
| 34 // done. See OnGetProfilesDone(). | 51 // done. See OnGetProfilesDone(). |
| 35 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 52 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 36 if (command_line.HasSwitch(switches::kEnableUserDataDirProfiles)) { | 53 if (command_line.HasSwitch(switches::kEnableUserDataDirProfiles)) { |
| 37 // Triggers profile list refresh in case it's changed. | 54 // Triggers profile list refresh in case it's changed. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 49 AddItemWithStringId(IDC_FULLSCREEN, IDS_FULLSCREEN); | 66 AddItemWithStringId(IDC_FULLSCREEN, IDS_FULLSCREEN); |
| 50 AddSeparator(); | 67 AddSeparator(); |
| 51 AddItemWithStringId(IDC_SHOW_HISTORY, IDS_SHOW_HISTORY); | 68 AddItemWithStringId(IDC_SHOW_HISTORY, IDS_SHOW_HISTORY); |
| 52 AddItemWithStringId(IDC_SHOW_BOOKMARK_MANAGER, IDS_BOOKMARK_MANAGER); | 69 AddItemWithStringId(IDC_SHOW_BOOKMARK_MANAGER, IDS_BOOKMARK_MANAGER); |
| 53 AddItemWithStringId(IDC_SHOW_DOWNLOADS, IDS_SHOW_DOWNLOADS); | 70 AddItemWithStringId(IDC_SHOW_DOWNLOADS, IDS_SHOW_DOWNLOADS); |
| 54 | 71 |
| 55 // Create the manage extensions menu item. | 72 // Create the manage extensions menu item. |
| 56 AddItemWithStringId(IDC_MANAGE_EXTENSIONS, IDS_SHOW_EXTENSIONS); | 73 AddItemWithStringId(IDC_MANAGE_EXTENSIONS, IDS_SHOW_EXTENSIONS); |
| 57 | 74 |
| 58 AddSeparator(); | 75 AddSeparator(); |
| 59 if (ProfileSyncService::IsSyncEnabled()) { | 76 if (sync_item_enabled_) { |
| 60 string16 label = sync_ui_util::GetSyncMenuLabel( | 77 AddItem(IDC_SYNC_BOOKMARKS, GetSyncMenuLabel()); |
| 61 browser_->profile()->GetOriginalProfile()->GetProfileSyncService()); | 78 // TODO(akalin): Make it possible to get the index in a less |
| 62 AddItem(IDC_SYNC_BOOKMARKS, label); | 79 // hackish way. |
| 80 sync_item_index_ = GetItemCount() - 1; |
| 63 AddSeparator(); | 81 AddSeparator(); |
| 64 } | 82 } |
| 65 #if defined(OS_MACOSX) | 83 #if defined(OS_MACOSX) |
| 66 AddItemWithStringId(IDC_OPTIONS, IDS_PREFERENCES_MAC); | 84 AddItemWithStringId(IDC_OPTIONS, IDS_PREFERENCES_MAC); |
| 67 #else | 85 #else |
| 68 AddItemWithStringId(IDC_OPTIONS, IDS_OPTIONS); | 86 AddItemWithStringId(IDC_OPTIONS, IDS_OPTIONS); |
| 69 #endif | 87 #endif |
| 70 if (browser_defaults::kShowAboutMenuItem) { | 88 if (browser_defaults::kShowAboutMenuItem) { |
| 71 AddItem(IDC_ABOUT, | 89 AddItem(IDC_ABOUT, |
| 72 l10n_util::GetStringFUTF16( | 90 l10n_util::GetStringFUTF16( |
| (...skipping 29 matching lines...) Expand all Loading... |
| 102 profiles_menu_contents_->AddItemWithStringId(IDC_SELECT_PROFILE, | 120 profiles_menu_contents_->AddItemWithStringId(IDC_SELECT_PROFILE, |
| 103 IDS_SELECT_PROFILE); | 121 IDS_SELECT_PROFILE); |
| 104 } | 122 } |
| 105 | 123 |
| 106 // Always show a link to select a new profile. | 124 // Always show a link to select a new profile. |
| 107 profiles_menu_contents_->AddSeparator(); | 125 profiles_menu_contents_->AddSeparator(); |
| 108 profiles_menu_contents_->AddItemWithStringId( | 126 profiles_menu_contents_->AddItemWithStringId( |
| 109 IDC_NEW_PROFILE, | 127 IDC_NEW_PROFILE, |
| 110 IDS_SELECT_PROFILE_DIALOG_NEW_PROFILE_ENTRY); | 128 IDS_SELECT_PROFILE_DIALOG_NEW_PROFILE_ENTRY); |
| 111 } | 129 } |
| 130 |
| 131 string16 AppMenuModel::GetSyncMenuLabel() const { |
| 132 DCHECK(sync_item_enabled_); |
| 133 return sync_ui_util::GetSyncMenuLabel( |
| 134 browser_->profile()->GetOriginalProfile()->GetProfileSyncService()); |
| 135 } |
| 136 |
| 137 bool AppMenuModel::IsSyncItem(int index) const { |
| 138 return sync_item_enabled_ && (index == sync_item_index_); |
| 139 } |
| 140 |
| OLD | NEW |