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

Side by Side Diff: chrome/browser/ui/views/action_box_menu.cc

Issue 12095023: Allow platform apps to add themselves to the Action Box. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase Created 7 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/action_box_menu.h" 5 #include "chrome/browser/ui/views/action_box_menu.h"
6 6
7 #include "chrome/browser/extensions/extension_icon_image.h"
7 #include "chrome/browser/ui/toolbar/action_box_menu_model.h" 8 #include "chrome/browser/ui/toolbar/action_box_menu_model.h"
8 #include "chrome/browser/ui/views/browser_action_view.h" 9 #include "chrome/common/extensions/api/extension_action/action_info.h"
9 #include "grit/generated_resources.h" 10 #include "chrome/common/extensions/extension.h"
10 #include "grit/theme_resources.h" 11 #include "chrome/common/extensions/extension_constants.h"
11 #include "ui/base/l10n/l10n_util.h"
12 #include "ui/base/resource/resource_bundle.h"
13 #include "ui/views/bubble/bubble_border.h"
14 #include "ui/views/controls/button/menu_button.h" 12 #include "ui/views/controls/button/menu_button.h"
13 #include "ui/views/controls/image_view.h"
15 #include "ui/views/controls/menu/menu_runner.h" 14 #include "ui/views/controls/menu/menu_runner.h"
16 #include "ui/views/view.h" 15 #include "ui/views/view.h"
17 16
17 using extensions::ActionInfo;
18 using extensions::Extension;
19 using extensions::IconImage;
20
21 namespace {
22 class ExtensionImageView : public views::ImageView, public IconImage::Observer {
23 public:
24 explicit ExtensionImageView(const Extension* extension) {
25 const ActionInfo* page_launcher_info =
26 ActionInfo::GetPageLauncherInfo(extension);
27 icon_.reset(new IconImage(extension,
28 page_launcher_info->default_icon,
29 extension_misc::EXTENSION_ICON_ACTION,
30 Extension::GetDefaultIcon(true),
31 this));
32 SetImage(icon_->image_skia());
33 }
34 private:
sky 2013/02/11 16:37:09 nit: newline between 33/34
Rune Fevang 2013/02/11 20:52:52 Done.
35 virtual void OnExtensionIconImageChanged(extensions::IconImage* image) {
36 SetImage(icon_->image_skia());
37 }
38
39 scoped_ptr<extensions::IconImage> icon_;
40 };
sky 2013/02/11 16:37:09 DISALLOW...
Rune Fevang 2013/02/11 20:52:52 Done.
41 } // namespace
42
18 // static 43 // static
19 scoped_ptr<ActionBoxMenu> ActionBoxMenu::Create( 44 scoped_ptr<ActionBoxMenu> ActionBoxMenu::Create(
20 Browser* browser,
21 scoped_ptr<ActionBoxMenuModel> model) { 45 scoped_ptr<ActionBoxMenuModel> model) {
22 scoped_ptr<ActionBoxMenu> menu(new ActionBoxMenu(browser, model.Pass())); 46 scoped_ptr<ActionBoxMenu> menu(new ActionBoxMenu(model.Pass()));
23 menu->PopulateMenu(); 47 menu->PopulateMenu();
24 return menu.Pass(); 48 return menu.Pass();
25 } 49 }
26 50
27 ActionBoxMenu::~ActionBoxMenu() { 51 ActionBoxMenu::~ActionBoxMenu() {
28 } 52 }
29 53
30 void ActionBoxMenu::RunMenu(views::MenuButton* menu_button, 54 void ActionBoxMenu::RunMenu(views::MenuButton* menu_button,
31 gfx::Point menu_offset) { 55 gfx::Point menu_offset) {
32 views::View::ConvertPointToScreen(menu_button, &menu_offset); 56 views::View::ConvertPointToScreen(menu_button, &menu_offset);
33 57
34 // Ignore the result since we don't need to handle a deleted menu specially. 58 // Ignore the result since we don't need to handle a deleted menu specially.
35 ignore_result( 59 ignore_result(
36 menu_runner_->RunMenuAt(menu_button->GetWidget(), 60 menu_runner_->RunMenuAt(menu_button->GetWidget(),
37 menu_button, 61 menu_button,
38 gfx::Rect(menu_offset, menu_button->size()), 62 gfx::Rect(menu_offset, menu_button->size()),
39 views::MenuItemView::TOPRIGHT, 63 views::MenuItemView::TOPRIGHT,
40 views::MenuRunner::HAS_MNEMONICS)); 64 views::MenuRunner::HAS_MNEMONICS));
41 } 65 }
42 66
43 ActionBoxMenu::ActionBoxMenu(Browser* browser, 67 ActionBoxMenu::ActionBoxMenu(scoped_ptr<ActionBoxMenuModel> model)
44 scoped_ptr<ActionBoxMenuModel> model) 68 : model_(model.Pass()) {
45 : browser_(browser),
46 model_(model.Pass()) {
47 views::MenuItemView* menu = new views::MenuItemView(this); 69 views::MenuItemView* menu = new views::MenuItemView(this);
48 menu->set_has_icons(true); 70 menu->set_has_icons(true);
49 71
50 menu_runner_.reset(new views::MenuRunner(menu)); 72 menu_runner_.reset(new views::MenuRunner(menu));
51 } 73 }
52 74
53 void ActionBoxMenu::ExecuteCommand(int id) { 75 void ActionBoxMenu::ExecuteCommand(int id) {
54 model_->ExecuteCommand(id); 76 model_->ExecuteCommand(id);
55 } 77 }
56 78
57 void ActionBoxMenu::InspectPopup(ExtensionAction* action) {
58 }
59
60 int ActionBoxMenu::GetCurrentTabId() const {
61 return 0;
62 }
63
64 void ActionBoxMenu::OnBrowserActionExecuted(BrowserActionButton* button) {
65 }
66
67 void ActionBoxMenu::OnBrowserActionVisibilityChanged() {
68 }
69
70 gfx::Point ActionBoxMenu::GetViewContentOffset() const {
71 return gfx::Point(0, 0);
72 }
73
74 bool ActionBoxMenu::NeedToShowMultipleIconStates() const {
75 return false;
76 }
77
78 bool ActionBoxMenu::NeedToShowTooltip() const {
79 return false;
80 }
81
82 void ActionBoxMenu::WriteDragDataForView(views::View* sender,
83 const gfx::Point& press_pt,
84 ui::OSExchangeData* data) {
85 }
86
87 int ActionBoxMenu::GetDragOperationsForView(views::View* sender,
88 const gfx::Point& p) {
89 return 0;
90 }
91
92 bool ActionBoxMenu::CanStartDragForView(views::View* sender,
93 const gfx::Point& press_pt,
94 const gfx::Point& p) {
95 return false;
96 }
97
98 void ActionBoxMenu::PopulateMenu() { 79 void ActionBoxMenu::PopulateMenu() {
99 for (int model_index = 0; model_index < model_->GetItemCount(); 80 for (int model_index = 0; model_index < model_->GetItemCount();
100 ++model_index) { 81 ++model_index) {
101 views::MenuItemView* menu_item = 82 views::MenuItemView* menu_item =
102 menu_runner_->GetMenu()->AppendMenuItemFromModel( 83 menu_runner_->GetMenu()->AppendMenuItemFromModel(
103 model_.get(), model_index, model_->GetCommandIdAt(model_index)); 84 model_.get(), model_index, model_->GetCommandIdAt(model_index));
104 if (model_->GetTypeAt(model_index) == ui::MenuModel::TYPE_COMMAND) { 85 if (model_->GetTypeAt(model_index) == ui::MenuModel::TYPE_COMMAND) {
105 if (model_->IsItemExtension(model_index)) { 86 if (model_->IsItemExtension(model_index)) {
106 menu_item->SetMargins(0, 0); 87 const Extension* extension = model_->GetExtensionAt(model_index);
107 const extensions::Extension* extension = 88 ExtensionImageView* view = new ExtensionImageView(extension);
108 model_->GetExtensionAt(model_index);
109 BrowserActionView* view = new BrowserActionView(extension,
110 browser_, this);
111 // |menu_item| will own the |view| from now on. 89 // |menu_item| will own the |view| from now on.
112 menu_item->SetIconView(view); 90 menu_item->SetIconView(view);
113 } 91 }
114 } 92 }
115 } 93 }
116 } 94 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698