Commit f566151f authored by oshima@chromium.org's avatar oshima@chromium.org

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
parent e259b68b
......@@ -49,7 +49,7 @@ NSMenuItem* GetMenuItemByID(ui::MenuModel* model,
// OSX implemenation of the ToolkitDelegate.
// This simply (re)delegates calls to RVContextMenuMac because they do not
// have to be componentized.
class ToolkitDelegateMac : public RenderViewContextMenu::ToolkitDelegate {
class ToolkitDelegateMac : public RenderViewContextMenuBase::ToolkitDelegate {
public:
explicit ToolkitDelegateMac(RenderViewContextMenuMac* context_menu)
: context_menu_(context_menu) {}
......
......@@ -7,86 +7,16 @@
#include "base/logging.h"
#include "base/strings/string16.h"
#include "chrome/app/chrome_command_ids.h"
#include "components/renderer_context_menu/views/toolkit_delegate_views.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "grit/generated_resources.h"
#include "ui/base/accelerators/accelerator.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/gfx/point.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"
using content::WebContents;
namespace {
// Views implementation of the ToolkitDelegate.
// TODO(oshima): Move this to components/renderer_context_menu/
class ToolkitDelegateViews : public RenderViewContextMenu::ToolkitDelegate {
public:
ToolkitDelegateViews() : menu_view_(NULL) {}
virtual ~ToolkitDelegateViews() {}
void 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);
}
private:
// ToolkitDelegate:
virtual void Init(ui::SimpleMenuModel* menu_model) OVERRIDE {
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));
}
virtual void Cancel() OVERRIDE{
DCHECK(menu_runner_.get());
menu_runner_->Cancel();
}
virtual void UpdateMenuItem(int command_id,
bool enabled,
bool hidden,
const base::string16& title) OVERRIDE {
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();
}
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);
};
} // namespace
////////////////////////////////////////////////////////////////////////////////
// RenderViewContextMenuViews, public:
......
......@@ -25,6 +25,8 @@
'renderer_context_menu/render_view_context_menu_observer.cc',
'renderer_context_menu/render_view_context_menu_observer.h',
'renderer_context_menu/render_view_context_menu_proxy.h',
'renderer_context_menu/views/toolkit_delegate_views.cc',
'renderer_context_menu/views/toolkit_delegate_views.h',
],
},
],
......
......@@ -4,5 +4,7 @@ include_rules = [
"+extensions/browser",
"+extensions/common",
"+ui/base",
"+ui/gfx",
"+ui/views",
"+third_party/WebKit/public/web",
]
// 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();
}
// 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_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment