Chromium Code Reviews| Index: chrome/browser/ui/panels/panel_manager.h |
| =================================================================== |
| --- chrome/browser/ui/panels/panel_manager.h (revision 97726) |
| +++ chrome/browser/ui/panels/panel_manager.h (working copy) |
| @@ -8,7 +8,10 @@ |
| #include <vector> |
| #include "base/basictypes.h" |
| +#include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| +#include "base/task.h" |
| +#include "chrome/browser/ui/panels/auto_hide_bottom_bar.h" |
| #include "chrome/browser/ui/panels/panel.h" |
| #include "ui/gfx/rect.h" |
| @@ -16,7 +19,8 @@ |
| class Panel; |
| // This class manages a set of panels. |
| -class PanelManager { |
| +class PanelManager : public AutoHideBottomBar::Observer, |
| + public base::RefCountedThreadSafe<PanelManager> { |
|
Dmitry Titov
2011/08/22 22:35:53
Why the PanelManager is refcounted? it is a single
jianli
2011/08/22 23:28:10
Needed by PostTask. Added comment for it.
|
| public: |
| // Returns a single instance. |
| static PanelManager* GetInstance(); |
| @@ -39,22 +43,43 @@ |
| void EndDragging(bool cancelled); |
| // Should we bring up the titlebar, given the current mouse point? |
| - bool ShouldBringUpTitlebarForAllMinimizedPanels(int mouse_x, |
| - int mouse_y) const; |
| + bool ShouldBringUpTitlebars(int mouse_x, int mouse_y) const; |
| - // Brings up or down the title-bar for all minimized panels. |
| - void BringUpOrDownTitlebarForAllMinimizedPanels(bool bring_up); |
| + // Brings up or down the titlebars for all minimized panels. |
| + void BringUpOrDownTitlebars(bool bring_up); |
| + // Returns the bottom position for the panel per its expansion state. If auto- |
| + // hide bottom bar is present, we want to move the minimized panel to the |
| + // bottom of the screen, not the bottom of the work area. |
| + int GetBottomPositionForExpansionState( |
| + Panel::ExpansionState expansion_state) const; |
| + |
| int num_panels() const { return panels_.size(); } |
| bool is_dragging_panel() const; |
| private: |
| - friend class PanelBrowserTest; |
| + friend class BasePanelBrowserTest; |
| + enum DelayedTitlebarAction { |
| + NO_ACTION, |
| + BRING_UP, |
| + BRING_DOWN |
| + }; |
| + |
| typedef std::vector<Panel*> Panels; |
| + // For testing only. |
| + static void CreateForTesting(const gfx::Rect& work_area, |
| + AutoHideBottomBar* auto_hide_bottom_bar); |
| + |
| PanelManager(); |
| + void Init(); |
| + // Overridden from AutoHideBottomBar::Observer: |
| + virtual void OnAutoHideBottomBarVisibilityChanged( |
| + AutoHideBottomBar::Visibility visibility) OVERRIDE; |
| + virtual void OnAutoHideBottomBarHeightChanged(int height) OVERRIDE; |
| + |
| // Applies the new work area. This is called by OnDisplayChanged and the test |
| // code. |
| void SetWorkArea(const gfx::Rect& work_area); |
| @@ -84,6 +109,9 @@ |
| void DragLeft(); |
| void DragRight(); |
| + void DelayedBringUpOrDownTitlebarsCheck(); |
| + void DoBringUpOrDownTitlebars(bool bring_up); |
| + |
| Panels panels_; |
| // Stores the panels that are pending to remove. We want to delay the removal |
| @@ -91,14 +119,16 @@ |
| Panels panels_pending_to_remove_; |
| // Current work area used in computing the panel bounds. |
| + // If the always-on-top bottom bar, like Windows taskbar or MacOSX dock, is |
| + // always visible, it should not be included in the work area. Otherwise, the |
| + // work area includes the potential area that would be taken by the bottom |
| + // bar when it becomes visible. |
| gfx::Rect work_area_; |
| // Used in computing the bounds of the next panel. |
| int max_width_; |
| int max_height_; |
| - int min_x_; |
| int current_x_; |
| - int bottom_edge_y_; |
| // Panel to drag. |
| size_t dragging_panel_index_; |
| @@ -112,6 +142,12 @@ |
| // to when the dragging ends. |
| gfx::Rect dragging_panel_bounds_; |
| + scoped_refptr<AutoHideBottomBar> auto_hide_bottom_bar_; |
| + |
| + DelayedTitlebarAction delayed_titlebar_action_; |
| + |
| + ScopedRunnableMethodFactory<PanelManager> method_factory_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(PanelManager); |
| }; |