Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / extensions / media_galleries_dialog_views.h
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_