00001
00002
00003 #include "mythconfigdialogs.h"
00004 #include "mythwizard.h"
00005
00006 #include "mythuihelper.h"
00007
00008 #include <QWidget>
00009 #include <QHBoxLayout>
00010
00011 static void clear_widgets(vector<Configurable*> &children,
00012 vector<QWidget*> &childwidget)
00013 {
00014 for (uint i = 0; (i < childwidget.size()) && (i < children.size()); i++)
00015 {
00016 if (children[i] && childwidget[i])
00017 children[i]->widgetInvalid(childwidget[i]);
00018 }
00019 childwidget.clear();
00020 }
00021
00022 void ConfigurationDialogWidget::keyPressEvent(QKeyEvent* e)
00023 {
00024 bool handled = false;
00025 QStringList actions;
00026
00027 handled = GetMythMainWindow()->TranslateKeyPress("qt", e, actions);
00028
00029 for (int i = 0; i < actions.size() && !handled; i++)
00030 {
00031 const QString &action = actions[i];
00032 handled = true;
00033
00034 if (action == "SELECT")
00035 accept();
00036 else if (action == "ESCAPE")
00037 reject();
00038 else if (action == "EDIT")
00039 emit editButtonPressed();
00040 else if (action == "DELETE")
00041 emit deleteButtonPressed();
00042 else
00043 handled = false;
00044 }
00045
00046 if (!handled)
00047 MythDialog::keyPressEvent(e);
00048 }
00049
00050 ConfigurationDialog::~ConfigurationDialog()
00051 {
00052 clear_widgets(cfgChildren, childwidget);
00053 cfgGrp->deleteLater();
00054 }
00055
00056 MythDialog* ConfigurationDialog::dialogWidget(MythMainWindow *parent,
00057 const char *widgetName)
00058 {
00059 dialog = new ConfigurationDialogWidget(parent, widgetName);
00060
00061 float wmult = 0, hmult = 0;
00062
00063 GetMythUI()->GetScreenSettings(wmult, hmult);
00064
00065 QVBoxLayout *layout = new QVBoxLayout(dialog);
00066 layout->setSpacing((int)(20 * hmult));
00067
00068 ChildList::iterator it = cfgChildren.begin();
00069 childwidget.clear();
00070 childwidget.resize(cfgChildren.size());
00071 for (uint i = 0; it != cfgChildren.end(); ++it, ++i)
00072 {
00073 if ((*it)->isVisible())
00074 {
00075 childwidget[i] = (*it)->configWidget(cfgGrp, dialog);
00076 layout->addWidget(childwidget[i]);
00077 }
00078 }
00079
00080 return dialog;
00081 }
00082
00083 DialogCode ConfigurationDialog::exec(bool saveOnAccept, bool doLoad)
00084 {
00085 if (doLoad)
00086 Load();
00087
00088 MythDialog *dialog = dialogWidget(
00089 GetMythMainWindow(), "Configuration Dialog");
00090
00091 dialog->Show();
00092
00093 DialogCode ret = dialog->exec();
00094
00095 if ((QDialog::Accepted == ret) && saveOnAccept)
00096 Save();
00097
00098 clear_widgets(cfgChildren, childwidget);
00099
00100 dialog->deleteLater();
00101 dialog = NULL;
00102
00103 return ret;
00104 }
00105
00106 void ConfigurationDialog::addChild(Configurable *child)
00107 {
00108 cfgChildren.push_back(child);
00109 cfgGrp->addChild(child);
00110 }
00111
00112 void ConfigurationDialog::setLabel(const QString &label)
00113 {
00114 if (label.isEmpty())
00115 {
00116 cfgGrp->setUseLabel(false);
00117 cfgGrp->setLabel("");
00118 }
00119 else
00120 {
00121 cfgGrp->setLabel(label);
00122 cfgGrp->setUseLabel(true);
00123 cfgGrp->setUseFrame(true);
00124 }
00125 }
00126
00127 MythDialog *ConfigurationWizard::dialogWidget(MythMainWindow *parent,
00128 const char *widgetName)
00129 {
00130 MythWizard *wizard = new MythWizard(parent, widgetName);
00131 dialog = wizard;
00132
00133 QObject::connect(cfgGrp, SIGNAL(changeHelpText(QString)),
00134 wizard, SLOT( setHelpText( QString)));
00135
00136 QWidget *child = NULL;
00137 ChildList::iterator it = cfgChildren.begin();
00138 for (; it != cfgChildren.end(); ++it)
00139 {
00140 if (!(*it)->isVisible())
00141 continue;
00142
00143 child = (*it)->configWidget(cfgGrp, parent);
00144 wizard->addPage(child, (*it)->getLabel());
00145 }
00146
00147 if (child)
00148 wizard->setFinishEnabled(child, true);
00149
00150 return wizard;
00151 }
00152
00153 TerminalWizard::TerminalWizard(QString program, QStringList args) :
00154 terminal(new MythTerminal(program, args))
00155 {
00156 addChild(terminal);
00157 }
00158
00159 DialogCode TerminalWizard::exec(bool saveOnExec, bool doLoad)
00160 {
00161 terminal->Start();
00162 return ConfigurationWizard::exec(saveOnExec, doLoad);
00163 }