// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_DIALOG_CONTROLLER_H_ #define CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_DIALOG_CONTROLLER_H_ #include #include "base/strings/string16.h" #include "chrome/browser/media_galleries/media_galleries_preferences.h" namespace content { class WebContents; } namespace ui { class MenuModel; } class MediaGalleriesDialogController; // The view. class MediaGalleriesDialog { public: virtual ~MediaGalleriesDialog(); // Tell the dialog to update its display list of galleries. virtual void UpdateGalleries() = 0; // Constructs a platform-specific dialog owned and controlled by |controller|. static MediaGalleriesDialog* Create( MediaGalleriesDialogController* controller); private: friend class TestMediaGalleriesAddScanResultsFunction; virtual void AcceptDialogForTesting() = 0; }; // Multiple dialog controllers are based on this interface. // Implementations of this controller interface are responsible for handling // the logic of the dialog and interfacing with the model (i.e., // MediaGalleriesPreferences). It shows the dialog and owns itself. class MediaGalleriesDialogController { public: struct Entry { Entry(const MediaGalleryPrefInfo& pref_info, bool selected) : pref_info(pref_info), selected(selected) { } Entry() {} MediaGalleryPrefInfo pref_info; bool selected; }; typedef std::vector Entries; // The title of the dialog view. virtual base::string16 GetHeader() const = 0; // Explanatory text directly below the title. virtual base::string16 GetSubtext() const = 0; // Initial state of whether the dialog's confirmation button will be enabled. virtual bool IsAcceptAllowed() const = 0; // Should the dialog present UI for the user to view the entry contents. virtual bool ShouldShowFolderViewer(const Entry& entry) const = 0; // The titles for different sections of entries. Empty hides the header. virtual std::vector GetSectionHeaders() const = 0; // Get the set of permissions for the |index|th section. The size of the // vector returned from GetSectionHeaders() defines the number of sections. virtual Entries GetSectionEntries(size_t index) const = 0; // The text for an auxiliary button. Empty hides the button. virtual base::string16 GetAuxiliaryButtonText() const = 0; // Called when an auxiliary button is clicked. virtual void DidClickAuxiliaryButton() = 0; // An entry checkbox was toggled. virtual void DidToggleEntry(MediaGalleryPrefId id, bool selected) = 0; // A folder viewer button was clicked for one of the entries. virtual void DidClickOpenFolderViewer(MediaGalleryPrefId id) = 0; // The forget command in the context menu was selected. virtual void DidForgetEntry(MediaGalleryPrefId id) = 0; // The text for the accept button. virtual base::string16 GetAcceptButtonText() const = 0; // The dialog is being deleted. virtual void DialogFinished(bool accepted) = 0; virtual ui::MenuModel* GetContextMenu(MediaGalleryPrefId id) = 0; virtual content::WebContents* WebContents() = 0; protected: MediaGalleriesDialogController(); virtual ~MediaGalleriesDialogController(); DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogController); }; #endif // CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_DIALOG_CONTROLLER_H_