OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 #ifndef CHROME_BROWSER_UI_PANELS_PANEL_BROWSER_FRAME_VIEW_H_ | 5 #ifndef CHROME_BROWSER_UI_PANELS_PANEL_BROWSER_FRAME_VIEW_H_ |
6 #define CHROME_BROWSER_UI_PANELS_PANEL_BROWSER_FRAME_VIEW_H_ | 6 #define CHROME_BROWSER_UI_PANELS_PANEL_BROWSER_FRAME_VIEW_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include "base/gtest_prod_util.h" | 9 #include "base/gtest_prod_util.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
11 #include "base/scoped_ptr.h" | 11 #include "base/scoped_ptr.h" |
| 12 #include "chrome/browser/extensions/extension_uninstall_dialog.h" |
12 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" | 13 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" |
13 #include "chrome/browser/ui/views/tab_icon_view.h" | 14 #include "chrome/browser/ui/views/tab_icon_view.h" |
| 15 #include "ui/base/models/simple_menu_model.h" |
14 #include "views/controls/button/button.h" | 16 #include "views/controls/button/button.h" |
| 17 #include "views/controls/menu/view_menu_delegate.h" |
15 | 18 |
| 19 class Extension; |
16 class PanelBrowserView; | 20 class PanelBrowserView; |
17 namespace views { | 21 namespace views { |
18 class ImageButton; | 22 class ImageButton; |
19 class Label; | 23 class Label; |
| 24 class Menu2; |
| 25 class MenuButton; |
20 } | 26 } |
21 | 27 |
22 class PanelBrowserFrameView : public BrowserNonClientFrameView, | 28 class PanelBrowserFrameView : public BrowserNonClientFrameView, |
23 public views::ButtonListener, | 29 public views::ButtonListener, |
24 public TabIconView::TabIconViewModel { | 30 public views::ViewMenuDelegate, |
| 31 public ui::SimpleMenuModel::Delegate, |
| 32 public TabIconView::TabIconViewModel, |
| 33 public ExtensionUninstallDialog::Delegate { |
25 public: | 34 public: |
26 PanelBrowserFrameView(BrowserFrame* frame, PanelBrowserView* browser_view); | 35 PanelBrowserFrameView(BrowserFrame* frame, PanelBrowserView* browser_view); |
27 virtual ~PanelBrowserFrameView(); | 36 virtual ~PanelBrowserFrameView(); |
28 | 37 |
29 void UpdateTitleBar(); | 38 void UpdateTitleBar(); |
30 void OnActivationChanged(bool active); | 39 void OnActivationChanged(bool active); |
31 | 40 |
32 protected: | 41 protected: |
33 // Overridden from BrowserNonClientFrameView: | 42 // Overridden from BrowserNonClientFrameView: |
34 virtual gfx::Rect GetBoundsForTabStrip(views::View* tabstrip) const OVERRIDE; | 43 virtual gfx::Rect GetBoundsForTabStrip(views::View* tabstrip) const OVERRIDE; |
(...skipping 18 matching lines...) Expand all Loading... |
53 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; | 62 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; |
54 virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE; | 63 virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE; |
55 virtual bool OnMouseDragged(const views::MouseEvent& event) OVERRIDE; | 64 virtual bool OnMouseDragged(const views::MouseEvent& event) OVERRIDE; |
56 virtual void OnMouseReleased(const views::MouseEvent& event) OVERRIDE; | 65 virtual void OnMouseReleased(const views::MouseEvent& event) OVERRIDE; |
57 virtual void OnMouseCaptureLost() OVERRIDE; | 66 virtual void OnMouseCaptureLost() OVERRIDE; |
58 | 67 |
59 // Overridden from views::ButtonListener: | 68 // Overridden from views::ButtonListener: |
60 virtual void ButtonPressed(views::Button* sender, const views::Event& event) | 69 virtual void ButtonPressed(views::Button* sender, const views::Event& event) |
61 OVERRIDE; | 70 OVERRIDE; |
62 | 71 |
| 72 // Overridden from views::ViewMenuDelegate: |
| 73 virtual void RunMenu(View* source, const gfx::Point& pt) OVERRIDE; |
| 74 |
| 75 // Overridden from ui::SimpleMenuModel::Delegate: |
| 76 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; |
| 77 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; |
| 78 virtual bool GetAcceleratorForCommandId( |
| 79 int command_id, ui::Accelerator* accelerator) OVERRIDE; |
| 80 virtual void ExecuteCommand(int command_id) OVERRIDE; |
| 81 |
63 // Overridden from TabIconView::TabIconViewModel: | 82 // Overridden from TabIconView::TabIconViewModel: |
64 virtual bool ShouldTabIconViewAnimate() const OVERRIDE; | 83 virtual bool ShouldTabIconViewAnimate() const OVERRIDE; |
65 virtual SkBitmap GetFaviconForTabIconView() OVERRIDE; | 84 virtual SkBitmap GetFaviconForTabIconView() OVERRIDE; |
66 | 85 |
| 86 // ExtensionUninstallDialog::Delegate: |
| 87 virtual void ExtensionDialogAccepted() OVERRIDE; |
| 88 virtual void ExtensionDialogCanceled() OVERRIDE; |
| 89 |
67 private: | 90 private: |
68 friend class PanelBrowserViewTest; | 91 friend class PanelBrowserViewTest; |
69 FRIEND_TEST_ALL_PREFIXES(PanelBrowserViewTest, CreatePanel); | 92 FRIEND_TEST_ALL_PREFIXES(PanelBrowserViewTest, CreatePanel); |
70 FRIEND_TEST_ALL_PREFIXES(PanelBrowserViewTest, ShowOrHideInfoButton); | 93 FRIEND_TEST_ALL_PREFIXES(PanelBrowserViewTest, ShowOrHideSettingsButton); |
71 | 94 |
72 enum PaintState { | 95 enum PaintState { |
73 NOT_PAINTED, | 96 NOT_PAINTED, |
74 PAINT_AS_INACTIVE, | 97 PAINT_AS_INACTIVE, |
75 PAINT_AS_ACTIVE | 98 PAINT_AS_ACTIVE |
76 }; | 99 }; |
77 | 100 |
| 101 enum { |
| 102 COMMAND_NAME = 0, |
| 103 COMMAND_CONFIGURE, |
| 104 COMMAND_DISABLE, |
| 105 COMMAND_UNINSTALL, |
| 106 COMMAND_MANAGE |
| 107 }; |
| 108 |
78 class MouseWatcher : public MessageLoopForUI::Observer { | 109 class MouseWatcher : public MessageLoopForUI::Observer { |
79 public: | 110 public: |
80 explicit MouseWatcher(PanelBrowserFrameView* view); | 111 explicit MouseWatcher(PanelBrowserFrameView* view); |
81 virtual ~MouseWatcher(); | 112 virtual ~MouseWatcher(); |
82 | 113 |
83 virtual bool IsCursorInViewBounds() const; | 114 virtual bool IsCursorInViewBounds() const; |
84 | 115 |
85 #if defined(OS_WIN) | 116 #if defined(OS_WIN) |
86 virtual void WillProcessMessage(const MSG& msg) OVERRIDE { } | 117 virtual void WillProcessMessage(const MSG& msg) OVERRIDE { } |
87 virtual void DidProcessMessage(const MSG& msg) OVERRIDE; | 118 virtual void DidProcessMessage(const MSG& msg) OVERRIDE; |
(...skipping 22 matching lines...) Expand all Loading... |
110 // Update control styles to indicate if the title bar is active or not. | 141 // Update control styles to indicate if the title bar is active or not. |
111 void UpdateControlStyles(PaintState paint_state); | 142 void UpdateControlStyles(PaintState paint_state); |
112 | 143 |
113 // Custom draw the frame. | 144 // Custom draw the frame. |
114 void PaintFrameBorder(gfx::Canvas* canvas); | 145 void PaintFrameBorder(gfx::Canvas* canvas); |
115 void PaintClientEdge(gfx::Canvas* canvas); | 146 void PaintClientEdge(gfx::Canvas* canvas); |
116 | 147 |
117 // Called by MouseWatcher to notify if the mouse enters or leaves the window. | 148 // Called by MouseWatcher to notify if the mouse enters or leaves the window. |
118 void OnMouseEnterOrLeaveWindow(bool mouse_entered); | 149 void OnMouseEnterOrLeaveWindow(bool mouse_entered); |
119 | 150 |
120 // Make info button visible if either of the conditions is met: | 151 // Make settings button visible if either of the conditions is met: |
121 // 1) The panel is active, i.e. having focus. | 152 // 1) The panel is active, i.e. having focus. |
122 // 2) The mouse is over the panel. | 153 // 2) The mouse is over the panel. |
123 void UpdateInfoButtonVisibility(bool active, bool cursor_in_view); | 154 void UpdateSettingsButtonVisibility(bool active, bool cursor_in_view); |
| 155 |
| 156 const Extension* GetExtension() const; |
| 157 |
| 158 void EnsureCreateSettingsMenu(); |
124 | 159 |
125 #ifdef UNIT_TEST | 160 #ifdef UNIT_TEST |
126 void set_mouse_watcher(MouseWatcher* mouse_watcher) { | 161 void set_mouse_watcher(MouseWatcher* mouse_watcher) { |
127 mouse_watcher_.reset(mouse_watcher); | 162 mouse_watcher_.reset(mouse_watcher); |
128 } | 163 } |
129 #endif | 164 #endif |
130 | 165 |
131 // The frame that hosts this view. This is a weak reference such that frame_ | 166 // The frame that hosts this view. This is a weak reference such that frame_ |
132 // will always be valid in the lifetime of this view. | 167 // will always be valid in the lifetime of this view. |
133 BrowserFrame* frame_; | 168 BrowserFrame* frame_; |
134 | 169 |
135 // The client view hosted within this non-client frame view that is | 170 // The client view hosted within this non-client frame view that is |
136 // guaranteed to be freed before the client view. | 171 // guaranteed to be freed before the client view. |
137 // (see comments about view hierarchies in non_client_view.h) | 172 // (see comments about view hierarchies in non_client_view.h) |
138 PanelBrowserView* browser_view_; | 173 PanelBrowserView* browser_view_; |
139 | 174 |
140 PaintState paint_state_; | 175 PaintState paint_state_; |
141 views::ImageButton* info_button_; | 176 views::MenuButton* settings_button_; |
142 views::ImageButton* close_button_; | 177 views::ImageButton* close_button_; |
143 TabIconView* title_icon_; | 178 TabIconView* title_icon_; |
144 views::Label* title_label_; | 179 views::Label* title_label_; |
145 gfx::Rect client_view_bounds_; | 180 gfx::Rect client_view_bounds_; |
146 scoped_ptr<MouseWatcher> mouse_watcher_; | 181 scoped_ptr<MouseWatcher> mouse_watcher_; |
| 182 scoped_ptr<views::Menu2> settings_menu_; |
| 183 scoped_ptr<ui::SimpleMenuModel> settings_menu_contents_; |
| 184 scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_; |
147 | 185 |
148 DISALLOW_COPY_AND_ASSIGN(PanelBrowserFrameView); | 186 DISALLOW_COPY_AND_ASSIGN(PanelBrowserFrameView); |
149 }; | 187 }; |
150 | 188 |
151 #endif // CHROME_BROWSER_UI_PANELS_PANEL_BROWSER_FRAME_VIEW_H_ | 189 #endif // CHROME_BROWSER_UI_PANELS_PANEL_BROWSER_FRAME_VIEW_H_ |
OLD | NEW |