OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this |
2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
3 // LICENSE file. | 3 // LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_GTK_BLOCKED_POPUP_CONTAINER_VIEW_GTK_H_ | 5 #ifndef CHROME_BROWSER_GTK_BLOCKED_POPUP_CONTAINER_VIEW_GTK_H_ |
6 #define CHROME_BROWSER_GTK_BLOCKED_POPUP_CONTAINER_VIEW_GTK_H_ | 6 #define CHROME_BROWSER_GTK_BLOCKED_POPUP_CONTAINER_VIEW_GTK_H_ |
7 | 7 |
8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/scoped_ptr.h" | 11 #include "base/scoped_ptr.h" |
12 #include "chrome/browser/blocked_popup_container.h" | 12 #include "chrome/browser/blocked_popup_container.h" |
13 #include "chrome/browser/gtk/menu_gtk.h" | 13 #include "chrome/browser/gtk/menu_gtk.h" |
| 14 #include "chrome/common/notification_observer.h" |
| 15 #include "chrome/common/notification_registrar.h" |
14 #include "chrome/common/owned_widget_gtk.h" | 16 #include "chrome/common/owned_widget_gtk.h" |
15 | 17 |
16 class BlockedPopupContainerInternalView; | 18 class BlockedPopupContainerInternalView; |
17 class CustomDrawButton; | 19 class CustomDrawButton; |
18 class GtkThemeProvider; | 20 class GtkThemeProvider; |
19 class MenuGtk; | 21 class MenuGtk; |
| 22 class NotificationObserver; |
20 class PrefService; | 23 class PrefService; |
21 class Profile; | 24 class Profile; |
22 class TabContents; | 25 class TabContents; |
23 class TabContentsViewGtk; | 26 class TabContentsViewGtk; |
24 class TextButton; | 27 class TextButton; |
25 | 28 |
26 namespace views { | 29 namespace views { |
27 class ImageButton; | 30 class ImageButton; |
28 } | 31 } |
29 | 32 |
30 // The GTK blocked popup container notification. | 33 // The GTK blocked popup container notification. |
31 class BlockedPopupContainerViewGtk : public BlockedPopupContainerView, | 34 class BlockedPopupContainerViewGtk : public BlockedPopupContainerView, |
| 35 public NotificationObserver, |
32 public MenuGtk::Delegate { | 36 public MenuGtk::Delegate { |
33 public: | 37 public: |
34 virtual ~BlockedPopupContainerViewGtk(); | 38 virtual ~BlockedPopupContainerViewGtk(); |
35 | 39 |
36 // Returns the Gtk view that currently owns us. | 40 // Returns the Gtk view that currently owns us. |
37 TabContentsViewGtk* ContainingView(); | 41 TabContentsViewGtk* ContainingView(); |
38 | 42 |
39 // Returns the URL and title for popup |index|, used to construct a string for | 43 // Returns the URL and title for popup |index|, used to construct a string for |
40 // display. | 44 // display. |
41 void GetURLAndTitleForPopup(size_t index, | 45 void GetURLAndTitleForPopup(size_t index, |
42 string16* url, | 46 string16* url, |
43 string16* title) const; | 47 string16* title) const; |
44 | 48 |
45 GtkWidget* widget() { return container_.get(); } | 49 GtkWidget* widget() { return container_.get(); } |
46 | 50 |
47 // Overridden from BlockedPopupContainerView: | 51 // Overridden from BlockedPopupContainerView: |
48 virtual void SetPosition(); | 52 virtual void SetPosition(); |
49 virtual void ShowView(); | 53 virtual void ShowView(); |
50 virtual void UpdateLabel(); | 54 virtual void UpdateLabel(); |
51 virtual void HideView(); | 55 virtual void HideView(); |
52 virtual void Destroy(); | 56 virtual void Destroy(); |
53 | 57 |
| 58 // Overridden from NotificationObserver: |
| 59 virtual void Observe(NotificationType type, |
| 60 const NotificationSource& source, |
| 61 const NotificationDetails& details); |
| 62 |
54 // Overridden from MenuGtk::Delegate: | 63 // Overridden from MenuGtk::Delegate: |
55 virtual bool IsCommandEnabled(int command_id) const; | 64 virtual bool IsCommandEnabled(int command_id) const; |
56 virtual bool IsItemChecked(int command_id) const; | 65 virtual bool IsItemChecked(int command_id) const; |
57 virtual void ExecuteCommand(int command_id); | 66 virtual void ExecuteCommand(int command_id); |
58 | 67 |
59 private: | 68 private: |
60 // For the static constructor BlockedPopupContainerView::Create(). | 69 // For the static constructor BlockedPopupContainerView::Create(). |
61 friend class BlockedPopupContainerView; | 70 friend class BlockedPopupContainerView; |
62 | 71 |
63 // Creates a container for a certain TabContents. | 72 // Creates a container for a certain TabContents. |
64 explicit BlockedPopupContainerViewGtk(BlockedPopupContainer* container); | 73 explicit BlockedPopupContainerViewGtk(BlockedPopupContainer* container); |
65 | 74 |
66 // Builds all the messy GTK stuff. | 75 // Builds all the messy GTK stuff. |
67 void Init(); | 76 void Init(); |
68 | 77 |
69 // Callbacks for the two buttons in the notification | 78 // Callbacks for the two buttons in the notification |
70 static void OnMenuButtonClicked(GtkButton *button, | 79 static void OnMenuButtonClicked(GtkButton *button, |
71 BlockedPopupContainerViewGtk* container); | 80 BlockedPopupContainerViewGtk* container); |
72 static void OnCloseButtonClicked(GtkButton *button, | 81 static void OnCloseButtonClicked(GtkButton *button, |
73 BlockedPopupContainerViewGtk* container); | 82 BlockedPopupContainerViewGtk* container); |
74 | 83 |
75 // Draws |container_| with a custom background. | 84 // Draws |container_| with a custom background. |
76 static gboolean OnContainerExpose(GtkWidget* widget, GdkEventExpose* event, | 85 static gboolean OnContainerExpose(GtkWidget* widget, GdkEventExpose* event, |
77 BlockedPopupContainerViewGtk* container); | 86 BlockedPopupContainerViewGtk* container); |
78 | 87 |
| 88 NotificationRegistrar registrar_; |
| 89 |
79 // Our model; calling the shots. | 90 // Our model; calling the shots. |
80 BlockedPopupContainer* model_; | 91 BlockedPopupContainer* model_; |
81 | 92 |
82 // The top level of our local GTK hierarchy. | 93 // The top level of our local GTK hierarchy. |
83 OwnedWidgetGtk container_; | 94 OwnedWidgetGtk container_; |
84 | 95 |
85 // The "Blocked Popups: XXX" button. | 96 // The "Blocked Popups: XXX" button. |
86 GtkWidget* menu_button_; | 97 GtkWidget* menu_button_; |
87 | 98 |
88 // Our theme provider. | 99 // Our theme provider. |
89 GtkThemeProvider* theme_provider_; | 100 GtkThemeProvider* theme_provider_; |
90 | 101 |
91 // Closes the container. | 102 // Closes the container. |
92 scoped_ptr<CustomDrawButton> close_button_; | 103 scoped_ptr<CustomDrawButton> close_button_; |
93 | 104 |
94 // The popup menu with options to launch blocked popups. | 105 // The popup menu with options to launch blocked popups. |
95 scoped_ptr<MenuGtk> launch_menu_; | 106 scoped_ptr<MenuGtk> launch_menu_; |
96 | 107 |
97 DISALLOW_COPY_AND_ASSIGN(BlockedPopupContainerViewGtk); | 108 DISALLOW_COPY_AND_ASSIGN(BlockedPopupContainerViewGtk); |
98 }; | 109 }; |
99 | 110 |
100 #endif // CHROME_BROWSER_GTK_BLOCKED_POPUP_CONTAINER_VIEW_GTK_H_ | 111 #endif // CHROME_BROWSER_GTK_BLOCKED_POPUP_CONTAINER_VIEW_GTK_H_ |
OLD | NEW |