/***************************************************************************
                          settingsdialog.h  -  description
                             -------------------
    begin                : Sat May 11 2002
    copyright            : (C) 2002 by Kevin Hessels
    email                : khessels@shaw.ca
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef SETTINGSDIALOG_H
#define SETTINGSDIALOG_H

#include <qobject.h>

#include <kdialogbase.h>

class ChannelWidgetImpl;
class ConfigData;
class DeviceWidgetImpl;
class GeneralWidget;
class PictureWidget;
class PluginWidgetImpl;
class QtVision;
class QTimer;
class QVSourcePlugin;

/**
  *@author Kevin Hessels
  */

class SettingsDialog : public KDialogBase
{
Q_OBJECT

public:
    enum Page
    {
        page_general = 0,
        page_device = 1,
        page_picture = 2,
        page_channels = 3,
        page_plugins = 4
    };

	SettingsDialog(QWidget *, char *, bool, ConfigData *, QtVision *qtv);
	~SettingsDialog();

    void setCurrentDevice();

signals:
    void optionsModified(ConfigData *newConfig);

    void hueChanged(int);
    void colourChanged(int);
    void brightnessChanged(int);
    void whitenessChanged(int);
    void contrastChanged(int);

protected slots:
    void slotApply();
    void slotDefault();
    void slotCancel();
    void slotOk();
    void slotHelp();

private:
    void setupGeneralPage();
    void setupDevicePage();
    void setupPicturePage();
    void setupChannelsPage();
    void setupPluginsPage();

    void setGeneralOptions(ConfigData *);
    void setDeviceOptions(ConfigData *);
    void setPictureOptions(ConfigData *);
    void setChannelOptions(ConfigData *);
    void setPluginOptions(ConfigData *);

    // for future use.
    bool checkValues();

    GeneralWidget *generalWidget;
    DeviceWidgetImpl *deviceWidgetImpl;
    PictureWidget *pictureWidget;
    ChannelWidgetImpl *channelWidgetImpl;
    PluginWidgetImpl *pluginWidgetImpl;
    bool m_inputValid;
    ConfigData *newConfig;
    QtVision *qtv;
    QTimer *_ptimer;

private slots:
    void slotHueChanged(int);
    void slotColourChanged(int);
    void slotBrightnessChanged(int);
    void slotWhitenessChanged(int);
    void slotContrastChanged(int);
    void slotDeviceChanged(QVSourcePlugin *);

    // update the picture quality sliders
    void updatePicture();
};

#endif

