1 // Copyright (c) 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_NOTIFIER_SETTINGS_VIEW_H_ 6 #define UI_MESSAGE_CENTER_VIEWS_NOTIFIER_SETTINGS_VIEW_H_ 7 8 #include <set> 9 10 #include "base/memory/scoped_ptr.h" 11 #include "ui/message_center/message_center_export.h" 12 #include "ui/message_center/notifier_settings.h" 13 #include "ui/message_center/views/message_bubble_base.h" 14 #include "ui/views/controls/button/image_button.h" 15 #include "ui/views/controls/button/menu_button_listener.h" 16 #include "ui/views/view.h" 17 18 namespace views { 19 class Label; 20 class MenuButton; 21 class MenuRunner; 22 } 23 24 namespace message_center { 25 class NotifierGroupMenuModel; 26 27 // A class to show the list of notifier extensions / URL patterns and allow 28 // users to customize the settings. 29 class MESSAGE_CENTER_EXPORT NotifierSettingsView 30 : public NotifierSettingsObserver, 31 public views::View, 32 public views::ButtonListener, 33 public views::MenuButtonListener { 34 public: 35 explicit NotifierSettingsView(NotifierSettingsProvider* provider); 36 virtual ~NotifierSettingsView(); 37 38 bool IsScrollable(); 39 40 // Overridden from NotifierSettingsDelegate: 41 virtual void UpdateIconImage(const NotifierId& notifier_id, 42 const gfx::Image& icon) OVERRIDE; 43 virtual void NotifierGroupChanged() OVERRIDE; 44 45 void set_provider(NotifierSettingsProvider* new_provider) { 46 provider_ = new_provider; 47 } 48 49 private: 50 class NotifierButton; 51 52 // Given a new list of notifiers, updates the view to reflect it. 53 void UpdateContentsView(const std::vector<Notifier*>& notifiers); 54 55 // Overridden from views::View: 56 virtual void Layout() OVERRIDE; 57 virtual gfx::Size GetMinimumSize() OVERRIDE; 58 virtual gfx::Size GetPreferredSize() OVERRIDE; 59 virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE; 60 virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) OVERRIDE; 61 62 // Overridden from views::ButtonListener: 63 virtual void ButtonPressed(views::Button* sender, 64 const ui::Event& event) OVERRIDE; 65 virtual void OnMenuButtonClicked(views::View* source, 66 const gfx::Point& point) OVERRIDE; 67 68 views::ImageButton* title_arrow_; 69 views::Label* title_label_; 70 views::MenuButton* notifier_group_selector_; 71 views::ScrollView* scroller_; 72 NotifierSettingsProvider* provider_; 73 std::set<NotifierButton*> buttons_; 74 scoped_ptr<NotifierGroupMenuModel> notifier_group_menu_model_; 75 scoped_ptr<views::MenuRunner> notifier_group_menu_runner_; 76 77 DISALLOW_COPY_AND_ASSIGN(NotifierSettingsView); 78 }; 79 80 } // namespace message_center 81 82 #endif // UI_MESSAGE_CENTER_VIEWS_NOTIFIER_SETTINGS_VIEW_H_ 83