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