Home | History | Annotate | Download | only in shelf
      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.
      4 
      5 #ifndef ASH_SHELF_SHELF_WIDGET_H_
      6 #define ASH_SHELF_SHELF_WIDGET_H_
      7 
      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"
     14 
     15 namespace aura {
     16 class Window;
     17 }
     18 
     19 namespace ash {
     20 class FocusCycler;
     21 class Shelf;
     22 class ShelfLayoutManager;
     23 class StatusAreaWidget;
     24 class WorkspaceController;
     25 
     26 class ASH_EXPORT ShelfWidget : public views::Widget,
     27                                public views::WidgetObserver,
     28                                public ShelfLayoutManagerObserver {
     29  public:
     30   ShelfWidget(aura::Window* shelf_container,
     31               aura::Window* status_container,
     32               WorkspaceController* workspace_controller);
     33   virtual ~ShelfWidget();
     34 
     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
     37   // example).
     38   static bool ShelfAlignmentAllowed();
     39 
     40   void SetAlignment(ShelfAlignment alignmnet);
     41   ShelfAlignment GetAlignment() const;
     42 
     43   // Sets the shelf's background type.
     44   void SetPaintsBackground(ShelfBackgroundType background_type,
     45                            BackgroundAnimatorChangeType change_type);
     46   ShelfBackgroundType GetBackgroundType() const;
     47 
     48   // Hide the shelf behind a black bar during e.g. a user transition when |hide|
     49   // is true. The |animation_time_ms| will be used as animation duration.
     50   void HideShelfBehindBlackBar(bool hide, int animation_time_ms);
     51   bool IsShelfHiddenBehindBlackBar() const;
     52 
     53   // Causes shelf items to be slightly dimmed (e.g. when a window is maximized).
     54   void SetDimsShelf(bool dimming);
     55   bool GetDimsShelf() const;
     56 
     57   ShelfLayoutManager* shelf_layout_manager() { return shelf_layout_manager_; }
     58   Shelf* shelf() const { return shelf_.get(); }
     59   StatusAreaWidget* status_area_widget() const { return status_area_widget_; }
     60 
     61   void CreateShelf();
     62 
     63   // Set visibility of the shelf.
     64   void SetShelfVisibility(bool visible);
     65   bool IsShelfVisible() const;
     66 
     67   // Sets the focus cycler.  Also adds the shelf to the cycle.
     68   void SetFocusCycler(FocusCycler* focus_cycler);
     69   FocusCycler* GetFocusCycler();
     70 
     71   // Called by the activation delegate, before the shelf is activated
     72   // when no other windows are visible.
     73   void WillActivateAsFallback() { activating_as_fallback_ = true; }
     74 
     75   aura::Window* window_container() { return window_container_; }
     76 
     77   // TODO(harrym): Remove when Status Area Widget is a child view.
     78   void ShutdownStatusAreaWidget();
     79 
     80   // Force the shelf to be presented in an undimmed state.
     81   void ForceUndimming(bool force);
     82 
     83   // Overridden from views::WidgetObserver:
     84   virtual void OnWidgetActivationChanged(
     85       views::Widget* widget, bool active) OVERRIDE;
     86 
     87   // A function to test the current alpha used by the dimming bar. If there is
     88   // no dimmer active, the function will return -1.
     89   int GetDimmingAlphaForTest();
     90 
     91   // A function to test the bounds of the dimming bar. Returns gfx::Rect() if
     92   // the dimmer is inactive.
     93   gfx::Rect GetDimmerBoundsForTest();
     94 
     95   // Disable dimming animations for running tests.
     96   void DisableDimmingAnimationsForTest();
     97 
     98   // ShelfLayoutManagerObserver overrides:
     99   virtual void WillDeleteShelf() OVERRIDE;
    100 
    101  private:
    102   class DelegateView;
    103 
    104   ShelfLayoutManager* shelf_layout_manager_;
    105   scoped_ptr<Shelf> shelf_;
    106   StatusAreaWidget* status_area_widget_;
    107 
    108   // delegate_view_ is attached to window_container_ and is cleaned up
    109   // during CloseChildWindows of the associated RootWindowController.
    110   DelegateView* delegate_view_;
    111   BackgroundAnimator background_animator_;
    112   bool activating_as_fallback_;
    113   aura::Window* window_container_;
    114 };
    115 
    116 }  // namespace ash
    117 
    118 #endif  // ASH_SHELF_SHELF_WIDGET_H_
    119