blob: 0ab5bd2da4ae1b1db9ccf403d3fe9c9ac2732736 [file] [log] [blame]
// 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 <stddef.h>
#include <vector>
#include "base/macros.h"
#include "base/strings/string16.h"
#include "build/build_config.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<Entry> 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;
// The titles for different sections of entries. Empty hides the header.
virtual std::vector<base::string16> 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;
// 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_