OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/views/tabs/tab.h" | 5 #include "chrome/browser/views/tabs/tab.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/menus/simple_menu_model.h" | 8 #include "app/menus/simple_menu_model.h" |
9 #include "app/resource_bundle.h" | 9 #include "app/resource_bundle.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 | 22 |
23 const std::string Tab::kTabClassName = "browser/tabs/Tab"; | 23 const std::string Tab::kTabClassName = "browser/tabs/Tab"; |
24 | 24 |
25 static const SkScalar kTabCapWidth = 15; | 25 static const SkScalar kTabCapWidth = 15; |
26 static const SkScalar kTabTopCurveWidth = 4; | 26 static const SkScalar kTabTopCurveWidth = 4; |
27 static const SkScalar kTabBottomCurveWidth = 3; | 27 static const SkScalar kTabBottomCurveWidth = 3; |
28 | 28 |
29 class Tab::TabContextMenuContents : public menus::SimpleMenuModel::Delegate { | 29 class Tab::TabContextMenuContents : public menus::SimpleMenuModel::Delegate { |
30 public: | 30 public: |
31 explicit TabContextMenuContents(Tab* tab) | 31 explicit TabContextMenuContents(Tab* tab) |
32 : ALLOW_THIS_IN_INITIALIZER_LIST(model_(this)), | 32 : ALLOW_THIS_IN_INITIALIZER_LIST( |
| 33 model_(this, tab->delegate()->IsTabPinned(tab))), |
33 tab_(tab), | 34 tab_(tab), |
34 last_command_(TabStripModel::CommandFirst) { | 35 last_command_(TabStripModel::CommandFirst) { |
35 Build(); | 36 Build(); |
36 } | 37 } |
37 virtual ~TabContextMenuContents() { | 38 virtual ~TabContextMenuContents() { |
38 menu_->CancelMenu(); | 39 menu_->CancelMenu(); |
39 tab_->delegate()->StopAllHighlighting(); | 40 tab_->delegate()->StopAllHighlighting(); |
40 } | 41 } |
41 | 42 |
42 void RunMenuAt(const gfx::Point& point) { | 43 void RunMenuAt(const gfx::Point& point) { |
43 // Save a pointer to delegate before we call RunMenuAt, because it runs a | 44 // Save a pointer to delegate before we call RunMenuAt, because it runs a |
44 // nested message loop that may not return until after we are deleted. | 45 // nested message loop that may not return until after we are deleted. |
45 Tab::TabDelegate* delegate = tab_->delegate(); | 46 Tab::TabDelegate* delegate = tab_->delegate(); |
46 menu_->RunMenuAt(point, views::Menu2::ALIGN_TOPLEFT); | 47 menu_->RunMenuAt(point, views::Menu2::ALIGN_TOPLEFT); |
47 // We could be gone now. Assume |this| is junk! | 48 // We could be gone now. Assume |this| is junk! |
48 if (delegate) | 49 if (delegate) |
49 delegate->StopAllHighlighting(); | 50 delegate->StopAllHighlighting(); |
50 } | 51 } |
51 | 52 |
52 // Overridden from menus::SimpleMenuModel::Delegate: | 53 // Overridden from menus::SimpleMenuModel::Delegate: |
53 virtual bool IsCommandIdChecked(int command_id) const { | 54 virtual bool IsCommandIdChecked(int command_id) const { |
54 if (!tab_ || command_id != TabStripModel::CommandTogglePinned) | 55 return false; |
55 return false; | |
56 return tab_->delegate()->IsTabPinned(tab_); | |
57 } | 56 } |
58 virtual bool IsCommandIdEnabled(int command_id) const { | 57 virtual bool IsCommandIdEnabled(int command_id) const { |
59 return tab_ && tab_->delegate()->IsCommandEnabledForTab( | 58 return tab_ && tab_->delegate()->IsCommandEnabledForTab( |
60 static_cast<TabStripModel::ContextMenuCommand>(command_id), | 59 static_cast<TabStripModel::ContextMenuCommand>(command_id), |
61 tab_); | 60 tab_); |
62 } | 61 } |
63 virtual bool GetAcceleratorForCommandId( | 62 virtual bool GetAcceleratorForCommandId( |
64 int command_id, | 63 int command_id, |
65 menus::Accelerator* accelerator) { | 64 menus::Accelerator* accelerator) { |
66 return tab_->GetWidget()->GetAccelerator(command_id, accelerator); | 65 return tab_->GetWidget()->GetAccelerator(command_id, accelerator); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 *role = AccessibilityTypes::ROLE_PAGETAB; | 194 *role = AccessibilityTypes::ROLE_PAGETAB; |
196 return true; | 195 return true; |
197 } | 196 } |
198 | 197 |
199 /////////////////////////////////////////////////////////////////////////////// | 198 /////////////////////////////////////////////////////////////////////////////// |
200 // Tab, views::ContextMenuController implementation: | 199 // Tab, views::ContextMenuController implementation: |
201 | 200 |
202 void Tab::ShowContextMenu(views::View* source, | 201 void Tab::ShowContextMenu(views::View* source, |
203 const gfx::Point& p, | 202 const gfx::Point& p, |
204 bool is_mouse_gesture) { | 203 bool is_mouse_gesture) { |
205 if (!context_menu_contents_.get()) | 204 context_menu_contents_.reset(new TabContextMenuContents(this)); |
206 context_menu_contents_.reset(new TabContextMenuContents(this)); | |
207 context_menu_contents_->RunMenuAt(p); | 205 context_menu_contents_->RunMenuAt(p); |
208 } | 206 } |
209 | 207 |
210 /////////////////////////////////////////////////////////////////////////////// | 208 /////////////////////////////////////////////////////////////////////////////// |
211 // views::ButtonListener implementation: | 209 // views::ButtonListener implementation: |
212 | 210 |
213 void Tab::ButtonPressed(views::Button* sender, const views::Event& event) { | 211 void Tab::ButtonPressed(views::Button* sender, const views::Event& event) { |
214 if (sender == close_button()) | 212 if (sender == close_button()) |
215 delegate_->CloseTab(this); | 213 delegate_->CloseTab(this); |
216 } | 214 } |
(...skipping 19 matching lines...) Expand all Loading... |
236 | 234 |
237 // Right end cap. | 235 // Right end cap. |
238 path->lineTo(w - kTabCapWidth + kTabTopCurveWidth, kTabTopCurveWidth); | 236 path->lineTo(w - kTabCapWidth + kTabTopCurveWidth, kTabTopCurveWidth); |
239 path->lineTo(w - kTabBottomCurveWidth, h - kTabBottomCurveWidth); | 237 path->lineTo(w - kTabBottomCurveWidth, h - kTabBottomCurveWidth); |
240 path->lineTo(w, h); | 238 path->lineTo(w, h); |
241 | 239 |
242 // Close out the path. | 240 // Close out the path. |
243 path->lineTo(0, h); | 241 path->lineTo(0, h); |
244 path->close(); | 242 path->close(); |
245 } | 243 } |
OLD | NEW |