146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_DIALOG_CONTROLLER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_DIALOG_CONTROLLER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <vector> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_preferences.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebContents; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace ui { 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class MenuModel; 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaGalleriesDialogController; 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The view. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaGalleriesDialog { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MediaGalleriesDialog(); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Tell the dialog to update its display list of galleries. 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void UpdateGalleries() = 0; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Constructs a platform-specific dialog owned and controlled by |controller|. 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static MediaGalleriesDialog* Create( 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesDialogController* controller); 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend class TestMediaGalleriesAddScanResultsFunction; 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void AcceptDialogForTesting() = 0; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Multiple dialog controllers are based on this interface. 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Implementations of this controller interface are responsible for handling 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// the logic of the dialog and interfacing with the model (i.e., 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// MediaGalleriesPreferences). It shows the dialog and owns itself. 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class MediaGalleriesDialogController { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) struct Entry { 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Entry(const MediaGalleryPrefInfo& pref_info, bool selected) 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : pref_info(pref_info), 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) selected(selected) { 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Entry() {} 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo pref_info; 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool selected; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef std::vector<Entry> Entries; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The title of the dialog view. 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual base::string16 GetHeader() const = 0; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Explanatory text directly below the title. 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual base::string16 GetSubtext() const = 0; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initial state of whether the dialog's confirmation button will be enabled. 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool IsAcceptAllowed() const = 0; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Should the dialog present UI for the user to view the entry contents. 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool ShouldShowFolderViewer(const Entry& entry) const = 0; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The titles for different sections of entries. Empty hides the header. 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual std::vector<base::string16> GetSectionHeaders() const = 0; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Get the set of permissions for the |index|th section. The size of the 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // vector returned from GetSectionHeaders() defines the number of sections. 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual Entries GetSectionEntries(size_t index) const = 0; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The text for an auxiliary button. Empty hides the button. 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual base::string16 GetAuxiliaryButtonText() const = 0; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Called when an auxiliary button is clicked. 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void DidClickAuxiliaryButton() = 0; 830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // An entry checkbox was toggled. 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void DidToggleEntry(MediaGalleryPrefId id, bool selected) = 0; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // A folder viewer button was clicked for one of the entries. 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void DidClickOpenFolderViewer(MediaGalleryPrefId id) = 0; 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The forget command in the context menu was selected. 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void DidForgetEntry(MediaGalleryPrefId id) = 0; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The text for the accept button. 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual base::string16 GetAcceptButtonText() const = 0; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The dialog is being deleted. 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void DialogFinished(bool accepted) = 0; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ui::MenuModel* GetContextMenu(MediaGalleryPrefId id) = 0; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual content::WebContents* WebContents() = 0; 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesDialogController(); 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~MediaGalleriesDialogController(); 1061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogController); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_DIALOG_CONTROLLER_H_ 111