root/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_UI_GTK_EXTENSIONS_MEDIA_GALLERIES_DIALOG_GTK_H_
#define CHROME_BROWSER_UI_GTK_EXTENSIONS_MEDIA_GALLERIES_DIALOG_GTK_H_

#include <gtk/gtk.h>

#include <map>

#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "chrome/browser/media_galleries/media_galleries_dialog_controller.h"
#include "chrome/browser/ui/gtk/constrained_window_gtk.h"
#include "ui/base/gtk/gtk_signal.h"
#include "ui/gfx/scoped_gobject.h"

class MediaGalleriesDialogController;
class MediaGalleriesDialogTest;

// The media galleries configuration view for Gtk. It will immediately show
// upon construction.
class MediaGalleriesDialogGtk : public MediaGalleriesDialog {
 public:
  explicit MediaGalleriesDialogGtk(MediaGalleriesDialogController* controller);
  virtual ~MediaGalleriesDialogGtk();

  // MediaGalleriesDialog implementation:
  virtual void UpdateGalleries() OVERRIDE;

  // Event callbacks.
  CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnToggled);
  CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnAddFolder);
  CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnConfirm);
  CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnCancel);

 private:
  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, InitializeCheckboxes);
  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ToggleCheckboxes);
  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, UpdateAdds);
  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ForgetDeletes);

  typedef std::map<MediaGalleryPrefId, GtkWidget*> CheckboxMap;
  typedef std::map<GtkWidget*, MediaGalleryPrefInfo> NewCheckboxMap;

  // Creates the widget hierarchy.
  void InitWidgets();

  virtual void UpdateGalleryInContainer(const MediaGalleryPrefInfo& gallery,
                                        bool permitted,
                                        GtkWidget* checkbox_container);

  // Updates the state of the confirm button. It will be disabled when
  void UpdateConfirmButtonState();

  CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnDestroy);

  MediaGalleriesDialogController* controller_;
  GtkWidget* window_;

  // The root widget for the dialog.
  ui::ScopedGObject<GtkWidget>::Type contents_;

  // The confirm button.
  GtkWidget* confirm_;

  // A map from MediaGalleryPrefId to the GtkCheckButton that controls it.
  CheckboxMap checkbox_map_;

  // Map for checkboxes of newly-added galleries to their MediaGalleryPrefInfo.
  NewCheckboxMap new_checkbox_map_;

  // True if the user has pressed accept.
  bool accepted_;

  DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogGtk);
};

#endif  // CHROME_BROWSER_UI_GTK_EXTENSIONS_MEDIA_GALLERIES_DIALOG_GTK_H_

/* [<][>][^][v][top][bottom][index][help] */