• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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 UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_BUTTON_BAR_H_
6 #define UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_BUTTON_BAR_H_
7 
8 #include "ui/views/controls/button/button.h"
9 #include "ui/views/controls/button/image_button.h"
10 #include "ui/views/view.h"
11 
12 namespace views {
13 class Label;
14 }
15 
16 namespace message_center {
17 
18 class ButtonBarSettingsLabel;
19 class MessageCenter;
20 class MessageCenterTray;
21 class MessageCenterView;
22 class NotificationCenterButton;
23 class NotifierSettingsProvider;
24 
25 // MessageCenterButtonBar is the class that shows the content outside the main
26 // notification area - the label (or NotifierGroup switcher) and the buttons.
27 class MessageCenterButtonBar : public views::View,
28                                public views::ButtonListener {
29  public:
30   MessageCenterButtonBar(MessageCenterView* message_center_view,
31                          MessageCenter* message_center,
32                          NotifierSettingsProvider* notifier_settings_provider,
33                          bool settings_initially_visible,
34                          const base::string16& title);
35   virtual ~MessageCenterButtonBar();
36 
37   // Enables or disables all of the buttons in the center.  This is used to
38   // prevent user clicks during the close-all animation.
39   virtual void SetAllButtonsEnabled(bool enabled);
40 
41   // Sometimes we shouldn't see the close-all button.
42   void SetCloseAllButtonEnabled(bool enabled);
43 
44   // Sometimes we shouldn't see the back arrow (not in settings).
45   void SetBackArrowVisible(bool visible);
46 
47  private:
48   // Updates the layout manager which can have differing configuration
49   // depending on the visibilty of different parts of the button bar.
50   void ViewVisibilityChanged();
51 
52   // Overridden from views::View:
53   virtual void ChildVisibilityChanged(views::View* child) OVERRIDE;
54 
55   // Overridden from views::ButtonListener:
56   virtual void ButtonPressed(views::Button* sender,
57                              const ui::Event& event) OVERRIDE;
58 
message_center_view()59   MessageCenterView* message_center_view() const {
60     return message_center_view_;
61   }
message_center()62   MessageCenter* message_center() const { return message_center_; }
63 
64   MessageCenterView* message_center_view_;  // Weak reference.
65   MessageCenter* message_center_;           // Weak reference.
66 
67   // |close_bubble_button_| closes the message center bubble. This is required
68   // for desktop Linux because the status icon doesn't toggle the bubble, and
69   // close-on-deactivation is off. This is a tentative solution. Once pkotwicz
70   // Fixes the problem of focus-follow-mouse, close-on-deactivation will be
71   // back and this field will be removed. See crbug.com/319516.
72 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
73   views::ImageButton* close_bubble_button_;
74 #endif
75 
76   // Sub-views of the button bar.
77   NotificationCenterButton* title_arrow_;
78   views::Label* notification_label_;
79   views::View* button_container_;
80   NotificationCenterButton* close_all_button_;
81   NotificationCenterButton* settings_button_;
82   NotificationCenterButton* quiet_mode_button_;
83 
84   DISALLOW_COPY_AND_ASSIGN(MessageCenterButtonBar);
85 };
86 
87 }  // namespace message_center
88 
89 #endif  // UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_BUTTON_BAR_H_
90