15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_GTK_INFOBARS_EXTENSION_INFOBAR_GTK_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_GTK_INFOBARS_EXTENSION_INFOBAR_GTK_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_infobar_delegate.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/gtk/extensions/extension_view_gtk.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/gtk/infobars/infobar_gtk.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/gtk/menu_gtk.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/gtk_util.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExtensionContextMenuModel; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionViewGtk; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuGtk; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ExtensionInfoBarGtk : public InfoBarGtk, public MenuGtk::Delegate { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) explicit ExtensionInfoBarGtk(scoped_ptr<ExtensionInfoBarDelegate> delegate); 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ExtensionInfoBarGtk(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // InfoBarGtk: 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void PlatformSpecificSetOwner() OVERRIDE; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PlatformSpecificHide(bool animate) OVERRIDE; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetTopColor(InfoBarDelegate::Type type, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double* r, double* g, double* b) OVERRIDE; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetBottomColor(InfoBarDelegate::Type type, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double* r, double* g, double* b) OVERRIDE; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // MenuGtk::Delegate: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StoppedShowing() OVERRIDE; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnImageLoaded(const gfx::Image& image); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ExtensionInfoBarDelegate* GetDelegate(); 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks at the window the infobar is in and gets the browser. Can return 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NULL if we aren't attached. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* GetBrowser(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the context menu model for this extension. Can be NULL if 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension context menus are disabled. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionContextMenuModel* BuildMenuModel(); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHROMEGTK_CALLBACK_1(ExtensionInfoBarGtk, void, OnSizeAllocate, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GtkAllocation*); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHROMEGTK_CALLBACK_1(ExtensionInfoBarGtk, gboolean, OnButtonPress, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GdkEventButton*); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHROMEGTK_CALLBACK_1(ExtensionInfoBarGtk, gboolean, OnExpose, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GdkEventExpose*); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionViewGtk* view_; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The button that activates the extension popup menu. Non-NULL if the 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // extension shows configure context menus and a dropdown menu should be used 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // in place of the icon. If set, parents |icon_|. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GtkWidget* button_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The GtkImage that shows the extension icon. If a dropdown menu should be 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // used, it's put inside |button_|, otherwise it's put directly in the hbox 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // containing the infobar element. Composed in OnImageLoaded(). 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GtkWidget* icon_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An alignment with one pixel of bottom padding. This is set so the |view_| 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // doesn't overlap the bottom separator. This also makes it more convenient 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to reattach the view since the alignment_ will have the |hbox_| packing 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // child properties. Reparenting becomes easier too. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GtkWidget* alignment_; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The model for the current menu displayed. 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<ExtensionContextMenuModel> context_menu_model_; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtrFactory<ExtensionInfoBarGtk> weak_ptr_factory_; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ExtensionInfoBarGtk); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_GTK_INFOBARS_EXTENSION_INFOBAR_GTK_H_ 85