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

Unified Diff: chrome/browser/wrench_menu_model.cc

Issue 5544002: Move a bunch more browser stuff around.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/wrench_menu_model.h ('k') | chrome/browser/wrench_menu_model_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/wrench_menu_model.cc
===================================================================
--- chrome/browser/wrench_menu_model.cc (revision 68008)
+++ chrome/browser/wrench_menu_model.cc (working copy)
@@ -1,539 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/wrench_menu_model.h"
-
-#include <algorithm>
-#include <cmath>
-
-#include "app/l10n_util.h"
-#include "app/menus/button_menu_item_model.h"
-#include "app/resource_bundle.h"
-#include "base/command_line.h"
-#include "base/i18n/number_formatting.h"
-#include "base/string_number_conversions.h"
-#include "base/string_util.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/app/chrome_command_ids.h"
-#include "chrome/browser/background_page_tracker.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/defaults.h"
-#include "chrome/browser/encoding_menu_controller.h"
-#include "chrome/browser/profile.h"
-#include "chrome/browser/prefs/pref_service.h"
-#include "chrome/browser/sync/profile_sync_service.h"
-#include "chrome/browser/sync/sync_ui_util.h"
-#include "chrome/browser/tab_contents/tab_contents.h"
-#include "chrome/browser/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/upgrade_detector.h"
-#include "chrome/common/badge_util.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/notification_service.h"
-#include "chrome/common/notification_source.h"
-#include "chrome/common/notification_type.h"
-#include "chrome/common/pref_names.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
-#include "grit/theme_resources.h"
-
-#if defined(OS_LINUX)
-#include <gtk/gtk.h>
-#include "chrome/browser/gtk/gtk_util.h"
-#endif
-
-#if defined(OS_MACOSX)
-#include "chrome/browser/browser_window.h"
-#endif
-
-#if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/cros/cros_library.h"
-#include "chrome/browser/chromeos/cros/update_library.h"
-#endif
-
-#if defined(OS_WIN)
-#include "chrome/browser/enumerate_modules_model_win.h"
-#endif
-
-// The size of the font used for dynamic text overlays on menu items.
-const float kMenuBadgeFontSize = 12.0;
-
-namespace {
-SkBitmap GetBackgroundPageIcon() {
- string16 pages = base::FormatNumber(
- BackgroundPageTracker::GetSingleton()->GetBackgroundPageCount());
- return badge_util::DrawBadgeIconOverlay(
- *ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_BACKGROUND_MENU),
- kMenuBadgeFontSize,
- pages,
- l10n_util::GetStringUTF16(IDS_BACKGROUND_PAGE_BADGE_OVERFLOW));
-}
-
-} // namespace
-
-////////////////////////////////////////////////////////////////////////////////
-// EncodingMenuModel
-
-EncodingMenuModel::EncodingMenuModel(Browser* browser)
- : ALLOW_THIS_IN_INITIALIZER_LIST(menus::SimpleMenuModel(this)),
- browser_(browser) {
- Build();
-}
-
-EncodingMenuModel::~EncodingMenuModel() {
-}
-
-void EncodingMenuModel::Build() {
- EncodingMenuController::EncodingMenuItemList encoding_menu_items;
- EncodingMenuController encoding_menu_controller;
- encoding_menu_controller.GetEncodingMenuItems(browser_->profile(),
- &encoding_menu_items);
-
- int group_id = 0;
- EncodingMenuController::EncodingMenuItemList::iterator it =
- encoding_menu_items.begin();
- for (; it != encoding_menu_items.end(); ++it) {
- int id = it->first;
- string16& label = it->second;
- if (id == 0) {
- AddSeparator();
- } else {
- if (id == IDC_ENCODING_AUTO_DETECT) {
- AddCheckItem(id, label);
- } else {
- // Use the id of the first radio command as the id of the group.
- if (group_id <= 0)
- group_id = id;
- AddRadioItem(id, label, group_id);
- }
- }
- }
-}
-
-bool EncodingMenuModel::IsCommandIdChecked(int command_id) const {
- TabContents* current_tab = browser_->GetSelectedTabContents();
- if (!current_tab)
- return false;
- EncodingMenuController controller;
- return controller.IsItemChecked(browser_->profile(),
- current_tab->encoding(), command_id);
-}
-
-bool EncodingMenuModel::IsCommandIdEnabled(int command_id) const {
- bool enabled = browser_->command_updater()->IsCommandEnabled(command_id);
- // Special handling for the contents of the Encoding submenu. On Mac OS,
- // instead of enabling/disabling the top-level menu item, the submenu's
- // contents get disabled, per Apple's HIG.
-#if defined(OS_MACOSX)
- enabled &= browser_->command_updater()->IsCommandEnabled(IDC_ENCODING_MENU);
-#endif
- return enabled;
-}
-
-bool EncodingMenuModel::GetAcceleratorForCommandId(
- int command_id,
- menus::Accelerator* accelerator) {
- return false;
-}
-
-void EncodingMenuModel::ExecuteCommand(int command_id) {
- browser_->ExecuteCommand(command_id);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// ZoomMenuModel
-
-ZoomMenuModel::ZoomMenuModel(menus::SimpleMenuModel::Delegate* delegate)
- : SimpleMenuModel(delegate) {
- Build();
-}
-
-ZoomMenuModel::~ZoomMenuModel() {
-}
-
-void ZoomMenuModel::Build() {
- AddItemWithStringId(IDC_ZOOM_PLUS, IDS_ZOOM_PLUS);
- AddItemWithStringId(IDC_ZOOM_NORMAL, IDS_ZOOM_NORMAL);
- AddItemWithStringId(IDC_ZOOM_MINUS, IDS_ZOOM_MINUS);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// ToolsMenuModel
-
-ToolsMenuModel::ToolsMenuModel(menus::SimpleMenuModel::Delegate* delegate,
- Browser* browser)
- : SimpleMenuModel(delegate) {
- Build(browser);
-}
-
-ToolsMenuModel::~ToolsMenuModel() {}
-
-void ToolsMenuModel::Build(Browser* browser) {
- AddCheckItemWithStringId(IDC_SHOW_BOOKMARK_BAR, IDS_SHOW_BOOKMARK_BAR);
-
- AddSeparator();
-
-#if !defined(OS_CHROMEOS)
-#if defined(OS_MACOSX)
- AddItemWithStringId(IDC_CREATE_SHORTCUTS, IDS_CREATE_APPLICATION_MAC);
-#else
- AddItemWithStringId(IDC_CREATE_SHORTCUTS, IDS_CREATE_SHORTCUTS);
-#endif
- AddSeparator();
-#endif
-
- AddItemWithStringId(IDC_MANAGE_EXTENSIONS, IDS_SHOW_EXTENSIONS);
- AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
- AddItemWithStringId(IDC_CLEAR_BROWSING_DATA, IDS_CLEAR_BROWSING_DATA);
-
- AddSeparator();
-#if defined(OS_CHROMEOS)
- AddItemWithStringId(IDC_FEEDBACK, IDS_FEEDBACK);
- AddSeparator();
-#endif
-
- encoding_menu_model_.reset(new EncodingMenuModel(browser));
- AddSubMenuWithStringId(IDC_ENCODING_MENU, IDS_ENCODING_MENU,
- encoding_menu_model_.get());
- AddItemWithStringId(IDC_VIEW_SOURCE, IDS_VIEW_SOURCE);
- if (g_browser_process->have_inspector_files()) {
- AddItemWithStringId(IDC_DEV_TOOLS, IDS_DEV_TOOLS);
- AddItemWithStringId(IDC_DEV_TOOLS_CONSOLE, IDS_DEV_TOOLS_CONSOLE);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WrenchMenuModel
-
-WrenchMenuModel::WrenchMenuModel(menus::AcceleratorProvider* provider,
- Browser* browser)
- : ALLOW_THIS_IN_INITIALIZER_LIST(menus::SimpleMenuModel(this)),
- provider_(provider),
- browser_(browser),
- tabstrip_model_(browser_->tabstrip_model()) {
- Build();
- UpdateZoomControls();
-
- tabstrip_model_->AddObserver(this);
-
- registrar_.Add(this, NotificationType::ZOOM_LEVEL_CHANGED,
- Source<Profile>(browser_->profile()));
- registrar_.Add(this, NotificationType::NAV_ENTRY_COMMITTED,
- NotificationService::AllSources());
- registrar_.Add(this,
- NotificationType::BACKGROUND_PAGE_TRACKER_CHANGED,
- NotificationService::AllSources());
-}
-
-WrenchMenuModel::~WrenchMenuModel() {
- if (tabstrip_model_)
- tabstrip_model_->RemoveObserver(this);
-}
-
-bool WrenchMenuModel::DoesCommandIdDismissMenu(int command_id) const {
- return command_id != IDC_ZOOM_MINUS && command_id != IDC_ZOOM_PLUS;
-}
-
-bool WrenchMenuModel::IsLabelForCommandIdDynamic(int command_id) const {
- return command_id == IDC_ZOOM_PERCENT_DISPLAY ||
-#if defined(OS_MACOSX)
- command_id == IDC_FULLSCREEN ||
-#endif
- command_id == IDC_SYNC_BOOKMARKS ||
- command_id == IDC_VIEW_BACKGROUND_PAGES;
-}
-
-string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const {
- switch (command_id) {
- case IDC_SYNC_BOOKMARKS:
- return GetSyncMenuLabel();
- case IDC_ZOOM_PERCENT_DISPLAY:
- return zoom_label_;
-#if defined(OS_MACOSX)
- case IDC_FULLSCREEN: {
- int string_id = IDS_ENTER_FULLSCREEN_MAC; // Default to Enter.
- // Note: On startup, |window()| may be NULL.
- if (browser_->window() && browser_->window()->IsFullscreen())
- string_id = IDS_EXIT_FULLSCREEN_MAC;
- return l10n_util::GetStringUTF16(string_id);
- }
-#endif
- case IDC_VIEW_BACKGROUND_PAGES: {
- string16 num_background_pages = base::FormatNumber(
- BackgroundPageTracker::GetSingleton()->GetBackgroundPageCount());
- return l10n_util::GetStringFUTF16(IDS_VIEW_BACKGROUND_PAGES,
- num_background_pages);
- }
- default:
- NOTREACHED();
- return string16();
- }
-}
-
-void WrenchMenuModel::ExecuteCommand(int command_id) {
- browser_->ExecuteCommand(command_id);
-}
-
-bool WrenchMenuModel::IsCommandIdChecked(int command_id) const {
- if (command_id == IDC_SHOW_BOOKMARK_BAR) {
- return browser_->profile()->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar);
- }
-
- return false;
-}
-
-bool WrenchMenuModel::IsCommandIdEnabled(int command_id) const {
-#if defined(OS_CHROMEOS)
- // Special case because IDC_NEW_WINDOW item should be disabled in BWSI mode,
- // but accelerator should work.
- if (command_id == IDC_NEW_WINDOW &&
- CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession))
- return false;
-#endif
-
- return browser_->command_updater()->IsCommandEnabled(command_id);
-}
-
-bool WrenchMenuModel::IsCommandIdVisible(int command_id) const {
- if (command_id == IDC_UPGRADE_DIALOG) {
-#if defined(OS_CHROMEOS)
- return (chromeos::CrosLibrary::Get()->GetUpdateLibrary()->status().status
- == chromeos::UPDATE_STATUS_UPDATED_NEED_REBOOT);
-#else
- return Singleton<UpgradeDetector>::get()->notify_upgrade();
-#endif
- } else if (command_id == IDC_VIEW_INCOMPATIBILITIES) {
-#if defined(OS_WIN)
- EnumerateModulesModel* loaded_modules =
- EnumerateModulesModel::GetSingleton();
- return loaded_modules->confirmed_bad_modules_detected() > 0;
-#else
- return false;
-#endif
- } else if (command_id == IDC_VIEW_BACKGROUND_PAGES) {
- BackgroundPageTracker* tracker = BackgroundPageTracker::GetSingleton();
- return tracker->GetBackgroundPageCount() > 0;
- }
- return true;
-}
-
-bool WrenchMenuModel::GetAcceleratorForCommandId(
- int command_id,
- menus::Accelerator* accelerator) {
- return provider_->GetAcceleratorForCommandId(command_id, accelerator);
-}
-
-void WrenchMenuModel::TabSelectedAt(TabContentsWrapper* old_contents,
- TabContentsWrapper* new_contents,
- int index,
- bool user_gesture) {
- // The user has switched between tabs and the new tab may have a different
- // zoom setting.
- UpdateZoomControls();
-}
-
-void WrenchMenuModel::TabReplacedAt(TabContentsWrapper* old_contents,
- TabContentsWrapper* new_contents,
- int index) {
- UpdateZoomControls();
-}
-
-void WrenchMenuModel::TabStripModelDeleted() {
- // During views shutdown, the tabstrip model/browser is deleted first, while
- // it is the opposite in gtk land.
- tabstrip_model_->RemoveObserver(this);
- tabstrip_model_ = NULL;
-}
-
-void WrenchMenuModel::Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- switch (type.value) {
- case NotificationType::BACKGROUND_PAGE_TRACKER_CHANGED: {
- int num_pages = BackgroundPageTracker::GetSingleton()->
- GetUnacknowledgedBackgroundPageCount();
- if (num_pages > 0) {
- SetIcon(GetIndexOfCommandId(IDC_VIEW_BACKGROUND_PAGES),
- GetBackgroundPageIcon());
- } else {
- // Just set a blank icon (no icon).
- SetIcon(GetIndexOfCommandId(IDC_VIEW_BACKGROUND_PAGES), SkBitmap());
- }
- break;
- }
- case NotificationType::ZOOM_LEVEL_CHANGED:
- case NotificationType::NAV_ENTRY_COMMITTED:
- UpdateZoomControls();
- break;
- default:
- NOTREACHED();
- }
-}
-
-// For testing.
-WrenchMenuModel::WrenchMenuModel()
- : ALLOW_THIS_IN_INITIALIZER_LIST(menus::SimpleMenuModel(this)),
- provider_(NULL),
- browser_(NULL),
- tabstrip_model_(NULL) {
-}
-
-void WrenchMenuModel::Build() {
- AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB);
- AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW);
- AddItemWithStringId(IDC_NEW_INCOGNITO_WINDOW,
- IDS_NEW_INCOGNITO_WINDOW);
-
- AddSeparator();
-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(TOOLKIT_VIEWS))
- // WARNING: Mac does not use the ButtonMenuItemModel, but instead defines the
- // layout for this menu item in Toolbar.xib. It does, however, use the
- // command_id value from AddButtonItem() to identify this special item.
- edit_menu_item_model_.reset(new menus::ButtonMenuItemModel(IDS_EDIT, this));
- edit_menu_item_model_->AddGroupItemWithStringId(IDC_CUT, IDS_CUT);
- edit_menu_item_model_->AddGroupItemWithStringId(IDC_COPY, IDS_COPY);
- edit_menu_item_model_->AddGroupItemWithStringId(IDC_PASTE, IDS_PASTE);
- AddButtonItem(IDC_EDIT_MENU, edit_menu_item_model_.get());
-#else
- // TODO(port): Move to the above.
- CreateCutCopyPaste();
-#endif
-
- AddSeparator();
-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(TOOLKIT_VIEWS))
- // WARNING: See above comment.
- zoom_menu_item_model_.reset(
- new menus::ButtonMenuItemModel(IDS_ZOOM_MENU, this));
- zoom_menu_item_model_->AddGroupItemWithStringId(
- IDC_ZOOM_MINUS, IDS_ZOOM_MINUS2);
- zoom_menu_item_model_->AddButtonLabel(IDC_ZOOM_PERCENT_DISPLAY,
- IDS_ZOOM_PLUS2);
- zoom_menu_item_model_->AddGroupItemWithStringId(
- IDC_ZOOM_PLUS, IDS_ZOOM_PLUS2);
- zoom_menu_item_model_->AddSpace();
- zoom_menu_item_model_->AddItemWithImage(
- IDC_FULLSCREEN, IDR_FULLSCREEN_MENU_BUTTON);
- AddButtonItem(IDC_ZOOM_MENU, zoom_menu_item_model_.get());
-#else
- // TODO(port): Move to the above.
- CreateZoomFullscreen();
-#endif
-
- AddSeparator();
- AddItemWithStringId(IDC_SAVE_PAGE, IDS_SAVE_PAGE);
- AddItemWithStringId(IDC_FIND, IDS_FIND);
- AddItemWithStringId(IDC_PRINT, IDS_PRINT);
-
- tools_menu_model_.reset(new ToolsMenuModel(this, browser_));
- AddSubMenuWithStringId(IDC_ZOOM_MENU, IDS_TOOLS_MENU,
- tools_menu_model_.get());
-
- AddSeparator();
-#if defined(ENABLE_REMOTING)
- if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableRemoting)) {
- AddItem(IDC_REMOTING_SETUP,
- l10n_util::GetStringUTF16(IDS_REMOTING_SETUP_LABEL));
- }
-#endif
- AddItemWithStringId(IDC_SHOW_BOOKMARK_MANAGER, IDS_BOOKMARK_MANAGER);
- AddItemWithStringId(IDC_SHOW_HISTORY, IDS_SHOW_HISTORY);
- AddItemWithStringId(IDC_SHOW_DOWNLOADS, IDS_SHOW_DOWNLOADS);
- AddSeparator();
-
-#if defined(OS_CHROMEOS)
- AddItemWithStringId(IDC_OPTIONS, IDS_SETTINGS);
-#elif defined(OS_MACOSX)
- AddItemWithStringId(IDC_OPTIONS, IDS_PREFERENCES);
-#elif defined(OS_LINUX)
- string16 preferences = gtk_util::GetStockPreferencesMenuLabel();
- if (!preferences.empty())
- AddItem(IDC_OPTIONS, preferences);
- else
- AddItemWithStringId(IDC_OPTIONS, IDS_PREFERENCES);
-#else
- AddItemWithStringId(IDC_OPTIONS, IDS_OPTIONS);
-#endif
-
-#if defined(OS_CHROMEOS)
- const string16 product_name = l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME);
-#else
- const string16 product_name = l10n_util::GetStringUTF16(IDS_PRODUCT_NAME);
-#endif
- // On Mac, there is no About item.
- if (browser_defaults::kShowAboutMenuItem) {
- AddItem(IDC_ABOUT, l10n_util::GetStringFUTF16(
- IDS_ABOUT, product_name));
- }
- string16 num_background_pages = base::FormatNumber(
- BackgroundPageTracker::GetSingleton()->GetBackgroundPageCount());
- AddItem(IDC_VIEW_BACKGROUND_PAGES, l10n_util::GetStringFUTF16(
- IDS_VIEW_BACKGROUND_PAGES, num_background_pages));
- AddItem(IDC_UPGRADE_DIALOG, l10n_util::GetStringFUTF16(
- IDS_UPDATE_NOW, product_name));
- AddItem(IDC_VIEW_INCOMPATIBILITIES, l10n_util::GetStringUTF16(
- IDS_VIEW_INCOMPATIBILITIES));
-
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- SetIcon(GetIndexOfCommandId(IDC_UPGRADE_DIALOG),
- *rb.GetBitmapNamed(IDR_UPDATE_MENU));
-#if defined(OS_WIN)
- SetIcon(GetIndexOfCommandId(IDC_VIEW_INCOMPATIBILITIES),
- *rb.GetBitmapNamed(IDR_CONFLICT_MENU));
-#endif
-
- // Add an icon to the View Background Pages item if there are unacknowledged
- // pages.
- if (BackgroundPageTracker::GetSingleton()->
- GetUnacknowledgedBackgroundPageCount() > 0) {
- SetIcon(GetIndexOfCommandId(IDC_VIEW_BACKGROUND_PAGES),
- GetBackgroundPageIcon());
- }
-
- AddItemWithStringId(IDC_HELP_PAGE, IDS_HELP_PAGE);
- if (browser_defaults::kShowExitMenuItem) {
- AddSeparator();
-#if defined(OS_CHROMEOS)
- if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)) {
- AddItemWithStringId(IDC_EXIT, IDS_EXIT_GUEST_MODE);
- } else {
- AddItemWithStringId(IDC_EXIT, IDS_SIGN_OUT);
- }
-#else
- AddItemWithStringId(IDC_EXIT, IDS_EXIT);
-#endif
- }
-}
-
-void WrenchMenuModel::CreateCutCopyPaste() {
- // WARNING: views/wrench_menu assumes these items are added in this order. If
- // you change the order you'll need to update wrench_menu as well.
- AddItemWithStringId(IDC_CUT, IDS_CUT);
- AddItemWithStringId(IDC_COPY, IDS_COPY);
- AddItemWithStringId(IDC_PASTE, IDS_PASTE);
-}
-
-void WrenchMenuModel::CreateZoomFullscreen() {
- // WARNING: views/wrench_menu assumes these items are added in this order. If
- // you change the order you'll need to update wrench_menu as well.
- AddItemWithStringId(IDC_ZOOM_MINUS, IDS_ZOOM_MINUS);
- AddItemWithStringId(IDC_ZOOM_PLUS, IDS_ZOOM_PLUS);
- AddItemWithStringId(IDC_FULLSCREEN, IDS_FULLSCREEN);
-}
-
-void WrenchMenuModel::UpdateZoomControls() {
- bool enable_increment = false;
- bool enable_decrement = false;
- int zoom_percent = 100;
- if (browser_->GetSelectedTabContents()) {
- zoom_percent = browser_->GetSelectedTabContents()->GetZoomPercent(
- &enable_increment, &enable_decrement);
- }
- zoom_label_ = l10n_util::GetStringFUTF16(
- IDS_ZOOM_PERCENT, base::IntToString16(zoom_percent));
-}
-
-string16 WrenchMenuModel::GetSyncMenuLabel() const {
- return sync_ui_util::GetSyncMenuLabel(
- browser_->profile()->GetOriginalProfile()->GetProfileSyncService());
-}
« no previous file with comments | « chrome/browser/wrench_menu_model.h ('k') | chrome/browser/wrench_menu_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698