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