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 // This is the GTK implementation of the First Run bubble, the dialog box 6 // presented on first run of Chromium. There can only ever be a single 7 // bubble open, so the class presents only static methods. 8 9 #ifndef CHROME_BROWSER_UI_GTK_FIRST_RUN_BUBBLE_H_ 10 #define CHROME_BROWSER_UI_GTK_FIRST_RUN_BUBBLE_H_ 11 #pragma once 12 13 #include <gtk/gtk.h> 14 15 #include <vector> 16 17 #include "base/basictypes.h" 18 #include "chrome/browser/first_run/first_run.h" 19 #include "chrome/browser/ui/gtk/info_bubble_gtk.h" 20 #include "content/common/notification_observer.h" 21 #include "content/common/notification_registrar.h" 22 23 class Profile; 24 25 class FirstRunBubble : public InfoBubbleGtkDelegate, 26 public NotificationObserver { 27 public: 28 // Shows the first run bubble, pointing at |rect|. 29 static void Show(Profile* profile, 30 GtkWidget* anchor, 31 const gfx::Rect& rect, 32 FirstRun::BubbleType bubble_type); 33 34 // Implements the InfoBubbleGtkDelegate. We are notified when the bubble 35 // is about to be closed. 36 virtual void InfoBubbleClosing(InfoBubbleGtk* info_bubble, 37 bool closed_by_escape); 38 virtual bool CloseOnEscape(); 39 40 // Overridden from NotificationObserver: 41 virtual void Observe(NotificationType type, 42 const NotificationSource& source, 43 const NotificationDetails& details); 44 45 private: 46 FirstRunBubble(Profile* profile, 47 GtkWidget* anchor, 48 const gfx::Rect& rect, 49 FirstRun::BubbleType bubble_type); 50 virtual ~FirstRunBubble(); 51 52 // Create and pack widgets for different bubble types. 53 void InitializeContentForLarge(); 54 void InitializeContentForOEM(); 55 void InitializeContentForMinimal(); 56 57 // Contains some common set up for the labels in the bubble. |width| is a 58 // resource that holds the desired width for the labels. 59 void InitializeLabels(int width_resource); 60 61 CHROMEGTK_CALLBACK_0(FirstRunBubble, void, HandleDestroy); 62 CHROMEGTK_CALLBACK_0(FirstRunBubble, void, HandleKeepButton); 63 CHROMEGTK_CALLBACK_0(FirstRunBubble, void, HandleChangeButton); 64 65 // Our current profile. 66 Profile* profile_; 67 68 // Provides colors and stuff. 69 GtkThemeService* theme_service_; 70 71 // The widget we anchor to, and a descendant of the toplevel window we 72 // are transient for. 73 GtkWidget* anchor_; 74 75 // We let the InfoBubble own our content, and then we delete ourself 76 // when the widget is destroyed (when the InfoBubble is destroyed). 77 GtkWidget* content_; 78 79 // The various labels in the interface. We keep track of them for theme 80 // changes. 81 std::vector<GtkWidget*> labels_; 82 83 InfoBubbleGtk* bubble_; 84 85 NotificationRegistrar registrar_; 86 87 DISALLOW_COPY_AND_ASSIGN(FirstRunBubble); 88 }; 89 90 #endif // CHROME_BROWSER_UI_GTK_FIRST_RUN_BUBBLE_H_ 91