15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_WM_WORKSPACE_CONTROLLER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_WM_WORKSPACE_CONTROLLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ash_export.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/workspace/workspace_types.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShelfLayoutManager;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WorkspaceControllerTestHelper;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WorkspaceEventHandler;
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class WorkspaceLayoutManager;
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WorkspaceLayoutManagerDelegate;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WorkspaceController acts as a central place that ties together all the
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// various workspace pieces.
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class ASH_EXPORT WorkspaceController {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit WorkspaceController(aura::Window* viewport);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WorkspaceController();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the current window state.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WorkspaceWindowState GetWindowState() const;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetShelf(ShelfLayoutManager* shelf);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Starts the animation that occurs on first login.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DoInitialAnimation();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Add a delegate which adds a backdrop behind the top window of the default
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // workspace.
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void SetMaximizeBackdropDelegate(
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      scoped_ptr<WorkspaceLayoutManagerDelegate> delegate);
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  WorkspaceLayoutManager* layout_manager() { return layout_manager_; }
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class WorkspaceControllerTestHelper;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  aura::Window* viewport_;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ShelfLayoutManager* shelf_;
52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  scoped_ptr<WorkspaceEventHandler> event_handler_;
53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  WorkspaceLayoutManager* layout_manager_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WorkspaceController);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // ASH_WM_WORKSPACE_CONTROLLER_H_
61