Chromium Code Reviews| Index: ash/wm/dock/dock_layout_manager.h |
| diff --git a/ash/wm/panels/panel_layout_manager.h b/ash/wm/dock/dock_layout_manager.h |
| similarity index 62% |
| copy from ash/wm/panels/panel_layout_manager.h |
| copy to ash/wm/dock/dock_layout_manager.h |
| index fd0bc5c29ae06f257be54a33c29ba8deea5f304b..4a3f46373990415463aec75eb8ef6c6b21233799 100644 |
| --- a/ash/wm/panels/panel_layout_manager.h |
| +++ b/ash/wm/dock/dock_layout_manager.h |
| @@ -2,8 +2,8 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#ifndef ASH_WM_PANELS_PANEL_LAYOUT_MANAGER_H_ |
| -#define ASH_WM_PANELS_PANEL_LAYOUT_MANAGER_H_ |
| +#ifndef ASH_WM_DOCK_DOCK_LAYOUT_MANAGER_H_ |
| +#define ASH_WM_DOCK_DOCK_LAYOUT_MANAGER_H_ |
| #include <list> |
| @@ -11,10 +11,12 @@ |
| #include "ash/launcher/launcher_icon_observer.h" |
| #include "ash/shelf/shelf_layout_manager_observer.h" |
| #include "ash/shell_observer.h" |
| +#include "ash/wm/dock/dock_observer.h" |
| #include "base/basictypes.h" |
| #include "base/compiler_specific.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| +#include "base/observer_list.h" |
| #include "ui/aura/client/activation_change_observer.h" |
| #include "ui/aura/layout_manager.h" |
| #include "ui/aura/window_observer.h" |
| @@ -37,19 +39,19 @@ namespace ash { |
| class Launcher; |
| namespace internal { |
| -class PanelCalloutWidget; |
| class ShelfLayoutManager; |
| +class WorkspaceController; |
| -// PanelLayoutManager is responsible for organizing panels within the |
| -// workspace. It is associated with a specific container window (i.e. |
| -// kShellWindowId_PanelContainer) and controls the layout of any windows |
| +// DockLayoutManager is responsible for organizing windows within the |
| +// dock (gutter). It is associated with a specific container window (i.e. |
| +// kShellWindowId_DockContainer) and controls the layout of any windows |
| // added to that container. |
| // |
| -// The constructor takes a |panel_container| argument which is expected to set |
| +// The constructor takes a |dock_container| argument which is expected to set |
| // its layout manager to this instance, e.g.: |
| -// panel_container->SetLayoutManager(new PanelLayoutManager(panel_container)); |
| +// dock_container->SetLayoutManager(new DockLayoutManager(dock_container)); |
| -class ASH_EXPORT PanelLayoutManager |
| +class ASH_EXPORT DockLayoutManager |
| : public aura::LayoutManager, |
| public ash::LauncherIconObserver, |
| public ash::ShellObserver, |
| @@ -58,20 +60,26 @@ class ASH_EXPORT PanelLayoutManager |
| public keyboard::KeyboardControllerObserver, |
| public ShelfLayoutManagerObserver { |
| public: |
| - explicit PanelLayoutManager(aura::Window* panel_container); |
| - virtual ~PanelLayoutManager(); |
| + explicit DockLayoutManager(aura::Window* dock_container); |
| + virtual ~DockLayoutManager(); |
| - // Call Shutdown() before deleting children of panel_container. |
| + // Call Shutdown() before deleting children of dock_container. |
| void Shutdown(); |
| - void StartDragging(aura::Window* panel); |
| + // Management of the observer list. |
| + virtual void AddObserver(DockObserver* observer); |
| + virtual void RemoveObserver(DockObserver* observer); |
| + |
| + void StartDragging(aura::Window* window); |
| void FinishDragging(); |
| - void ToggleMinimize(aura::Window* panel); |
| + void ToggleMinimize(aura::Window* window); |
| ash::Launcher* launcher() { return launcher_; } |
| void SetLauncher(ash::Launcher* launcher); |
| + int CalculateDockEdges(const gfx::Rect& bounds) const; |
| + |
| // Overridden from aura::LayoutManager: |
| virtual void OnWindowResized() OVERRIDE; |
| virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE; |
| @@ -104,58 +112,50 @@ class ASH_EXPORT PanelLayoutManager |
| ShelfVisibilityState new_state) OVERRIDE; |
| private: |
| - friend class PanelLayoutManagerTest; |
| - friend class PanelWindowResizerTest; |
| + friend class DockLayoutManagerTest; |
| views::Widget* CreateCalloutWidget(); |
| - struct PanelInfo{ |
| - PanelInfo() : window(NULL), callout_widget(NULL), slide_in(false) {} |
| + struct DockInfo{ |
| + DockInfo() : window(NULL), slide_in(false) {} |
| bool operator==(const aura::Window* other_window) const { |
| return window == other_window; |
| } |
| - // A weak pointer to the panel window. |
| + // A weak pointer to the docked window. |
| aura::Window* window; |
| - // The callout widget for this panel. This pointer must be managed |
| - // manually as this structure is used in a std::list. See |
| - // http://www.chromium.org/developers/smart-pointer-guidelines |
| - PanelCalloutWidget* callout_widget; |
| - // True on new and restored panel windows until the panel has been |
| - // positioned. The first time Relayout is called the panel will slide into |
| + // True on new and restored docked windows until the window has been |
| + // positioned. The first time Relayout is called the window will slide into |
| // position and this will be set to false. |
| bool slide_in; |
| }; |
| - typedef std::list<PanelInfo> PanelList; |
| + typedef std::list<DockInfo> DockList; |
| - void MinimizePanel(aura::Window* panel); |
| - void RestorePanel(aura::Window* panel); |
| + void MinimizeWindow(aura::Window* window); |
| + void RestoreWindow(aura::Window* window); |
| - // Called whenever the panel layout might change. |
| + // Called whenever the window layout might change. |
| void Relayout(); |
| - // Called whenever the panel stacking order needs to be updated (e.g. focus |
| - // changes or a panel is moved). |
| - void UpdateStacking(aura::Window* active_panel); |
| - |
| - // Update the callout arrows for all managed panels. |
| - void UpdateCallouts(); |
| + // Called whenever the window stacking order needs to be updated (e.g. focus |
| + // changes or a window is moved). |
| + void UpdateStacking(aura::Window* active_window); |
| // Overridden from keyboard::KeyboardControllerObserver: |
| virtual void OnKeyboardBoundsChanging( |
| const gfx::Rect& keyboard_bounds) OVERRIDE; |
| // Parent window associated with this layout manager. |
| - aura::Window* panel_container_; |
| + aura::Window* dock_container_; |
| // Protect against recursive calls to Relayout(). |
| bool in_layout_; |
| - // Ordered list of unowned pointers to panel windows. |
| - PanelList panel_windows_; |
| - // The panel being dragged. |
| - aura::Window* dragged_panel_; |
| + // Ordered list of unowned pointers to docked windows. |
| + DockList dock_windows_; |
|
flackr
2013/05/31 14:23:45
I don't think you need to maintain a separate list
varkha
2013/05/31 23:33:42
Done.
|
| + // The docked window being dragged. |
| + aura::Window* dragged_window_; |
| // The launcher we are observing for launcher icon changes. |
| Launcher* launcher_; |
| // The shelf layout manager being observed for visibility changes. |
| @@ -163,15 +163,26 @@ class ASH_EXPORT PanelLayoutManager |
| // Tracks the visibility of the shelf. Defaults to false when there is no |
| // shelf. |
| bool shelf_hidden_; |
| - // The last active panel. Used to maintain stacking even if no panels are |
| + // The last active window. Used to maintain stacking even if no windows are |
| // currently focused. |
| - aura::Window* last_active_panel_; |
| - base::WeakPtrFactory<PanelLayoutManager> weak_factory_; |
| + aura::Window* last_active_window_; |
| + // current width of the dock |
| + int dock_width_; |
| + |
| + // side of the screen the dock is positioned at |
| + enum DockAlignment { |
| + DOCK_ALIGNMENT_NONE, |
| + DOCK_ALIGNMENT_LEFT, |
| + DOCK_ALIGNMENT_RIGHT, |
| + }; |
| + DockAlignment alignment_; |
| + |
| + ObserverList<DockObserver> observer_list_; |
| - DISALLOW_COPY_AND_ASSIGN(PanelLayoutManager); |
| + DISALLOW_COPY_AND_ASSIGN(DockLayoutManager); |
| }; |
| } // namespace internal |
| } // namespace ash |
| -#endif // ASH_WM_PANELS_PANEL_LAYOUT_MANAGER_H_ |
| +#endif // ASH_WM_DOCK_DOCK_LAYOUT_MANAGER_H_ |