| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_UI_GTK_INFOBARS_EXTENSION_INFOBAR_GTK_H_ | 5 #ifndef CHROME_BROWSER_UI_GTK_INFOBARS_EXTENSION_INFOBAR_GTK_H_ |
| 6 #define CHROME_BROWSER_UI_GTK_INFOBARS_EXTENSION_INFOBAR_GTK_H_ | 6 #define CHROME_BROWSER_UI_GTK_INFOBARS_EXTENSION_INFOBAR_GTK_H_ |
| 7 | 7 |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "chrome/browser/extensions/extension_infobar_delegate.h" | 9 #include "chrome/browser/extensions/extension_infobar_delegate.h" |
| 10 #include "chrome/browser/ui/gtk/extensions/extension_view_gtk.h" | 10 #include "chrome/browser/ui/gtk/extensions/extension_view_gtk.h" |
| 11 #include "chrome/browser/ui/gtk/infobars/infobar_gtk.h" | 11 #include "chrome/browser/ui/gtk/infobars/infobar_gtk.h" |
| 12 #include "chrome/browser/ui/gtk/menu_gtk.h" | 12 #include "chrome/browser/ui/gtk/menu_gtk.h" |
| 13 #include "ui/gfx/gtk_util.h" | 13 #include "ui/gfx/gtk_util.h" |
| 14 | 14 |
| 15 class ExtensionContextMenuModel; | 15 class ExtensionContextMenuModel; |
| 16 class ExtensionViewGtk; | 16 class ExtensionViewGtk; |
| 17 class MenuGtk; | 17 class MenuGtk; |
| 18 | 18 |
| 19 class ExtensionInfoBarGtk : public InfoBarGtk, public MenuGtk::Delegate { | 19 class ExtensionInfoBarGtk : public InfoBarGtk, |
| 20 public MenuGtk::Delegate, |
| 21 public ExtensionInfoBarDelegate::DelegateObserver { |
| 20 public: | 22 public: |
| 21 explicit ExtensionInfoBarGtk(scoped_ptr<ExtensionInfoBarDelegate> delegate); | 23 ExtensionInfoBarGtk(InfoBarService* owner, |
| 24 ExtensionInfoBarDelegate* delegate); |
| 22 | 25 |
| 23 private: | 26 private: |
| 24 virtual ~ExtensionInfoBarGtk(); | 27 virtual ~ExtensionInfoBarGtk(); |
| 25 | 28 |
| 26 // InfoBarGtk: | 29 // InfoBarGtk: |
| 27 virtual void PlatformSpecificSetOwner() OVERRIDE; | |
| 28 virtual void PlatformSpecificHide(bool animate) OVERRIDE; | 30 virtual void PlatformSpecificHide(bool animate) OVERRIDE; |
| 29 virtual void GetTopColor(InfoBarDelegate::Type type, | 31 virtual void GetTopColor(InfoBarDelegate::Type type, |
| 30 double* r, double* g, double* b) OVERRIDE; | 32 double* r, double* g, double* b) OVERRIDE; |
| 31 virtual void GetBottomColor(InfoBarDelegate::Type type, | 33 virtual void GetBottomColor(InfoBarDelegate::Type type, |
| 32 double* r, double* g, double* b) OVERRIDE; | 34 double* r, double* g, double* b) OVERRIDE; |
| 35 virtual void InitWidgets() OVERRIDE; |
| 33 | 36 |
| 34 // MenuGtk::Delegate: | 37 // MenuGtk::Delegate: |
| 35 virtual void StoppedShowing() OVERRIDE; | 38 virtual void StoppedShowing() OVERRIDE; |
| 36 | 39 |
| 40 // ExtensionInfoBarDelegate::DelegateObserver: |
| 41 virtual void OnDelegateDeleted() OVERRIDE; |
| 42 |
| 37 void OnImageLoaded(const gfx::Image& image); | 43 void OnImageLoaded(const gfx::Image& image); |
| 38 | 44 |
| 39 ExtensionInfoBarDelegate* GetDelegate(); | 45 ExtensionInfoBarDelegate* GetDelegate(); |
| 40 | 46 |
| 41 // Looks at the window the infobar is in and gets the browser. Can return | 47 // Looks at the window the infobar is in and gets the browser. Can return |
| 42 // NULL if we aren't attached. | 48 // NULL if we aren't attached. |
| 43 Browser* GetBrowser(); | 49 Browser* GetBrowser(); |
| 44 | 50 |
| 45 // Returns the context menu model for this extension. Can be NULL if | 51 // Returns the context menu model for this extension. Can be NULL if |
| 46 // extension context menus are disabled. | 52 // extension context menus are disabled. |
| 47 ExtensionContextMenuModel* BuildMenuModel(); | 53 ExtensionContextMenuModel* BuildMenuModel(); |
| 48 | 54 |
| 49 CHROMEGTK_CALLBACK_1(ExtensionInfoBarGtk, void, OnSizeAllocate, | 55 CHROMEGTK_CALLBACK_1(ExtensionInfoBarGtk, void, OnSizeAllocate, |
| 50 GtkAllocation*); | 56 GtkAllocation*); |
| 51 | 57 |
| 52 CHROMEGTK_CALLBACK_1(ExtensionInfoBarGtk, gboolean, OnButtonPress, | 58 CHROMEGTK_CALLBACK_1(ExtensionInfoBarGtk, gboolean, OnButtonPress, |
| 53 GdkEventButton*); | 59 GdkEventButton*); |
| 54 | 60 |
| 55 CHROMEGTK_CALLBACK_1(ExtensionInfoBarGtk, gboolean, OnExpose, | 61 CHROMEGTK_CALLBACK_1(ExtensionInfoBarGtk, gboolean, OnExpose, |
| 56 GdkEventExpose*); | 62 GdkEventExpose*); |
| 57 | 63 |
| 64 // TODO(pkasting): This shadows InfoBarView::delegate_. Get rid of this once |
| 65 // InfoBars own their delegates (and thus we don't need the DelegateObserver |
| 66 // functionality). For now, almost everyone should use GetDelegate() instead. |
| 67 InfoBarDelegate* delegate_; |
| 68 |
| 58 ExtensionViewGtk* view_; | 69 ExtensionViewGtk* view_; |
| 59 | 70 |
| 60 // The button that activates the extension popup menu. Non-NULL if the | 71 // The button that activates the extension popup menu. Non-NULL if the |
| 61 // extension shows configure context menus and a dropdown menu should be used | 72 // extension shows configure context menus and a dropdown menu should be used |
| 62 // in place of the icon. If set, parents |icon_|. | 73 // in place of the icon. If set, parents |icon_|. |
| 63 GtkWidget* button_; | 74 GtkWidget* button_; |
| 64 | 75 |
| 65 // The GtkImage that shows the extension icon. If a dropdown menu should be | 76 // The GtkImage that shows the extension icon. If a dropdown menu should be |
| 66 // used, it's put inside |button_|, otherwise it's put directly in the hbox | 77 // used, it's put inside |button_|, otherwise it's put directly in the hbox |
| 67 // containing the infobar element. Composed in OnImageLoaded(). | 78 // containing the infobar element. Composed in OnImageLoaded(). |
| 68 GtkWidget* icon_; | 79 GtkWidget* icon_; |
| 69 | 80 |
| 70 // An alignment with one pixel of bottom padding. This is set so the |view_| | 81 // An alignment with one pixel of bottom padding. This is set so the |view_| |
| 71 // doesn't overlap the bottom separator. This also makes it more convenient | 82 // doesn't overlap the bottom separator. This also makes it more convenient |
| 72 // to reattach the view since the alignment_ will have the |hbox_| packing | 83 // to reattach the view since the alignment_ will have the |hbox_| packing |
| 73 // child properties. Reparenting becomes easier too. | 84 // child properties. Reparenting becomes easier too. |
| 74 GtkWidget* alignment_; | 85 GtkWidget* alignment_; |
| 75 | 86 |
| 76 // The model for the current menu displayed. | 87 // The model for the current menu displayed. |
| 77 scoped_refptr<ExtensionContextMenuModel> context_menu_model_; | 88 scoped_refptr<ExtensionContextMenuModel> context_menu_model_; |
| 78 | 89 |
| 79 base::WeakPtrFactory<ExtensionInfoBarGtk> weak_ptr_factory_; | 90 base::WeakPtrFactory<ExtensionInfoBarGtk> weak_ptr_factory_; |
| 80 | 91 |
| 81 DISALLOW_COPY_AND_ASSIGN(ExtensionInfoBarGtk); | 92 DISALLOW_COPY_AND_ASSIGN(ExtensionInfoBarGtk); |
| 82 }; | 93 }; |
| 83 | 94 |
| 84 #endif // CHROME_BROWSER_UI_GTK_INFOBARS_EXTENSION_INFOBAR_GTK_H_ | 95 #endif // CHROME_BROWSER_UI_GTK_INFOBARS_EXTENSION_INFOBAR_GTK_H_ |
| OLD | NEW |