OLD | NEW |
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 #ifndef CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ | 5 #ifndef CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ |
6 #define CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ | 6 #define CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
13 #include "base/timer.h" | 13 #include "base/timer.h" |
14 #include "chrome/browser/ui/panels/auto_hiding_desktop_bar.h" | 14 #include "chrome/browser/ui/panels/auto_hiding_desktop_bar.h" |
15 #include "chrome/browser/ui/panels/panel.h" | 15 #include "chrome/browser/ui/panels/panel.h" |
16 #include "ui/gfx/rect.h" | 16 #include "ui/gfx/rect.h" |
17 | 17 |
18 class Browser; | 18 class Browser; |
| 19 class DetachedPanelStrip; |
| 20 class DockedPanelStrip; |
| 21 class OverflowPanelStrip; |
| 22 class PanelDragController; |
19 class PanelMouseWatcher; | 23 class PanelMouseWatcher; |
20 class OverflowPanelStrip; | |
21 class DockedPanelStrip; | |
22 | 24 |
23 // This class manages a set of panels. | 25 // This class manages a set of panels. |
24 class PanelManager : public AutoHidingDesktopBar::Observer { | 26 class PanelManager : public AutoHidingDesktopBar::Observer { |
25 public: | 27 public: |
26 // Returns a single instance. | 28 // Returns a single instance. |
27 static PanelManager* GetInstance(); | 29 static PanelManager* GetInstance(); |
28 | 30 |
29 // Returns true if panels should be used for the extension. | 31 // Returns true if panels should be used for the extension. |
30 static bool ShouldUsePanels(const std::string& extension_id); | 32 static bool ShouldUsePanels(const std::string& extension_id); |
31 | 33 |
32 // Called when the display is changed, i.e. work area is updated. | 34 // Called when the display is changed, i.e. work area is updated. |
33 void OnDisplayChanged(); | 35 void OnDisplayChanged(); |
34 | 36 |
35 // Creates a panel and returns it. The panel might be queued for display | 37 // Creates a panel and returns it. The panel might be queued for display |
36 // later. | 38 // later. |
37 Panel* CreatePanel(Browser* browser); | 39 Panel* CreatePanel(Browser* browser); |
38 | 40 |
39 void Remove(Panel* panel); | 41 void Remove(Panel* panel); |
40 | 42 |
41 // Close all panels (asynchronous). Panels will be removed after closing. | 43 // Close all panels (asynchronous). Panels will be removed after closing. |
42 void CloseAll(); | 44 void CloseAll(); |
43 | 45 |
44 // Asynchronous confirmation of panel having been removed. | 46 // Asynchronous confirmation of panel having been removed. |
45 void OnPanelRemoved(Panel* panel); | 47 void OnPanelRemoved(Panel* panel); |
46 | 48 |
47 // Drags the given panel. | 49 // Drags the given panel. |
48 void StartDragging(Panel* panel); | 50 void StartDragging(Panel* panel); |
49 void Drag(int delta_x); | 51 void Drag(int delta_x, int delta_y); |
50 void EndDragging(bool cancelled); | 52 void EndDragging(bool cancelled); |
51 | 53 |
52 // Invoked when a panel's expansion state changes. | 54 // Invoked when a panel's expansion state changes. |
53 void OnPanelExpansionStateChanged(Panel* panel); | 55 void OnPanelExpansionStateChanged(Panel* panel); |
54 | 56 |
55 // Invoked when the preferred window size of the given panel might need to | 57 // Invoked when the preferred window size of the given panel might need to |
56 // get changed. | 58 // get changed. |
57 void OnPreferredWindowSizeChanged( | 59 void OnPreferredWindowSizeChanged( |
58 Panel* panel, const gfx::Size& preferred_window_size); | 60 Panel* panel, const gfx::Size& preferred_window_size); |
59 | 61 |
(...skipping 10 matching lines...) Expand all Loading... |
70 | 72 |
71 // Returns the next browser window which could be either panel window or | 73 // Returns the next browser window which could be either panel window or |
72 // tabbed window, to switch to if the given panel is going to be deactivated. | 74 // tabbed window, to switch to if the given panel is going to be deactivated. |
73 // Returns NULL if such window cannot be found. | 75 // Returns NULL if such window cannot be found. |
74 BrowserWindow* GetNextBrowserWindowToActivate(Panel* panel) const; | 76 BrowserWindow* GetNextBrowserWindowToActivate(Panel* panel) const; |
75 | 77 |
76 int num_panels() const; | 78 int num_panels() const; |
77 int StartingRightPosition() const; | 79 int StartingRightPosition() const; |
78 std::vector<Panel*> panels() const; | 80 std::vector<Panel*> panels() const; |
79 | 81 |
| 82 PanelDragController* drag_controller() const { |
| 83 return drag_controller_.get(); |
| 84 } |
| 85 |
80 AutoHidingDesktopBar* auto_hiding_desktop_bar() const { | 86 AutoHidingDesktopBar* auto_hiding_desktop_bar() const { |
81 return auto_hiding_desktop_bar_; | 87 return auto_hiding_desktop_bar_; |
82 } | 88 } |
83 | 89 |
84 PanelMouseWatcher* mouse_watcher() const { | 90 PanelMouseWatcher* mouse_watcher() const { |
85 return panel_mouse_watcher_.get(); | 91 return panel_mouse_watcher_.get(); |
86 } | 92 } |
87 | 93 |
| 94 DetachedPanelStrip* detached_strip() const { |
| 95 return detached_strip_.get(); |
| 96 } |
| 97 |
88 DockedPanelStrip* docked_strip() const { | 98 DockedPanelStrip* docked_strip() const { |
89 return docked_strip_.get(); | 99 return docked_strip_.get(); |
90 } | 100 } |
91 | 101 |
92 bool is_full_screen() const { return is_full_screen_; } | 102 bool is_full_screen() const { return is_full_screen_; } |
93 OverflowPanelStrip* overflow_strip() const { | 103 OverflowPanelStrip* overflow_strip() const { |
94 return overflow_strip_.get(); | 104 return overflow_strip_.get(); |
95 } | 105 } |
96 | 106 |
97 // Reduces time interval in tests to shorten test run time. | 107 // Reduces time interval in tests to shorten test run time. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 | 164 |
155 // Tests if the current active app is in full screen mode. | 165 // Tests if the current active app is in full screen mode. |
156 void CheckFullScreenMode(); | 166 void CheckFullScreenMode(); |
157 | 167 |
158 // Tests may want to use a mock panel mouse watcher. | 168 // Tests may want to use a mock panel mouse watcher. |
159 void SetMouseWatcher(PanelMouseWatcher* watcher); | 169 void SetMouseWatcher(PanelMouseWatcher* watcher); |
160 | 170 |
161 // Tests may want to shorten time intervals to reduce running time. | 171 // Tests may want to shorten time intervals to reduce running time. |
162 static bool shorten_time_intervals_; | 172 static bool shorten_time_intervals_; |
163 | 173 |
| 174 scoped_ptr<DetachedPanelStrip> detached_strip_; |
164 scoped_ptr<DockedPanelStrip> docked_strip_; | 175 scoped_ptr<DockedPanelStrip> docked_strip_; |
165 scoped_ptr<OverflowPanelStrip> overflow_strip_; | 176 scoped_ptr<OverflowPanelStrip> overflow_strip_; |
166 | 177 |
| 178 scoped_ptr<PanelDragController> drag_controller_; |
| 179 |
167 // Use a mouse watcher to know when to bring up titlebars to "peek" at | 180 // Use a mouse watcher to know when to bring up titlebars to "peek" at |
168 // minimized panels. Mouse movement is only tracked when there is a minimized | 181 // minimized panels. Mouse movement is only tracked when there is a minimized |
169 // panel. | 182 // panel. |
170 scoped_ptr<PanelMouseWatcher> panel_mouse_watcher_; | 183 scoped_ptr<PanelMouseWatcher> panel_mouse_watcher_; |
171 | 184 |
172 // The maximum work area avaialble. This area does not include the area taken | 185 // The maximum work area avaialble. This area does not include the area taken |
173 // by the always-visible (non-auto-hiding) desktop bars. | 186 // by the always-visible (non-auto-hiding) desktop bars. |
174 gfx::Rect work_area_; | 187 gfx::Rect work_area_; |
175 | 188 |
176 // The useable work area for computing the panel bounds. This area excludes | 189 // The useable work area for computing the panel bounds. This area excludes |
(...skipping 12 matching lines...) Expand all Loading... |
189 // Timer used to track if the current active app is in full screen mode. | 202 // Timer used to track if the current active app is in full screen mode. |
190 base::RepeatingTimer<PanelManager> full_screen_mode_timer_; | 203 base::RepeatingTimer<PanelManager> full_screen_mode_timer_; |
191 | 204 |
192 // True if current active app is in full screen mode. | 205 // True if current active app is in full screen mode. |
193 bool is_full_screen_; | 206 bool is_full_screen_; |
194 | 207 |
195 DISALLOW_COPY_AND_ASSIGN(PanelManager); | 208 DISALLOW_COPY_AND_ASSIGN(PanelManager); |
196 }; | 209 }; |
197 | 210 |
198 #endif // CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ | 211 #endif // CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ |
OLD | NEW |