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

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

Powered by Google App Engine
This is Rietveld 408576698