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

Side by Side Diff: chrome/browser/ui/views/compact_nav/compact_options_bar.cc

Issue 6913026: Compact Navigation prototype (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Clang build fix. After commit/revert. Created 9 years, 7 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 | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/views/compact_nav/compact_options_bar.h"
6
7 #include "chrome/app/chrome_command_ids.h"
8 #include "chrome/browser/ui/toolbar/wrench_menu_model.h"
9 #include "chrome/browser/ui/view_ids.h"
10 #include "chrome/browser/ui/views/event_utils.h"
11 #include "chrome/browser/ui/views/frame/browser_view.h"
12 #include "chrome/browser/ui/views/toolbar_view.h"
13 #include "chrome/browser/ui/views/wrench_menu.h"
14 #include "grit/chromium_strings.h"
15 #include "grit/generated_resources.h"
16 #include "ui/base/l10n/l10n_util.h"
17 #include "ui/base/resource/resource_bundle.h"
18 #include "ui/gfx/canvas.h"
19 #include "views/controls/button/menu_button.h"
20
21 namespace {
22 const int kPreferredHeight = 25;
23 // Pad the left and right ends from other tabstrip region items.
24 const int kEndPadding = 3;
25 }
26
27 ////////////////////////////////////////////////////////////////////////////////
28 // CompactOptionsBar public:
29
30 CompactOptionsBar::CompactOptionsBar(BrowserView* browser_view)
31 : browser_view_(browser_view),
32 initialized_(false),
33 app_menu_(NULL) {
34 }
35
36 CompactOptionsBar::~CompactOptionsBar() {
37 }
38
39 void CompactOptionsBar::Init() {
40 DCHECK(!initialized_);
41 initialized_ = true;
42
43 wrench_menu_model_.reset(new WrenchMenuModel(this, browser_view_->browser()));
44
45 app_menu_ = new views::MenuButton(NULL, std::wstring(), this, false);
46 app_menu_->set_border(NULL);
47 app_menu_->EnableCanvasFlippingForRTLUI(true);
48 app_menu_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_APP));
49 app_menu_->SetTooltipText(UTF16ToWide(l10n_util::GetStringFUTF16(
50 IDS_APPMENU_TOOLTIP,
51 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME))));
52 app_menu_->SetID(VIEW_ID_APP_MENU);
53 AddChildView(app_menu_);
54
55 LoadImages();
56 }
57
58 void CompactOptionsBar::AddMenuListener(views::MenuListener* listener) {
59 menu_listeners_.push_back(listener);
60 }
61
62 void CompactOptionsBar::RemoveMenuListener(views::MenuListener* listener) {
63 for (std::vector<views::MenuListener*>::iterator i(menu_listeners_.begin());
64 i != menu_listeners_.end(); ++i) {
65 if (*i == listener) {
66 menu_listeners_.erase(i);
67 return;
68 }
69 }
70 }
71
72 ////////////////////////////////////////////////////////////////////////////////
73 // CompactOptionsBar, views::View overrides:
74
75 gfx::Size CompactOptionsBar::GetPreferredSize() {
76 int width = kEndPadding * 2 + app_menu_->GetPreferredSize().width();
77 // TODO(stevet): Add the width of the browser actions container here when that
78 // is added to the bar.
79 return gfx::Size(width, kPreferredHeight);
80 }
81
82 void CompactOptionsBar::Layout() {
83 if (!initialized_)
84 return;
85
86 gfx::Size button_size = app_menu_->GetPreferredSize();
87 app_menu_->SetBounds(kEndPadding, 0, button_size.width(), height());
88 }
89
90 ////////////////////////////////////////////////////////////////////////////////
91 // CompactOptionsBar, views::MenuDelegate implementation:
92
93 void CompactOptionsBar::RunMenu(views::View* source,
94 const gfx::Point& /* pt */) {
95 DCHECK_EQ(VIEW_ID_APP_MENU, source->GetID());
96
97 wrench_menu_ = new WrenchMenu(browser_view_->browser());
98 wrench_menu_->Init(wrench_menu_model_.get());
99
100 for (size_t i = 0; i < menu_listeners_.size(); ++i)
101 menu_listeners_[i]->OnMenuOpened();
102
103 // Note that this might be destroyed while the menu is running.
104 wrench_menu_->RunMenu(app_menu_);
105 }
106
107 ////////////////////////////////////////////////////////////////////////////////
108 // CompactOptionsBar, ui::AcceleratorProvider implementation:
109
110 bool CompactOptionsBar::GetAcceleratorForCommandId(int command_id,
111 ui::Accelerator* accelerator) {
112 // TODO(stevet): Can we share ToolbarView's implementation? It's exactly the
113 // same so far.
114 // The standard Ctrl-X, Ctrl-V and Ctrl-C are not defined as accelerators
115 // anywhere so we need to check for them explicitly here.
116 // TODO(cpu) Bug 1109102. Query WebKit land for the actual bindings.
117 switch (command_id) {
118 case IDC_CUT:
119 *accelerator = views::Accelerator(ui::VKEY_X, false, true, false);
120 return true;
121 case IDC_COPY:
122 *accelerator = views::Accelerator(ui::VKEY_C, false, true, false);
123 return true;
124 case IDC_PASTE:
125 *accelerator = views::Accelerator(ui::VKEY_V, false, true, false);
126 return true;
127 }
128 // Else, we retrieve the accelerator information from the frame.
129 return GetWidget()->GetAccelerator(command_id, accelerator);
130 }
131
132 ////////////////////////////////////////////////////////////////////////////////
133 // CompactOptionsBar, views::ButtonListener implementation.
134
135 void CompactOptionsBar::ButtonPressed(views::Button* sender,
136 const views::Event& event) {
137 browser_view_->browser()->ExecuteCommandWithDisposition(
138 sender->tag(),
139 event_utils::DispositionFromEventFlags(sender->mouse_event_flags()));
140 }
141
142 void CompactOptionsBar::LoadImages() {
143 // Reuse the resources loaded for the Toolbar's AppMenu.
144 DCHECK(browser_view_->toolbar());
145 app_menu_->SetIcon(browser_view_->toolbar()->GetAppMenuIcon(
146 views::CustomButton::BS_NORMAL));
147 app_menu_->SetHoverIcon(browser_view_->toolbar()->GetAppMenuIcon(
148 views::CustomButton::BS_HOT));
149 app_menu_->SetPushedIcon(browser_view_->toolbar()->GetAppMenuIcon(
150 views::CustomButton::BS_PUSHED));
151 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/compact_nav/compact_options_bar.h ('k') | chrome/browser/ui/views/dropdown_bar_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698