summaryrefslogtreecommitdiffstats
path: root/components/renderer_context_menu
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-08 09:34:00 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-08 09:35:06 +0000
commitf566151f23eb643e6d87f7e79be119793a6c112f (patch)
treedc964cb4b56669fb7255b86b868f927660c1bc42 /components/renderer_context_menu
parente259b68b35dc28d6f18d0ff7fdba5b380f178f7d (diff)
downloadchromium_src-f566151f23eb643e6d87f7e79be119793a6c112f.zip
chromium_src-f566151f23eb643e6d87f7e79be119793a6c112f.tar.gz
chromium_src-f566151f23eb643e6d87f7e79be119793a6c112f.tar.bz2
Move ToolkitDelegate views impl to components/renderer_context_menu/views
I didn't move cocoa impl because that's not necessary. BUG=380438 R=sky@chromium.org Review URL: https://codereview.chromium.org/447243004 Cr-Commit-Position: refs/heads/master@{#288281} git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288281 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components/renderer_context_menu')
-rw-r--r--components/renderer_context_menu/DEPS2
-rw-r--r--components/renderer_context_menu/views/toolkit_delegate_views.cc59
-rw-r--r--components/renderer_context_menu/views/toolkit_delegate_views.h53
3 files changed, 114 insertions, 0 deletions
diff --git a/components/renderer_context_menu/DEPS b/components/renderer_context_menu/DEPS
index 49e84e6..9c9916c 100644
--- a/components/renderer_context_menu/DEPS
+++ b/components/renderer_context_menu/DEPS
@@ -4,5 +4,7 @@ include_rules = [
"+extensions/browser",
"+extensions/common",
"+ui/base",
+ "+ui/gfx",
+ "+ui/views",
"+third_party/WebKit/public/web",
]
diff --git a/components/renderer_context_menu/views/toolkit_delegate_views.cc b/components/renderer_context_menu/views/toolkit_delegate_views.cc
new file mode 100644
index 0000000..f3d47a4
--- /dev/null
+++ b/components/renderer_context_menu/views/toolkit_delegate_views.cc
@@ -0,0 +1,59 @@
+// Copyright 2014 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 "components/renderer_context_menu/views/toolkit_delegate_views.h"
+
+#include "ui/gfx/geometry/rect.h"
+#include "ui/views/controls/menu/menu_item_view.h"
+#include "ui/views/controls/menu/menu_model_adapter.h"
+#include "ui/views/controls/menu/menu_runner.h"
+
+ToolkitDelegateViews::ToolkitDelegateViews() : menu_view_(NULL) {}
+
+ToolkitDelegateViews::~ToolkitDelegateViews() {}
+
+void ToolkitDelegateViews::RunMenuAt(views::Widget* parent,
+ const gfx::Point& point,
+ ui::MenuSourceType type) {
+ views::MenuAnchorPosition anchor_position =
+ (type == ui::MENU_SOURCE_TOUCH ||
+ type == ui::MENU_SOURCE_TOUCH_EDIT_MENU)
+ ? views::MENU_ANCHOR_BOTTOMCENTER
+ : views::MENU_ANCHOR_TOPLEFT;
+ views::MenuRunner::RunResult result ALLOW_UNUSED = menu_runner_->RunMenuAt(
+ parent, NULL, gfx::Rect(point, gfx::Size()), anchor_position, type);
+}
+
+void ToolkitDelegateViews::Init(ui::SimpleMenuModel* menu_model) {
+ menu_adapter_.reset(new views::MenuModelAdapter(menu_model));
+ menu_view_ = menu_adapter_->CreateMenu();
+ menu_runner_.reset(new views::MenuRunner(
+ menu_view_,
+ views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU));
+}
+
+void ToolkitDelegateViews::Cancel() {
+ DCHECK(menu_runner_.get());
+ menu_runner_->Cancel();
+}
+
+void ToolkitDelegateViews::UpdateMenuItem(int command_id,
+ bool enabled,
+ bool hidden,
+ const base::string16& title) {
+ views::MenuItemView* item = menu_view_->GetMenuItemByID(command_id);
+ if (!item)
+ return;
+
+ item->SetEnabled(enabled);
+ item->SetTitle(title);
+ item->SetVisible(!hidden);
+
+ views::MenuItemView* parent = item->GetParentMenuItem();
+ if (!parent)
+ return;
+
+ parent->ChildrenChanged();
+}
+
diff --git a/components/renderer_context_menu/views/toolkit_delegate_views.h b/components/renderer_context_menu/views/toolkit_delegate_views.h
new file mode 100644
index 0000000..ec6d2a0
--- /dev/null
+++ b/components/renderer_context_menu/views/toolkit_delegate_views.h
@@ -0,0 +1,53 @@
+// Copyright 2014 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.
+
+#ifndef COMPONENTS_RENDERER_CONTEXT_MENU_RENDER_TOOLKIT_DELEGATE_VIEWS_H_
+#define COMPONENTS_RENDERER_CONTEXT_MENU_RENDER_TOOLKIT_DELEGATE_VIEWS_H_
+
+#include "components/renderer_context_menu/render_view_context_menu_base.h"
+#include "ui/base/ui_base_types.h"
+
+namespace gfx {
+class Point;
+}
+
+namespace views {
+class MenuItemView;
+class MenuModelAdapter;
+class MenuRunner;
+class Widget;
+}
+
+namespace ui {
+class SimpleMenuModel;
+}
+
+class ToolkitDelegateViews : public RenderViewContextMenuBase::ToolkitDelegate {
+ public:
+ ToolkitDelegateViews();
+ virtual ~ToolkitDelegateViews();
+
+ void RunMenuAt(views::Widget* parent,
+ const gfx::Point& point,
+ ui::MenuSourceType type);
+
+ private:
+ // ToolkitDelegate:
+ virtual void Init(ui::SimpleMenuModel* menu_model) OVERRIDE;
+ virtual void Cancel() OVERRIDE;
+ virtual void UpdateMenuItem(int command_id,
+ bool enabled,
+ bool hidden,
+ const base::string16& title) OVERRIDE;
+
+ scoped_ptr<views::MenuModelAdapter> menu_adapter_;
+ scoped_ptr<views::MenuRunner> menu_runner_;
+
+ // Weak. Owned by menu_runner_;
+ views::MenuItemView* menu_view_;
+
+ DISALLOW_COPY_AND_ASSIGN(ToolkitDelegateViews);
+};
+
+#endif // COMPONENTS_RENDERER_CONTEXT_MENU_RENDER_TOOLKIT_DELEGATE_VIEWS_H_