00001
00002
00003 #ifndef MYTH_CONFIG_GROUPS_H
00004 #define MYTH_CONFIG_GROUPS_H
00005
00006 #include <QVBoxLayout>
00007 #include <QGroupBox>
00008
00009
00010 #include "mythexp.h"
00011 #include "mythstorage.h"
00012
00013 #define MYTHCONFIG
00014 #include "settings.h"
00015 #undef MYTHCONFIG
00016
00017 class QStackedWidget;
00018
00019 class MPUBLIC ConfigurationGroup : public Setting, public Storage
00020 {
00021 Q_OBJECT
00022
00023 public:
00024 ConfigurationGroup(bool luselabel = true, bool luseframe = true,
00025 bool lzeroMargin = false, bool lzeroSpace = false);
00026
00027 virtual void deleteLater(void);
00028
00029 void addChild(Configurable *child)
00030 {
00031 children.push_back(child);
00032 };
00033
00034 virtual Setting *byName(const QString &name);
00035
00036 void setUseLabel(bool useit) { uselabel = useit; }
00037 void setUseFrame(bool useit) { useframe = useit; }
00038
00039 void setOptions(bool luselabel = true, bool luseframe = true,
00040 bool lzeroMargin = false, bool lzeroSpace = false)
00041 {
00042 uselabel = luselabel; useframe = luseframe;
00043 zeroMargin = lzeroMargin; zeroSpace = lzeroSpace;
00044 }
00045
00046
00047 virtual void Load(void);
00048 virtual void Save(void);
00049 virtual void Save(QString destination);
00050 virtual void SetSaveRequired(void);
00051
00052 signals:
00053 void changeHelpText(QString);
00054
00055 protected:
00056 virtual ~ConfigurationGroup();
00057
00058 protected:
00059 typedef vector<Configurable*> childList;
00060 childList children;
00061 bool uselabel;
00062 bool useframe;
00063 bool zeroMargin;
00064 bool zeroSpace;
00065 int margin;
00066 int space;
00067 };
00068
00069 class MPUBLIC VerticalConfigurationGroup : public ConfigurationGroup
00070 {
00071 public:
00072 VerticalConfigurationGroup(
00073 bool luselabel = true, bool luseframe = true,
00074 bool lzeroMargin = false, bool lzeroSpace = false) :
00075 ConfigurationGroup(luselabel, luseframe, lzeroMargin, lzeroSpace),
00076 widget(NULL), confgrp(NULL), layout(NULL)
00077 {
00078 }
00079
00080 virtual void deleteLater(void);
00081
00082 virtual QWidget *configWidget(ConfigurationGroup *cg,
00083 QWidget *parent,
00084 const char *widgetName);
00085 virtual void widgetInvalid(QObject *obj);
00086
00087 bool replaceChild(Configurable *old_child, Configurable *new_child);
00088 void repaint(void);
00089
00090 protected:
00092 virtual ~VerticalConfigurationGroup() { }
00093
00094 private:
00095 vector<QWidget*> childwidget;
00096 QGroupBox *widget;
00097 ConfigurationGroup *confgrp;
00098 QVBoxLayout *layout;
00099 };
00100
00101 class MPUBLIC HorizontalConfigurationGroup : public ConfigurationGroup
00102 {
00103 public:
00104 HorizontalConfigurationGroup(
00105 bool luselabel = true, bool luseframe = true,
00106 bool lzeroMargin = false, bool lzeroSpace = false) :
00107 ConfigurationGroup(luselabel, luseframe, lzeroMargin, lzeroSpace)
00108 {
00109 }
00110
00111 virtual QWidget *configWidget(ConfigurationGroup *cg,
00112 QWidget *parent,
00113 const char *widgetName);
00114
00115 protected:
00117 virtual ~HorizontalConfigurationGroup() { }
00118 };
00119
00120 class MPUBLIC GridConfigurationGroup : public ConfigurationGroup
00121 {
00122 public:
00123 GridConfigurationGroup(uint col,
00124 bool uselabel = true, bool useframe = true,
00125 bool zeroMargin = false, bool zeroSpace = false) :
00126 ConfigurationGroup(uselabel, useframe, zeroMargin, zeroSpace),
00127 columns(col)
00128 {
00129 }
00130
00131 virtual QWidget *configWidget(ConfigurationGroup *cg,
00132 QWidget *parent,
00133 const char *widgetName);
00134
00135 protected:
00137 virtual ~GridConfigurationGroup() { }
00138
00139 private:
00140 uint columns;
00141 };
00142
00143 class MPUBLIC StackedConfigurationGroup : public ConfigurationGroup
00144 {
00145 Q_OBJECT
00146
00147 public:
00148 StackedConfigurationGroup(
00149 bool uselabel = true, bool useframe = true,
00150 bool zeroMargin = false, bool zeroSpace = false) :
00151 ConfigurationGroup(uselabel, useframe, zeroMargin, zeroSpace),
00152 widget(NULL), confgrp(NULL), top(0), saveAll(true)
00153 {
00154 }
00155
00156 virtual void deleteLater(void);
00157
00158 virtual QWidget *configWidget(ConfigurationGroup *cg, QWidget *parent,
00159 const char *widgetName = 0);
00160
00161 void raise(Configurable *child);
00162 virtual void Save(void);
00163 virtual void Save(QString destination);
00164
00165
00166 void setSaveAll(bool b) { saveAll = b; };
00167
00168 void addChild(Configurable*);
00169 void removeChild(Configurable*);
00170
00171 public slots:
00172 virtual void widgetInvalid(QObject *obj);
00173
00174 protected:
00176 virtual ~StackedConfigurationGroup();
00177
00178 protected:
00179 vector<QWidget*> childwidget;
00180 QStackedWidget *widget;
00181 ConfigurationGroup *confgrp;
00182 uint top;
00183 bool saveAll;
00184 };
00185
00186 class MPUBLIC TriggeredConfigurationGroup : public ConfigurationGroup
00187 {
00188 Q_OBJECT
00189
00190 public:
00191 TriggeredConfigurationGroup(
00192 bool uselabel = true, bool useframe = true,
00193 bool zeroMargin = false, bool zeroSpace = false,
00194 bool stack_uselabel = true, bool stack_useframe = true,
00195 bool stack_zeroMargin = false, bool stack_zeroSpace = false) :
00196 ConfigurationGroup(uselabel, useframe, zeroMargin, zeroSpace),
00197 stackUseLabel(stack_uselabel), stackUseFrame(stack_useframe),
00198 stackZeroMargin(stack_zeroMargin), stackZeroSpace(stack_zeroSpace),
00199 isVertical(true), isSaveAll(true),
00200 configLayout(NULL), configStack(NULL),
00201 trigger(NULL), widget(NULL)
00202 {
00203 }
00204
00205
00206
00207 virtual void addChild(Configurable *child);
00208
00209 void addTarget(QString triggerValue, Configurable *target);
00210 void removeTarget(QString triggerValue);
00211
00212 virtual QWidget *configWidget(ConfigurationGroup *cg,
00213 QWidget *parent,
00214 const char *widgetName);
00215 virtual void widgetInvalid(QObject *obj);
00216
00217 virtual Setting *byName(const QString &settingName);
00218
00219 virtual void Load(void);
00220 virtual void Save(void);
00221 virtual void Save(QString destination);
00222
00223 void repaint(void);
00224
00225
00226
00227 void SetVertical(bool vert);
00228
00229 virtual void setSaveAll(bool b)
00230 {
00231 if (configStack)
00232 configStack->setSaveAll(b);
00233 isSaveAll = b;
00234 }
00235
00236 void setTrigger(Configurable *_trigger);
00237
00238 protected slots:
00239 virtual void triggerChanged(const QString &value);
00240
00241 protected:
00243 virtual ~TriggeredConfigurationGroup() { }
00244 void VerifyLayout(void);
00245
00246 protected:
00247 bool stackUseLabel;
00248 bool stackUseFrame;
00249 bool stackZeroMargin;
00250 bool stackZeroSpace;
00251 bool isVertical;
00252 bool isSaveAll;
00253 ConfigurationGroup *configLayout;
00254 StackedConfigurationGroup *configStack;
00255 Configurable *trigger;
00256 QMap<QString,Configurable*> triggerMap;
00257 QWidget *widget;
00258 };
00259
00260 class MPUBLIC JumpPane : public VerticalConfigurationGroup
00261 {
00262 Q_OBJECT
00263
00264 public:
00265 JumpPane(const QStringList &labels, const QStringList &helptext);
00266
00267 signals:
00268 void pressed(QString);
00269 };
00270
00271 #endif // MYTH_CONFIG_GROUPS_H