Revision 1 (by moose, 2006/03/06 10:35:57) Initial Import
#ifndef SciQSettingsPage_H_GUARD
#define SciQSettingsPage_H_GUARD

#include <QScrollArea>
#include <QHash>
#include <QSignalMapper>
#include "SciQSettings.h"

class SciQSettingsLvItem;
class QAbstractButton;
class QButtonGroup;
class QLineEdit;
class QComboBox;
class QSpinBox;
class QAbstractSlider;
class QWidget;
class QObject;
class QGroupBox;

class Map {
	public:
		Map() : wid(0), changed(false) { }
		Map(const Map &m) { wid = m.wid; changed = m.changed; }
		Map(QObject *w) : wid(w), changed(false) { }

		Map &operator=(const Map &m) { wid = m.wid; changed = m.changed; return *this; }
		bool isChanged() { return changed; }
		void setChanged(bool c) { changed = c; }
		QObject *wid; // hacky hacky </bart>
	private:
		bool changed;
};

class SciQSettingsPage : public QScrollArea {
	Q_OBJECT

	Q_PROPERTY(bool modified READ isModified WRITE setModified)

	public:
		SciQSettingsPage(SciQSettingsLvItem *li, QWidget * parent = 0);
		virtual ~SciQSettingsPage();
		virtual bool isModified() { return modified; }
		QWidget *inner() { return frame; }

		QString objectKey(QObject *o);

		SciQSettings *qSettings() { return &qs; }

		SciQSettingsLvItem *lvi;

	public slots:
		void applySettings();
		void applySetting(const QString &l);

		void loadSettings();
		void loadSetting(const QString &l);

// commented for testing purposes
//	protected:

		void registerSetting(QAbstractButton *widget, QString name);
		void registerSetting(QGroupBox       *widget, QString name);
		void registerSetting(QButtonGroup    *widget, QString name);
		void registerSetting(QLineEdit       *widget, QString name);
		void registerSetting(QComboBox       *widget, QString name);
		void registerSetting(QSpinBox        *widget, QString name);
		void registerSetting(QAbstractSlider *widget, QString name);

	signals:
		void settingsChanged(SciQSettingsPage *page);
		void settingsApplied(SciQSettingsPage *page);
		void mapped(const QString &);

	private slots:
		virtual void setModified(bool m);
		virtual void mappedSlot(const QString &l);
		virtual void onChange() { emit settingsChanged(this); }

	private:
		bool modified;
		SciQSettings qs;
		QSignalMapper sm;
		QHash<QString, Map> widgets;
		QWidget *frame;
};

#endif /* SciQSettingsPage_H_GUARD */