Home | History | Annotate | Download | only in extensions
      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_VIEWS_EXTENSIONS_MEDIA_GALLERIES_DIALOG_VIEWS_H_
      6 #define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_MEDIA_GALLERIES_DIALOG_VIEWS_H_
      7 
      8 #include <map>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "chrome/browser/media_galleries/media_galleries_dialog_controller.h"
     12 #include "ui/views/context_menu_controller.h"
     13 #include "ui/views/controls/button/button.h"
     14 #include "ui/views/window/dialog_delegate.h"
     15 
     16 namespace views {
     17 class Checkbox;
     18 class LabelButton;
     19 class MenuRunner;
     20 class Widget;
     21 }
     22 
     23 class MediaGalleryCheckboxView;
     24 
     25 // The media galleries configuration view for Views. It will immediately show
     26 // upon construction.
     27 class MediaGalleriesDialogViews : public MediaGalleriesDialog,
     28                                   public views::ButtonListener,
     29                                   public views::ContextMenuController,
     30                                   public views::DialogDelegate {
     31  public:
     32   explicit MediaGalleriesDialogViews(
     33       MediaGalleriesDialogController* controller);
     34   virtual ~MediaGalleriesDialogViews();
     35 
     36   // MediaGalleriesDialog implementation:
     37   virtual void UpdateGalleries() OVERRIDE;
     38 
     39   // views::DialogDelegate implementation:
     40   virtual base::string16 GetWindowTitle() const OVERRIDE;
     41   virtual void DeleteDelegate() OVERRIDE;
     42   virtual views::Widget* GetWidget() OVERRIDE;
     43   virtual const views::Widget* GetWidget() const OVERRIDE;
     44   virtual views::View* GetContentsView() OVERRIDE;
     45   virtual base::string16 GetDialogButtonLabel(
     46       ui::DialogButton button) const OVERRIDE;
     47   virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE;
     48   virtual ui::ModalType GetModalType() const OVERRIDE;
     49   virtual views::View* CreateExtraView() OVERRIDE;
     50   virtual bool Cancel() OVERRIDE;
     51   virtual bool Accept() OVERRIDE;
     52 
     53   // views::ButtonListener implementation:
     54   virtual void ButtonPressed(views::Button* sender,
     55                              const ui::Event& event) OVERRIDE;
     56 
     57   // views::ContextMenuController implementation:
     58   virtual void ShowContextMenuForView(views::View* source,
     59                                       const gfx::Point& point,
     60                                       ui::MenuSourceType source_type) OVERRIDE;
     61 
     62  private:
     63   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, InitializeCheckboxes);
     64   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ToggleCheckboxes);
     65   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, UpdateAdds);
     66   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ForgetDeletes);
     67 
     68   typedef std::map<MediaGalleryPrefId, MediaGalleryCheckboxView*> CheckboxMap;
     69 
     70   // MediaGalleriesDialog implementation:
     71   virtual void AcceptDialogForTesting() OVERRIDE;
     72 
     73   void InitChildViews();
     74 
     75   // Adds a checkbox or updates an existing checkbox. Returns true if a new one
     76   // was added.
     77   bool AddOrUpdateGallery(
     78       const MediaGalleriesDialogController::Entry& gallery,
     79       views::View* container,
     80       int trailing_vertical_space);
     81 
     82   void ShowContextMenu(const gfx::Point& point,
     83                        ui::MenuSourceType source_type,
     84                        MediaGalleryPrefId id);
     85 
     86   // Whether |controller_| has a valid WebContents or not.
     87   // In unit tests, it may not.
     88   bool ControllerHasWebContents() const;
     89 
     90   MediaGalleriesDialogController* controller_;
     91 
     92   // The contents of the dialog. Owned by the view hierarchy, except in tests.
     93   views::View* contents_;
     94 
     95   // A map from gallery ID to views::Checkbox view.
     96   CheckboxMap checkbox_map_;
     97 
     98   // Pointer to the controller specific auxiliary button, NULL otherwise.
     99   // Owned by parent in the dialog views tree.
    100   views::LabelButton* auxiliary_button_;
    101 
    102   // This tracks whether the confirm button can be clicked. It starts as false
    103   // if no checkboxes are ticked. After there is any interaction, or some
    104   // checkboxes start checked, this will be true.
    105   bool confirm_available_;
    106 
    107   // True if the user has pressed accept.
    108   bool accepted_;
    109 
    110   scoped_ptr<views::MenuRunner> context_menu_runner_;
    111 
    112   DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogViews);
    113 };
    114 
    115 #endif  // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_MEDIA_GALLERIES_DIALOG_VIEWS_H_
    116