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