1 // Copyright (c) 2011 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 // Draws the view for the balloons. 6 7 #ifndef CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_BALLOON_VIEW_H_ 8 #define CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_BALLOON_VIEW_H_ 9 #pragma once 10 11 #include "base/basictypes.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "base/task.h" 14 #include "chrome/browser/notifications/balloon.h" 15 #include "content/common/notification_observer.h" 16 #include "content/common/notification_registrar.h" 17 #include "ui/gfx/path.h" 18 #include "ui/gfx/point.h" 19 #include "ui/gfx/rect.h" 20 #include "ui/gfx/size.h" 21 #include "views/view.h" 22 23 namespace views { 24 class Menu2; 25 class MenuButton; 26 class MouseEvent; 27 class TextButton; 28 class Widget; 29 } // namespace views 30 31 class Notification; 32 class NotificationDetails; 33 class NotificationSource; 34 35 namespace chromeos { 36 37 class BalloonViewHost; 38 class NotificationControlView; 39 40 // A balloon view is the UI component for a notification panel. 41 class BalloonViewImpl : public BalloonView, 42 public views::View, 43 public NotificationObserver { 44 public: 45 BalloonViewImpl(bool sticky, bool controls, bool web_ui); 46 virtual ~BalloonViewImpl(); 47 48 // views::View interface. 49 virtual void Layout(); 50 virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child); 51 52 // BalloonView interface. 53 virtual void Show(Balloon* balloon); 54 virtual void Update(); 55 virtual void Close(bool by_user); 56 virtual void RepositionToBalloon(); 57 gfx::Size GetSize() const; 58 virtual BalloonHost* GetHost() const; 59 60 // True if the notification is stale. False if the notification is new. stale()61 bool stale() const { return stale_; } 62 63 // Makes the notification stale. set_stale()64 void set_stale() { stale_ = true; } 65 66 // True if the notification is sticky. sticky()67 bool sticky() const { return sticky_; } 68 69 // True if the notification is being closed. closed()70 bool closed() const { return closed_; } 71 72 // True if the balloon is for the given |notification|. 73 bool IsFor(const Notification& notification) const; 74 75 // Called when the notification becomes active (mouse is on). 76 void Activated(); 77 78 // Called when the notification becomes inactive. 79 void Deactivated(); 80 81 private: 82 friend class NotificationControlView; 83 84 // views::View interface. GetPreferredSize()85 virtual gfx::Size GetPreferredSize() { 86 return gfx::Size(1000, 1000); 87 } 88 89 // NotificationObserver interface. 90 virtual void Observe(NotificationType type, 91 const NotificationSource& source, 92 const NotificationDetails& details); 93 94 // Initializes the options menu. 95 void CreateOptionsMenu(); 96 97 // Do the delayed close work. 98 void DelayedClose(bool by_user); 99 100 // Denies the permission to show the ballooon from its source. 101 void DenyPermission(); 102 103 // Returns the renderer's native view. 104 gfx::NativeView GetParentNativeView(); 105 106 // Non-owned pointer to the balloon which owns this object. 107 Balloon* balloon_; 108 109 // The renderer of the HTML contents. Pointer owned by the views hierarchy. 110 BalloonViewHost* html_contents_; 111 112 // The following factory is used to call methods at a later time. 113 ScopedRunnableMethodFactory<BalloonViewImpl> method_factory_; 114 115 // A widget for ControlView. 116 scoped_ptr<views::Widget> control_view_host_; 117 118 bool stale_; 119 NotificationRegistrar notification_registrar_; 120 // A sticky flag. A sticky notification cannot be dismissed by a user. 121 bool sticky_; 122 // True if a notification should have info/option/dismiss label/buttons. 123 bool controls_; 124 // True if the notification is being closed. 125 bool closed_; 126 // True to enable WebUI in the notification. 127 bool web_ui_; 128 129 DISALLOW_COPY_AND_ASSIGN(BalloonViewImpl); 130 }; 131 132 } // namespace chromeos 133 134 #endif // CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_BALLOON_VIEW_H_ 135