/*  This file is part of the KDE project
    Copyright (C) 2007 Matthias Kretz <kretz@kde.org>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.

*/

#ifndef PHONON_MIXERCONTROLSET_H
#define PHONON_MIXERCONTROLSET_H

#include <QtGui/QIcon>
#include "phonon_mixer_export.h"

namespace Phonon
{
namespace Mixer
{

class Mixer;
class MixerControl;
class MixerControlSetPrivate;
class MixerToggleControl;
class MixerIntegerControl;
class MixerEnumControl;
class PHONON_MIXER_EXPORT MixerControlSet
{
    friend class Mixer;
    friend class MixerSharedData;
    Q_DECLARE_PRIVATE(MixerControlSet)
    public:
        MixerControlSet(); // invalid
        MixerControlSet(const Mixer &mixer, const QString &name, const QIcon &icon = QIcon());
        ~MixerControlSet();

        MixerControlSet(const MixerControlSet &);
        MixerControlSet &operator=(const MixerControlSet &);
        bool operator==(const MixerControlSet &) const;
        inline bool operator!=(const MixerControlSet &rhs) const { return !operator==(rhs); }

        bool isValid() const;

        QString name() const;
        QIcon icon() const;

        QList<MixerControl> allControls() const;
        QList<MixerToggleControl> toggleControls() const;
        QList<MixerIntegerControl> integerControls() const;
        QList<MixerEnumControl> enumControls() const;

    protected:
        MixerControlSetPrivate *const d_ptr;
        //MixerControlSet(MixerControlSetPrivate &dd);
};

} // namespace Mixer
} // namespace Phonon
#endif // PHONON_MIXERCONTROLSET_H
