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.
5 #ifndef UI_MESSAGE_CENTER_VIEWS_NOTIFIER_SETTINGS_VIEW_H_
6 #define UI_MESSAGE_CENTER_VIEWS_NOTIFIER_SETTINGS_VIEW_H_
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/checkbox.h"
15 #include "ui/views/controls/button/image_button.h"
16 #include "ui/views/controls/button/menu_button_listener.h"
17 #include "ui/views/controls/image_view.h"
18 #include "ui/views/view.h"
26 namespace message_center
{
27 class NotifierGroupMenuModel
;
29 // A class to show the list of notifier extensions / URL patterns and allow
30 // users to customize the settings.
31 class MESSAGE_CENTER_EXPORT NotifierSettingsView
32 : public NotifierSettingsObserver
,
34 public views::ButtonListener
,
35 public views::MenuButtonListener
{
37 explicit NotifierSettingsView(NotifierSettingsProvider
* provider
);
38 virtual ~NotifierSettingsView();
42 // Overridden from NotifierSettingsDelegate:
43 virtual void UpdateIconImage(const NotifierId
& notifier_id
,
44 const gfx::Image
& icon
) OVERRIDE
;
45 virtual void NotifierGroupChanged() OVERRIDE
;
47 void set_provider(NotifierSettingsProvider
* new_provider
) {
48 provider_
= new_provider
;
52 FRIEND_TEST_ALL_PREFIXES(NotifierSettingsViewTest
, TestLearnMoreButton
);
54 class MESSAGE_CENTER_EXPORT NotifierButton
: public views::CustomButton
,
55 public views::ButtonListener
{
57 NotifierButton(NotifierSettingsProvider
* provider
,
59 views::ButtonListener
* listener
);
60 virtual ~NotifierButton();
62 void UpdateIconImage(const gfx::Image
& icon
);
63 void SetChecked(bool checked
);
65 bool has_learn_more() const;
66 const Notifier
& notifier() const;
68 void SendLearnMorePressedForTest();
71 // Overridden from views::ButtonListener:
72 virtual void ButtonPressed(views::Button
* button
,
73 const ui::Event
& event
) OVERRIDE
;
74 virtual void GetAccessibleState(ui::AccessibleViewState
* state
) OVERRIDE
;
76 bool ShouldHaveLearnMoreButton() const;
77 // Helper function to reset the layout when the view has substantially
79 void GridChanged(bool has_learn_more
, bool has_icon_view
);
81 NotifierSettingsProvider
* provider_
; // Weak.
82 const scoped_ptr
<Notifier
> notifier_
;
83 // |icon_view_| is owned by us because sometimes we don't leave it
84 // in the view hierarchy.
85 scoped_ptr
<views::ImageView
> icon_view_
;
86 views::Label
* name_view_
;
87 views::Checkbox
* checkbox_
;
88 views::ImageButton
* learn_more_
;
90 DISALLOW_COPY_AND_ASSIGN(NotifierButton
);
93 // Given a new list of notifiers, updates the view to reflect it.
94 void UpdateContentsView(const std::vector
<Notifier
*>& notifiers
);
96 // Overridden from views::View:
97 virtual void Layout() OVERRIDE
;
98 virtual gfx::Size
GetMinimumSize() OVERRIDE
;
99 virtual gfx::Size
GetPreferredSize() OVERRIDE
;
100 virtual bool OnKeyPressed(const ui::KeyEvent
& event
) OVERRIDE
;
101 virtual bool OnMouseWheel(const ui::MouseWheelEvent
& event
) OVERRIDE
;
103 // Overridden from views::ButtonListener:
104 virtual void ButtonPressed(views::Button
* sender
,
105 const ui::Event
& event
) OVERRIDE
;
107 // Overridden from views::MenuButtonListener:
108 virtual void OnMenuButtonClicked(views::View
* source
,
109 const gfx::Point
& point
) OVERRIDE
;
111 views::ImageButton
* title_arrow_
;
112 views::Label
* title_label_
;
113 views::MenuButton
* notifier_group_selector_
;
114 views::ScrollView
* scroller_
;
115 NotifierSettingsProvider
* provider_
;
116 std::set
<NotifierButton
*> buttons_
;
117 scoped_ptr
<NotifierGroupMenuModel
> notifier_group_menu_model_
;
118 scoped_ptr
<views::MenuRunner
> notifier_group_menu_runner_
;
120 DISALLOW_COPY_AND_ASSIGN(NotifierSettingsView
);
123 } // namespace message_center
125 #endif // UI_MESSAGE_CENTER_VIEWS_NOTIFIER_SETTINGS_VIEW_H_