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