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_COCOA_EXTENSIONS_MEDIA_GALLERIES_DIALOG_COCOA_H_
6#define CHROME_BROWSER_UI_COCOA_EXTENSIONS_MEDIA_GALLERIES_DIALOG_COCOA_H_
7
8#import <Cocoa/Cocoa.h>
9
10#include "base/gtest_prod_util.h"
11#include "chrome/browser/media_galleries/media_galleries_dialog_controller.h"
12#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h"
13#import "chrome/browser/ui/cocoa/extensions/media_gallery_list_entry_view.h"
14
15@class ConstrainedWindowAlert;
16@class MediaGalleriesCocoaController;
17@class NSString;
18
19class MediaGalleriesDialogBrowserTest;
20class MediaGalleriesDialogTest;
21
22namespace ui {
23class MenuModel;
24}
25
26// This class displays an alert that can be used to manage lists of media
27// galleries.
28class MediaGalleriesDialogCocoa : public ConstrainedWindowMacDelegate,
29                                  public MediaGalleriesDialog,
30                                  public MediaGalleryListEntryController {
31 public:
32  MediaGalleriesDialogCocoa(
33      MediaGalleriesDialogController* controller,
34      MediaGalleriesCocoaController* delegate);
35  virtual ~MediaGalleriesDialogCocoa();
36
37  // Called when the user clicks the accept button.
38  void OnAcceptClicked();
39  // Called when the user clicks the cancel button.
40  void OnCancelClicked();
41  // Called when the user clicks the auxiliary button.
42  void OnAuxiliaryButtonClicked();
43
44  // MediaGalleriesDialog implementation:
45  virtual void UpdateGalleries() OVERRIDE;
46
47  // ConstrainedWindowMacDelegate implementation.
48  virtual void OnConstrainedWindowClosed(
49      ConstrainedWindowMac* window) OVERRIDE;
50
51  // MediaGalleryListEntryController implementation.
52  virtual void OnCheckboxToggled(MediaGalleryPrefId pref_id,
53                                 bool checked) OVERRIDE;
54  virtual void OnFolderViewerClicked(MediaGalleryPrefId prefId) OVERRIDE;
55  virtual ui::MenuModel* GetContextMenu(MediaGalleryPrefId pref_id) OVERRIDE;
56
57 private:
58  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogBrowserTest, Close);
59  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, InitializeCheckboxes);
60  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ToggleCheckboxes);
61  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, UpdateAdds);
62  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ForgetDeletes);
63
64  // MediaGalleriesDialog implementation:
65  virtual void AcceptDialogForTesting() OVERRIDE;
66
67  void InitDialogControls();
68  CGFloat CreateCheckboxes(
69      CGFloat y_pos,
70      const MediaGalleriesDialogController::Entries& entries);
71  CGFloat CreateCheckboxSeparator(CGFloat y_pos, NSString* header);
72
73  MediaGalleriesDialogController* controller_;  // weak
74  scoped_ptr<ConstrainedWindowMac> window_;
75
76  // The alert that the dialog is being displayed as.
77  base::scoped_nsobject<ConstrainedWindowAlert> alert_;
78
79  // True if the user has pressed accept.
80  bool accepted_;
81
82  // Container view for checkboxes.
83  base::scoped_nsobject<NSView> checkbox_container_;
84
85  // Container view for the main dialog contents.
86  base::scoped_nsobject<NSBox> main_container_;
87
88  // An Objective-C class to route callbacks from Cocoa code.
89  base::scoped_nsobject<MediaGalleriesCocoaController> cocoa_controller_;
90
91  DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogCocoa);
92};
93
94#endif  // CHROME_BROWSER_UI_COCOA_EXTENSIONS_MEDIA_GALLERIES_DIALOG_COCOA_H_
95