Home | History | Annotate | Download | only in overview
      1 // Copyright 2014 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_SYSTEM_OVERVIEW_OVERVIEW_BUTTON_TRAY_H_
      6 #define ASH_SYSTEM_OVERVIEW_OVERVIEW_BUTTON_TRAY_H_
      7 
      8 #include "ash/ash_export.h"
      9 #include "ash/shell_observer.h"
     10 #include "ash/system/tray/tray_background_view.h"
     11 
     12 namespace views {
     13 class ImageView;
     14 }
     15 
     16 namespace ash {
     17 
     18 // Status area tray for showing a toggle for Overview Mode. Overview Mode
     19 // is equivalent to WindowSelectorController being in selection mode.
     20 // This hosts a ShellObserver that listens for the activation of Maximize Mode
     21 // This tray will only be visible while in this state. This tray does not
     22 // provide any bubble view windows.
     23 class ASH_EXPORT OverviewButtonTray : public TrayBackgroundView,
     24                                       public ShellObserver {
     25  public:
     26   explicit OverviewButtonTray(StatusAreaWidget* status_area_widget);
     27   virtual ~OverviewButtonTray();
     28 
     29   // Updates the tray's visibility based on the LoginStatus and the current
     30   // state of MaximizeMode
     31   virtual void UpdateAfterLoginStatusChange(user::LoginStatus status);
     32 
     33   // ActionableView:
     34   virtual bool PerformAction(const ui::Event& event) OVERRIDE;
     35 
     36   // ShellObserver:
     37   virtual void OnMaximizeModeStarted() OVERRIDE;
     38   virtual void OnMaximizeModeEnded() OVERRIDE;
     39 
     40   // TrayBackgroundView:
     41   virtual bool ClickedOutsideBubble() OVERRIDE;
     42   virtual base::string16 GetAccessibleNameForTray() OVERRIDE;
     43   virtual void HideBubbleWithView(
     44       const views::TrayBubbleView* bubble_view) OVERRIDE;
     45   virtual void SetShelfAlignment(ShelfAlignment alignment) OVERRIDE;
     46 
     47  private:
     48   friend class OverviewButtonTrayTest;
     49 
     50   // Creates a new border for the icon. The padding is determined based on the
     51   // alignment of the shelf.
     52   void SetIconBorderForShelfAlignment();
     53 
     54   // Sets the icon to visible if maximize mode is enabled and
     55   // WindowSelectorController::CanSelect.
     56   void UpdateIconVisibility();
     57 
     58   // Weak pointer, will be parented by TrayContainer for its lifetime.
     59   views::ImageView* icon_;
     60 
     61   DISALLOW_COPY_AND_ASSIGN(OverviewButtonTray);
     62 };
     63 
     64 }  // namespace ash
     65 
     66 #endif  // ASH_SYSTEM_OVERVIEW_OVERVIEW_BUTTON_TRAY_H_
     67