15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_COCOA_EXTENSIONS_MEDIA_GALLERIES_DIALOG_COCOA_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_COCOA_EXTENSIONS_MEDIA_GALLERIES_DIALOG_COCOA_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <Cocoa/Cocoa.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_dialog_controller.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h"
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#import "chrome/browser/ui/cocoa/extensions/media_gallery_list_entry_view.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@class ConstrainedWindowAlert;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class MediaGalleriesCocoaController;
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)@class NSString;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaGalleriesDialogBrowserTest;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MediaGalleriesDialogTest;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace ui {
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MenuModel;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// This class displays an alert that can be used to manage lists of media
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// galleries.
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaGalleriesDialogCocoa : public ConstrainedWindowMacDelegate,
295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                  public MediaGalleriesDialog,
305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                  public MediaGalleryListEntryController {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleriesDialogCocoa(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MediaGalleriesDialogController* controller,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      MediaGalleriesCocoaController* delegate);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MediaGalleriesDialogCocoa();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called when the user clicks the accept button.
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnAcceptClicked();
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called when the user clicks the cancel button.
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnCancelClicked();
4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Called when the user clicks the auxiliary button.
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void OnAuxiliaryButtonClicked();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // MediaGalleriesDialog implementation:
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void UpdateGalleries() OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // ConstrainedWindowMacDelegate implementation.
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnConstrainedWindowClosed(
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ConstrainedWindowMac* window) OVERRIDE;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // MediaGalleryListEntryController implementation.
5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnCheckboxToggled(MediaGalleryPrefId pref_id,
535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                 bool checked) OVERRIDE;
5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnFolderViewerClicked(MediaGalleryPrefId prefId) OVERRIDE;
5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ui::MenuModel* GetContextMenu(MediaGalleryPrefId pref_id) OVERRIDE;
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogBrowserTest, Close);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, InitializeCheckboxes);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ToggleCheckboxes);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, UpdateAdds);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ForgetDeletes);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // MediaGalleriesDialog implementation:
6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void AcceptDialogForTesting() OVERRIDE;
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void InitDialogControls();
680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  CGFloat CreateCheckboxes(
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      CGFloat y_pos,
7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      const MediaGalleriesDialogController::Entries& entries);
7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  CGFloat CreateCheckboxSeparator(CGFloat y_pos, NSString* header);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MediaGalleriesDialogController* controller_;  // weak
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ConstrainedWindowMac> window_;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The alert that the dialog is being displayed as.
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<ConstrainedWindowAlert> alert_;
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if the user has pressed accept.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool accepted_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Container view for checkboxes.
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<NSView> checkbox_container_;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Container view for the main dialog contents.
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::scoped_nsobject<NSBox> main_container_;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // An Objective-C class to route callbacks from Cocoa code.
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<MediaGalleriesCocoaController> cocoa_controller_;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogCocoa);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_COCOA_EXTENSIONS_MEDIA_GALLERIES_DIALOG_COCOA_H_
95