Home | History | Annotate | Download | only in gtk
      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