• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_UI_GTK_EXTENSIONS_MEDIA_GALLERIES_DIALOG_GTK_H_
6 #define CHROME_BROWSER_UI_GTK_EXTENSIONS_MEDIA_GALLERIES_DIALOG_GTK_H_
7 
8 #include <gtk/gtk.h>
9 
10 #include <map>
11 
12 #include "base/compiler_specific.h"
13 #include "base/gtest_prod_util.h"
14 #include "chrome/browser/media_galleries/media_galleries_dialog_controller.h"
15 #include "chrome/browser/ui/gtk/constrained_window_gtk.h"
16 #include "ui/base/gtk/gtk_signal.h"
17 #include "ui/gfx/scoped_gobject.h"
18 
19 class MediaGalleriesDialogController;
20 class MediaGalleriesDialogTest;
21 
22 // The media galleries configuration view for Gtk. It will immediately show
23 // upon construction.
24 class MediaGalleriesDialogGtk : public MediaGalleriesDialog {
25  public:
26   explicit MediaGalleriesDialogGtk(MediaGalleriesDialogController* controller);
27   virtual ~MediaGalleriesDialogGtk();
28 
29   // MediaGalleriesDialog implementation:
30   virtual void UpdateGalleries() OVERRIDE;
31 
32   // Event callbacks.
33   CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnToggled);
34   CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnAddFolder);
35   CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnConfirm);
36   CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnCancel);
37 
38  private:
39   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, InitializeCheckboxes);
40   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ToggleCheckboxes);
41   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, UpdateAdds);
42   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ForgetDeletes);
43 
44   typedef std::map<MediaGalleryPrefId, GtkWidget*> CheckboxMap;
45   typedef std::map<GtkWidget*, MediaGalleryPrefInfo> NewCheckboxMap;
46 
47   // Creates the widget hierarchy.
48   void InitWidgets();
49 
50   virtual void UpdateGalleryInContainer(const MediaGalleryPrefInfo& gallery,
51                                         bool permitted,
52                                         GtkWidget* checkbox_container);
53 
54   // Updates the state of the confirm button. It will be disabled when
55   void UpdateConfirmButtonState();
56 
57   CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnDestroy);
58 
59   MediaGalleriesDialogController* controller_;
60   GtkWidget* window_;
61 
62   // The root widget for the dialog.
63   ui::ScopedGObject<GtkWidget>::Type contents_;
64 
65   // The confirm button.
66   GtkWidget* confirm_;
67 
68   // A map from MediaGalleryPrefId to the GtkCheckButton that controls it.
69   CheckboxMap checkbox_map_;
70 
71   // Map for checkboxes of newly-added galleries to their MediaGalleryPrefInfo.
72   NewCheckboxMap new_checkbox_map_;
73 
74   // True if the user has pressed accept.
75   bool accepted_;
76 
77   DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogGtk);
78 };
79 
80 #endif  // CHROME_BROWSER_UI_GTK_EXTENSIONS_MEDIA_GALLERIES_DIALOG_GTK_H_
81