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