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

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: Use raw pointer + IconImage signature changed 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 ExtensionImageView(Profile* profile, const Extension* extension) {
25 const ActionInfo* page_launcher_info =
26 ActionInfo::GetPageLauncherInfo(extension);
27 icon_.reset(new IconImage(profile,
28 extension,
29 page_launcher_info->default_icon,
30 extension_misc::EXTENSION_ICON_ACTION,
31 Extension::GetDefaultIcon(true),
32 this));
33 SetImage(icon_->image_skia());
34 }
35
36 private:
37 virtual void OnExtensionIconImageChanged(extensions::IconImage* image) {
38 SetImage(icon_->image_skia());
39 }
40
41 scoped_ptr<extensions::IconImage> icon_;
42
43 DISALLOW_COPY_AND_ASSIGN(ExtensionImageView);
44 };
45 } // namespace
46
18 // static 47 // static
19 scoped_ptr<ActionBoxMenu> ActionBoxMenu::Create( 48 scoped_ptr<ActionBoxMenu> ActionBoxMenu::Create(
20 Browser* browser, 49 Profile* profile,
21 scoped_ptr<ActionBoxMenuModel> model) { 50 scoped_ptr<ActionBoxMenuModel> model) {
22 scoped_ptr<ActionBoxMenu> menu(new ActionBoxMenu(browser, model.Pass())); 51 scoped_ptr<ActionBoxMenu> menu(new ActionBoxMenu(profile, model.Pass()));
23 menu->PopulateMenu(); 52 menu->PopulateMenu();
24 return menu.Pass(); 53 return menu.Pass();
25 } 54 }
26 55
27 ActionBoxMenu::~ActionBoxMenu() { 56 ActionBoxMenu::~ActionBoxMenu() {
28 } 57 }
29 58
30 void ActionBoxMenu::RunMenu(views::MenuButton* menu_button, 59 void ActionBoxMenu::RunMenu(views::MenuButton* menu_button,
31 gfx::Point menu_offset) { 60 gfx::Point menu_offset) {
32 views::View::ConvertPointToScreen(menu_button, &menu_offset); 61 views::View::ConvertPointToScreen(menu_button, &menu_offset);
33 62
34 // Ignore the result since we don't need to handle a deleted menu specially. 63 // Ignore the result since we don't need to handle a deleted menu specially.
35 ignore_result( 64 ignore_result(
36 menu_runner_->RunMenuAt(menu_button->GetWidget(), 65 menu_runner_->RunMenuAt(menu_button->GetWidget(),
37 menu_button, 66 menu_button,
38 gfx::Rect(menu_offset, menu_button->size()), 67 gfx::Rect(menu_offset, menu_button->size()),
39 views::MenuItemView::TOPRIGHT, 68 views::MenuItemView::TOPRIGHT,
40 views::MenuRunner::HAS_MNEMONICS)); 69 views::MenuRunner::HAS_MNEMONICS));
41 } 70 }
42 71
43 ActionBoxMenu::ActionBoxMenu(Browser* browser, 72 ActionBoxMenu::ActionBoxMenu(Profile* profile,
44 scoped_ptr<ActionBoxMenuModel> model) 73 scoped_ptr<ActionBoxMenuModel> model)
45 : browser_(browser), 74 : profile_(profile),
46 model_(model.Pass()) { 75 model_(model.Pass()) {
47 views::MenuItemView* menu = new views::MenuItemView(this); 76 views::MenuItemView* menu = new views::MenuItemView(this);
48 menu->set_has_icons(true); 77 menu->set_has_icons(true);
49 78
50 menu_runner_.reset(new views::MenuRunner(menu)); 79 menu_runner_.reset(new views::MenuRunner(menu));
51 } 80 }
52 81
53 void ActionBoxMenu::ExecuteCommand(int id) { 82 void ActionBoxMenu::ExecuteCommand(int id) {
54 model_->ExecuteCommand(id); 83 model_->ExecuteCommand(id);
55 } 84 }
56 85
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() { 86 void ActionBoxMenu::PopulateMenu() {
99 for (int model_index = 0; model_index < model_->GetItemCount(); 87 for (int model_index = 0; model_index < model_->GetItemCount();
100 ++model_index) { 88 ++model_index) {
101 views::MenuItemView* menu_item = 89 views::MenuItemView* menu_item =
102 menu_runner_->GetMenu()->AppendMenuItemFromModel( 90 menu_runner_->GetMenu()->AppendMenuItemFromModel(
103 model_.get(), model_index, model_->GetCommandIdAt(model_index)); 91 model_.get(), model_index, model_->GetCommandIdAt(model_index));
104 if (model_->GetTypeAt(model_index) == ui::MenuModel::TYPE_COMMAND) { 92 if (model_->GetTypeAt(model_index) == ui::MenuModel::TYPE_COMMAND) {
105 if (model_->IsItemExtension(model_index)) { 93 if (model_->IsItemExtension(model_index)) {
106 menu_item->SetMargins(0, 0); 94 const Extension* extension = model_->GetExtensionAt(model_index);
107 const extensions::Extension* extension = 95 ExtensionImageView* view = new ExtensionImageView(profile_, 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. 96 // |menu_item| will own the |view| from now on.
112 menu_item->SetIconView(view); 97 menu_item->SetIconView(view);
113 } 98 }
114 } 99 }
115 } 100 }
116 } 101 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/action_box_menu.h ('k') | chrome/browser/ui/views/location_bar/action_box_button_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698