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
3 // found in the LICENSE file.
5 #ifndef ASH_SHELF_SHELF_WIDGET_H_
6 #define ASH_SHELF_SHELF_WIDGET_H_
8 #include "ash/ash_export.h"
9 #include "ash/shelf/background_animator.h"
10 #include "ash/shelf/shelf_layout_manager_observer.h"
11 #include "ash/shelf/shelf_types.h"
12 #include "ui/views/widget/widget.h"
13 #include "ui/views/widget/widget_observer.h"
22 class ShelfLayoutManager
;
23 class StatusAreaWidget
;
24 class WorkspaceController
;
26 class ASH_EXPORT ShelfWidget
: public views::Widget
,
27 public views::WidgetObserver
,
28 public ShelfLayoutManagerObserver
{
30 ShelfWidget(aura::Window
* shelf_container
,
31 aura::Window
* status_container
,
32 WorkspaceController
* workspace_controller
);
33 virtual ~ShelfWidget();
35 // Returns if shelf alignment option is enabled, and the user is able
36 // to adjust the alignment (guest and supervised mode users cannot for
38 static bool ShelfAlignmentAllowed();
40 void SetAlignment(ShelfAlignment alignmnet
);
41 ShelfAlignment
GetAlignment() const;
43 // Sets the shelf's background type.
44 void SetPaintsBackground(ShelfBackgroundType background_type
,
45 BackgroundAnimatorChangeType change_type
);
46 ShelfBackgroundType
GetBackgroundType() const;
48 // Causes shelf items to be slightly dimmed (e.g. when a window is maximized).
49 void SetDimsShelf(bool dimming
);
50 bool GetDimsShelf() const;
52 ShelfLayoutManager
* shelf_layout_manager() { return shelf_layout_manager_
; }
53 Shelf
* shelf() const { return shelf_
.get(); }
54 StatusAreaWidget
* status_area_widget() const { return status_area_widget_
; }
58 // Set visibility of the shelf.
59 void SetShelfVisibility(bool visible
);
60 bool IsShelfVisible() const;
62 // Sets the focus cycler. Also adds the shelf to the cycle.
63 void SetFocusCycler(FocusCycler
* focus_cycler
);
64 FocusCycler
* GetFocusCycler();
66 // Called by the activation delegate, before the shelf is activated
67 // when no other windows are visible.
68 void WillActivateAsFallback() { activating_as_fallback_
= true; }
70 aura::Window
* window_container() { return window_container_
; }
72 // TODO(harrym): Remove when Status Area Widget is a child view.
73 void ShutdownStatusAreaWidget();
75 // Force the shelf to be presented in an undimmed state.
76 void ForceUndimming(bool force
);
78 // Overridden from views::WidgetObserver:
79 virtual void OnWidgetActivationChanged(
80 views::Widget
* widget
, bool active
) OVERRIDE
;
82 // A function to test the current alpha used by the dimming bar. If there is
83 // no dimmer active, the function will return -1.
84 int GetDimmingAlphaForTest();
86 // A function to test the bounds of the dimming bar. Returns gfx::Rect() if
87 // the dimmer is inactive.
88 gfx::Rect
GetDimmerBoundsForTest();
90 // Disable dimming animations for running tests.
91 void DisableDimmingAnimationsForTest();
93 // ShelfLayoutManagerObserver overrides:
94 virtual void WillDeleteShelf() OVERRIDE
;
99 ShelfLayoutManager
* shelf_layout_manager_
;
100 scoped_ptr
<Shelf
> shelf_
;
101 StatusAreaWidget
* status_area_widget_
;
103 // delegate_view_ is attached to window_container_ and is cleaned up
104 // during CloseChildWindows of the associated RootWindowController.
105 DelegateView
* delegate_view_
;
106 BackgroundAnimator background_animator_
;
107 bool activating_as_fallback_
;
108 aura::Window
* window_container_
;
113 #endif // ASH_SHELF_SHELF_WIDGET_H_