diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-08 09:34:00 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-08 09:35:06 +0000 |
commit | f566151f23eb643e6d87f7e79be119793a6c112f (patch) | |
tree | dc964cb4b56669fb7255b86b868f927660c1bc42 /components/renderer_context_menu | |
parent | e259b68b35dc28d6f18d0ff7fdba5b380f178f7d (diff) | |
download | chromium_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')
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_ |