notifier_settings_view.h revision ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef UI_MESSAGE_CENTER_VIEWS_NOTIFIER_SETTINGS_VIEW_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define UI_MESSAGE_CENTER_VIEWS_NOTIFIER_SETTINGS_VIEW_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include <set>
9bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
10bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "base/memory/scoped_ptr.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center_export.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/notifier_settings.h"
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/message_center/views/message_bubble_base.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/views/controls/button/image_button.h"
15bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "ui/views/controls/button/menu_button_listener.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/views/view.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
18bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochnamespace views {
19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass Label;
20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass MenuButton;
21bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass MenuRunner;
22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch}
23bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace message_center {
25bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass NotifierGroupMenuModel;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A class to show the list of notifier extensions / URL patterns and allow
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// users to customize the settings.
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MESSAGE_CENTER_EXPORT NotifierSettingsView
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    : public NotifierSettingsObserver,
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      public views::View,
32bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch      public views::ButtonListener,
33bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch      public views::MenuButtonListener {
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  explicit NotifierSettingsView(NotifierSettingsProvider* provider);
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~NotifierSettingsView();
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool IsScrollable();
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from NotifierSettingsDelegate:
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void UpdateIconImage(const NotifierId& notifier_id,
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               const gfx::Image& icon) OVERRIDE;
43bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  virtual void NotifierGroupChanged() OVERRIDE;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void set_provider(NotifierSettingsProvider* new_provider) {
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    provider_ = new_provider;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  class NotifierButton;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  // Given a new list of notifiers, updates the view to reflect it.
53bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  void UpdateContentsView(const std::vector<Notifier*>& notifiers);
54bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from views::View:
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Layout() OVERRIDE;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual gfx::Size GetMinimumSize() OVERRIDE;
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual gfx::Size GetPreferredSize() OVERRIDE;
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) OVERRIDE;
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from views::ButtonListener:
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ButtonPressed(views::Button* sender,
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             const ui::Event& event) OVERRIDE;
65bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  virtual void OnMenuButtonClicked(views::View* source,
66bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                                   const gfx::Point& point) OVERRIDE;
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  views::ImageButton* title_arrow_;
69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  views::Label* title_label_;
70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  views::MenuButton* notifier_group_selector_;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  views::ScrollView* scroller_;
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  NotifierSettingsProvider* provider_;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::set<NotifierButton*> buttons_;
74bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  scoped_ptr<NotifierGroupMenuModel> notifier_group_menu_model_;
75bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  scoped_ptr<views::MenuRunner> notifier_group_menu_runner_;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NotifierSettingsView);
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace message_center
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // UI_MESSAGE_CENTER_VIEWS_NOTIFIER_SETTINGS_VIEW_H_
83