Home | History | Annotate | Download | only in views
      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 CHROME_BROWSER_UI_VIEWS_CRITICAL_NOTIFICATION_BUBBLE_VIEW_H_
      6 #define CHROME_BROWSER_UI_VIEWS_CRITICAL_NOTIFICATION_BUBBLE_VIEW_H_
      7 
      8 #include "base/timer/timer.h"
      9 #include "ui/views/bubble/bubble_delegate.h"
     10 #include "ui/views/controls/button/button.h"
     11 
     12 namespace ui {
     13 class Accelerator;
     14 }
     15 
     16 namespace views {
     17 class Label;
     18 class LabelButton;
     19 }
     20 
     21 class CriticalNotificationBubbleView : public views::BubbleDelegateView,
     22                                        public views::ButtonListener {
     23  public:
     24   explicit CriticalNotificationBubbleView(views::View* anchor_view);
     25   virtual ~CriticalNotificationBubbleView();
     26 
     27   // views::ButtonListener overrides:
     28   virtual void ButtonPressed(views::Button* sender,
     29                              const ui::Event& event) OVERRIDE;
     30 
     31   // views::WidgetDelegate overrides:
     32   virtual void WindowClosing() OVERRIDE;
     33 
     34   // views::View overrides:
     35   virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
     36   virtual void ViewHierarchyChanged(
     37       const ViewHierarchyChangedDetails& details) OVERRIDE;
     38 
     39  protected:
     40   // views::BubbleDelegateView overrides:
     41   virtual bool AcceleratorPressed(
     42       const ui::Accelerator& accelerator) OVERRIDE;
     43   virtual void Init() OVERRIDE;
     44 
     45  private:
     46   // Helper function to calculate the remaining time (in seconds) until
     47   // spontaneous reboot.
     48   int GetRemainingTime();
     49 
     50   // Helper function to set the headline for the bubble.
     51   void UpdateBubbleHeadline(int seconds);
     52 
     53   // Called when the timer fires each time the clock ticks.
     54   void OnCountdown();
     55 
     56   // The headline and buttons on the bubble.
     57   views::Label* headline_;
     58   views::LabelButton* restart_button_;
     59   views::LabelButton* dismiss_button_;
     60 
     61   // A timer to refresh the bubble to show new countdown value.
     62   base::RepeatingTimer<CriticalNotificationBubbleView> refresh_timer_;
     63 
     64   // When the bubble was created.
     65   base::Time bubble_created_;
     66 
     67   DISALLOW_COPY_AND_ASSIGN(CriticalNotificationBubbleView);
     68 };
     69 
     70 #endif  // CHROME_BROWSER_UI_VIEWS_CRITICAL_NOTIFICATION_BUBBLE_VIEW_H_
     71