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