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

Unified Diff: chrome/browser/wrench_menu_model.cc

Issue 2879002: Reapply r50859 with chromeos fixes. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: add explicit menus:: to chromeos Created 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/wrench_menu_model.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/wrench_menu_model.cc
diff --git a/chrome/browser/wrench_menu_model.cc b/chrome/browser/wrench_menu_model.cc
index 42bc6dc7d7abe8d050450dfac57947c53f99ad92..df5d6242ecde080a0fcac7018059d7524d22c2b6 100644
--- a/chrome/browser/wrench_menu_model.cc
+++ b/chrome/browser/wrench_menu_model.cc
@@ -5,20 +5,26 @@
#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 "chrome/app/chrome_dll_resource.h"
#include "chrome/browser/browser.h"
+#include "chrome/browser/host_zoom_map.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/defaults.h"
#include "chrome/browser/page_menu_model.h"
#include "chrome/browser/profile.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/upgrade_detector.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/notification_source.h"
+#include "chrome/common/notification_type.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
@@ -61,8 +67,13 @@ void ToolsMenuModel::Build(Browser* browser) {
WrenchMenuModel::WrenchMenuModel(menus::SimpleMenuModel::Delegate* delegate,
Browser* browser)
: menus::SimpleMenuModel(delegate),
+ delegate_(delegate),
browser_(browser) {
Build();
+ UpdateZoomControls();
+
+ registrar_.Add(this, NotificationType::ZOOM_LEVEL_CHANGED,
+ Source<Profile>(browser_->profile()));
}
WrenchMenuModel::~WrenchMenuModel() {
@@ -121,15 +132,59 @@ bool WrenchMenuModel::GetIconAt(int index, SkBitmap* icon) const {
return false;
}
+bool WrenchMenuModel::IsLabelForCommandIdDynamic(int command_id) const {
+ return false;
+}
+
+string16 WrenchMenuModel::GetLabelForCommandId(int command_id) const {
+ // TODO(erg): Hook up percentage calculation once I add that widget.
+ return string16();
+}
+
+void WrenchMenuModel::ExecuteCommand(int command_id) {
+ if (delegate_)
+ delegate_->ExecuteCommand(command_id);
+}
+
+void WrenchMenuModel::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ DCHECK_EQ(NotificationType::ZOOM_LEVEL_CHANGED, type.value);
+ UpdateZoomControls();
+}
+
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_LINUX)
+ edit_menu_item_model_.reset(new menus::ButtonMenuItemModel(IDS_EDIT, this));
+ edit_menu_item_model_->AddItemWithStringId(IDC_CUT, IDS_CUT);
+ edit_menu_item_model_->AddItemWithStringId(IDC_COPY, IDS_COPY);
+ edit_menu_item_model_->AddItemWithStringId(IDC_PASTE, IDS_PASTE);
+ AddButtonItem(0, edit_menu_item_model_.get());
+#else
+ // TODO(port): Move to the above.
CreateCutCopyPaste();
+#endif
+
AddSeparator();
+#if defined(OS_LINUX)
+ zoom_menu_item_model_.reset(
+ new menus::ButtonMenuItemModel(IDS_ZOOM_MENU, this));
+ zoom_menu_item_model_->AddItemWithStringId(IDC_ZOOM_PLUS, IDS_ZOOM_PLUS2);
+ zoom_menu_item_model_->AddItemWithStringId(IDC_ZOOM_MINUS, IDS_ZOOM_MINUS2);
+ zoom_menu_item_model_->AddSpace();
+ zoom_menu_item_model_->AddItemWithImage(
+ IDC_FULLSCREEN, IDR_FULLSCREEN_MENU_BUTTON);
+ AddButtonItem(0, 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);
@@ -184,6 +239,37 @@ void WrenchMenuModel::CreateZoomFullscreen() {
AddItemWithStringId(IDC_FULLSCREEN, IDS_FULLSCREEN);
}
+void WrenchMenuModel::UpdateZoomControls() {
+ bool enable_increment, enable_decrement;
+ int zoom_percent =
+ static_cast<int>(GetZoom(&enable_increment, &enable_decrement) * 100);
+
+ // TODO(erg): Route the stringified zoom_percent through
+ // GetLabelForCommandId(). Also make a way to use enable_increment/decrement.
+ zoom_label_ = l10n_util::GetStringFUTF16(
+ IDS_ZOOM_PERCENT, IntToString16(zoom_percent));
+}
+
+double WrenchMenuModel::GetZoom(bool* enable_increment,
+ bool* enable_decrement) {
+ TabContents* selected_tab = browser_->GetSelectedTabContents();
+ *enable_decrement = *enable_increment = false;
+ if (!selected_tab)
+ return 1;
+
+ HostZoomMap* zoom_map = selected_tab->profile()->GetHostZoomMap();
+ if (!zoom_map)
+ return 1;
+
+ // This code comes from WebViewImpl::setZoomLevel.
+ int zoom_level = zoom_map->GetZoomLevel(selected_tab->GetURL());
+ double value = static_cast<double>(
+ std::max(std::min(std::pow(1.2, zoom_level), 3.0), .5));
+ *enable_decrement = (value != .5);
+ *enable_increment = (value != 3.0);
+ return value;
+}
+
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/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698