summaryrefslogtreecommitdiffstats
path: root/abs/core/mythinstall
diff options
context:
space:
mode:
authorCecil Hugh Watson <knoppmyth@gmail.com>2009-09-26 01:57:08 (GMT)
committerCecil Hugh Watson <knoppmyth@gmail.com>2009-09-26 01:57:08 (GMT)
commit7b29169fff9e7c624890c5edffe85def8a293136 (patch)
tree47753889faa3a2063b66d1c7e7681e703eb1b39a /abs/core/mythinstall
parentc491dea779dac29afff3578bf8245943817c2339 (diff)
downloadlinhes_pkgbuild-7b29169fff9e7c624890c5edffe85def8a293136.zip
linhes_pkgbuild-7b29169fff9e7c624890c5edffe85def8a293136.tar.gz
linhes_pkgbuild-7b29169fff9e7c624890c5edffe85def8a293136.tar.bz2
LinHES 6.01.00
Diffstat (limited to 'abs/core/mythinstall')
-rw-r--r--abs/core/mythinstall/PKGBUILD49
-rwxr-xr-xabs/core/mythinstall/autocard.cpp186
-rwxr-xr-xabs/core/mythinstall/autocard.h30
-rwxr-xr-xabs/core/mythinstall/infrared.cpp368
-rwxr-xr-xabs/core/mythinstall/infrared.h45
-rwxr-xr-xabs/core/mythinstall/install-ui.xml175
-rwxr-xr-xabs/core/mythinstall/install_proxy.sh353
-rwxr-xr-xabs/core/mythinstall/installationtype.cpp272
-rwxr-xr-xabs/core/mythinstall/installationtype.h11
-rwxr-xr-xabs/core/mythinstall/installdialog.cpp1034
-rwxr-xr-xabs/core/mythinstall/installdialog.h101
-rwxr-xr-xabs/core/mythinstall/installsettings.cpp4556
-rwxr-xr-xabs/core/mythinstall/installsettings.h489
-rwxr-xr-xabs/core/mythinstall/main.cpp533
-rwxr-xr-xabs/core/mythinstall/misc_settings.cpp621
-rwxr-xr-xabs/core/mythinstall/misc_settings.h97
-rwxr-xr-xabs/core/mythinstall/mv_common.h4
-rwxr-xr-xabs/core/mythinstall/mythinstall.pro46
-rwxr-xr-xabs/core/mythinstall/password_manage.cpp445
-rwxr-xr-xabs/core/mythinstall/password_manage.h60
-rwxr-xr-xabs/core/mythinstall/settemplate.cpp419
-rwxr-xr-xabs/core/mythinstall/settemplate.h13
-rwxr-xr-xabs/core/mythinstall/statusbox.cpp1411
-rwxr-xr-xabs/core/mythinstall/statusbox.h76
-rwxr-xr-xabs/core/mythinstall/xorgsettings.cpp686
-rwxr-xr-xabs/core/mythinstall/xorgsettings.h178
26 files changed, 12258 insertions, 0 deletions
diff --git a/abs/core/mythinstall/PKGBUILD b/abs/core/mythinstall/PKGBUILD
new file mode 100644
index 0000000..bd58a19
--- /dev/null
+++ b/abs/core/mythinstall/PKGBUILD
@@ -0,0 +1,49 @@
+# Maintainer: Jams
+pkgname=mythinstall
+pkgver=1
+pkgrel=13
+pkgdesc="LinHES installer/systemconfig GUI."
+arch=i686
+depends=()
+makedepends=(mythtv)
+
+source=(autocard.cpp
+ autocard.h
+ infrared.cpp
+ infrared.h
+ installationtype.cpp
+ installationtype.h
+ installdialog.cpp
+ installdialog.h
+ installsettings.cpp
+ installsettings.h
+ main.cpp
+ misc_settings.cpp
+ misc_settings.h
+ mv_common.h
+ mythinstall.pro
+ password_manage.cpp
+ password_manage.h
+ settemplate.cpp
+ settemplate.h
+ statusbox.cpp
+ statusbox.h
+ xorgsettings.cpp
+ xorgsettings.h)
+
+build() {
+
+# It is assumed that you have built the mythtv package in the same
+# LinHES-PKGBUILD area.
+
+ cd ${srcdir}
+ qmake mythinstall.pro || return 1
+ make || return 1
+ MVBINDIR=$startdir/pkg/usr/MythVantage/bin
+ mkdir -p $MVBINDIR
+ install -m 0755 mythinstall $MVBINDIR/MythVantage
+ cd $MVBINDIR
+ ln -s MythVantage mythvantage
+ ln -s MythVantage mythinstall
+ cd -
+}
diff --git a/abs/core/mythinstall/autocard.cpp b/abs/core/mythinstall/autocard.cpp
new file mode 100755
index 0000000..585fba7
--- /dev/null
+++ b/abs/core/mythinstall/autocard.cpp
@@ -0,0 +1,186 @@
+#include "libmyth/mythcontext.h"
+#include "libmyth/mythdbcon.h"
+#include <qsqldatabase.h>
+#include <qheader.h>
+#include <qcursor.h>
+#include <qlayout.h>
+#include <iostream>
+#include "autocard.h"
+#include <stdlib.h>
+#include <cstdlib>
+
+AutoCard::AutoCard(void) :
+ listbox(new ListBoxSetting(this))
+{
+ listbox->setLabel(tr("Cards"));
+ addChild(listbox);
+}
+void AutoCard::popup_menu(void)
+{
+ QString name = listbox->getValue();
+// cout << "in popup" << name << endl;
+ QString uniqid = name.section(' ', -1);
+ QString description = name.section('*',-3,-3);
+ description = description.section('.',1);
+ description = description.stripWhiteSpace();
+// cout << uniqid << endl;
+// cout << "descriptn" << endl;
+// cout << description << endl;
+ if (name.isEmpty() || name == "Default")
+ return;
+
+ QString message = tr("Cardme:") +
+ QString("\n'%1'?").arg(name);
+
+ DialogCode value = MythPopupBox::Show2ButtonPopup(gContext->GetMainWindow(),
+ "", message,
+ tr("Add Card"),
+ tr("Do not Add"), kDialogCodeButton0);
+
+ if ( value == kDialogCodeButton1)
+ {
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("update autocard set devicestatus ='unused' where uniqid=:UNIQID and description=:DESCRIPTION;");
+ query.bindValue(":UNIQID",uniqid );
+ query.bindValue(":DESCRIPTION",description );
+ if (!query.exec())
+ MythContext::DBError("Autocard::popup", query);
+
+ int lastIndex = listbox->getValueIndex(name);
+ lastValue = "";
+ load();
+ listbox->setValue(lastIndex);
+ }
+ else if (value == kDialogCodeButton0)
+ {
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("update autocard set devicestatus ='will-add' where uniqid=:UNIQID and description=:DESCRIPTION;");
+ query.bindValue(":UNIQID",uniqid );
+ query.bindValue(":DESCRIPTION",description );
+
+
+ if (!query.exec())
+ MythContext::DBError("Autocard::popup", query);
+
+ int lastIndex = listbox->getValueIndex(name);
+ lastValue = "";
+ load();
+ listbox->setValue(lastIndex);
+
+
+
+
+ }
+
+
+ listbox->setFocus();
+}
+
+
+
+QStringList AutoCard::GetNames(void)
+{
+ QStringList names;
+ QString device;
+ QString description;
+ QString displayname ;
+ QString status ;
+ QString uniqid;
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("SELECT dev,description,uniqid,devicestatus FROM autocard order by uniqid");
+ if (query.exec() && query.isActive() && query.size() > 0)
+ {
+ while (query.next())
+ {
+ device=query.value(0).toString();
+ description=query.value(1).toString();
+ uniqid=query.value(2).toString();
+ status=query.value(3).toString();
+ //displayname=device;
+ displayname=". ";
+ displayname.append(description);
+ displayname.append(" * ");
+ displayname.append(status);
+ displayname.append(" * ");
+
+ displayname.append(uniqid);
+ names << displayname ;
+ }
+
+ return names;
+ }
+}
+
+void AutoCard::open(QString name)
+{
+ lastValue = name;
+ bool created = false;
+ cout << name << endl;
+ if (name == "Mark all cards for addition")
+ {
+ cout <<"updating all cards" << endl;
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("update autocard set devicestatus='will-add' where devicestatus='unused' order by uniqid");
+ query.exec();
+ }
+ else if ( name == "Perform actions" )
+ {
+ // write udev rules and reload udev
+
+ system ("sudo autocard.py -w -i");
+ system ("sudo autocard.py -r");
+
+ }
+ else if ( name == "Exit" )
+ {
+ // write udev rules and reload udev
+ exit(0);
+ }
+ else
+ {
+ popup_menu();
+// bool ok = MythPopupBox::showGetTextPopup(gContext->GetMainWindow(),
+// tr("Create New Playback Group"),
+// tr("Enter group name or press SELECT to enter text via the "
+// "On Screen Keyboard"), name);
+
+
+ }
+
+};
+
+void AutoCard::load(void)
+{
+ listbox->clearSelections();
+
+
+ QStringList names = AutoCard::GetNames();
+ while (!names.isEmpty())
+ {
+ listbox->addSelection(names.front());
+ names.pop_front();
+ }
+ listbox->addSelection("Mark all cards for addition");
+ listbox->addSelection("Perform actions");
+ listbox->addSelection("Exit");
+ listbox->setValue(lastValue);
+
+}
+
+
+int AutoCard::exec(void)
+{
+ while (ConfigurationDialog::exec() == QDialog::Accepted)
+ open(listbox->getValue());
+
+ return QDialog::Rejected;
+}
+
+
+MythDialog* AutoCard::dialogWidget(MythMainWindow* parent,
+ const char* widgetName)
+{
+ dialog = ConfigurationDialog::dialogWidget(parent, widgetName);
+ connect(dialog, SIGNAL(menuButtonPressed()), this, SLOT(popup_menu()));
+ return dialog;
+}
diff --git a/abs/core/mythinstall/autocard.h b/abs/core/mythinstall/autocard.h
new file mode 100755
index 0000000..623fcc0
--- /dev/null
+++ b/abs/core/mythinstall/autocard.h
@@ -0,0 +1,30 @@
+#ifndef AUTOCARD_H
+#define AUTOCARD_H
+
+#include "qstringlist.h"
+#include "libmyth/settings.h"
+#include "libmyth/mythwidgets.h"
+
+class MPUBLIC AutoCard : public QObject, public ConfigurationDialog
+{
+ Q_OBJECT
+
+ public:
+ AutoCard();
+ virtual int exec(void);
+ virtual void load(void);
+ virtual void save(void) { };
+ virtual void save(QString) { };
+ virtual MythDialog* dialogWidget(MythMainWindow* parent,
+ const char* widgetName=0);
+ static QStringList GetNames(void);
+ protected slots:
+ void open(QString name);
+ void popup_menu(void);
+
+ protected:
+ ListBoxSetting *listbox;
+ QString lastValue;
+};
+
+#endif
diff --git a/abs/core/mythinstall/infrared.cpp b/abs/core/mythinstall/infrared.cpp
new file mode 100755
index 0000000..2f56ae5
--- /dev/null
+++ b/abs/core/mythinstall/infrared.cpp
@@ -0,0 +1,368 @@
+#include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include <stdlib.h>
+#include <cstdlib>
+#include "misc_settings.h"
+#include "infrared.h"
+#include "mv_common.h"
+#include "uitypes.h"
+
+extern HostParms hostparm;
+
+
+HostRemoteTypeIR::HostRemoteTypeIR():
+ HostImageSelect("HostRemoteType") {
+ setLabel(QObject::tr("Remote"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/remotes");
+ QDir remotes(dirtxt);
+ remotes.setFilter(QDir::Dirs);
+ remotes.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *fil = remotes.entryInfoList(QDir::Dirs);
+ if (!fil)
+ return;
+ QFileInfoListIterator it( *fil );
+ QFileInfo *remote;
+ for( ; it.current() != 0 ; ++it )
+ {
+ remote = it.current();
+ QFileInfo preview(remote->absFilePath() + "/preview.jpg");
+ if (remote->fileName()[0] == '.' || !preview.exists() )
+ {
+ VERBOSE(VB_IMPORTANT, remote->absFilePath() + "Can't find preivew image, doesn't look like a remote\n");
+ continue;
+ }
+ QImage* previewImage = new QImage(preview.absFilePath());
+ addImageSelection(remote->fileName(), previewImage);
+ }
+};
+
+static HostComboBox *HostReceiverType()
+{
+ HostComboBox *gc = new HostComboBox("HostReceiverType");
+ gc->setLabel(QObject::tr("Receiver"));
+ gc->addSelection("Default");
+ gc->addSelection("tinker");
+ gc->addSelection("Serial");
+ gc->addSelection("imon");
+ gc->addSelection("Hauppauge");
+ gc->addSelection("tinker");
+ gc->addSelection("CommandIR");
+ gc->addSelection("iguanaIR-usb");
+ gc->addSelection("mceusb");
+ gc->addSelection("mod_mce");
+ gc->addSelection("pvr150");
+ gc->addSelection("streamzap");
+ gc->addSelection("tatir");
+ gc->setHelpText(QObject::tr("The type of infrared receiver used."));
+ gc->setValue("Default");
+ return gc;
+};
+
+
+
+static HostComboBox *HostSerialPortlirc()
+{
+ HostComboBox *gc = new HostComboBox("HostSerialPortlirc",false);
+ gc->setLabel(QObject::tr("Serial Port"));
+ gc->addSelection("ttyS0");
+ gc->addSelection("ttyS1");
+ gc->addSelection("ttyS2");
+ gc->addSelection("ttyS3");
+ gc->setHelpText(QObject::tr("Serial port with the lirc receiver or transmitter"));
+ return gc;
+}
+
+class LIRC_ReceiverSettings: public TriggeredConfigurationGroup {
+public:
+ LIRC_ReceiverSettings():
+ TriggeredConfigurationGroup(false, false, true, true,false, false, true, true) {
+ Setting* trigger = HostReceiverType() ;
+ addChild(trigger);
+ setTrigger(trigger);
+
+ ConfigurationGroup* blanksettings = new GridConfigurationGroup(2,true);
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(2,true);
+ settings->addChild(HostSerialPortlirc());
+
+ addTarget("Default", blanksettings);
+ addTarget("Serial", settings);
+ addTarget("imon", blanksettings );
+ addTarget("Hauppauge",blanksettings);
+ addTarget("tinker", blanksettings );
+ addTarget("imon", blanksettings);
+ addTarget("Hauppauge", blanksettings);
+ addTarget("CommandIR", blanksettings);
+ addTarget("iguanaIR-usb", blanksettings);
+ addTarget("mceusb", blanksettings);
+ addTarget("mod_mce", blanksettings);
+ addTarget("pvr150", blanksettings);
+ addTarget("streamzap", blanksettings);
+ addTarget("tatir", blanksettings);
+ };
+};
+
+
+
+IRFrame::IRFrame():
+ VerticalConfigurationGroup(false,false,false,false)
+ {
+ LIRC_ReceiverSettings *receiversettings = new LIRC_ReceiverSettings();
+ addChild(new HostRemoteTypeIR());
+ addChild(receiversettings);
+ }
+
+
+//----------------transmit settings--------------
+static HostComboBox *HostTransmitproto_1()
+{
+ HostComboBox *gc = new HostComboBox("HostTransmitproto_1",false);
+ gc->setLabel(QObject::tr("Transmitter"));
+ gc->addSelection("none");
+ gc->setValue(0);
+ gc->setHelpText(QObject::tr("Remote codes to control a cable box"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/transmit");
+ QDir transmit(dirtxt);
+ transmit.setFilter(QDir::Dirs);
+ transmit.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *infos = transmit.entryInfoList();
+ const QFileInfo *info;
+ if (!infos)
+ return gc;
+ QFileInfoListIterator infoIt( *infos );
+ QString currentitem = ".";
+ while( (info=infoIt.current()) != 0 )
+ {
+ currentitem = info->baseName( TRUE );
+ if ( currentitem != ".." && currentitem != "." && currentitem != "")
+ {
+ gc->addSelection(currentitem);
+ }
+ ++infoIt;
+ }
+ return gc;
+};
+
+static HostComboBox *HostTransmitproto_2()
+{
+ HostComboBox *gc = new HostComboBox("HostTransmitproto_2",false);
+ gc->setLabel(QObject::tr("Transmitter"));
+ gc->addSelection("none");
+ gc->setValue(0);
+ gc->setHelpText(QObject::tr("Remote codes to control a cable box"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/transmit");
+ QDir transmit(dirtxt);
+ transmit.setFilter(QDir::Dirs);
+ transmit.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *infos = transmit.entryInfoList();
+ const QFileInfo *info;
+ if (!infos)
+ return gc;
+ QFileInfoListIterator infoIt( *infos );
+ QString currentitem = ".";
+ while( (info=infoIt.current()) != 0 )
+ {
+ currentitem = info->baseName( TRUE );
+ if ( currentitem != ".." && currentitem != "." && currentitem != "")
+ {
+ gc->addSelection(currentitem);
+ }
+ ++infoIt;
+ }
+ return gc;
+};
+
+static HostComboBox *HostTransmitproto_3()
+{
+ HostComboBox *gc = new HostComboBox("HostTransmitproto_3",false);
+ gc->setLabel(QObject::tr("Transmitter"));
+ gc->addSelection("none");
+ gc->setValue(0);
+ gc->setHelpText(QObject::tr("Remote codes to control a cable box"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/transmit");
+ QDir transmit(dirtxt);
+ transmit.setFilter(QDir::Dirs);
+ transmit.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *infos = transmit.entryInfoList();
+ const QFileInfo *info;
+ if (!infos)
+ return gc;
+ QFileInfoListIterator infoIt( *infos );
+ QString currentitem = ".";
+ while( (info=infoIt.current()) != 0 )
+ {
+ currentitem = info->baseName( TRUE );
+ if ( currentitem != ".." && currentitem != "." && currentitem != "")
+ {
+ gc->addSelection(currentitem);
+ }
+ ++infoIt;
+ }
+ return gc;
+};
+
+static HostComboBox *HostTransmitproto_4()
+{
+ HostComboBox *gc = new HostComboBox("HostTransmitproto_4",false);
+ gc->setLabel(QObject::tr("Transmitter"));
+ gc->addSelection("none");
+ gc->setValue(0);
+ gc->setHelpText(QObject::tr("Remote codes to control a cable box"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/transmit");
+ QDir transmit(dirtxt);
+ transmit.setFilter(QDir::Dirs);
+ transmit.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *infos = transmit.entryInfoList();
+ const QFileInfo *info;
+ if (!infos)
+ return gc;
+ QFileInfoListIterator infoIt( *infos );
+ QString currentitem = ".";
+ while( (info=infoIt.current()) != 0 )
+ {
+ currentitem = info->baseName( TRUE );
+ if ( currentitem != ".." && currentitem != "." && currentitem != "")
+ {
+ gc->addSelection(currentitem);
+ }
+ ++infoIt;
+ }
+ return gc;
+};
+
+
+static HostComboBox *HostBlasterType()
+{
+ HostComboBox *gc = new HostComboBox("HostBlasterType");
+ gc->setLabel(QObject::tr("Blaster"));
+ gc->addSelection("None");
+ gc->addSelection("Receiver");
+ gc->addSelection("Serial");
+ gc->addSelection("CommandIR");
+ //gc->addSelection("Hauppauge");
+ gc->addSelection("MCE");
+ gc->addSelection("pvr150");
+ gc->addSelection("iguanaIR-usb");
+ gc->setHelpText(QObject::tr("The type of infrared transmitter being used. Selecting CommandIR will use that device for both transmiting and receiving. Any other receiver will be disabled."));
+ gc->setValue("None");
+ return gc;
+};
+
+static HostComboBox *HostSerialPort_blasterlirc()
+{
+ HostComboBox *gc = new HostComboBox("HostSerialPort_blasterlirc",false);
+ gc->setLabel(QObject::tr("Serial Port"));
+ gc->addSelection("ttyS0");
+ gc->addSelection("ttyS1");
+ gc->addSelection("ttyS2");
+ gc->addSelection("ttyS3");
+ gc->setHelpText(QObject::tr("Serial port with the lirc transmitter"));
+ return gc;
+}
+
+
+
+class LIRC_BlasterSettings: public TriggeredConfigurationGroup {
+public:
+ LIRC_BlasterSettings():
+ TriggeredConfigurationGroup(false, false, true, true,false, false, true, true) {
+ Setting* trigger = HostBlasterType() ;
+ addChild(trigger);
+ setTrigger(trigger);
+
+ ConfigurationGroup* blanksettings = new GridConfigurationGroup(2,true);
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(1,true);
+ settings->addChild(HostTransmitproto_1());
+
+ ConfigurationGroup* CommandIRsettings = new GridConfigurationGroup(1,true);
+ CommandIRsettings->addChild(HostTransmitproto_1());
+ CommandIRsettings->addChild(HostTransmitproto_2());
+ CommandIRsettings->addChild(HostTransmitproto_3());
+ CommandIRsettings->addChild(HostTransmitproto_4());
+
+ ConfigurationGroup* mcesettings = new GridConfigurationGroup(1,true);
+ mcesettings->addChild(HostTransmitproto_1());
+ mcesettings->addChild(HostTransmitproto_2());
+
+
+
+ ConfigurationGroup* serial_settings = new GridConfigurationGroup(1,true);
+ serial_settings->addChild(HostSerialPort_blasterlirc());
+ serial_settings->addChild(HostTransmitproto_1());
+ addTarget("None", blanksettings);
+ addTarget("Receiver", settings);
+ addTarget("Serial", serial_settings);
+ addTarget("CommandIR", CommandIRsettings);
+ addTarget("pvr150",blanksettings);
+ addTarget("MCE",mcesettings);
+ addTarget("iguanaIR-usb",mcesettings);
+// addTarget("tinker", blanksettings );
+ };
+};
+
+IR_TransmitFrame::IR_TransmitFrame():
+ VerticalConfigurationGroup(false,false,false,false)
+ {
+ LIRC_BlasterSettings *blastersettings = new LIRC_BlasterSettings();
+ addChild(blastersettings);
+ }
+
+//------------------LCD settings-------------
+
+
+
+static HostComboBox *HostLCDType()
+{
+ HostComboBox *gc = new HostComboBox("HostLCDType",false);
+ gc->setLabel(QObject::tr("LCD/VFD model"));
+ gc->addSelection("no_lcd");
+ gc->addSelection("tinker");
+ gc->setValue(0);
+ gc->setHelpText(QObject::tr("VFD or LCD"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/LCD");
+ QDir transmit(dirtxt);
+
+ //QDir transmit("/usr/share/templates/LCD");
+ transmit.setFilter(QDir::Dirs);
+ transmit.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *infos = transmit.entryInfoList();
+ const QFileInfo *info;
+ if (!infos)
+ return gc;
+ QFileInfoListIterator infoIt( *infos );
+ QString currentitem = ".";
+ while( (info=infoIt.current()) != 0 )
+ {
+ currentitem = info->baseName( TRUE );
+ if ( currentitem != ".." && currentitem != "." && currentitem != "")
+ {
+ gc->addSelection(currentitem);
+ }
+ ++infoIt;
+ }
+ return gc;
+};
+
+LCDFrame::LCDFrame():
+ VerticalConfigurationGroup(false,false,false,false)
+ {
+ addChild(HostLCDType());
+ }
+
+
diff --git a/abs/core/mythinstall/infrared.h b/abs/core/mythinstall/infrared.h
new file mode 100755
index 0000000..c647952
--- /dev/null
+++ b/abs/core/mythinstall/infrared.h
@@ -0,0 +1,45 @@
+#include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include "settings.h"
+#include "installsettings.h"
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+
+#include <stdlib.h>
+#include <cstdlib>
+#include <mythtv/mythdbcon.h>
+#include <qdir.h>
+#include <qapplication.h>
+#include "util.h"
+
+class IRFrame: public VerticalConfigurationGroup {
+ public:
+ IRFrame();
+ };
+
+
+class HostRemoteTypeIR: public HostImageSelect {
+public:
+ HostRemoteTypeIR();
+};
+
+class IR_TransmitFrame: public VerticalConfigurationGroup {
+ public:
+ IR_TransmitFrame();
+
+ };
+
+class LCDFrame: public VerticalConfigurationGroup {
+ public:
+ LCDFrame();
+
+ };
+
+
+
+
+
+
diff --git a/abs/core/mythinstall/install-ui.xml b/abs/core/mythinstall/install-ui.xml
new file mode 100755
index 0000000..8cebd11
--- /dev/null
+++ b/abs/core/mythinstall/install-ui.xml
@@ -0,0 +1,175 @@
+<!--
+
+ This is a myth style theme file for mythwelcome
+
+ (c) 2005 by a whole bunch of people associated with MythTV
+
+-->
+<mythuitheme>
+
+ <window name="welcome_screen">
+
+ <!--
+
+ First, define all the fonts we need on this screen
+
+ -->
+ <font name="title" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>24</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="time" face="Arial">
+ <color>#9999cc</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="label" face="Arial">
+ <color>#ffff00</color>
+ <dropcolor>#000000</dropcolor>
+ <size>18</size>
+ <shadow>3,3</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="info" face="Arial">
+ <color>#ffffff</color>
+ <size>18</size>
+ <bold>yes</bold>
+ </font>
+
+ <font name="biginfo" face="Arial">
+ <color>#ffffff</color>
+ <size>50</size>
+ <bold>yes</bold>
+ </font>
+ <font name="warning" face="Arial">
+ <color>#ff0000</color>
+ <dropcolor>#000000</dropcolor>
+ <size>16</size>
+ <shadow>2,2</shadow>
+ <bold>yes</bold>
+ </font>
+
+ <font name="buttons" face="Arial">
+ <color>#ffff00</color>
+ <size>14</size>
+ <bold>yes</bold>
+ </font>
+ <font name="tinyinfo" face="Arial">
+ <color>#9999cc</color>
+ <size>12</size>
+ <bold>no</bold>
+ </font>
+
+ <container name="main_display">
+ <area>0,0,800,600</area>
+
+ <textarea name="title" draworder="0" align="center">
+ <multiline>no</multiline>
+ <font>title</font>
+ <area>50,40,700,40</area>
+ <value>Welcome to MythVantage! </value>
+ </textarea>
+
+ <!--
+ time
+ -->
+ <textarea name="time_text" draworder="0" align="right">
+ <multiline>no</multiline>
+ <font>time</font>
+ <area>660,520,110,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="date_text" draworder="0" align="hcenter">
+ <multiline>yes</multiline>
+ <font>time</font>
+ <area>20,75,740,100</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ current myth status
+ -->
+
+ <textarea name="status_text" draworder="1" align="center">
+ <multiline>yes</multiline>
+ <font>info</font>
+ <area>20,100,760,60</area>
+ <value>MythTV is idle and will shutdown shortly.</value>
+ </textarea>
+
+ <!--
+ current recordings status
+ -->
+
+ <textarea name="recording_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,140,760,30</area>
+ <!--<value>Percent Complete </value>-->
+ <value></value>
+ </textarea>
+
+ <textarea name="recording_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,140,760,150</area>
+ <value></value>
+ </textarea>
+
+ <!--
+ next scheduled recording status
+ -->
+
+ <textarea name="scheduled_label" draworder="1" align="center">
+ <font>label</font>
+ <area>20,320,760,30</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="scheduled_text" draworder="1" align="hcenter">
+ <multiline>yes</multiline>
+ <font>biginfo</font>
+ <area>20,400,760,120</area>
+ <value></value>
+ </textarea>
+
+ <textarea name="mythvantage_text" draworder="1" align="right">
+ <multiline>no</multiline>
+ <font>tinyinfo</font>
+ <area>20,560,760,30</area>
+ <value></value>
+ </textarea>
+ <!--
+ scheduled recordings conflict warning
+ -->
+
+ <textarea name="conflicts_text" draworder="1" align="center">
+ <font>warning</font>
+ <area>20,490,760,30</area>
+ <value>WARNING: There are conflicting scheduled recordings!</value>
+ </textarea>
+
+ <!--
+ start frontend button
+
+ <textbutton name="startfrontend_button" draworder="1">
+ <position>81,535</position>
+ <font>buttons</font>
+ <image function="on" filename="mw_text_button_on.png"></image>
+ <image function="off" filename="mw_text_button_off.png"></image>
+ <image function="pushed" filename="mw_text_button_pushed.png"></image>
+ </textbutton>
+
+ -->
+
+ </container>
+
+ </window>
+
+</mythuitheme>
diff --git a/abs/core/mythinstall/install_proxy.sh b/abs/core/mythinstall/install_proxy.sh
new file mode 100755
index 0000000..a1a722e
--- /dev/null
+++ b/abs/core/mythinstall/install_proxy.sh
@@ -0,0 +1,353 @@
+#!/bin/bash
+disk=$2
+rootfs=$3
+rootsize=$4
+datafs=$5
+datasize=$6
+swapsize=$7
+mountpoint="/new_boot"
+run=/root/install_functions.sh
+. /etc/systemconfig 2>/dev/null
+
+
+progress () {
+mypercent=`echo "$1" | cut -d. -f1`
+if [ x$mypercent = x ]
+then
+echo "" > /tmp/.install_percent
+else
+echo "${mypercent}% complete" > /tmp/.install_percent
+fi
+
+
+}
+
+full_install () {
+ if [ -f /tmp/.this_is_upgrade ]
+ then
+ rm /tmp/.this_is_upgrade
+ fi
+ echo "Partitioning $disk" > /tmp/.install_state
+ progress 1
+ sleep 1
+ $run partition_it $disk $rootsize $datasize $swapsize
+
+ echo "Formating $disk" > /tmp/.install_state
+ progress 2
+ sleep 1
+ $run format_it $disk $rootfs $datafs
+
+ echo "Preparing $disk" > /tmp/.install_state
+ progress 3
+ sleep 1
+ $run mount_it $disk
+
+ startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "`
+
+ echo "STARTSIZE=$startsize">/tmp/.startsize.io
+ echo "Installing data" > /tmp/.install_state
+
+ sleep 1
+ $run copy_it $disk ALL
+ $run fstab_fix_it $disk $rootfs $datafs
+
+ progress 99
+ sleep 1
+ $run grub_it $disk
+
+ echo "Configuring system" > /tmp/.install_state
+ progress 100
+ sleep 1
+ cp -f /etc/systemconfig "$mountpoint"/etc
+ #run save syssettings to save settings, then copy to new mountpoint
+ /root/restore_default_settings.sh -c save -t syssettings -h myhost -d 127.0.0.1
+ SE=/usr/share/templates/settings/syssettings
+ mkdir -p ${mountpoint}$SE
+ cp -rp $SE/* ${mountpoint}$SE/
+ chown root:mythtv "$mountpoint"/etc/systemconfig
+ chown -R mythtv:mythtv ${mountpoint}$SE
+
+ chmod -R 775 ${mountpoint}$SE
+ chmod 775 "$mountpoint"/etc/systemconfig
+ #copy over any updates that might have occured
+ cp -f /root/*.sh "$mountpoint"/root/
+ chmod -R 755 ${mountpoint}/root
+ cp /etc/mtab "$mountpoint"/etc/mtab
+ chroot "$mountpoint" /root/systemconfig.sh misc,hostype,network
+
+ if [ $SystemType = "Master_backend" -o $SystemType = "Standalone" ]
+ then
+ #installing DB to local machine
+
+ chroot "$mountpoint" /root/install_db_chroot.sh
+ else
+ #update remotedb with this host settings
+ chroot "$mountpoint" /root/restore_default_settings.sh -c restore -t Default
+ chroot "$mountpoint" /root/restore_default_settings.sh -c restore -t syssettings
+ #Run second time
+ chroot "$mountpoint" /root/systemconfig.sh misc,hostype,network
+ fi
+ echo "Done" > /tmp/.install_state
+ $run unmount_it $disk
+}
+
+
+
+
+function upgrade () {
+ touch /tmp/.this_is_upgrade
+
+ if [ ! x$rootfs = "xDo_not_format" ]
+ then
+ echo "Formating $disk" > /tmp/.install_state
+ progress 2
+ sleep 1
+ $run format_it $disk $rootfs NO
+ fi
+
+
+ echo "Preparing $disk" > /tmp/.install_state
+ progress 3
+ sleep 1
+ $run mount_it $disk
+ startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "`
+ echo "STARTSIZE=$startsize">/tmp/.startsize.io
+ echo "Installing data" > /tmp/.install_state
+ sleep 1
+ cp -rf /tmp/etc /new_boot/etc.old
+ cp -rf /tmp/oss /new_boot/var/lib/oss.old
+ $run copy_it $disk bin.lzm,boot.lzm,etc.lzm,home.lzm,lib.lzm,opt.lzm,root.lzm,sbin.lzm,usr.lzm,var.lzm
+
+ if [ x$rootfs = "xDo_not_format" ]
+ then
+ rootfs=`grep ${disk}1 /tmp/etc/fstab |awk ' { print $3 } '`
+ fi
+ datafs=`grep ${disk}3 /tmp/etc/fstab |awk ' { print $3 } '`
+ $run fstab_fix_it $disk $rootfs $datafs
+
+ echo "Writing boot sector" > /tmp/.install_state
+ progress 99
+ sleep 1
+ $run grub_it $disk
+
+
+ echo "Configuring system" > /tmp/.install_state
+ progress
+ sleep 1
+ cp /etc/mtab "$mountpoint"/etc/mtab
+ cp -f /etc/systemconfig "$mountpoint"/etc
+ cp -f /root/*.sh "$mountpoint"/root/
+ chmod -R 755 ${mountpoint}/root
+ chown root:mythtv "$mountpoint"/etc/systemconfig
+ chmod 775 "$mountpoint"/etc/systemconfig
+ chroot "$mountpoint" /root/systemconfig.sh misc,hostype,network
+ # chroot "$mountpoint" /root/restore_default_settings.sh restore Default
+ chroot "$mountpoint" /root/restore_default_settings.sh -c restore -t syssettings
+ #Run second time
+ chroot "$mountpoint" /root/systemconfig.sh misc,hostype,network
+ # fi
+
+ echo "Done" > /tmp/.install_state
+
+ $run unmount_it $disk
+}
+
+
+
+function killdhcp () {
+if [ -f /etc/dhcpc/dhcpcd-eth0.pid ]
+ then
+ pid=`cat /etc/dhcpc/dhcpcd-eth0.pid`
+ kill -9 $pid
+ rm -f /etc/dhcpc/dhcpcd-eth0.pid
+ rm -f /var/run/dhcpcd*
+ fi
+if [ -f /var/run/dhcpcd-eth0.pid ]
+ then
+ pid=`cat /var/rundhcpcd-eth0.pid`
+ kill -9 $pid
+ rm -f /var/run/dhcpcd-eth0.pid*
+ fi
+ip address flush dev eth0
+}
+
+function network_setup () {
+DEVICE=eth0
+ if [ ! -f /etc/systemconfig ]
+ then
+ exit 1
+ fi
+killdhcp
+
+if [ $UseDHCP = 0 ]
+then
+ /sbin/dhcpcd $DEVICE
+ if [ ! $? = 0 ]
+ then
+ exit 2
+ fi
+fi
+
+if [ $UseDHCP = 1 ]
+then
+
+ /sbin/ifconfig $DEVICE $ip
+ /sbin/route add default gw $route
+ echo "nameserver $nameserver" > /etc/resolv.conf
+fi
+
+
+}
+
+function SANE_SYSETTINGS () {
+sed -e '/HOSTrootfstype/d' \
+ -e '/HOSTrootfstype/d' \
+ -e '/HOSTdatafstype/d' \
+ -e '/HOSTOSsize/d' \
+ -e '/HostUseALLdata/d' \
+ -e '/HOSTDATAsize/d' \
+ -e '/HOSTuprootfstype/d' \
+ -e '/HostUseSWAP/d' \
+ -e '/HOSTSWAPsize/d ' /tmp/usr/share/templates/settings/syssettings/settings.txt > /tmp/settings.new
+ mv /tmp/settings.new /tmp/usr/share/templates/settings/syssettings/settings.txt
+}
+
+case $1 in
+ full_install_it )
+
+ full_install
+ ;;
+ find_update)
+ #TRY TO mount first partition of drive
+ #copy /etc/systemconfig to live, import settings into db
+ #umount drive
+ $run mount_it $disk
+ if [ -f /new_boot/etc/systemconfig ]
+ then
+ ###########ADD templates
+ mkdir -p /tmp/usr/share/templates
+ cp -pr /new_boot/usr/share/templates /tmp/usr/share
+ SANE_SYSETTINGS
+ cp -rp /tmp/usr/share/templates/settings /usr/share/templates
+
+
+ cp /new_boot/etc/systemconfig /etc/systemconfig
+ cp -rf /new_boot/etc /tmp/etc
+ cp -rf /new_boot/var/lib/oss /tmp/oss
+
+ /root/restore_default_settings.sh -c restore -t syssettings -h myhost -d 127.0.0.1
+ fi
+ $run umount_it $disk
+ ;;
+
+ upgrade_it)
+ #"/root/install_proxy.sh upgrade_it " + install_drive + " " + rootfs + "&"
+ upgrade
+
+ ;;
+ disk_model_it)
+ model="unknown"
+ size="xxx"
+ case $2 in
+
+ h* )
+ model=`cat /proc/ide/$2/model`
+ ;;
+ s*) model=`sginfo /dev/$2|grep Product|awk ' { print $2 } '`
+ ;;
+ esac
+ size=`parted /dev/$2 print |grep Disk|awk ' { print $3 } ' `
+
+
+ echo ""$model" $size " >/tmp/model
+
+ ;;
+ network_check_it)
+ #Should never return from check_network
+ case $2 in
+ setup_network) network_setup
+ ;;
+
+ check_self)
+ myipeth0=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
+ ping -c 1 $myipeth0
+ if [ ! $? = 0 ]
+ then
+ exit 3
+ #can't ping yourself
+ fi
+ ;;
+ check_gw)
+ #check gateway
+ mygweth0=`/sbin/route |grep eth0|grep UG|awk '{ print $2}'`
+ ping -c 1 $mygweth0
+ if [ ! $? = 0 ]
+ then
+ exit 4
+ #can't ping the gw
+ fi
+ ;;
+ check_ns)
+ #check nameserver
+ mydns=`cat /etc/resolv.conf|grep nameserver|head -1|awk '{ print $2}'`
+ ping -c 1 $mydns
+ if [ ! $? = 0 ]
+ then
+ exit 5
+ #can't ping the gw
+ fi
+ ;;
+ check_names)
+ host google.com
+ if [ ! $? = 0 ]
+ then
+ exit 6
+ #can't ping the gw
+ fi
+ ;;
+ esac
+ exit 0
+ ;;
+
+
+ * )
+ state=`cat /tmp/.install_state`
+ if [ x"${state}" = "xConfiguring system" ]
+ then
+ progress ""
+ else
+ #finding the drive
+ ddrive=`df | grep $mountpoint | head -n1 | awk -F/ ' { print $3 } ' | cut -d" " -f 1|cut -b1,2,3 `
+ used=`statgrab -M disk.|grep ${ddrive}.write_bytes|cut -d= -f 2|tr -d " "`
+ . /tmp/.startsize.io
+ used=`echo $used-$STARTSIZE|bc`
+ echo $used
+
+ if [ ! x$used = x ]
+ then
+ . /root/.install_size
+ #somehow find if it's an install or update
+ if [ -f /tmp/.this_is_upgrade ]
+ then
+ total=$UPGRADESIZE
+ else
+ total=$TOTALSIZE
+ fi
+ percent=`echo "scale=2 ; ($used/$total) * 100 " |bc `
+ cond2=$(echo "$percent > 100" |bc )
+ if [ $cond2 -eq 1 ]
+ then
+ percent=100
+ fi
+ cond3=$(echo "$percent < 3" |bc )
+ if [ $cond3 -eq 0 ]
+ then
+ progress $percent
+ fi
+ fi
+ fi
+ ;;
+esac
+
+
+
diff --git a/abs/core/mythinstall/installationtype.cpp b/abs/core/mythinstall/installationtype.cpp
new file mode 100755
index 0000000..d32b9fc
--- /dev/null
+++ b/abs/core/mythinstall/installationtype.cpp
@@ -0,0 +1,272 @@
+#include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include "settings.h"
+#include "installsettings.h"
+#include "installdialog.h"
+#include "installationtype.h"
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+#include <qdir.h>
+#include <mythtv/mythdbcon.h>
+#include "mv_common.h"
+
+int mythinstalltype (QString tmp_install_drive)
+{
+
+ Mythinstalltype setting;
+ setting.load();
+ setting.save();
+ //setting.exec();
+ int retc = 1 ;
+ if ( setting.exec() == QDialog::Accepted )
+ {
+ retc = 0;
+ }
+ return retc;
+
+};
+
+ static HostComboBox *HOSTinstallationtype()
+{
+ HostComboBox *gc = new HostComboBox("HOSTinstallationtype");
+ gc->setLabel(QObject::tr("Upgrade or Full install"));
+ gc->addSelection("Full/Auto") ;
+ gc->addSelection("Upgrade");
+
+
+ gc->setHelpText(QObject::tr("A full install will erase the entire drive and repartition. An upgrade will only format or overlay the first parition of the drive."));
+
+ return gc;
+}
+
+static HostSpinBox *HOSTOSsize()
+{
+ #ifdef __MVAPP__
+ HostSpinBox *gc = new HostSpinBox("HOSTOSsize", 2, 15, 1, true);
+ #else
+ HostSpinBox *gc = new HostSpinBox("HOSTOSsize", 3, 25, 1, true);
+ #endif
+ gc->setLabel(QObject::tr("OS size (GB)"));
+ gc->setValue(2);
+ gc->setHelpText(QObject::tr("" ));
+
+ return gc;
+}
+static HostSpinBox *HOSTDATAsize()
+{
+ HostSpinBox *gc = new HostSpinBox("HOSTDATAsize", 2, 1500, 1, true);
+ gc->setLabel(QObject::tr("Data size (GB)"));
+ gc->setValue(2);
+ gc->setHelpText(QObject::tr("" ));
+
+ return gc;
+}
+
+static HostSpinBox *HOSTSWAPsize()
+{
+ QString currentitem;
+ QString line;
+ QFile file("/proc/meminfo");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ line = t.readLine();
+ if ( line.startsWith("MemTotal:"))
+ {
+ currentitem = line.simplifyWhiteSpace();
+ currentitem = currentitem.section( " ", 1, 1 );
+ }
+ }
+ file.close();
+ bool ok;
+ int mem = currentitem.toInt( &ok, 10 ); // dec == 0, ok == FALSE
+ mem = mem/1024 ;
+ if ( ! ok )
+ mem = 120 ;
+ HostSpinBox *gc = new HostSpinBox("HOSTSWAPsize", 128, 128000, 128, true);
+ gc->setLabel(QObject::tr("Swapspace size (MB)"));
+ gc->setValue(mem);
+ gc->setHelpText(QObject::tr("" ));
+
+ return gc;
+}
+
+static HostCheckBox *HostUseSWAP()
+{
+ HostCheckBox *gc = new HostCheckBox("HostUseSWAP");
+ gc->setLabel(QObject::tr("Use swap partition"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Enable or disable the swap partition."));
+ return gc;
+};
+
+static HostCheckBox *HostUseALLdata()
+{
+ HostCheckBox *gc = new HostCheckBox("HostUseALLdata");
+ gc->setLabel(QObject::tr("Use all remaining space for data"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("If checked myth will use the rest of the drive for the data. Otherwise you will be able to set the size of the partition."));
+ return gc;
+};
+
+
+static HostComboBox *HOSTdatafstype()
+{
+ HostComboBox *gc = new HostComboBox("HOSTdatafstype");
+ gc->setLabel(QObject::tr("Data filesystem"));
+ gc->addSelection("ext3") ;
+ gc->addSelection("ext4") ;
+ gc->addSelection("reiserfs");
+ gc->addSelection("jfs");
+ gc->addSelection("xfs");
+
+ gc->setHelpText(QObject::tr("Filesystem for data. "));
+
+ return gc;
+}
+
+ static HostComboBox *HOSTuprootfstype()
+{
+ HostComboBox *gc = new HostComboBox("HOSTuprootfstype");
+ gc->setLabel(QObject::tr("OS file system"));
+ gc->addSelection("ext3") ;
+ gc->addSelection("ext4") ;
+ gc->addSelection("reiserfs");
+ gc->addSelection("jfs");
+ //gc->addSelection("xfs");
+ gc->addSelection("Do_not_format");
+
+ gc->setHelpText(QObject::tr("Filesystem for OS. "));
+
+ return gc;
+}
+
+static HostComboBox *HOSTrootfstype()
+{
+ HostComboBox *gc = new HostComboBox("HOSTrootfstype");
+ gc->setLabel(QObject::tr("Root filesystem format"));
+ gc->addSelection("ext3") ;
+ gc->addSelection("ext4") ;
+ gc->addSelection("reiserfs");
+ gc->addSelection("jfs");
+ //gc->addSelection("xfs");
+
+ gc->setHelpText(QObject::tr("Filesystem for OS. "));
+
+ return gc;
+}
+
+class USESwap:
+ public TriggeredConfigurationGroup {
+public:
+ USESwap():
+ //ConfigurationGroup(false, true, false, false),
+ //VerticalConfigurationGroup(false, true, false, false),
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+ //setLabel(QObject::tr("" ));
+// setUseLabel(false);
+
+
+ Setting* useswap = HostUseSWAP();
+ addChild(useswap);
+ setTrigger(useswap);
+
+
+ ConfigurationGroup* swapyes = new VerticalConfigurationGroup(false);
+ swapyes->addChild(HOSTSWAPsize());
+
+
+
+ addTarget("1", swapyes );
+ addTarget("0", new VerticalConfigurationGroup(true));
+
+
+
+
+ };
+};
+
+class DATAsize:
+ public TriggeredConfigurationGroup {
+public:
+ DATAsize():
+ //ConfigurationGroup(false, true, false, false),
+ //VerticalConfigurationGroup(false, true, false, false),
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+ //setLabel(QObject::tr("" ));
+// setUseLabel(false);
+
+
+ Setting* datasize = HostUseALLdata();
+ addChild(datasize);
+ setTrigger(datasize);
+
+
+ ConfigurationGroup* alldatano = new VerticalConfigurationGroup(false);
+ alldatano->addChild(HOSTDATAsize());
+ alldatano->addChild(HOSTdatafstype());
+
+ ConfigurationGroup* alldatayes = new VerticalConfigurationGroup(false);
+ alldatayes->addChild(HOSTdatafstype());
+
+
+
+
+ addTarget("1", alldatayes);
+ addTarget("0", alldatano);
+
+
+
+ };
+};
+
+
+class Installationtype:
+ public TriggeredConfigurationGroup {
+public:
+ Installationtype():
+ //ConfigurationGroup(false, true, false, false),
+ //VerticalConfigurationGroup(false, true, false, false),
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+// setLabel(QObject::tr("Upgrade or Full install" ));
+// setUseLabel(false);
+
+
+ Setting* Mtemplate = HOSTinstallationtype();
+ addChild(Mtemplate);
+ setTrigger(Mtemplate);
+
+
+ ConfigurationGroup* tupgrade = new VerticalConfigurationGroup(false);
+ tupgrade->addChild(HOSTuprootfstype());
+
+ ConfigurationGroup* tfull = new VerticalConfigurationGroup(false);
+ tfull->addChild(HOSTOSsize());
+ tfull->addChild(HOSTrootfstype());
+ tfull->addChild(new USESwap);
+ tfull->addChild(new DATAsize);
+
+
+
+ addTarget("Upgrade",tupgrade );
+ addTarget("Full/Auto", tfull);
+
+
+ };
+};
+
+Mythinstalltype::Mythinstalltype()
+{
+ //Reseting the install type to remove "NET"
+ if ( gContext->GetSetting("Hostinstallationtype") == "NET")
+ gContext ->SaveSetting("HOSTinstallationtype","Full/Auto");
+ Installationtype *installationtype = new Installationtype();
+ addChild(installationtype);
+
+}
+
+
+
diff --git a/abs/core/mythinstall/installationtype.h b/abs/core/mythinstall/installationtype.h
new file mode 100755
index 0000000..ad29224
--- /dev/null
+++ b/abs/core/mythinstall/installationtype.h
@@ -0,0 +1,11 @@
+#include <settings.h>
+#include "mythdialogs.h"
+//###################################################################################################3
+class Mythinstalltype: public ConfigurationWizard {
+public:
+ Mythinstalltype();
+
+};
+
+int mythinstalltype(QString);
+
diff --git a/abs/core/mythinstall/installdialog.cpp b/abs/core/mythinstall/installdialog.cpp
new file mode 100755
index 0000000..e5bdfc9
--- /dev/null
+++ b/abs/core/mythinstall/installdialog.cpp
@@ -0,0 +1,1034 @@
+#include <qapplication.h>
+#include <unistd.h>
+#include <fstream>
+#include <sys/wait.h> // For WIFEXITED on Mac OS X
+
+#include "mythcontext.h"
+#include "mythdbcon.h"
+#include "lcddevice.h"
+#include "tv.h"
+#include "programinfo.h"
+#include "uitypes.h"
+#include "remoteutil.h"
+#include <qdir.h>
+#include "installdialog.h"
+#include "installsettings.h"
+#include "installationtype.h"
+#include "mv_common.h"
+#include "libmyth/dialogbox.h"
+#include <stdlib.h>
+#define UPDATE_STATUS_INTERVAL 5000
+#define UPDATE_SCREEN_INTERVAL 5000
+
+
+
+WelcomeDialog::WelcomeDialog(MythMainWindow *parent,
+ QString window_name,
+ QString theme_filename,
+ const char* name)
+:MythThemedDialog(parent, window_name, theme_filename, name)
+{
+ system("rm -f /tmp/.install_state");
+ system("rm -f /tmp/.install_percent");
+ system("rm -f /tmp/.install_error");
+ install_drive = "" ;
+ recording_text = "";
+ scheduled_text = "";
+ install_text = "";
+ version_text = "";
+ I_AM_BUSY = false;
+ WORKING_ON_INSTALL = false;
+ current_hostname = "";
+
+ gContext->addListener(this);
+ m_timeFormat = gContext->GetSetting("TimeFormat", "h:mm AP");
+ wireUpTheme();
+ assignFirstFocus();
+
+ m_updateStatusTimer = new QTimer(this);
+ connect(m_updateStatusTimer, SIGNAL(timeout()), this,
+ SLOT(updateStatus()));
+ m_updateStatusTimer->start(UPDATE_STATUS_INTERVAL);
+
+ m_updateScreenTimer = new QTimer(this);
+ connect(m_updateScreenTimer, SIGNAL(timeout()), this,
+ SLOT(updateScreen()));
+
+ m_timeTimer = new QTimer(this);
+ connect(m_timeTimer, SIGNAL(timeout()), this,
+ SLOT(updateTime()));
+ m_timeTimer->start(1000);
+
+ reboot_box = NULL;
+ popup = NULL;
+ showPopup();
+}
+void WelcomeDialog::shutdownNow(int rc)
+{
+ QString NETBOOT = getenv("NETBOOT");
+ NETBOOT=NETBOOT.stripWhiteSpace();
+ system("rm -f /tmp/.install_state");
+ system("rm -f /tmp/.install_percent");
+ system("rm -f /tmp/.install_error");
+ if (rc == 1)
+ system("/sbin/halt");
+ else
+ system("/sbin/reboot");
+ // system("/usr/bin/killall -9 X");
+}
+
+void WelcomeDialog::runLIVECD(void)
+{
+ cancelPopup();
+ ask_validate_network();
+ if ( runsettings(true) == 1 )
+ {
+ QString PAINTER = gContext->GetSetting("ThemePainter");
+ QString startFECmd = ("MYTHCONFDIR=/tmp mythfrontend -O ThemePainter=" + PAINTER );
+ myth_system(startFECmd.ascii());
+ }
+ else
+ {
+ cancelPopup();
+ showPopup();
+ }
+
+
+}
+
+
+
+int WelcomeDialog::exec()
+{
+ updateAll();
+ return MythDialog::exec();
+}
+
+
+
+void WelcomeDialog::keyPressEvent(QKeyEvent *e)
+{
+ bool handled = false;
+ QStringList actions;
+ gContext->GetMainWindow()->TranslateKeyPress("Welcome", e, actions);
+ for (unsigned int i = 0; i < actions.size() && !handled; i++)
+ {
+ QString action = actions[i];
+ handled = true;
+ if (action == "ESCAPE")
+ {
+ return; // eat escape key
+ }
+ else if (action == "MENU")
+ {
+ showPopup();
+ }
+ else if (action == "NEXTVIEW")
+ {
+ accept();
+ }
+ else if (action == "SELECT")
+ {
+ activateCurrent();
+ }
+ else
+ handled = false;
+ }
+
+ if (!handled)
+ MythThemedDialog::keyPressEvent(e);
+}
+
+UITextType* WelcomeDialog::getTextType(QString name)
+{
+ UITextType* type = getUITextType(name);
+ if (!type)
+ {
+ cout << "ERROR: Failed to find '" << name << "' UI element in theme file\n"
+ << "Bailing out!" << endl;
+ exit(0);
+ }
+ return type;
+}
+
+void WelcomeDialog::wireUpTheme()
+{
+ m_status_text = getTextType("status_text");
+ m_recording_text = getTextType("recording_text");
+ m_scheduled_text = getTextType("scheduled_text");
+ m_mv_text=getTextType("mythvantage_text");
+ m_time_text = getTextType("time_text");
+ m_date_text = getTextType("date_text");
+ m_warning_text = getTextType("conflicts_text");
+ m_warning_text->hide();
+ buildFocusList();
+}
+
+void WelcomeDialog::closeDialog()
+{
+ done(1);
+}
+
+WelcomeDialog::~WelcomeDialog()
+{
+ gContext->removeListener(this);
+ if (m_updateStatusTimer)
+ delete m_updateStatusTimer;
+
+ if (m_updateScreenTimer)
+ delete m_updateScreenTimer;
+
+ if (m_timeTimer)
+ delete m_timeTimer;
+}
+
+void WelcomeDialog::updateTime(void)
+{
+ QString releasefile="/etc/";
+ releasefile.append(RELEASEFILE);
+
+ extern const char *myth_source_version;
+ extern const char *myth_source_path;
+ QString distro_line;
+ QFile file(releasefile);
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ distro_line = t.readLine();
+ file.close();
+ }
+
+
+ QString s="";
+ //QString s="MythVantage 1.4 Mythtv svn: ";
+ s.append(distro_line);
+ s.append( " , Mythtv svn:" );
+ s.append(myth_source_version);
+ s.append(" ");
+ s.append(myth_source_path);
+ m_date_text->SetText(s);
+}
+
+void WelcomeDialog::updateStatus(void)
+{
+// checkConnectionToServer();
+ updateStatusMessage();
+}
+
+void WelcomeDialog::updateScreen(void)
+{
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh " );
+ system(cmdtxt);
+ recording_text=" ";
+ mythvantage_text=" ";
+ error_text=" ";
+ scheduled_text=" ";
+ QFile mystatus("/tmp/.install_state");
+ QFile mypercent("/tmp/.install_percent");
+ QFile myerror("/tmp/.install_error");
+ QFile mylog("/tmp/mythvantage_install.log");
+ if ( mystatus.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &mystatus ); // use a text stream
+ scheduled_text = t.readLine();
+ mystatus.close();
+ }
+
+ if ( mypercent.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &mypercent ); // use a text stream
+ recording_text = t.readLine();
+ mypercent.close();
+ }
+
+ if ( myerror.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &myerror ); // use a text stream
+ error_text = t.readLine();
+ myerror.close();
+ scheduled_text = error_text;
+ recording_text = "FAILED";
+ WORKING_ON_INSTALL = false;
+ }
+
+ if ( WORKING_ON_INSTALL )
+ {
+ if ( mylog.open( IO_ReadOnly| IO_Translate ) )
+ {
+ QTextStream t( &mylog );
+ while ( !t.atEnd() )
+ {
+ mythvantage_text=t.readLine();
+ }
+ mylog.close();
+ }
+ }
+ else
+ mythvantage_text="";
+ m_recording_text->SetText(recording_text);
+ m_scheduled_text->SetText(scheduled_text);
+ m_mv_text->SetText(mythvantage_text);
+
+ if ( install_drive != "" )
+ install_text = "";
+
+ m_status_text->SetText(install_text );
+ m_updateScreenTimer->start(UPDATE_SCREEN_INTERVAL, true);
+ if ( scheduled_text == "Done" )
+ {
+ Reboot_popup () ;
+ }
+ // shows the busy box when configuring the system
+ if ( scheduled_text == "Configuring system")
+ {
+ if ( ! I_AM_BUSY )
+ busy_box();
+ assignFirstFocus();
+ }
+};
+
+void WelcomeDialog::busy_box(void)
+{
+ QString msgtext = "Please wait, " ;
+ msgtext.append(current_hostname);
+ msgtext.append(" is preparing for life");
+ MythBusyDialog *busy = new MythBusyDialog(msgtext);
+ busy->start();
+
+ while ( scheduled_text == "Configuring system" )
+ {
+ qApp->processEvents ();
+ usleep(900);
+ I_AM_BUSY = true;
+ }
+ busy->Close();
+ I_AM_BUSY = false;
+ busy->deleteLater();
+}
+
+void WelcomeDialog::busy_find_oldsettings(void)
+{
+ MythBusyDialog *busy = new MythBusyDialog(
+ QObject::tr("Importing old settings"));
+ busy->start();
+ int return_code = 0;
+ while ( return_code == 0 )
+ {
+ qApp->processEvents ();
+ usleep(900);
+ I_AM_BUSY = true;
+ return_code = myth_system("ps -ef|grep install_proxy.sh|grep -v grep > /dev/null");
+
+ }
+ busy->Close();
+ I_AM_BUSY = false;
+ busy->deleteLater();
+
+}
+
+
+
+void WelcomeDialog::updateAll(void)
+{
+ updateRecordingList();
+ updateScheduledList();
+}
+
+bool WelcomeDialog::updateRecordingList()
+{
+ return true;
+}
+
+bool WelcomeDialog::updateScheduledList()
+{
+ updateStatus();
+ updateScreen();
+ return true;
+}
+
+void WelcomeDialog::updateStatusMessage(void)
+{
+
+}
+
+void WelcomeDialog::showPopup(void)
+{
+ if (popup)
+ return;
+ popup = new MythPopupBox(gContext->GetMainWindow(), "Menu");
+ QButton *topButton;
+ QLabel *label = popup->addLabel(tr("Menu"), MythPopupBox::Large, false);
+ label->setAlignment(Qt::AlignCenter | Qt::WordBreak);
+ // This is a bad way to lock the buttons but it works for now.
+ if ( scheduled_text.length() <= 2 )
+ {
+ topButton = popup->addButton(tr("Install or Upgrade "), this,
+ SLOT(Display_2ndpopup()));
+ popup->addButton(tr("Run MythFrontend"), this,
+ SLOT(runLIVECD()));
+ popup->addButton(tr("Exit"), this,
+ SLOT(closeDialog()));
+ popup->addButton(tr("Close menu"), this, SLOT(cancelPopup()));
+
+ popup->ShowPopup(this, SLOT(cancelPopup()));
+
+ }
+ else
+ {
+ topButton= popup->addButton(tr("Exit"), this,
+ SLOT(closeDialog()));
+ popup->addButton(tr("Close menu"), this, SLOT(cancelPopup()));
+
+ popup->ShowPopup(this, SLOT(cancelPopup()));
+ }
+
+ topButton->setFocus();
+}
+
+
+QString WelcomeDialog::diskmodel(QString drive , QString tsize)
+{
+ string line;
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh disk_model_it " + drive + " " + tsize );
+ myth_system(cmdtxt);
+
+ ifstream model("/tmp/model");
+ if (model.is_open())
+ getline (model,line);
+ model.close();
+ return line;
+}
+
+QString WelcomeDialog::findinstallsouce(void)
+{
+ string line;
+ QString currentitem;
+ ifstream mountfile("/proc/mounts");
+ //ifstream mountfile("procmounts");
+ while (! mountfile.eof() )
+ {
+ getline (mountfile,line);
+ if ( line.empty() )
+ line = "oops didn't find andthing";
+ currentitem = line;
+
+ if ( ! currentitem.contains("/dev"))
+ currentitem="not the right line";
+
+ //if ( currentitem.contains("/mnt/live/mnt") )
+ if ( currentitem.contains("/.livesys/medium") )
+ {
+ int ndx = line.find(" ");
+ currentitem = line.substr(0,ndx);
+ ndx = currentitem.findRev("/");
+ currentitem = currentitem.mid(ndx+1,3);
+ return currentitem;
+ };
+
+ }
+
+};
+
+void WelcomeDialog::showPopup_2(void)
+{
+
+ if (popup)
+ return;
+ popup = new MythPopupBox(gContext->GetMainWindow(), "Select the drive to install");
+ findinstallsouce();
+ QButton *CancelButton;
+ QLabel *label = popup->addLabel(tr("Select the install target."), MythPopupBox::Large, false);
+ label->setAlignment(Qt::AlignCenter | Qt::WordBreak);
+ string currentitem;
+ string sizeitem;
+ string disksize;
+ string line;
+ bool installsource = false;
+
+ QString NETBOOT = getenv("NETBOOT");
+ NETBOOT=NETBOOT.stripWhiteSpace();
+ if ( NETBOOT == "YES" )
+ popup->addButton(("Diskless Frontend " ), this, SLOT(install_net() ) );
+
+ QString INSTALLSOURCE = findinstallsouce();
+ std::cout << "install source:" << std::endl;
+ std::cout << INSTALLSOURCE << std::endl;
+ ifstream partitions("/proc/partitions");
+ if (partitions.is_open())
+ while (! partitions.eof() )
+ {
+ getline (partitions,line);
+ if ( line.empty() )
+ {
+ line = "oops didn't find anything";
+ }
+ int ndx = line.rfind(" ");
+ ndx = ndx +1;
+ int linelength = line.length();
+ currentitem = line.substr(ndx,linelength);
+ sizeitem = line.substr(0,ndx-1);
+ linelength = sizeitem.length();
+ ndx = sizeitem.rfind(" ");
+ disksize = sizeitem.substr(ndx+1,linelength);
+
+// std::cout << currentitem<< std::endl;
+ if( currentitem == INSTALLSOURCE )
+ {
+ std::cout << currentitem<< std::endl;
+ installsource = true;
+ }
+
+
+ if (! installsource )
+ {
+ if ( currentitem == "hda" )
+ popup->addButton(("hda " + diskmodel(currentitem,disksize)), this, SLOT(install_hda() ) );
+ if ( currentitem == "hdb" )
+ popup->addButton(("hdb " + diskmodel(currentitem,disksize)), this, SLOT(install_hdb() ) );
+ if ( currentitem == "hdc" )
+ popup->addButton(("hdc " + diskmodel(currentitem,disksize)), this, SLOT(install_hdc() ) );
+ if ( currentitem == "hdd" )
+ popup->addButton(("hdd " + diskmodel(currentitem,disksize)), this, SLOT(install_hdd() ) );
+ if (currentitem == "sda" )
+ popup->addButton(("sda " + diskmodel(currentitem,disksize)), this, SLOT(install_sda() ) );
+ if (currentitem == "sdb" )
+ popup->addButton(("sdb " + diskmodel(currentitem,disksize)), this, SLOT(install_sdb() ) );
+ if (currentitem == "sdc" )
+ popup->addButton(("sdc "+ diskmodel(currentitem,disksize)), this, SLOT(install_sdc() ) );
+ if (currentitem == "sdd" )
+ popup->addButton(("sdd "+ diskmodel(currentitem,disksize)), this, SLOT(install_sdd() ) );
+ }
+ installsource = false;
+ }
+ partitions.close();
+ CancelButton = popup->addButton(tr("Cancel"), this, SLOT(MAINPopup()));
+ popup->ShowPopup(this, SLOT(cancelPopup()));
+ CancelButton->setFocus();
+}
+
+void WelcomeDialog::GO_popup(QString go_text)
+{
+ if (popup)
+ return;
+ DialogCode retval = MythPopupBox::Show2ButtonPopup(gContext->GetMainWindow(),
+ QString("Start the process"),
+ QObject::tr(go_text),
+ QObject::tr("Start the process"), QObject::tr("Cancel"), kDialogCodeButton0);
+
+ if ( retval == kDialogCodeButton0 )
+ {
+ install_it();
+ }
+ else
+ {
+ cancelPopup();
+ showPopup();
+ }
+}
+
+
+void WelcomeDialog::Reboot_popup(void)
+{ if (reboot_box)
+ return;
+ QString prompt1;
+ QFile updbstatus("/tmp/.upgrade_db_failed");
+ if ( updbstatus.open(IO_ReadOnly | IO_Translate) )
+ {
+ prompt1 = QObject::tr(" ");
+ prompt1.append("\n");
+ prompt1.append("An error occured while attempting to restore the database!");
+ prompt1.append("\n");
+ prompt1.append("The old database could not be restored, so a new database was created");
+ prompt1.append("\n");
+
+ }
+ else
+ {
+ prompt1 = QObject::tr("Ready to go!");
+ }
+
+
+
+ reboot_box = new DialogBox(gContext->GetMainWindow(), prompt1);
+ reboot_box->AddButton(QObject::tr("Reboot"));
+ reboot_box->AddButton(QObject::tr("Power off"));
+
+ int returncode = 0;
+ DialogCode dcode = reboot_box->exec();
+ reboot_box->deleteLater();
+ if (kDialogCodeButton0 == dcode )
+ returncode = 0;
+ if (kDialogCodeButton1 == dcode )
+ returncode = 1;
+ if (kDialogCodeButton2 == dcode )
+ returncode = 2;
+
+
+ reboot_box = NULL;
+ shutdownNow(returncode);
+}
+
+
+
+void WelcomeDialog::cancelPopup(void)
+{
+ if (!popup)
+ return;
+ popup->hide();
+ popup->deleteLater();
+ popup = NULL;
+ setActiveWindow();
+}
+
+void WelcomeDialog::MAINPopup(void)
+{
+ if (!popup)
+ return;
+ popup->hide();
+ popup->deleteLater();
+ popup = NULL;
+ showPopup();
+ setActiveWindow();
+}
+
+void WelcomeDialog::Display_2ndpopup(void)
+{
+ cancelPopup();
+ showPopup_2();
+ updateStatusMessage();
+ updateScreen();
+}
+
+void WelcomeDialog::install_hda(void)
+{
+ install_drive = "hda" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_hdb(void)
+{
+ install_drive = "hdb" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_hdc(void)
+{
+ install_drive = "hdc" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_hdd(void)
+{
+ install_drive = "hdd" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_sda(void)
+{ install_drive = "sda" ;
+ install_generic();
+}
+void WelcomeDialog::install_sdb(void)
+{ install_drive = "sdb" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_sdc(void)
+{ install_drive = "sdc" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_sdd(void)
+{
+ install_drive = "sdd" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_net(void)
+{
+ install_drive = "NET" ;
+ gContext->ActivateSettingsCache(false);
+ gContext ->SaveSetting("HOSTinstallationtype","NET");
+ install_generic();
+}
+
+void WelcomeDialog::install_generic(void)
+{
+ gContext->ActivateSettingsCache(false);
+ cancelPopup();
+ updateStatusMessage();
+ updateScreen();
+ QString installwarningtext;
+ int runNextSetting;
+ runNextSetting = 1;
+ int tflag;
+ tflag = 0;
+ int retcode;
+ retcode=0;
+ QString installtype;
+ if ( install_drive != "NET")
+ retcode = mythinstalltype(install_drive);
+ if ( retcode == 0 )
+ {
+ installtype = gContext -> GetSetting("HOSTinstallationtype");
+ if ( installtype == "Full/Auto" )
+ {
+ runNextSetting = ask_validate_network();
+ installwarningtext="Warning!";
+ installwarningtext.append ("\n");
+ installwarningtext.append ("\n");
+ installwarningtext.append ("About to erase the entire");
+ installwarningtext.append ("\n");
+ installwarningtext.append ("installation drive of ");
+ installwarningtext.append (install_drive);
+
+ }
+ else if ( installtype == "NET")
+ {
+ runNextSetting=0;
+ gContext ->SaveSetting("HostSystemType", "Frontend_only");
+ gContext->SaveSetting("HostaccesshostypeSystemtype","0");
+ installwarningtext.append ("About to install ");
+ installwarningtext.append ("\n");
+ installwarningtext.append (install_drive);
+ // ask for hostname
+ runsettings(false,true,false,false,false,false,false);
+ }
+ else if ( installtype == "Upgrade" )
+ {
+ installwarningtext="Warning!";
+ installwarningtext.append ("\n");
+ installwarningtext.append ("\n");
+ installwarningtext.append ("About to erase the");
+ installwarningtext.append ("\n");
+ installwarningtext.append ("partition ");
+ installwarningtext.append (install_drive);
+ installwarningtext.append ("1");
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh find_update " + install_drive +" &");
+ system(cmdtxt);
+ busy_find_oldsettings();
+ bool flag = false;
+ QString line;
+ QString currentitem;
+ QFile file("/etc/systemconfig");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.startsWith("hostname"))
+ {
+ flag=true;
+ currentitem = line.section( "=", 1, 1 );
+ current_hostname = currentitem ;
+ }
+ }
+ file.close();
+ cout << current_hostname << endl;
+ }
+ if ( flag )
+ {
+ // GO_popup(installwarningtext);
+ tflag = 1;
+ }
+ else
+ {
+ cout << "searching for knoppmyth-versin" << endl;
+ //couldn't open /etc/systemconfig, so now look for /tmp/etc/Knoppmyth-version
+ QFile file("/tmp/etc/KnoppMyth-version");
+ if ( file.exists() )
+ { //appears to be a knoppmyth version, proceed
+ cout << "found knoppmyth-version" << endl;
+ QFile kmfile("/tmp/etc/hostname");
+ if ( kmfile.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &kmfile ); // use a text stream
+ line = t.readLine();
+ flag=true;
+ currentitem = line.stripWhiteSpace();
+ current_hostname = currentitem ;
+ //gContext->ActivateSettingsCache(true);
+ gContext->ClearSettingsCache();
+ gContext->SetSetting("HostMyhostname",current_hostname);
+ gContext->SaveSetting("HostMyhostname",current_hostname);
+ }
+ kmfile.close();
+ cout << current_hostname << endl;
+ runNextSetting = ask_validate_network();
+ }
+ else
+ {
+ //popup things went wrong
+ DialogCode returncode = MythPopupBox::Show2ButtonPopup(gContext->GetMainWindow(),
+ QString(""),
+ QObject::tr("Couldn't find the old config file, proceed with update?"),
+ QObject::tr("No"), QObject::tr("Yes"), kDialogCodeButton1);
+ if ( returncode == kDialogCodeButton1 )
+ {
+ runNextSetting = ask_validate_network();
+ }
+ else if ( returncode == kDialogCodeButton0 )
+ {
+ runNextSetting = 1;
+ }
+ }
+
+ }
+ }
+
+ }
+
+
+//run through the system settings
+if ( runNextSetting == 0 )
+{
+ tflag = runsettings(false,false,true,true,false,false,false,false,false,false,true,false);
+
+}
+else
+{
+ cancelPopup();
+ showPopup();
+}
+
+if ( tflag == 1 )
+ {
+ cancelPopup();
+ GO_popup(installwarningtext);
+ }
+ else
+ {
+ cancelPopup();
+ showPopup();
+ }
+
+}
+
+void busy_network(void)
+{
+ MythBusyDialog *busy = new MythBusyDialog(
+ QObject::tr("Starting network"));
+ busy->start();
+ int return_code = 0;
+ while ( return_code == 0 )
+ {
+ qApp->processEvents ();
+ usleep(900);
+ return_code = myth_system("ps -ef|grep install_proxy.sh| grep setup_network |grep -v grep > /dev/null");
+ }
+ busy->Close();
+ busy->deleteLater();
+}
+
+
+int WelcomeDialog::ask_validate_network(void)
+{
+
+ QString pop_text="abc";
+ int retval = 1;
+ while ( retval != 0 )
+ {
+ int settingsrec = runsettings(false,true,false,false,false,false,false);
+ if ( settingsrec != 1 )
+ return 1;
+ else
+ {
+ MythProgressDialog *network_check = NULL;
+ network_check = new MythProgressDialog(QObject::tr("Please wait while the network is checked."), 6);
+ updateScreen();
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it setup_network &");
+ retval = system(cmdtxt);
+ busy_network();
+ if (network_check)
+ {
+ network_check->setProgress(1);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it check_self");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Could not find myself on the network";
+ }
+ }
+
+ if ( retval == 0)
+ {
+ network_check->setProgress(2);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it check_gw");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Could not locate gateway";
+ }
+ }
+
+ if (retval == 0)
+ {
+ network_check->setProgress(3);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it check_ns");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Could not locate nameserver";
+ }
+ }
+ if (retval == 0)
+ {
+ network_check->setProgress(4);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it check_names");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Could not lookup names";
+ }
+ }
+ if (retval == 0)
+ {
+ network_check->setProgress(5);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it host_names");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Hostname already on the network";
+ }
+ }
+
+
+ network_check->setProgress(6);
+ if (network_check)
+ {
+ network_check->Close();
+ network_check->deleteLater();
+ }
+
+ if (retval != 0 )
+ {
+ DialogCode val = MythPopupBox::Show2ButtonPopup(gContext->GetMainWindow(), QString(""), QObject::tr(pop_text), QObject::tr("Continue"), QObject::tr("Try again"), kDialogCodeButton0);
+
+ if (kDialogCodeButton0 == val )
+ retval = 0;
+ }
+ }
+ }
+return 0;
+}
+
+
+void WelcomeDialog::install_it(void)
+{
+ QString installtype = gContext -> GetSetting("HOSTinstallationtype");
+ QString rootfs = gContext -> GetSetting("HOSTrootfstype");
+ QString datafs = gContext -> GetSetting("HOSTdatafstype");
+ QString rootsize = gContext -> GetSetting("HOSTOSsize");
+ rootsize=rootsize + "000";
+ QString usealldata = gContext -> GetSetting("HostUseALLdata");
+ QString datasize = gContext -> GetSetting("HOSTDATAsize");
+ QString uprootfs = gContext -> GetSetting("HOSTuprootfstype");
+ QString useswap = gContext -> GetSetting("HostUseSWAP");
+ QString swapsize = gContext -> GetSetting("HOSTSWAPsize");
+ if ( installtype != "Upgrade" )
+ current_hostname = gContext->GetSetting("HostMyhostname");
+ QString clean_upgrade = getenv("CLEAN_UPGRADE");
+ if ( clean_upgrade == "YES" )
+ current_hostname = gContext->GetSetting("HostMyhostname");
+
+//get the hostname here if upgrade then use previous declarion of hostname
+ if ( usealldata == "1" )
+ {
+ datasize="ALL";
+ }
+ else
+ {
+ datasize=datasize + "000";
+ }
+ if ( useswap == "0" )
+ {
+ swapsize="NO";
+ };
+
+
+ if ( installtype == "Full/Auto" )
+ {
+ QString currentitem;
+ QString line;
+ QFile file("/proc/meminfo");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ line = t.readLine();
+ if ( line.startsWith("MemTotal:"))
+ {
+ currentitem = line.simplifyWhiteSpace();
+ currentitem = currentitem.section( " ", 1, 1 );
+ }
+ }
+ file.close();
+ bool ok;
+ int mem = currentitem.toInt( &ok, 10 ); // dec == 0, ok == FALSE
+ cout << mem << endl;
+ if ( mem >= 500000 )
+ {
+ cout << gContext -> GetSetting("HostXres") << endl;
+ if ((gContext -> GetSetting("HostXres")) == "1280x720" )
+ {
+ gContext->SaveSetting("Theme", "syth-lacquer-wide");
+ cout <<"Setting theme to syth-wide" << endl;
+ }
+ }
+
+
+ QString cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh full_install_it " + install_drive + " " + rootfs + " " + rootsize + " " + datafs + " " + datasize + " " + swapsize + "&");
+ system(cmdtxt);
+ }
+ else if ( installtype == "Upgrade" )
+ {
+ QString cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh upgrade_it " + install_drive + " " + uprootfs + "&");
+ system(cmdtxt);
+ }
+ else if (installtype=="NET")
+ {
+ QString olddb = gContext->GetSetting("HostMysqlserver");
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ char localhostname[1024];
+ if (gethostname(localhostname, 1024))
+ {
+ VERBOSE(VB_IMPORTANT,
+ "MCP: Error, could not determine host name." + ENO);
+ localhostname[0] = '\0';
+ }
+ QString h;
+ h=localhostname;
+ cout << "calling restore_default_settings with hostname " << h << endl;
+ cmdtxt.append("bin/restore_default_settings.sh -c save -t syssettings -d 127.0.0.1 -h " + h);
+ system(cmdtxt);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh NETBOOT " + install_drive + " &");
+ system(cmdtxt);
+ }
+ WORKING_ON_INSTALL = true;
+ usleep (500);
+ updateScreen();
+ usleep (500);
+ updateScreen();
+ cancelPopup();
+}
diff --git a/abs/core/mythinstall/installdialog.h b/abs/core/mythinstall/installdialog.h
new file mode 100755
index 0000000..f1c98ab
--- /dev/null
+++ b/abs/core/mythinstall/installdialog.h
@@ -0,0 +1,101 @@
+#ifndef WELCOMEDIALOG_H_
+#define WELCOMEDIALOG_H_
+
+#include <iostream>
+using namespace std;
+
+#include <qdatetime.h>
+#include "mythdialogs.h"
+#include "libmyth/dialogbox.h"
+class WelcomeDialog : public MythThemedDialog
+{
+
+ Q_OBJECT
+
+ public:
+
+ WelcomeDialog(MythMainWindow *parent,
+ QString window_name,
+ QString theme_filename,
+ const char* name = 0);
+ ~WelcomeDialog();
+
+ void keyPressEvent(QKeyEvent *e);
+ void wireUpTheme();
+ int exec(void);
+
+ protected slots:
+ void updateAll(void);
+ void updateStatus(void);
+ void updateScreen(void);
+ void closeDialog();
+ void updateTime();
+ void showPopup();
+ void showPopup_2();
+ void GO_popup(QString);
+ void Reboot_popup();
+ void cancelPopup();
+ void MAINPopup();
+ QString diskmodel(QString,QString);
+ QString findinstallsouce(void);
+ void Display_2ndpopup();
+ bool updateRecordingList(void);
+ bool updateScheduledList(void);
+ void shutdownNow(int);
+
+ void install_hda(void);
+ void install_hdb(void);
+ void install_hdc(void);
+ void install_hdd(void);
+ void install_sda(void);
+ void install_sdb(void);
+ void install_sdc(void);
+ void install_sdd(void);
+ void install_net(void);
+ void install_generic(void);
+ void install_it(void);
+ void runLIVECD(void);
+ void busy_box(void);
+ void busy_find_oldsettings(void);
+ int ask_validate_network(void);
+ private:
+ void updateStatusMessage(void);
+ UITextType* getTextType(QString name);
+ MythPopupBox *popup;
+ DialogBox *reboot_box;
+ DialogBox *upgrade_box;
+ //
+ // GUI stuff
+ //
+ UITextType *m_status_text;
+ UITextType *m_recording_text;
+ UITextType *m_scheduled_text;
+ UITextType *m_error_text;
+ UITextType *m_mv_text;
+ UITextType *m_warning_text;
+ UITextType *m_time_text;
+ UITextType *m_date_text;
+ QTimer *m_updateStatusTimer;
+ QTimer *m_updateScreenTimer;
+ QTimer *m_timeTimer;
+
+ QString m_installDir;
+ QString m_timeFormat;
+ QStringList m_statusList;
+ QString install_drive ;
+ QString install_text;
+ QString version_text;
+ QString recording_text;
+ QString scheduled_text;
+ QString error_text;
+ QString mythvantage_text;
+ string bin_prefix;
+ QString current_hostname;
+
+ bool I_AM_BUSY;
+ bool WORKING_ON_INSTALL;
+
+
+};
+
+#endif
diff --git a/abs/core/mythinstall/installsettings.cpp b/abs/core/mythinstall/installsettings.cpp
new file mode 100755
index 0000000..8118132
--- /dev/null
+++ b/abs/core/mythinstall/installsettings.cpp
@@ -0,0 +1,4556 @@
+//_include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include "settings.h"
+
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <stdexcept>
+#include <vector>
+#include <cassert>
+#include <algorithm>
+#include <tr1/unordered_map>
+
+
+#include <sys/wait.h> // For WIFEXITED on Mac OS X
+#include <qapplication.h>
+#include "mythcontext.h"
+#include "libmyth/mythdialogs.h"
+#include "mythdbcon.h"
+#include "lcddevice.h"
+#include "tv.h"
+#include "programinfo.h"
+#include "uitypes.h"
+#include "remoteutil.h"
+#include <qdir.h>
+#include <qimage.h>
+#include <stdlib.h>
+#include <cstdlib>
+
+#include "installsettings.h"
+#include "installdialog.h"
+#include "xorgsettings.h"
+#include "password_manage.h"
+#include "misc_settings.h"
+#include "infrared.h"
+
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+#include "mv_common.h"
+
+int timezone_unknown = FALSE;
+extern HostParms hostparm;
+extern DDCinfo ddcinfo;
+
+
+
+bool displaymysqlonly = false ;
+bool displayshownetwork =false ;
+bool displayshowhostype = false ;
+bool displayshowmisc =false ;
+bool displayshowshutdown =false ;
+bool displayshowadvanced = false;
+bool displayshowsound = false ;
+bool displayshowadvancedX = false;
+bool displayaccesscontrol= false;
+bool displayplugins = false;
+bool displayuser = false;
+bool displaywebuser = false;
+bool displayddns = false;
+bool displayinfrared = false;
+bool displayscreensaver = false;
+bool install_hobbit = false;
+
+
+static HostComboBox *ThemePainter()
+{
+ HostComboBox *gc = new HostComboBox("ThemePainter");
+ gc->setLabel(QObject::tr("Paint Engine"));
+ gc->addSelection(QObject::tr("Qt"), "qt");
+ gc->addSelection(QObject::tr("OpenGL"), "opengl");
+ gc->setHelpText(QObject::tr("This selects what Myth uses to draw. If you have decent hardware, select OpenGL. Changing this requires a restart."));
+ return gc;
+
+}
+static HostComboBox *HostMyhostname()
+{
+ HostComboBox *gc = new HostComboBox("HostMyhostname",true);
+ gc->setLabel(QObject::tr("Hostname"));
+ gc->addSelection("Envy");
+ gc->addSelection("Greed");
+ gc->addSelection("Lust");
+ gc->addSelection("Sloth");
+ gc->addSelection("Wrath");
+ gc->addSelection("Gluttony");
+ gc->addSelection("Pride");
+ gc->addSelection("Humility");
+ gc->addSelection("Generosity");
+ gc->addSelection("Love");
+ gc->addSelection("Kindness");
+ gc->addSelection("SelfControl");
+ gc->addSelection("Faith");
+ gc->addSelection("Zeal");
+ gc->addSelection("type_hostname_here");
+ gc->setHelpText(QObject::tr("Hostname of this machine"));
+ return gc;
+};
+
+static HostCheckBox *HostDHCPHostname()
+{
+ HostCheckBox *gc = new HostCheckBox("HostDHCPhostname");
+ gc->setLabel(QObject::tr("Use Hostname provided by DHCP"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Checking this will use the hostname as provided by dhcp for the default interface. If none is provided by DHCP it will use the hostname provided in the hostname box"));
+ return gc;
+};
+
+
+static HostLineEdit *HostDDnslogin()
+{
+ HostLineEdit *gc = new HostLineEdit("HostDDnslogin");
+ gc->setLabel(QObject::tr("Login"));
+ gc->setValue("");
+ gc->setHelpText(QObject::tr("Login for ddns account"));
+ return gc;
+};
+
+static HostLineEdit *HostDDnspassword()
+{
+ HostLineEdit *gc = new HostLineEdit("HostDDnspassword");
+ gc->setLabel(QObject::tr("Password"));
+ gc->setValue("");
+ gc->SetPasswordEcho(true);
+ gc->setHelpText(QObject::tr("Password for ddns account."));
+ return gc;
+};
+
+static HostLineEdit *HostDDnshostname()
+{
+ HostLineEdit *gc = new HostLineEdit("HostDDnshostname");
+ gc->setLabel(QObject::tr("DDNS hostname"));
+ gc->setValue("");
+ gc->setHelpText(QObject::tr("Hostname used for DDNS."));
+ return gc;
+};
+
+static HostCheckBox *HostDDnsEnable()
+{
+ HostCheckBox *gc = new HostCheckBox("HostDDnsEnable");
+ gc->setLabel(QObject::tr("Enable DDNS support"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Update DDNS records at dyndns.com. Visit http://dyndns.com to setup your account."));
+ return gc;
+};
+
+class DDnssettings: public TriggeredConfigurationGroup {
+public:
+ DDnssettings():
+ TriggeredConfigurationGroup(false,false,false,false) {
+ setLabel(QObject::tr("DDNS settings"));
+ SetVertical(true);
+ Setting* trigger = HostDDnsEnable() ;
+ addChild(trigger);
+ setTrigger(trigger);
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false,false,false,false);
+ settings->addChild(HostDDnshostname());
+ settings->addChild(HostDDnslogin());
+ settings->addChild(HostDDnspassword());
+
+ addTarget("0", new VerticalConfigurationGroup(false, false));
+ addTarget("1", settings);
+ };
+};
+
+
+
+
+// static HostLineEdit *HostIP()
+// {
+// HostLineEdit *gc = new HostLineEdit("HostIP");
+// gc->setLabel(QObject::tr("Ip address"));
+// gc->setValue("192.168.1.12");
+// gc->setHelpText(QObject::tr("IP address of the new installation"));
+// return gc;
+// };
+//
+// static HostComboBox *HostNETMASK()
+// {
+// HostComboBox *gc = new HostComboBox("HostNETMASK");
+// gc->setLabel(QObject::tr("Netmask"));
+// gc->addSelection("/0 0.0.0.0");
+// gc->addSelection("/1 128.0.0.0");
+// gc->addSelection("/2 192.0.0.0");
+// gc->addSelection("/3 224.0.0.0");
+// gc->addSelection("/4 240.0.0.0");
+// gc->addSelection("/5 248.0.0.0");
+// gc->addSelection("/6 252.0.0.0");
+// gc->addSelection("/7 254.0.0.0");
+// gc->addSelection("/8 255.0.0.0");
+// gc->addSelection("/9 255.128.0.0");
+// gc->addSelection("/10 255.192.0.0 ");
+// gc->addSelection("/11 255.224.0.0");
+// gc->addSelection("/12 255.240.0.0");
+// gc->addSelection("/13 255.248.0.0");
+// gc->addSelection("/14 255.252.0.0");
+// gc->addSelection("/15 255.254.0.0");
+// gc->addSelection("/16 255.255.0.0");
+// gc->addSelection("/17 255.255.128.0");
+// gc->addSelection("/18 255.255.192.0");
+// gc->addSelection("/19 255.255.224.0");
+// gc->addSelection("/20 255.255.240.0");
+// gc->addSelection("/21 255.255.248.0");
+// gc->addSelection("/22 255.255.252.0");
+// gc->addSelection("/23 255.255.254.0");
+// gc->addSelection("/24 255.255.255.0");
+// gc->addSelection("/25 255.255.255.128");
+// gc->addSelection("/26 255.255.255.192");
+// gc->addSelection("/27 255.255.255.224");
+// gc->addSelection("/28 255.255.255.240");
+// gc->addSelection("/29 255.255.255.248");
+// gc->addSelection("/30 255.255.255.252");
+// gc->addSelection("/31 255.255.255.254");
+// gc->addSelection("/32 255.255.255.255");
+// gc->setHelpText(QObject::tr("Netmask"));
+// gc->setValue(24);
+// return gc;
+// };
+
+
+QString findnet()
+{
+
+QString netdev="";
+//QString netdev="eth0 eth1 wlan0 wlan1 ath0 ";
+//QString netdev="eth0 eth1";
+system("/sbin/ifconfig -a > /tmp/.netinfo");
+QString line;
+QFile file("/tmp/.netinfo");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.contains("HWaddr"))
+ {
+ QString s = line.simplifyWhiteSpace();
+ s = s.section( " ", 0, 0 ); // s == "surname"
+ netdev+=s;
+ netdev+=" ";
+ }
+ }
+ file.close();
+ }
+return netdev;
+}
+
+QString findnet_wireless()
+{
+
+QString netdev="";
+//QString netdev="eth0 eth1 wlan0 wlan1 ath0 ";
+system("/usr/sbin/iwconfig > /tmp/.netinfo_wireless");
+QString line;
+QFile file("/tmp/.netinfo_wireless");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.contains("Nickname") || line.contains("ESSID"))
+ {
+ QString s = line.simplifyWhiteSpace();
+ s = s.section( " ", 0, 0 ); // s == "surname"
+ netdev+=s;
+ netdev+=" ";
+ }
+ }
+ file.close();
+ }
+return netdev;
+}
+
+static HostComboBox *HostNetDevice()
+{
+ HostComboBox *gc = new HostComboBox("HostNetDevice");
+ gc->setLabel(QObject::tr("Device"));
+ QString foundnet=findnet();
+ cout << foundnet << endl;
+
+ if (foundnet.contains(hostparm.ThisHostnetOLD))
+ {
+// cout << "old setting is still active" << endl;
+// cout << hostparm.ThisHostnetOLD << endl;
+ QString s = "HostActiveonboot";
+ s+=hostparm.ThisHostnetOLD;
+ gContext->SaveSetting(s, hostparm.ThisHostnetActiveOLD );
+ }
+
+ if (foundnet.contains("eth0"))
+ gc->addSelection("eth0");
+
+ if (foundnet.contains("eth1"))
+ gc->addSelection("eth1");
+
+ if (foundnet.contains("wlan0"))
+ gc->addSelection("wlan0");
+
+ if (foundnet.contains("wlan1"))
+ gc->addSelection("wlan1");
+
+ if (foundnet.contains("ath0"))
+ gc->addSelection("ath0");
+
+ int findoldnetdevice=gc->findSelection(hostparm.ThisHostnetOLD);
+ gc->setValue(findoldnetdevice);
+
+
+
+ gc->setHelpText(QObject::tr("Network interface"));
+ return gc;
+};
+
+// static HostLineEdit *HostGW()
+// {
+// HostLineEdit *gc = new HostLineEdit("HostGW");
+// gc->setLabel(QObject::tr("Gateway"));
+// gc->setValue("192.168.1.1");
+// gc->setHelpText(QObject::tr("This is the default route"));
+// return gc;
+// };
+//
+// static HostLineEdit *HostDNS()
+// {
+// HostLineEdit *gc = new HostLineEdit("HostDNS");
+// gc->setLabel(QObject::tr("Name server"));
+// gc->setValue("192.168.1.1");
+// gc->setHelpText(QObject::tr("Name server"));
+// return gc;
+// };
+
+static HostCheckBox *HostActiveonboot()
+{
+ HostCheckBox *gc = new HostCheckBox("HostActiveonboot");
+ gc->setLabel(QObject::tr("Device is active on boot"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Network is started on boot"));
+ return gc;
+};
+
+
+static HostCheckBox *HostServiceSamba()
+{
+ HostCheckBox *gc = new HostCheckBox("HostServiceSamba");
+ gc->setLabel(QObject::tr("Windows sharing"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Allow window machines to access recorded files"));
+ return gc;
+};
+
+static HostCheckBox *HostServiceSamba_write()
+{
+ HostCheckBox *gc = new HostCheckBox("HostServiceSamba_write");
+ gc->setLabel(QObject::tr("Readonly"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("If checked, all remote connections will be read only. If not checked then remote clients will have write and delete abilites. "));
+ return gc;
+};
+
+
+static HostCheckBox *HostServiceSamba_writehome()
+{
+ HostCheckBox *gc = new HostCheckBox("HostServiceSamba_writehome");
+ gc->setLabel(QObject::tr("Readonly"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("If checked, all remote connections will be read only. If not checked then remote clients will have write and delete abilites. "));
+ return gc;
+};
+
+static HostCheckBox *HostServiceSamba_media()
+{
+ HostCheckBox *gc = new HostCheckBox("HostServiceSamba_media");
+ gc->setLabel(QObject::tr("share media"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr(" "));
+ return gc;
+};
+
+static HostCheckBox *HostServiceSamba_home()
+{
+ HostCheckBox *gc = new HostCheckBox("HostServiceSamba_home");
+ gc->setLabel(QObject::tr("share home"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr(" "));
+ return gc;
+};
+
+
+
+static HostComboBox *HostServiceSamba_domain()
+{
+ HostComboBox *gc = new HostComboBox("HostServiceSamba_domain",true);
+ gc->setLabel(QObject::tr("Workgroup"));
+ gc->setHelpText(QObject::tr("Workgroup for smb share"));
+ gc->addSelection("WORKGROUP");
+ QString currentitem;
+ QString line;
+ QFile file("/tmp/smbdomainlist");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.startsWith("domain"))
+ {
+ currentitem = line.section( " ", 1, 1 );
+ if ( currentitem != "-" )
+ gc->addSelection(currentitem);
+ }
+ }
+ file.close();
+ }
+ gc->addSelection("type_workgroup_here");
+ return gc;
+};
+
+static HostCheckBox *HostLircWait()
+{
+ HostCheckBox *gc = new HostCheckBox("HostLircWait");
+ gc->setLabel(QObject::tr("Wait for lirc"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("System will wait for lirc before starting the UI "));
+ return gc;
+};
+
+
+static HostComboBox *HostEvrouterConfig()
+{
+ HostComboBox *gc = new HostComboBox("HostEvrouterConfig",true);
+ gc->setLabel(QObject::tr("Layout"));
+ gc->setHelpText(QObject::tr("Choose the keypad layout"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/evrouter");
+ QDir evrouter(dirtxt);
+ //evrouter.setFilter(QDir::Dirs);
+ evrouter.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *infos = evrouter.entryInfoList();
+ const QFileInfo *info;
+ if (!infos)
+ return gc;
+ QFileInfoListIterator infoIt( *infos );
+ QString currentitem = ".";
+ while( (info=infoIt.current()) != 0 )
+ {
+ currentitem = info->baseName( TRUE );
+ if ( currentitem != ".." && currentitem != "." && currentitem != "")
+ {
+ gc->addSelection(currentitem);
+ }
+ ++infoIt;
+ }
+ gc->addSelection("tinker");
+ return gc;
+};
+
+
+static HostCheckBox *HostServiceNFS()
+{
+ HostCheckBox *gc = new HostCheckBox("HostServiceNFS");
+ gc->setLabel(QObject::tr("Standard file sharing"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Allow all machines to access recorded files with nfs"));
+ return gc;
+};
+
+
+static HostCheckBox *HostServiceMythWEB()
+{
+ HostCheckBox *gc = new HostCheckBox("HostServiceMythWEB");
+ gc->setLabel(QObject::tr("Enable Mythweb"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Allow scheduling using a web browser"));
+ return gc;
+};
+
+static HostCheckBox *HostServiceHobbitclient()
+{
+ HostCheckBox *gc = new HostCheckBox("HostServiceHobbitclient");
+ gc->setLabel(QObject::tr("Hobbit-client"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Report stats and other stuff to the master backend"));
+ return gc;
+};
+
+static GlobalCheckBox *GlobalServiceHobbitserver()
+{
+ GlobalCheckBox *gc = new GlobalCheckBox("GlobalServiceHobbitserver");
+ gc->setLabel(QObject::tr("Hobbit-server"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Run the hobbit server to collect stats and other stuff"));
+ return gc;
+};
+
+
+static HostCheckBox *HostServiceRRD()
+{
+ HostCheckBox *gc = new HostCheckBox("HostServiceRRD");
+ gc->setLabel(QObject::tr("rrd_stats"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Collect stats and create graphs of various system resources."));
+ return gc;
+};
+
+static HostCheckBox *HostUseDHCP()
+{
+ HostCheckBox *gc = new HostCheckBox("HostUseDHCP");
+ gc->setLabel(QObject::tr("Static ip address"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Enable to use a static ip address, otherwise dhcp will be used."));
+ return gc;
+};
+
+static HostCheckBox *HostRunDHCP()
+{
+ HostCheckBox *gc = new HostCheckBox("HostRunDHCP");
+ gc->setLabel(QObject::tr("DHCP server"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Check to run a dhcp server."));
+ return gc;
+};
+
+static HostCheckBox *HostRunEvrouter()
+{
+ HostCheckBox *gc = new HostCheckBox("HostRunEvrouter");
+ gc->setLabel(QObject::tr("Enable special keys"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Check if using evrouter"));
+ return gc;
+};
+
+static HostCheckBox *HostUsemythfrontend()
+{
+ HostCheckBox *gc = new HostCheckBox("HostUseMythWelcome");
+ gc->setLabel(QObject::tr("Run MythWelcome"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("If this option is checked mythwelcome will be started, instead of the usual frontend"));
+ return gc;
+};
+
+static HostCheckBox *HostRunFrontend()
+{
+ HostCheckBox *gc = new HostCheckBox("HostRunFrontend");
+ gc->setLabel(QObject::tr("Run the Frontend."));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("If this option is checked mythfrontend will also start"));
+ return gc;
+};
+
+
+/*
+static HostComboBox *HostTransmitproto()
+{
+ HostComboBox *gc = new HostComboBox("HostTransmitproto",false);
+ gc->setLabel(QObject::tr("Transmitter"));
+ gc->addSelection("none");
+ gc->setValue(0);
+ gc->setHelpText(QObject::tr("Remote codes to control a cable box"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/transmit");
+ QDir transmit(dirtxt);
+ transmit.setFilter(QDir::Dirs);
+ transmit.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *infos = transmit.entryInfoList();
+ const QFileInfo *info;
+ if (!infos)
+ return gc;
+ QFileInfoListIterator infoIt( *infos );
+ QString currentitem = ".";
+ while( (info=infoIt.current()) != 0 )
+ {
+ currentitem = info->baseName( TRUE );
+ if ( currentitem != ".." && currentitem != "." && currentitem != "")
+ {
+ gc->addSelection(currentitem);
+ }
+ ++infoIt;
+ }
+ return gc;
+};
+
+
+
+static HostComboBox *HostReceiverType()
+{
+ HostComboBox *gc = new HostComboBox("HostReceiverType");
+ gc->setLabel(QObject::tr("Receiver"));
+ gc->addSelection("Default");
+ gc->addSelection("Serial");
+ gc->addSelection("Usb");
+ gc->addSelection("Usb-imon");
+ gc->addSelection("Hauppauge");
+ gc->addSelection("tinker");
+ gc->setHelpText(QObject::tr("The type of infrared receiver and transmitter being used."));
+ gc->setValue("Default");
+ return gc;
+};
+
+static HostComboBox *HostSerialPortlirc()
+{
+ HostComboBox *gc = new HostComboBox("HostSerialPortlirc",false);
+ gc->setLabel(QObject::tr("Serial Port"));
+ gc->addSelection("ttyS0");
+ gc->addSelection("ttyS1");
+ gc->addSelection("ttyS2");
+ gc->addSelection("ttyS3");
+ gc->setHelpText(QObject::tr("Serial port with the lirc receiver or transmitter"));
+ return gc;
+}
+
+*/
+
+static HostComboBox *HostMysqlserverip_listbox()
+{
+ HostComboBox *gc = new HostComboBox("HostMysqlServer",true);
+ gc->setLabel(QObject::tr("Mysql server"));
+
+ QString currentitem;
+ QString prevline;
+ QString line;
+ QFile file("/tmp/mysqllist");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.startsWith(" address"))
+ {
+ currentitem = line.section( " ", 5, 5 );
+ currentitem = currentitem.section( "[" , 1,1 );
+ currentitem = currentitem.section( "]" , 0, 0 );
+
+ currentitem = currentitem + "\t" + prevline.section( " ",5,5 );
+ //cout << currentitem << endl;
+ gc->addSelection(currentitem);
+ }
+ prevline = line;
+ }
+ file.close();
+ //system ("rm -f /tmp/mysqllist");
+ }
+ gc->addSelection("Manual: type ip here");
+ gc->setHelpText(QObject::tr(""));
+
+ QString NETBOOT = getenv("NETBOOT");
+ NETBOOT=NETBOOT.stripWhiteSpace();
+ if ( NETBOOT != "YES" )
+ {
+ if ( ((gContext->GetSetting("HostaccesshostypeSystemtype")) == "0" ))
+ gc->setEnabled(false);
+ }
+
+ return gc;
+}
+
+
+
+static HostCheckBox *HostRemoteBackup()
+{
+ HostCheckBox *gc = new HostCheckBox("HostRemoteBackup");
+ gc->setLabel(QObject::tr("Remote Backup"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Copy the resulting backup file to another location"));
+ return gc;
+};
+
+
+static HostComboBox *HostRemoteBackupDir()
+{
+ QString tempItem;
+ HostComboBox *gc = new HostComboBox("HostRemoteBackupDir",true);
+ gc->setLabel(QObject::tr("dir or host" ));
+ gc->addSelection("dir:/localdir");
+ MSqlQuery query(MSqlQuery::InitCon());
+
+
+ query.prepare( "SELECT DISTINCT hostname from settings where hostname is not null and not (hostname=:HOSTNAME);");
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ if (query.exec() && query.isActive() && query.size() > 0)
+ {
+ while (query.next())
+ {
+ tempItem = query.value(0).toString();
+ gc->addSelection(tempItem);
+ }
+ }
+
+ gc->setHelpText(QObject::tr("Host to copy backup file to. dir:/$localdir will copy to a local directory instead of a remote host "));
+
+ return gc;
+};
+
+class Backupsettings: public TriggeredConfigurationGroup {
+public:
+ Backupsettings():
+ TriggeredConfigurationGroup(false, false, true, true,false, false, true, true) {
+ SetVertical(false);
+ setLabel(QObject::tr("Backup Settings"));
+ Setting* trigger = HostRemoteBackup();
+ addChild(trigger);
+ setTrigger(trigger);
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false,false);
+ settings->addChild(HostRemoteBackupDir());
+
+ addTarget("0", new VerticalConfigurationGroup(false, false));
+ addTarget("1", settings);
+
+ };
+};
+
+
+
+static HostCheckBox *HostPKG_MIRROR()
+{
+ HostCheckBox *gc = new HostCheckBox("HostPKG_MIRROR");
+ gc->setLabel(QObject::tr("Use Local mirror"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Master Backend will be used as the repo source."));
+ return gc;
+};
+
+static GlobalCheckBox *GlobalPKG_MIRROR()
+{
+ GlobalCheckBox *gc = new GlobalCheckBox("GlobalPKG_MIRROR");
+ gc->setLabel(QObject::tr("Local mirror"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Keep a local copy of the packages. Allow other frontends to install from the local copy."));
+ return gc;
+};
+
+
+
+static HostCheckBox *HostncidClient()
+{
+ HostCheckBox *gc = new HostCheckBox("HostncidClient");
+ gc->setLabel(QObject::tr("Show Callerid"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Callerid popup, backend must be running the callerid program"));
+ return gc;
+};
+
+static HostCheckBox *HostncidDaemon()
+{
+ HostCheckBox *gc = new HostCheckBox("HostncidDaemon");
+ gc->setLabel(QObject::tr("Run Callerid "));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Run Daemon to collect callerid info"));
+ return gc;
+};
+
+static HostComboBox *HostSerialPortncid()
+{
+ HostComboBox *gc = new HostComboBox("HostSerialPortncid",false);
+ gc->setLabel(QObject::tr("Serial Port"));
+ gc->addSelection("ttyS0");
+ gc->addSelection("ttyS1");
+ gc->addSelection("ttyS2");
+ gc->addSelection("ttyS3");
+ gc->setHelpText(QObject::tr("Serial port where callerid capable modem is connected"));
+ return gc;
+}
+
+static HostCheckBox *Hostbootsplash()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostbootsplash");
+ gc->setLabel(QObject::tr("Enable bootsplash"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Covers up boot messages. "));
+ return gc;
+};
+
+//-------------------------------------screensaver settings-------------------
+
+static HostComboBox *HostScreensaverType()
+{
+ HostComboBox *gc = new HostComboBox("HostScreensaverType");
+ gc->setLabel(QObject::tr("Screensaver program"));
+ gc->addSelection("xscreensaver");
+ gc->addSelection("gscreensaver");
+ gc->addSelection("none");
+ gc->addSelection("tinker");
+ gc->setHelpText(QObject::tr("Screen saver program to use."));
+ gc->setValue("none");
+ return gc;
+};
+
+static HostSpinBox *HostScreensaverIdle()
+{
+ HostSpinBox *gc = new HostSpinBox("HostScreensaverIdle", 5, 60, 1, true);
+ gc->setLabel(QObject::tr("Idle time"));
+ gc->setValue(5);
+ gc->setHelpText(QObject::tr("Number of minutes to wait before starting screensaver." ));
+ return gc;
+}
+
+static HostCheckBox *HostScreensaverBlank()
+{
+ HostCheckBox *gc = new HostCheckBox("HostScreensaverBlank");
+ gc->setLabel(QObject::tr("Blank"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Blank the screen instead of using a screensaver"));
+ return gc;
+};
+
+static HostCheckBox *HostScreensaverRandom()
+{
+ HostCheckBox *gc = new HostCheckBox("HostScreensaverRandom");
+ gc->setLabel(QObject::tr("Random"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Use a random screensaver"));
+ return gc;
+};
+
+
+
+static HostComboBox *HostGScreensaverTheme()
+{
+ HostComboBox *gc = new HostComboBox("HostGScreensaverTheme");
+ gc->setLabel(QObject::tr("Screensaver"));
+ gc->setHelpText(QObject::tr("Screen saver program to use."));
+ QString line;
+ QString dirtxt=MV_ROOT;
+ dirtxt.append("templates/gscreensavers");
+ QFile file(dirtxt);
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ gc->addSelection(line);
+ }
+ file.close();
+ }
+ return gc;
+};
+
+static HostComboBox *HostXScreensaverTheme()
+{
+ HostComboBox *gc = new HostComboBox("HostXScreensaverTheme");
+ gc->setLabel(QObject::tr("Screensaver"));
+ gc->setHelpText(QObject::tr("Screen saver to display."));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/xscreensavers");
+ //read in from a file.
+ QString line;
+ QFile file(dirtxt);
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ gc->addSelection(line);
+ }
+ file.close();
+ }
+ return gc;
+};
+
+class Screensaverhostsettings: public TriggeredConfigurationGroup {
+public:
+ Screensaverhostsettings():
+
+ TriggeredConfigurationGroup() {
+ SetVertical(true);
+ setLabel(QObject::tr("Screensaver settings (1/1)"));
+ Setting* trigger = HostScreensaverType() ;
+ addChild(trigger);
+ setTrigger(trigger);
+ ConfigurationGroup* screensaversettings = new GridConfigurationGroup(2);
+ screensaversettings->addChild(HostScreensaverBlank());
+ screensaversettings->addChild(HostScreensaverRandom());
+
+ ConfigurationGroup* xscreensaversettings = new VerticalConfigurationGroup();
+ xscreensaversettings->addChild(screensaversettings);
+ xscreensaversettings->addChild(HostScreensaverIdle());
+ xscreensaversettings->addChild(HostXScreensaverTheme());
+
+
+ ConfigurationGroup* gscreensaversettings = new VerticalConfigurationGroup();
+ gscreensaversettings->addChild(screensaversettings);
+ gscreensaversettings->addChild(HostScreensaverIdle());
+ gscreensaversettings->addChild(HostGScreensaverTheme());
+
+
+
+ addTarget("tinker", new VerticalConfigurationGroup(false, false));
+ addTarget("none", new VerticalConfigurationGroup(false, false));
+ addTarget("gscreensaver", gscreensaversettings);
+ addTarget("xscreensaver", xscreensaversettings);
+ };
+};
+
+
+
+
+//-------------------------------------access setting----------------------
+
+static HostCheckBox *Hostaccessnetwork()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostaccessnetwork");
+ gc->setLabel(QObject::tr("Network "));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Control access to network screen. Checked means the screen is enabled."));
+ return gc;
+};
+
+static HostCheckBox *Hostaccesshostype()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostaccesshostype");
+ gc->setLabel(QObject::tr("hostype "));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Control access to hostype screen. Checked means the screen is enabled."));
+ return gc;
+};
+
+static HostCheckBox *HostaccesshostypeSystemtype()
+{
+ HostCheckBox *gc = new HostCheckBox("HostaccesshostypeSystemtype");
+ gc->setLabel(QObject::tr("Change hostype"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Ability to change sql server and system type. Checked means the screen is enabled."));
+ return gc;
+};
+
+static HostCheckBox *Hostaccessmisc()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostaccessmisc");
+ gc->setLabel(QObject::tr("misc "));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Control access to misc screen. Checked means the screen is enabled."));
+ return gc;
+};
+
+static HostCheckBox *Hostaccesssleep()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostaccesssleep");
+ gc->setLabel(QObject::tr("sleep "));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Control access to sleep screen. Checked means the screen is enabled."));
+ return gc;
+};
+
+static HostCheckBox *Hostaccessadvanced()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostaccessadvanced");
+ gc->setLabel(QObject::tr("advanced "));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Control access to advanced screen. Checked means the screen is enabled. "));
+ return gc;
+};
+
+static HostCheckBox *HostaccessadvancedX()
+{
+ HostCheckBox *gc = new HostCheckBox("HostaccessadvancedX");
+ gc->setLabel(QObject::tr("advancedX "));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Control access to advancedX screen. Checked means the screen is enabled. "));
+ return gc;
+};
+static HostCheckBox *Hostaccesssound()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostaccesssound");
+ gc->setLabel(QObject::tr("sound "));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Control access to sound screen. Checked means the screen is enabled."));
+ return gc;
+};
+
+static HostCheckBox *Hostaccessplugins()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostaccessplugins");
+ gc->setLabel(QObject::tr("plugins"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Control access to plugin screen. Checked means the screen is enabled."));
+ return gc;
+};
+
+static HostCheckBox *Hostaccessuser()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostaccessuser");
+ gc->setLabel(QObject::tr("User"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Control access to the user managment screen. Checked means the screen is enabled."));
+ return gc;
+};
+
+static HostCheckBox *Hostaccesswebuser()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostaccesswebuser");
+ gc->setLabel(QObject::tr("Web password"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Control access to the web password screen. Checked means the screen is enabled."));
+ return gc;
+};
+
+
+class ACCESShostsettings: public TriggeredConfigurationGroup {
+public:
+ ACCESShostsettings():
+ TriggeredConfigurationGroup(false,false,false,false) {
+ SetVertical(false);
+ Setting* trigger = Hostaccesshostype () ;
+ addChild(trigger);
+ setTrigger(trigger);
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false,false,false,false);
+ //settings->addChild(HostServiceSamba());
+ settings->addChild(HostaccesshostypeSystemtype());
+
+
+ addTarget("0", new VerticalConfigurationGroup(false, false));
+ addTarget("1", settings);
+ };
+};
+
+
+//---------------------------------- PLUGINS ----------------------
+
+static HostCheckBox *Hostpluginmytharchive()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmytharchive");
+ gc->setLabel(QObject::tr("mytharchive"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("check to enable mytharchive"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythbrowser()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythbrowser");
+ gc->setLabel(QObject::tr("mythbrowser"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("check to enable mythbrowser"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythcontrols()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythcontrols");
+ gc->setLabel(QObject::tr("mythcontrols"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("check to enable mythcontrols"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythflix()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythflix");
+ gc->setLabel(QObject::tr("mythflix"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("check to enable mythflix"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythgallery()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythgallery");
+ gc->setLabel(QObject::tr("mythgallery"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("check to enable mythgallery"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythgame()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythgame");
+ gc->setLabel(QObject::tr("mythgame"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("check to enable mythgame"));
+ return gc;
+};
+
+static HostCheckBox *HostpluginmythgameZsnes()
+{
+ HostCheckBox *gc = new HostCheckBox("HostpluginmythgameZsnes");
+ gc->setLabel(QObject::tr("zsnes"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Zsnes, super nintendo emulator"));
+ return gc;
+};
+
+static HostCheckBox *HostpluginmythgameFceu()
+{
+ HostCheckBox *gc = new HostCheckBox("HostpluginmythgameFceu");
+ gc->setLabel(QObject::tr("fceu"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Fceu, nintendo emulator"));
+ return gc;
+};
+
+static HostCheckBox *HostpluginmythgameMame()
+{
+ HostCheckBox *gc = new HostCheckBox("HostpluginmythgameMame");
+ gc->setLabel(QObject::tr("mame"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Mame, Multiple Arcade Machine Emulator."));
+ return gc;
+};
+
+static HostCheckBox *HostpluginmythgameMednafen()
+{
+ HostCheckBox *gc = new HostCheckBox("HostpluginmythgameMednafen");
+ gc->setLabel(QObject::tr("Mednafen"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Mednafen is a portable, utilizing OpenGL and SDL, command-line driven multi-system emulator with many advanced features."));
+ return gc;
+};
+
+static HostCheckBox *HostpluginmythgameROMDB()
+{
+ HostCheckBox *gc = new HostCheckBox("HostpluginmythgameROMDB");
+ gc->setLabel(QObject::tr("Romdb"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Table used my MythGames to store information about games. If you are into games, this is recommended."));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythmovietime()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythmovietime");
+ gc->setLabel(QObject::tr("mythmovietime"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Check to enable mythmovietime"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythmusic()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythmusic");
+ gc->setLabel(QObject::tr("mythmusic"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("check to enable mythmusic"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythnews()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythnews");
+ gc->setLabel(QObject::tr("mythnews"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("check to enable mythnews"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythphone()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythphone");
+ gc->setLabel(QObject::tr("mythphone"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("check to enable mythphone"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythsmolt()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythsmolt");
+ gc->setLabel(QObject::tr("mythsmolt"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("check to enable mythsmolt"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythvideo()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythvideo");
+ gc->setLabel(QObject::tr("mythvideo"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("check to enable mythvideo"));
+ return gc;
+};
+
+static HostCheckBox *Hostpluginmythvideo_dvdcss()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythvideo_dvdcss");
+ gc->setLabel(QObject::tr("dvdcss"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("libdvdcss is a simple library designed for accessing DVDs like a block device without having to bother about the decryption."));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythvodka()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythvodka");
+ gc->setLabel(QObject::tr("mythvodka"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Myth Video On Demand Killer App."));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythstream()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythstream");
+ gc->setLabel(QObject::tr("mythstream"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("MythStream is an unofficial MythTv plugin that plays Internet audio and video streams."));
+ return gc;
+};
+
+static HostCheckBox *Hostpluginmythappletrailers()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythappletrailers");
+ gc->setLabel(QObject::tr("MythAppleTrailers"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Used to stream trailer's from Apple's website."));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythweather()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythweather");
+ gc->setLabel(QObject::tr("mythweather"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("check to enable mythweather"));
+ return gc;
+};
+
+
+static HostCheckBox *HostMiro()
+{
+ HostCheckBox *gc = new HostCheckBox("HostMiro");
+ gc->setLabel(QObject::tr("Miro"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Miro is a popular, free, and open internet TV application. It brings video channels from thousands of sources and has more free HD than any otherplatform."));
+ return gc;
+};
+
+
+static HostCheckBox *HostXine()
+{
+ HostCheckBox *gc = new HostCheckBox("HostXine");
+ gc->setLabel(QObject::tr("Xine"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Xine is a free multimedia player"));
+ return gc;
+};
+
+
+static HostCheckBox *Hostwebmin()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostwebmin");
+ gc->setLabel(QObject::tr("Webmin"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Webmin is a web-based interface for system administration for Unix. Once installed, you can access it at https://ip.of.back.end:10000 using your root password."));
+ return gc;
+};
+
+static HostCheckBox *Hostfuppes()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostfuppes");
+ gc->setLabel(QObject::tr("Fuppes"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Upnp server"));
+ return gc;
+};
+
+static HostCheckBox *Hostfoldingathome()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostfoldingathome");
+ gc->setLabel(QObject::tr("Folding@home"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("A distributed computing project which studies protein folding, misfolding, aggregation, and related diseases."));
+ return gc;
+};
+
+static HostComboBox *Hostfoldingusername()
+{
+ // If there is an old R5.5 style folding directory /myth/folding@home, attempt
+ // to retrieve the old username.
+
+ FILE *username_pipe;
+ username_pipe =
+ popen (
+ "grep username= /myth/folding@home/client.cfg 2> /dev/null | "
+ "sed 's/username=//g'", "r");
+
+ if (username_pipe)
+ {
+ char username[200];
+ if (fgets (username, sizeof (username), username_pipe))
+ {
+ char *new_line;
+ username[sizeof(username)-1]=0;
+ if ((new_line = strchr (username, '\n')))
+ new_line[0] = 0;
+
+ cout << "found old username " << username << endl;
+
+ gContext->SetSetting("Hostfoldingusername", username);
+ gContext->SaveSetting("Hostfoldingusername", username);
+ }
+ pclose (username_pipe);
+ }
+
+ HostComboBox *gc = new HostComboBox("Hostfoldingusername",true);
+ gc->setLabel(QObject::tr("Folding Username"));
+ gc->setValue("");
+
+ gc->setHelpText(QObject::tr("The username associated to the work-units you return."));
+ return gc;
+};
+
+static HostComboBox *Hostfoldingworksize()
+{
+ HostComboBox *gc = new HostComboBox("Hostfoldingworksize");
+ gc->setLabel(QObject::tr("Work Packet Size"));
+ gc->addSelection("Big", "big");
+ gc->addSelection("Normal", "normal");
+ gc->addSelection("Small", "small");
+ gc->setHelpText(QObject::tr("Acceptable size of work assignment and work result packets (bigger units may have large memory demands)."));
+ return gc;
+};
+
+static HostCheckBox *HostXscreensaver()
+{
+ HostCheckBox *gc = new HostCheckBox("HostXscreensaver");
+ gc->setLabel(QObject::tr("Screensaver"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Run screensaver after 10 minutes of inactivity."));
+ return gc;
+};
+
+
+static HostCheckBox *Hostpluginmythzoneminder()
+{
+ HostCheckBox *gc = new HostCheckBox("Hostpluginmythzoneminder");
+ gc->setLabel(QObject::tr("mythzoneminder"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("check to enable mythzoneminder"));
+ return gc;
+};
+
+
+// -------------End plugins--------------------------------
+
+
+
+class NCIDsettings: public TriggeredConfigurationGroup {
+public:
+ NCIDsettings():
+ TriggeredConfigurationGroup(false, false, true, true,false, false, true, true) {
+ SetVertical(false);
+ Setting* trigger = HostncidDaemon() ;
+ addChild(trigger);
+ setTrigger(trigger);
+ ConfigurationGroup* settings = new HorizontalConfigurationGroup(false,false);
+ settings->addChild(HostSerialPortncid());
+ addTarget("0", new HorizontalConfigurationGroup(false, false));
+ addTarget("1", settings);
+ };
+};
+
+class SAMBAsettings: public TriggeredConfigurationGroup {
+public:
+ SAMBAsettings():
+ TriggeredConfigurationGroup(false, true, true, true,false, false, true, true) {
+ SetVertical(false);
+ Setting* trigger = HostServiceSamba() ;
+ addChild(trigger);
+ setTrigger(trigger);
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(2,false,false);
+ //settings->addChild(HostServiceSamba());
+ settings->addChild(HostServiceSamba_media());
+ settings->addChild(HostServiceSamba_write());
+ settings->addChild(HostServiceSamba_home());
+ settings->addChild(HostServiceSamba_writehome());
+ settings->addChild(HostServiceSamba_domain());
+
+ addTarget("0", new GridConfigurationGroup(2,false, false));
+ addTarget("1", settings);
+ };
+};
+
+
+
+/*
+class LIRCsettings: public TriggeredConfigurationGroup {
+public:
+ LIRCsettings():
+ TriggeredConfigurationGroup(false, false, true, true,false, false, true, true) {
+ //SetVertical(false);
+ setLabel(QObject::tr("Misc Settings"));
+ Setting* trigger = HostReceiverType() ;
+ addChild(trigger);
+ setTrigger(trigger);
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(2,true);
+ settings->addChild(HostLircWait());
+ settings->addChild(HostSerialPortlirc());
+
+ ConfigurationGroup* settings2 = new VerticalConfigurationGroup(true,true);
+ settings2->addChild(HostLircWait());
+
+ addTarget("Default", settings2);
+ addTarget("Serial", settings);
+ addTarget("Usb", settings2);
+ addTarget("Usb-imon", settings2 );
+ addTarget("Hauppauge",settings2);
+ addTarget("tinker", new VerticalConfigurationGroup(false, false));
+ };
+};*/
+
+class Evroutersettings: public TriggeredConfigurationGroup {
+ public:
+ Evroutersettings():
+ TriggeredConfigurationGroup(false, false, true, true,false, false, true, true) {
+ //SetVertical(false);
+ setLabel(QObject::tr("Evrouter config"));
+ Setting* trigger = HostRunEvrouter() ;
+ addChild(trigger);
+ setTrigger(trigger);
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false,false);
+ settings->addChild(HostEvrouterConfig());
+
+ addTarget("0", new VerticalConfigurationGroup(false, false));
+ addTarget("1", settings);
+ };
+};
+
+class MythGamesettings: public TriggeredConfigurationGroup {
+ public:
+ MythGamesettings():
+ TriggeredConfigurationGroup(false, false, true, true,false, false, true, true) {
+ //SetVertical(false);
+ //setLabel(QObject::tr("Evrouter config"));
+ Setting* trigger = Hostpluginmythgame() ;
+ addChild(trigger);
+ setTrigger(trigger);
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(3,true,true);
+ settings->addChild(HostpluginmythgameZsnes());
+ settings->addChild(HostpluginmythgameFceu());
+ settings->addChild(HostpluginmythgameMame());
+ settings->addChild(HostpluginmythgameMednafen());
+ settings->addChild(HostpluginmythgameROMDB());
+
+
+ addTarget("0", new VerticalConfigurationGroup(false, false));
+ addTarget("1", settings);
+ };
+};
+
+
+//____________________________________________________________________________
+class eth0_settings: public TriggeredConfigurationGroup {
+public:
+ eth0_settings():
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+
+ HostComboBox *HOSTESSIDeth0 = new HostComboBox("HOSTESSIDeth0",true);
+ HOSTESSIDeth0->setLabel(QObject::tr("ESSID"));
+ HOSTESSIDeth0->addSelection("MythVantage");
+ HOSTESSIDeth0->addSelection("home_lan");
+ HOSTESSIDeth0->addSelection("type_it_here");
+ HOSTESSIDeth0->setHelpText(QObject::tr("ESSID"));
+ addChild(HOSTESSIDeth0);
+
+ HostComboBox *HostUseEncryptioneth0 = new HostComboBox("HostUseEncryptioneth0");
+ HostUseEncryptioneth0->setLabel(QObject::tr("Encryption"));
+ HostUseEncryptioneth0->setHelpText(QObject::tr("WPA uses a shared key phrase this is the most secure. For WEP use the generated key, this type of encryption is not recommended."));
+ HostUseEncryptioneth0->addSelection("none");
+ HostUseEncryptioneth0->addSelection("WPA");
+ HostUseEncryptioneth0->addSelection("WEP");
+
+ Setting* HostUseEncryption = HostUseEncryptioneth0;
+ addChild(HostUseEncryption);
+ setTrigger(HostUseEncryption);
+
+ HostLineEdit *Hostkeyeth0 = new HostLineEdit("Hostkeyeth0");
+ Hostkeyeth0->setLabel(QObject::tr("key"));
+ Hostkeyeth0->setHelpText(QObject::tr("Key to use for encryption"));
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(1,false);
+ settings->addChild(Hostkeyeth0);
+ addTarget("none", new GridConfigurationGroup(1,false));
+ addTarget("WPA", settings);
+ addTarget("WEP", settings);
+ };
+};
+
+
+NetworkSettingseth0::NetworkSettingseth0():
+ TriggeredConfigurationGroup(false,false,false,false) {
+ setLabel(QObject::tr("Network Settings"));
+ HostLineEdit *HostIPeth0 = new HostLineEdit("HostIPeth0");
+ HostIPeth0->setLabel(QObject::tr("Ip address"));
+ HostIPeth0->setValue("192.168.1.12");
+ HostIPeth0->setHelpText(QObject::tr("IP address of the new installation"));
+
+ HostComboBox *HostNETMASKeth0 = new HostComboBox("HostNETMASKeth0");
+ HostNETMASKeth0->setLabel(QObject::tr("Netmask"));
+ HostNETMASKeth0->addSelection("/0 0.0.0.0");
+ HostNETMASKeth0->addSelection("/1 128.0.0.0");
+ HostNETMASKeth0->addSelection("/2 192.0.0.0");
+ HostNETMASKeth0->addSelection("/3 224.0.0.0");
+ HostNETMASKeth0->addSelection("/4 240.0.0.0");
+ HostNETMASKeth0->addSelection("/5 248.0.0.0");
+ HostNETMASKeth0->addSelection("/6 252.0.0.0");
+ HostNETMASKeth0->addSelection("/7 254.0.0.0");
+ HostNETMASKeth0->addSelection("/8 255.0.0.0");
+ HostNETMASKeth0->addSelection("/9 255.128.0.0");
+ HostNETMASKeth0->addSelection("/10 255.192.0.0 ");
+ HostNETMASKeth0->addSelection("/11 255.224.0.0");
+ HostNETMASKeth0->addSelection("/12 255.240.0.0");
+ HostNETMASKeth0->addSelection("/13 255.248.0.0");
+ HostNETMASKeth0->addSelection("/14 255.252.0.0");
+ HostNETMASKeth0->addSelection("/15 255.254.0.0");
+ HostNETMASKeth0->addSelection("/16 255.255.0.0");
+ HostNETMASKeth0->addSelection("/17 255.255.128.0");
+ HostNETMASKeth0->addSelection("/18 255.255.192.0");
+ HostNETMASKeth0->addSelection("/19 255.255.224.0");
+ HostNETMASKeth0->addSelection("/20 255.255.240.0");
+ HostNETMASKeth0->addSelection("/21 255.255.248.0");
+ HostNETMASKeth0->addSelection("/22 255.255.252.0");
+ HostNETMASKeth0->addSelection("/23 255.255.254.0");
+ HostNETMASKeth0->addSelection("/24 255.255.255.0");
+ HostNETMASKeth0->addSelection("/25 255.255.255.128");
+ HostNETMASKeth0->addSelection("/26 255.255.255.192");
+ HostNETMASKeth0->addSelection("/27 255.255.255.224");
+ HostNETMASKeth0->addSelection("/28 255.255.255.240");
+ HostNETMASKeth0->addSelection("/29 255.255.255.248");
+ HostNETMASKeth0->addSelection("/30 255.255.255.252");
+ HostNETMASKeth0->addSelection("/31 255.255.255.254");
+ HostNETMASKeth0->addSelection("/32 255.255.255.255");
+ HostNETMASKeth0->setHelpText(QObject::tr("Netmask"));
+ HostNETMASKeth0->setValue(24);
+
+ HostLineEdit *HostGWeth0 = new HostLineEdit("HostGWeth0");
+ HostGWeth0->setLabel(QObject::tr("Gateway"));
+ HostGWeth0->setValue("192.168.1.1");
+ HostGWeth0->setHelpText(QObject::tr("This is the default route"));
+
+
+ HostLineEdit *HostDNSeth0 = new HostLineEdit("HostDNSeth0");
+ HostDNSeth0->setLabel(QObject::tr("Name server"));
+ HostDNSeth0->setValue("192.168.1.1");
+ HostDNSeth0->setHelpText(QObject::tr("Name server"));
+
+
+ HostCheckBox *HostActiveonbooteth0 = new HostCheckBox("HostActiveonbooteth0");
+ HostActiveonbooteth0->setLabel(QObject::tr("Active"));
+ HostActiveonbooteth0->setValue(true);
+ HostActiveonbooteth0->setHelpText(QObject::tr("Network is started on boot"));
+
+ HostDefaulteth0 = new HostCheckBox("HostDefaulteth0");
+ HostDefaulteth0->setLabel(QObject::tr("Default"));
+ HostDefaulteth0->setValue(true);
+ HostDefaulteth0->setHelpText(QObject::tr("Will be used as the primary interface"));
+ connect(HostDefaulteth0, SIGNAL(valueChanged(bool)), this, SLOT(eth0_disable_others()));
+
+ HostCheckBox *HostUseDHCPeth0 = new HostCheckBox("HostUseDHCPeth0");
+ HostUseDHCPeth0 ->setLabel(QObject::tr("Static ip address"));
+ HostUseDHCPeth0 ->setValue(false);
+ HostUseDHCPeth0 ->setHelpText(QObject::tr("Enable to use a static ip address, otherwise dhcp will be used."));
+
+ wirelessbuttoneth0 = new TransButtonSetting();
+ wirelessbuttoneth0->setLabel(tr("Wireless Settings"));
+ connect(wirelessbuttoneth0, SIGNAL(pressed()), this, SLOT(eth0_wireless_settings()));
+
+ ConfigurationGroup* settings1 = new GridConfigurationGroup(3,false, false, true, true);
+ settings1->addChild(HostActiveonbooteth0);
+ settings1->addChild(HostDefaulteth0);
+ settings1-> addChild(wirelessbuttoneth0);
+ addChild(settings1);
+
+
+ Setting* dhcpEnabled = HostUseDHCPeth0;
+ addChild(dhcpEnabled);
+ setTrigger(dhcpEnabled);
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false, false, false, false);
+ settings->addChild(HostIPeth0);
+ settings->addChild(HostNETMASKeth0);
+ settings->addChild(HostGWeth0);
+ settings->addChild(HostDNSeth0);
+
+ addTarget("0", new VerticalConfigurationGroup(false,false,false,false));
+ addTarget("1", settings);
+ };
+
+eth0options::eth0options()
+{
+
+ VerticalConfigurationGroup* rec = new VerticalConfigurationGroup(false);
+ rec->setLabel(QObject::tr("Wireless configuration for eth0"));
+ //rec->setUseLabel(true);
+ rec->addChild(new eth0_settings);
+ addChild(rec);
+}
+
+void NetworkSettingseth0::eth0_disable_others()
+{
+ QString my_current_value;
+ my_current_value = HostDefaulteth0->getValue();
+ if ( my_current_value == "1" )
+ {
+ cout <<"ETH0: set other defaults buttons to off"<<endl;
+ hostparm.ThisHostDefaultInterface="eth0";
+ emit eth0_is_default();
+ }
+}
+void NetworkSettingseth0::eth0_disabled()
+{
+ cout << " eth0 is not default" << endl;
+ HostDefaulteth0->setValue(0);
+}
+void NetworkSettingseth0::eth0_wireless_settings(void)
+{
+ //cout <<"button pressed for eth0"<<endl;
+ eth0options eth0screen;
+ eth0screen.exec();
+}
+
+void NetworkSettingseth0::eth0_wireless_disable()
+{
+ cout << " eth0 disabling wireless button" << endl;
+ wirelessbuttoneth0->setEnabled(false);
+}
+
+class eth1_settings: public TriggeredConfigurationGroup {
+public:
+ eth1_settings():
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+
+ HostComboBox *HOSTESSIDeth1 = new HostComboBox("HOSTESSIDeth1",true);
+ HOSTESSIDeth1->setLabel(QObject::tr("ESSID"));
+ HOSTESSIDeth1->addSelection("MythVantage");
+ HOSTESSIDeth1->addSelection("home_lan");
+ HOSTESSIDeth1->addSelection("type_it_here");
+ HOSTESSIDeth1->setHelpText(QObject::tr("ESSID"));
+ addChild(HOSTESSIDeth1);
+ HostComboBox *HostUseEncryptioneth0 = new HostComboBox("HostUseEncryptioneth0");
+ HostUseEncryptioneth0->setLabel(QObject::tr("Encryption"));
+ HostUseEncryptioneth0->setHelpText(QObject::tr("WPA, WEP, none"));
+ HostUseEncryptioneth0->addSelection("none");
+ HostUseEncryptioneth0->addSelection("WPA");
+ HostUseEncryptioneth0->addSelection("WEP");
+
+ Setting* HostUseEncryption = HostUseEncryptioneth0;
+ addChild(HostUseEncryption);
+ setTrigger(HostUseEncryption);
+
+ HostLineEdit *Hostkeyeth0 = new HostLineEdit("Hostkeyeth0");
+ Hostkeyeth0->setLabel(QObject::tr("key"));
+ Hostkeyeth0->setHelpText(QObject::tr("Key to use for encryption"));
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(1,false);
+ settings->addChild(Hostkeyeth0);
+ addTarget("none", new GridConfigurationGroup(1,false));
+ addTarget("WPA", settings);
+ addTarget("WEP", settings);
+ //-
+
+
+ };
+};
+
+
+NetworkSettingseth1::NetworkSettingseth1():
+ TriggeredConfigurationGroup(false,false,false,false) {
+ setLabel(QObject::tr("Network Settings"));
+ HostLineEdit *HostIPeth1 = new HostLineEdit("HostIPeth1");
+ HostIPeth1->setLabel(QObject::tr("Ip address"));
+ HostIPeth1->setValue("192.168.1.12");
+ HostIPeth1->setHelpText(QObject::tr("IP address of the new installation"));
+
+ HostComboBox *HostNETMASKeth1 = new HostComboBox("HostNETMASKeth1");
+ HostNETMASKeth1->setLabel(QObject::tr("Netmask"));
+ HostNETMASKeth1->addSelection("/0 0.0.0.0");
+ HostNETMASKeth1->addSelection("/1 128.0.0.0");
+ HostNETMASKeth1->addSelection("/2 192.0.0.0");
+ HostNETMASKeth1->addSelection("/3 224.0.0.0");
+ HostNETMASKeth1->addSelection("/4 240.0.0.0");
+ HostNETMASKeth1->addSelection("/5 248.0.0.0");
+ HostNETMASKeth1->addSelection("/6 252.0.0.0");
+ HostNETMASKeth1->addSelection("/7 254.0.0.0");
+ HostNETMASKeth1->addSelection("/8 255.0.0.0");
+ HostNETMASKeth1->addSelection("/9 255.128.0.0");
+ HostNETMASKeth1->addSelection("/10 255.192.0.0 ");
+ HostNETMASKeth1->addSelection("/11 255.224.0.0");
+ HostNETMASKeth1->addSelection("/12 255.240.0.0");
+ HostNETMASKeth1->addSelection("/13 255.248.0.0");
+ HostNETMASKeth1->addSelection("/14 255.252.0.0");
+ HostNETMASKeth1->addSelection("/15 255.254.0.0");
+ HostNETMASKeth1->addSelection("/16 255.255.0.0");
+ HostNETMASKeth1->addSelection("/17 255.255.128.0");
+ HostNETMASKeth1->addSelection("/18 255.255.192.0");
+ HostNETMASKeth1->addSelection("/19 255.255.224.0");
+ HostNETMASKeth1->addSelection("/20 255.255.240.0");
+ HostNETMASKeth1->addSelection("/21 255.255.248.0");
+ HostNETMASKeth1->addSelection("/22 255.255.252.0");
+ HostNETMASKeth1->addSelection("/23 255.255.254.0");
+ HostNETMASKeth1->addSelection("/24 255.255.255.0");
+ HostNETMASKeth1->addSelection("/25 255.255.255.128");
+ HostNETMASKeth1->addSelection("/26 255.255.255.192");
+ HostNETMASKeth1->addSelection("/27 255.255.255.224");
+ HostNETMASKeth1->addSelection("/28 255.255.255.240");
+ HostNETMASKeth1->addSelection("/29 255.255.255.248");
+ HostNETMASKeth1->addSelection("/30 255.255.255.252");
+ HostNETMASKeth1->addSelection("/31 255.255.255.254");
+ HostNETMASKeth1->addSelection("/32 255.255.255.255");
+ HostNETMASKeth1->setHelpText(QObject::tr("Netmask"));
+ HostNETMASKeth1->setValue(24);
+
+ HostLineEdit *HostGWeth1 = new HostLineEdit("HostGWeth1");
+ HostGWeth1->setLabel(QObject::tr("Gateway"));
+ HostGWeth1->setValue("192.168.1.1");
+ HostGWeth1->setHelpText(QObject::tr("This is the default route"));
+
+
+ HostLineEdit *HostDNSeth1 = new HostLineEdit("HostDNSeth1");
+ HostDNSeth1->setLabel(QObject::tr("Name server"));
+ HostDNSeth1->setValue("192.168.1.1");
+ HostDNSeth1->setHelpText(QObject::tr("Name server"));
+
+
+ HostCheckBox *HostActiveonbooteth1 = new HostCheckBox("HostActiveonbooteth1");
+ HostActiveonbooteth1->setLabel(QObject::tr("Active"));
+ HostActiveonbooteth1->setValue(false);
+ HostActiveonbooteth1->setHelpText(QObject::tr("Network is started on boot"));
+
+ HostDefaulteth1 = new HostCheckBox("HostDefaulteth1");
+ HostDefaulteth1->setLabel(QObject::tr("Default"));
+ HostDefaulteth1->setValue(false);
+ HostDefaulteth1->setHelpText(QObject::tr("Will be used as the primary interface"));
+ connect(HostDefaulteth1, SIGNAL(valueChanged(bool)), this, SLOT(eth1_disable_others()));
+
+ HostCheckBox *HostUseDHCPeth1 = new HostCheckBox("HostUseDHCPeth1");
+ HostUseDHCPeth1 ->setLabel(QObject::tr("Static ip address"));
+ HostUseDHCPeth1 ->setValue(false);
+ HostUseDHCPeth1 ->setHelpText(QObject::tr("Enable to use a static ip address, otherwise dhcp will be used."));
+
+ wirelessbuttoneth1 = new TransButtonSetting();
+ wirelessbuttoneth1->setLabel(tr("Wireless Settings"));
+ connect(wirelessbuttoneth1, SIGNAL(pressed()), this, SLOT(eth1_wireless_settings()));
+
+ ConfigurationGroup* settings1 = new GridConfigurationGroup(3,false, false, false,false);
+ settings1->addChild(HostActiveonbooteth1);
+ settings1->addChild(HostDefaulteth1);
+ settings1-> addChild(wirelessbuttoneth1);
+
+ addChild(settings1);
+
+ Setting* dhcpEnabled = HostUseDHCPeth1;
+ addChild(dhcpEnabled);
+ setTrigger(dhcpEnabled);
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false, false,false,false);
+ settings->addChild(HostIPeth1);
+ settings->addChild(HostNETMASKeth1);
+ settings->addChild(HostGWeth1);
+ settings->addChild(HostDNSeth1);
+
+ addTarget("0", new VerticalConfigurationGroup(false,false,false,false));
+ addTarget("1", settings);
+};
+eth1options::eth1options()
+{
+
+ VerticalConfigurationGroup* rec = new VerticalConfigurationGroup(false);
+ rec->setLabel(QObject::tr("Wireless configuration for eth1"));
+ //rec->setUseLabel(true);
+ rec->addChild(new eth1_settings);
+ addChild(rec);
+}
+
+void NetworkSettingseth1::eth1_disable_others()
+{
+ QString my_current_value;
+ my_current_value = HostDefaulteth1->getValue();
+ if ( my_current_value == "1" )
+ {
+ cout <<"ETH1: set other defaults buttons to off"<<endl;
+ hostparm.ThisHostDefaultInterface="eth1";
+ emit eth1_is_default();
+ }
+}
+void NetworkSettingseth1::eth1_disabled()
+{
+ cout << " eth1 is not default" << endl;
+ HostDefaulteth1->setValue(0);
+}
+
+void NetworkSettingseth1::eth1_wireless_settings(void)
+{
+ //cout <<"button pressed for eth1"<<endl;
+ eth1options eth1screen;
+ eth1screen.exec();
+}
+
+void NetworkSettingseth1::eth1_wireless_disable()
+{
+ cout << " eth1 disabling wireless button" << endl;
+ wirelessbuttoneth1->setEnabled(false);
+}
+
+
+class wlan0_settings: public TriggeredConfigurationGroup {
+public:
+ wlan0_settings():
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+
+ HostComboBox *HOSTESSIDwlan0 = new HostComboBox("HOSTESSIDwlan0",true);
+ HOSTESSIDwlan0->setLabel(QObject::tr("ESSID"));
+ HOSTESSIDwlan0->addSelection("MythVantage");
+ HOSTESSIDwlan0->addSelection("home_lan");
+ HOSTESSIDwlan0->addSelection("type_it_here");
+ HOSTESSIDwlan0->setHelpText(QObject::tr("ESSID"));
+ addChild(HOSTESSIDwlan0);
+ HostComboBox *HostUseEncryptionwlan0 = new HostComboBox("HostUseEncryptionwlan0");
+ HostUseEncryptionwlan0->setLabel(QObject::tr("Encryption"));
+ HostUseEncryptionwlan0->setHelpText(QObject::tr("WPA, WEP, none"));
+ HostUseEncryptionwlan0->addSelection("none");
+ HostUseEncryptionwlan0->addSelection("WPA");
+ HostUseEncryptionwlan0->addSelection("WEP");
+
+ Setting* HostUseEncryption = HostUseEncryptionwlan0;
+ addChild(HostUseEncryption);
+ setTrigger(HostUseEncryption);
+
+ HostLineEdit *Hostkeywlan0 = new HostLineEdit("Hostkeywlan0");
+ Hostkeywlan0->setLabel(QObject::tr("key"));
+ Hostkeywlan0->setHelpText(QObject::tr("Key to use for encryption"));
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(1,false);
+ settings->addChild(Hostkeywlan0);
+ addTarget("none", new GridConfigurationGroup(1,false));
+ addTarget("WPA", settings);
+ addTarget("WEP", settings);
+ //-
+ };
+};
+
+NetworkSettingswlan0::NetworkSettingswlan0():
+ TriggeredConfigurationGroup(false,false,false,false) {
+ setLabel(QObject::tr("Network Settings"));
+
+ HostIPwlan0 = new HostLineEdit("HostIPwlan0");
+ HostIPwlan0->setLabel(QObject::tr("Ip address"));
+ HostIPwlan0->setValue("192.168.1.12");
+ HostIPwlan0->setHelpText(QObject::tr("IP address of the new installation"));
+
+ HostNETMASKwlan0 = new HostComboBox("HostNETMASKwlan0");
+ HostNETMASKwlan0->setLabel(QObject::tr("Netmask"));
+ HostNETMASKwlan0->addSelection("/0 0.0.0.0");
+ HostNETMASKwlan0->addSelection("/1 128.0.0.0");
+ HostNETMASKwlan0->addSelection("/2 192.0.0.0");
+ HostNETMASKwlan0->addSelection("/3 224.0.0.0");
+ HostNETMASKwlan0->addSelection("/4 240.0.0.0");
+ HostNETMASKwlan0->addSelection("/5 248.0.0.0");
+ HostNETMASKwlan0->addSelection("/6 252.0.0.0");
+ HostNETMASKwlan0->addSelection("/7 254.0.0.0");
+ HostNETMASKwlan0->addSelection("/8 255.0.0.0");
+ HostNETMASKwlan0->addSelection("/9 255.128.0.0");
+ HostNETMASKwlan0->addSelection("/10 255.192.0.0 ");
+ HostNETMASKwlan0->addSelection("/11 255.224.0.0");
+ HostNETMASKwlan0->addSelection("/12 255.240.0.0");
+ HostNETMASKwlan0->addSelection("/13 255.248.0.0");
+ HostNETMASKwlan0->addSelection("/14 255.252.0.0");
+ HostNETMASKwlan0->addSelection("/15 255.254.0.0");
+ HostNETMASKwlan0->addSelection("/16 255.255.0.0");
+ HostNETMASKwlan0->addSelection("/17 255.255.128.0");
+ HostNETMASKwlan0->addSelection("/18 255.255.192.0");
+ HostNETMASKwlan0->addSelection("/19 255.255.224.0");
+ HostNETMASKwlan0->addSelection("/20 255.255.240.0");
+ HostNETMASKwlan0->addSelection("/21 255.255.248.0");
+ HostNETMASKwlan0->addSelection("/22 255.255.252.0");
+ HostNETMASKwlan0->addSelection("/23 255.255.254.0");
+ HostNETMASKwlan0->addSelection("/24 255.255.255.0");
+ HostNETMASKwlan0->addSelection("/25 255.255.255.128");
+ HostNETMASKwlan0->addSelection("/26 255.255.255.192");
+ HostNETMASKwlan0->addSelection("/27 255.255.255.224");
+ HostNETMASKwlan0->addSelection("/28 255.255.255.240");
+ HostNETMASKwlan0->addSelection("/29 255.255.255.248");
+ HostNETMASKwlan0->addSelection("/30 255.255.255.252");
+ HostNETMASKwlan0->addSelection("/31 255.255.255.254");
+ HostNETMASKwlan0->addSelection("/32 255.255.255.255");
+ HostNETMASKwlan0->setHelpText(QObject::tr("Netmask"));
+ HostNETMASKwlan0->setValue(24);
+
+ HostGWwlan0 = new HostLineEdit("HostGWwlan0");
+ HostGWwlan0->setLabel(QObject::tr("Gateway"));
+ HostGWwlan0->setValue("192.168.1.1");
+ HostGWwlan0->setHelpText(QObject::tr("This is the default route"));
+
+
+ HostDNSwlan0 = new HostLineEdit("HostDNSwlan0");
+ HostDNSwlan0->setLabel(QObject::tr("Name server"));
+ HostDNSwlan0->setValue("192.168.1.1");
+ HostDNSwlan0->setHelpText(QObject::tr("Name server"));
+
+
+ HostActiveonbootwlan0 = new HostCheckBox("HostActiveonbootwlan0");
+ HostActiveonbootwlan0->setLabel(QObject::tr("Active"));
+ HostActiveonbootwlan0->setValue(false);
+ HostActiveonbootwlan0->setHelpText(QObject::tr("Network is started on boot"));
+
+ HostDefaultwlan0 = new HostCheckBox("HostDefaultwlan0");
+ HostDefaultwlan0->setLabel(QObject::tr("Default"));
+ HostDefaultwlan0->setValue(false);
+ HostDefaultwlan0->setHelpText(QObject::tr("Will be used as the primary interface"));
+ connect(HostDefaultwlan0, SIGNAL(valueChanged(bool)), this, SLOT(wlan0_disable_others()));
+
+
+
+ HostUseDHCPwlan0 = new HostCheckBox("HostUseDHCPwlan0");
+ HostUseDHCPwlan0 ->setLabel(QObject::tr("Static ip address"));
+ HostUseDHCPwlan0 ->setValue(false);
+ HostUseDHCPwlan0 ->setHelpText(QObject::tr("Enable to use a static ip address, otherwise dhcp will be used."));
+
+ wirelessbuttonwlan0 = new TransButtonSetting();
+ wirelessbuttonwlan0->setLabel(tr("Wireless Settings"));
+ connect(wirelessbuttonwlan0, SIGNAL(pressed()), this, SLOT(wlan0_wireless_settings()));
+
+
+ ConfigurationGroup* settings1 = new GridConfigurationGroup(3,false, false, false,false);
+ settings1->addChild(HostActiveonbootwlan0);
+ settings1->addChild(HostDefaultwlan0);
+ settings1-> addChild(wirelessbuttonwlan0);
+ addChild(settings1);
+
+ Setting* dhcpEnabled = HostUseDHCPwlan0;
+ addChild(dhcpEnabled);
+ setTrigger(dhcpEnabled);
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false, false,false,false);
+ settings->addChild(HostIPwlan0);
+ settings->addChild(HostNETMASKwlan0);
+ settings->addChild(HostGWwlan0);
+ settings->addChild(HostDNSwlan0);
+
+ addTarget("0", new VerticalConfigurationGroup(false,false,false,false));
+ addTarget("1", settings);
+
+};
+
+Wlan0options::Wlan0options()
+{
+
+ VerticalConfigurationGroup* rec = new VerticalConfigurationGroup(false);
+ rec->setLabel(QObject::tr("Wireless configuration for wlan0"));
+ //rec->setUseLabel(true);
+ rec->addChild(new wlan0_settings);
+ addChild(rec);
+}
+
+void NetworkSettingswlan0::wlan0_disable_others()
+{
+ QString my_current_value;
+ my_current_value = HostDefaultwlan0->getValue();
+ if ( my_current_value == "1" )
+ {
+ cout <<"WLAN0: set other defaults buttons to off"<<endl;
+ hostparm.ThisHostDefaultInterface="wlan0";
+ emit wlan0_is_default();
+ }
+
+
+
+}
+void NetworkSettingswlan0::wlan0_disabled()
+{
+ cout << " wlan0 is not default" << endl;
+ HostDefaultwlan0->setValue(0);
+}
+
+
+void NetworkSettingswlan0::wlan0_wireless_settings(void)
+{
+ //cout <<"button pressed for wlan0"<<endl;
+ Wlan0options wlan0screen;
+ wlan0screen.exec();
+}
+void NetworkSettingswlan0::wlan0_wireless_disable()
+{
+ cout << " wlan0 disabling wireless button" << endl;
+ wirelessbuttonwlan0->setEnabled(false);
+}
+
+
+class wlan1_settings: public TriggeredConfigurationGroup {
+public:
+ wlan1_settings():
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+
+ HostComboBox *HOSTESSIDwlan1 = new HostComboBox("HOSTESSIDwlan1",true);
+ HOSTESSIDwlan1->setLabel(QObject::tr("ESSID"));
+ HOSTESSIDwlan1->addSelection("MythVantage");
+ HOSTESSIDwlan1->addSelection("home_lan");
+ HOSTESSIDwlan1->addSelection("type_it_here");
+ HOSTESSIDwlan1->setHelpText(QObject::tr("ESSID"));
+ addChild(HOSTESSIDwlan1);
+
+
+ HostComboBox *HostUseEncryptionwlan1 = new HostComboBox("HostUseEncryptionwlan1");
+ HostUseEncryptionwlan1->setLabel(QObject::tr("Encryption"));
+ HostUseEncryptionwlan1->setHelpText(QObject::tr("WPA, WEP, none"));
+ HostUseEncryptionwlan1->addSelection("none");
+ HostUseEncryptionwlan1->addSelection("WPA");
+ HostUseEncryptionwlan1->addSelection("WEP");
+
+ Setting* HostUseEncryption = HostUseEncryptionwlan1;
+ addChild(HostUseEncryption);
+ setTrigger(HostUseEncryption);
+
+ HostLineEdit *Hostkeywlan1 = new HostLineEdit("Hostkeywlan1");
+ Hostkeywlan1->setLabel(QObject::tr("key"));
+ Hostkeywlan1->setHelpText(QObject::tr("Key to use for encryption"));
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(1,false);
+ settings->addChild(Hostkeywlan1);
+ addTarget("none", new GridConfigurationGroup(1,false));
+ addTarget("WPA", settings);
+ addTarget("WEP", settings);
+ //-
+ };
+};
+
+NetworkSettingswlan1::NetworkSettingswlan1():
+ TriggeredConfigurationGroup(false,false,false,false) {
+ setLabel(QObject::tr("Network Settings"));
+
+ HostIPwlan1 = new HostLineEdit("HostIPwlan1");
+ HostIPwlan1->setLabel(QObject::tr("Ip address"));
+ HostIPwlan1->setValue("192.168.1.12");
+ HostIPwlan1->setHelpText(QObject::tr("IP address of the new installation"));
+
+ HostNETMASKwlan1 = new HostComboBox("HostNETMASKwlan1");
+ HostNETMASKwlan1->setLabel(QObject::tr("Netmask"));
+ HostNETMASKwlan1->addSelection("/0 0.0.0.0");
+ HostNETMASKwlan1->addSelection("/1 128.0.0.0");
+ HostNETMASKwlan1->addSelection("/2 192.0.0.0");
+ HostNETMASKwlan1->addSelection("/3 224.0.0.0");
+ HostNETMASKwlan1->addSelection("/4 240.0.0.0");
+ HostNETMASKwlan1->addSelection("/5 248.0.0.0");
+ HostNETMASKwlan1->addSelection("/6 252.0.0.0");
+ HostNETMASKwlan1->addSelection("/7 254.0.0.0");
+ HostNETMASKwlan1->addSelection("/8 255.0.0.0");
+ HostNETMASKwlan1->addSelection("/9 255.128.0.0");
+ HostNETMASKwlan1->addSelection("/10 255.192.0.0 ");
+ HostNETMASKwlan1->addSelection("/11 255.224.0.0");
+ HostNETMASKwlan1->addSelection("/12 255.240.0.0");
+ HostNETMASKwlan1->addSelection("/13 255.248.0.0");
+ HostNETMASKwlan1->addSelection("/14 255.252.0.0");
+ HostNETMASKwlan1->addSelection("/15 255.254.0.0");
+ HostNETMASKwlan1->addSelection("/16 255.255.0.0");
+ HostNETMASKwlan1->addSelection("/17 255.255.128.0");
+ HostNETMASKwlan1->addSelection("/18 255.255.192.0");
+ HostNETMASKwlan1->addSelection("/19 255.255.224.0");
+ HostNETMASKwlan1->addSelection("/20 255.255.240.0");
+ HostNETMASKwlan1->addSelection("/21 255.255.248.0");
+ HostNETMASKwlan1->addSelection("/22 255.255.252.0");
+ HostNETMASKwlan1->addSelection("/23 255.255.254.0");
+ HostNETMASKwlan1->addSelection("/24 255.255.255.0");
+ HostNETMASKwlan1->addSelection("/25 255.255.255.128");
+ HostNETMASKwlan1->addSelection("/26 255.255.255.192");
+ HostNETMASKwlan1->addSelection("/27 255.255.255.224");
+ HostNETMASKwlan1->addSelection("/28 255.255.255.240");
+ HostNETMASKwlan1->addSelection("/29 255.255.255.248");
+ HostNETMASKwlan1->addSelection("/30 255.255.255.252");
+ HostNETMASKwlan1->addSelection("/31 255.255.255.254");
+ HostNETMASKwlan1->addSelection("/32 255.255.255.255");
+ HostNETMASKwlan1->setHelpText(QObject::tr("Netmask"));
+ HostNETMASKwlan1->setValue(24);
+
+ HostGWwlan1 = new HostLineEdit("HostGWwlan1");
+ HostGWwlan1->setLabel(QObject::tr("Gateway"));
+ HostGWwlan1->setValue("192.168.1.1");
+ HostGWwlan1->setHelpText(QObject::tr("This is the default route"));
+
+
+ HostDNSwlan1 = new HostLineEdit("HostDNSwlan1");
+ HostDNSwlan1->setLabel(QObject::tr("Name server"));
+ HostDNSwlan1->setValue("192.168.1.1");
+ HostDNSwlan1->setHelpText(QObject::tr("Name server"));
+
+
+ HostActiveonbootwlan1 = new HostCheckBox("HostActiveonbootwlan1");
+ HostActiveonbootwlan1->setLabel(QObject::tr("Active"));
+ HostActiveonbootwlan1->setValue(false);
+ HostActiveonbootwlan1->setHelpText(QObject::tr("Network is started on boot"));
+
+ HostUseDHCPwlan1 = new HostCheckBox("HostUseDHCPwlan1");
+ HostUseDHCPwlan1 ->setLabel(QObject::tr("Static ip address"));
+ HostUseDHCPwlan1 ->setValue(false);
+ HostUseDHCPwlan1 ->setHelpText(QObject::tr("Enable to use a static ip address, otherwise dhcp will be used."));
+
+ wirelessbuttonwlan1 = new TransButtonSetting();
+ wirelessbuttonwlan1->setLabel(tr("Wireless Settings"));
+ connect(wirelessbuttonwlan1, SIGNAL(pressed()), this, SLOT(wlan1_wireless_settings()));
+
+ HostDefaultwlan1 = new HostCheckBox("HostDefaultwlan1");
+ HostDefaultwlan1->setLabel(QObject::tr("Default"));
+ HostDefaultwlan1->setValue(false);
+ HostDefaultwlan1->setHelpText(QObject::tr("Will be used as the primary interface"));
+ connect(HostDefaultwlan1, SIGNAL(valueChanged(bool)), this, SLOT(wlan1_disable_others()));
+
+
+ ConfigurationGroup* settings1 = new GridConfigurationGroup(3,false, false, false, false);
+ settings1->addChild(HostActiveonbootwlan1);
+ settings1->addChild(HostDefaultwlan1);
+ settings1-> addChild(wirelessbuttonwlan1);
+
+ addChild(settings1);
+
+ Setting* dhcpEnabled = HostUseDHCPwlan1;
+ addChild(dhcpEnabled);
+ setTrigger(dhcpEnabled);
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false, false,false,false);
+ settings->addChild(HostIPwlan1);
+ settings->addChild(HostNETMASKwlan1);
+ settings->addChild(HostGWwlan1);
+ settings->addChild(HostDNSwlan1);
+
+ addTarget("0", new VerticalConfigurationGroup(true));
+ addTarget("1", settings);
+
+};
+
+wlan1options::wlan1options()
+{
+ VerticalConfigurationGroup* rec = new VerticalConfigurationGroup(false);
+ rec->setLabel(QObject::tr("Wireless configuration for wlan1"));
+ //rec->setUseLabel(true);
+ rec->addChild(new wlan1_settings);
+ addChild(rec);
+}
+void NetworkSettingswlan1::wlan1_disable_others()
+{
+ QString my_current_value;
+ my_current_value = HostDefaultwlan1->getValue();
+ if ( my_current_value == "1" )
+ {
+ cout <<"WLAN1: set other defaults buttons to off"<<endl;
+ hostparm.ThisHostDefaultInterface="wlan1";
+ emit wlan1_is_default();
+ }
+}
+
+void NetworkSettingswlan1::wlan1_disabled()
+{
+ cout << " wlan1 is not default" << endl;
+ HostDefaultwlan1->setValue(0);
+
+
+}
+void NetworkSettingswlan1::wlan1_wireless_disable()
+{
+ cout << " wlan1 disabling wireless button" << endl;
+ wirelessbuttonwlan1->setEnabled(false);
+}
+
+void NetworkSettingswlan1::wlan1_wireless_settings(void)
+{
+// cout <<"button pressed for wlan1"<<endl;
+ wlan1options wlan1screen;
+ wlan1screen.exec();
+}
+
+//---
+
+class ath0_settings: public TriggeredConfigurationGroup {
+public:
+ ath0_settings():
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+
+ HostComboBox *HOSTESSIDath0 = new HostComboBox("HOSTESSIDath0",true);
+ HOSTESSIDath0->setLabel(QObject::tr("ESSID"));
+ HOSTESSIDath0->addSelection("MythVantage");
+ HOSTESSIDath0->addSelection("home_lan");
+ HOSTESSIDath0->addSelection("type_it_here");
+ HOSTESSIDath0->setHelpText(QObject::tr("ESSID"));
+ addChild(HOSTESSIDath0);
+
+ HostComboBox *HostUseEncryptionath0 = new HostComboBox("HostUseEncryptionath0");
+ HostUseEncryptionath0->setLabel(QObject::tr("Encryption"));
+ HostUseEncryptionath0->setHelpText(QObject::tr("WPA, WEP, none"));
+ HostUseEncryptionath0->addSelection("none");
+ HostUseEncryptionath0->addSelection("WPA");
+ HostUseEncryptionath0->addSelection("WEP");
+
+ Setting* HostUseEncryption = HostUseEncryptionath0;
+ addChild(HostUseEncryption);
+ setTrigger(HostUseEncryption);
+
+ HostLineEdit *Hostkeyath0 = new HostLineEdit("Hostkeyath0");
+ Hostkeyath0->setLabel(QObject::tr("key"));
+ Hostkeyath0->setHelpText(QObject::tr("Key to use for encryption"));
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(1,false);
+ settings->addChild(Hostkeyath0);
+ addTarget("none", new GridConfigurationGroup(1,false));
+ addTarget("WPA", settings);
+ addTarget("WEP", settings);
+ //-
+
+ };
+};
+
+
+NetworkSettingsath0::NetworkSettingsath0():
+ TriggeredConfigurationGroup(false,false,false,false) {
+ setLabel(QObject::tr("Network Settings"));
+ HostLineEdit *HostIPath0 = new HostLineEdit("HostIPath0");
+ HostIPath0->setLabel(QObject::tr("Ip address"));
+ HostIPath0->setValue("192.168.1.12");
+ HostIPath0->setHelpText(QObject::tr("IP address of the new installation"));
+
+ HostComboBox *HostNETMASKath0 = new HostComboBox("HostNETMASKath0");
+ HostNETMASKath0->setLabel(QObject::tr("Netmask"));
+ HostNETMASKath0->addSelection("/0 0.0.0.0");
+ HostNETMASKath0->addSelection("/1 128.0.0.0");
+ HostNETMASKath0->addSelection("/2 192.0.0.0");
+ HostNETMASKath0->addSelection("/3 224.0.0.0");
+ HostNETMASKath0->addSelection("/4 240.0.0.0");
+ HostNETMASKath0->addSelection("/5 248.0.0.0");
+ HostNETMASKath0->addSelection("/6 252.0.0.0");
+ HostNETMASKath0->addSelection("/7 254.0.0.0");
+ HostNETMASKath0->addSelection("/8 255.0.0.0");
+ HostNETMASKath0->addSelection("/9 255.128.0.0");
+ HostNETMASKath0->addSelection("/10 255.192.0.0 ");
+ HostNETMASKath0->addSelection("/11 255.224.0.0");
+ HostNETMASKath0->addSelection("/12 255.240.0.0");
+ HostNETMASKath0->addSelection("/13 255.248.0.0");
+ HostNETMASKath0->addSelection("/14 255.252.0.0");
+ HostNETMASKath0->addSelection("/15 255.254.0.0");
+ HostNETMASKath0->addSelection("/16 255.255.0.0");
+ HostNETMASKath0->addSelection("/17 255.255.128.0");
+ HostNETMASKath0->addSelection("/18 255.255.192.0");
+ HostNETMASKath0->addSelection("/19 255.255.224.0");
+ HostNETMASKath0->addSelection("/20 255.255.240.0");
+ HostNETMASKath0->addSelection("/21 255.255.248.0");
+ HostNETMASKath0->addSelection("/22 255.255.252.0");
+ HostNETMASKath0->addSelection("/23 255.255.254.0");
+ HostNETMASKath0->addSelection("/24 255.255.255.0");
+ HostNETMASKath0->addSelection("/25 255.255.255.128");
+ HostNETMASKath0->addSelection("/26 255.255.255.192");
+ HostNETMASKath0->addSelection("/27 255.255.255.224");
+ HostNETMASKath0->addSelection("/28 255.255.255.240");
+ HostNETMASKath0->addSelection("/29 255.255.255.248");
+ HostNETMASKath0->addSelection("/30 255.255.255.252");
+ HostNETMASKath0->addSelection("/31 255.255.255.254");
+ HostNETMASKath0->addSelection("/32 255.255.255.255");
+ HostNETMASKath0->setHelpText(QObject::tr("Netmask"));
+ HostNETMASKath0->setValue(24);
+
+ HostLineEdit *HostGWath0 = new HostLineEdit("HostGWath0");
+ HostGWath0->setLabel(QObject::tr("Gateway"));
+ HostGWath0->setValue("192.168.1.1");
+ HostGWath0->setHelpText(QObject::tr("This is the default route"));
+
+
+ HostLineEdit *HostDNSath0 = new HostLineEdit("HostDNSath0");
+ HostDNSath0->setLabel(QObject::tr("Name server"));
+ HostDNSath0->setValue("192.168.1.1");
+ HostDNSath0->setHelpText(QObject::tr("Name server"));
+
+
+ HostCheckBox *HostActiveonbootath0 = new HostCheckBox("HostActiveonbootath0");
+ HostActiveonbootath0->setLabel(QObject::tr("Active"));
+ HostActiveonbootath0->setValue(false);
+ HostActiveonbootath0->setHelpText(QObject::tr("Network is started on boot"));
+
+ HostDefaultath0 = new HostCheckBox("HostDefaultath0");
+ HostDefaultath0->setLabel(QObject::tr("Default"));
+ HostDefaultath0->setValue(false);
+ HostDefaultath0->setHelpText(QObject::tr("Will be used as the primary interface"));
+ connect(HostDefaultath0, SIGNAL(valueChanged(bool)), this, SLOT(ath0_disable_others()));
+
+ HostCheckBox *HostUseDHCPath0 = new HostCheckBox("HostUseDHCPath0");
+ HostUseDHCPath0 ->setLabel(QObject::tr("Static ip address"));
+ HostUseDHCPath0 ->setValue(false);
+ HostUseDHCPath0 ->setHelpText(QObject::tr("Enable to use a static ip address, otherwise dhcp will be used."));
+
+ wirelessbuttonath0 = new TransButtonSetting();
+ wirelessbuttonath0->setLabel(tr("Wireless Settings"));
+ connect(wirelessbuttonath0, SIGNAL(pressed()), this, SLOT(ath0_wireless_settings()));
+
+ ConfigurationGroup* settings1 = new GridConfigurationGroup(3,false, false, false,false);
+ settings1->addChild(HostActiveonbootath0);
+ settings1->addChild(HostDefaultath0);
+ settings1-> addChild(wirelessbuttonath0);
+
+ addChild(settings1);
+
+ Setting* dhcpEnabled = HostUseDHCPath0;
+ addChild(dhcpEnabled);
+ setTrigger(dhcpEnabled);
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false, false,false,false);
+ settings->addChild(HostIPath0);
+ settings->addChild(HostNETMASKath0);
+ settings->addChild(HostGWath0);
+ settings->addChild(HostDNSath0);
+
+ addTarget("0", new VerticalConfigurationGroup(false,false,false,false));
+ addTarget("1", settings);
+};
+ath0options::ath0options()
+{
+
+ VerticalConfigurationGroup* rec = new VerticalConfigurationGroup(false);
+ rec->setLabel(QObject::tr("Wireless configuration for ath0"));
+ //rec->setUseLabel(true);
+ rec->addChild(new ath0_settings);
+ addChild(rec);
+}
+
+void NetworkSettingsath0::ath0_disable_others()
+{
+ QString my_current_value;
+ my_current_value = HostDefaultath0->getValue();
+ if ( my_current_value == "1" )
+ {
+ cout <<"ATH0: set other defaults buttons to off"<<endl;
+ hostparm.ThisHostDefaultInterface="ath0";
+ emit ath0_is_default();
+ }
+}
+void NetworkSettingsath0::ath0_disabled()
+{
+ cout << " ath0 is not default" << endl;
+ HostDefaultath0->setValue(0);
+}
+
+void NetworkSettingsath0::ath0_wireless_settings(void)
+{
+ //cout <<"button pressed for ath0"<<endl;
+ ath0options ath0screen;
+ ath0screen.exec();
+}
+
+void NetworkSettingsath0::ath0_wireless_disable()
+{
+ cout << " ath0 disabling wireless button" << endl;
+ wirelessbuttonath0->setEnabled(false);
+}
+
+
+//--
+
+class NetworkSettingsFrame:
+ public TriggeredConfigurationGroup {
+public:
+ NetworkSettingsFrame():
+ TriggeredConfigurationGroup(false, false, true, true,false, false, true, true) {
+ setLabel(QObject::tr("Network Settings Page (2/2)"));
+ Setting* netdevice = HostNetDevice();
+ addChild(netdevice);
+ setTrigger(netdevice);
+
+ NetworkSettingswlan0 *Nwlan0 = new NetworkSettingswlan0 ;
+ NetworkSettingswlan1 *Nwlan1 = new NetworkSettingswlan1 ;
+ NetworkSettingseth0 *Neth0 = new NetworkSettingseth0 ;
+ NetworkSettingseth1 *Neth1 = new NetworkSettingseth1 ;
+ NetworkSettingsath0 *Nath0 = new NetworkSettingsath0 ;
+
+ QString found_wireless=findnet_wireless();
+
+ if ( not found_wireless.contains("eth0"))
+ {
+ Neth0->eth0_wireless_disable();
+ hostparm.ThisHOST_iswirelesseth0="0";
+ }
+ else
+ {
+ hostparm.ThisHOST_iswirelesseth0="1";
+ }
+
+ if ( not found_wireless.contains("eth1"))
+ {
+ Neth1->eth1_wireless_disable();
+ hostparm.ThisHOST_iswirelesseth1="0";
+ }
+ else
+ {
+ hostparm.ThisHOST_iswirelesseth1="1";
+ }
+
+ if ( not found_wireless.contains("wlan0"))
+ {
+ Nwlan0->wlan0_wireless_disable();
+ hostparm.ThisHOST_iswirelesswlan0="0";
+ }
+ else
+ {
+ hostparm.ThisHOST_iswirelesswlan0="1";
+ }
+
+ if ( not found_wireless.contains("wlan1"))
+ {
+ Nwlan1->wlan1_wireless_disable();
+ hostparm.ThisHOST_iswirelesswlan1="0";
+ }
+ else
+ {
+ hostparm.ThisHOST_iswirelesswlan0="1";
+ }
+
+ if ( not found_wireless.contains("ath0"))
+ {
+ Nath0->ath0_wireless_disable();
+ hostparm.ThisHOST_iswirelessath0="0";
+ }
+ else
+ {
+ hostparm.ThisHOST_iswirelessath0="1";
+ }
+ connect(Nwlan1, SIGNAL(wlan1_is_default(void)), Nwlan0, SLOT(wlan0_disabled()));
+ connect(Nwlan1, SIGNAL(wlan1_is_default(void)), Neth0, SLOT(eth0_disabled()));
+ connect(Nwlan1, SIGNAL(wlan1_is_default(void)), Neth1, SLOT(eth1_disabled()));
+ connect(Nwlan1, SIGNAL(wlan1_is_default(void)), Nath0, SLOT(ath0_disabled()));
+
+ connect(Nwlan0, SIGNAL(wlan0_is_default(void)), Nwlan1, SLOT(wlan1_disabled()));
+ connect(Nwlan0, SIGNAL(wlan0_is_default(void)), Neth0, SLOT(eth0_disabled()));
+ connect(Nwlan0, SIGNAL(wlan0_is_default(void)), Neth1, SLOT(eth1_disabled()));
+ connect(Nwlan0, SIGNAL(wlan0_is_default(void)), Nath0, SLOT(ath0_disabled()));
+
+ connect(Neth1, SIGNAL(eth1_is_default(void)), Nwlan1, SLOT(wlan1_disabled()));
+ connect(Neth1, SIGNAL(eth1_is_default(void)), Nwlan0, SLOT(wlan0_disabled()));
+ connect(Neth1, SIGNAL(eth1_is_default(void)), Neth0, SLOT(eth0_disabled()));
+ connect(Neth1, SIGNAL(eth1_is_default(void)), Nath0, SLOT(ath0_disabled()));
+
+ connect(Neth0, SIGNAL(eth0_is_default(void)), Nwlan0, SLOT(wlan0_disabled()));
+ connect(Neth0, SIGNAL(eth0_is_default(void)), Nwlan1, SLOT(wlan1_disabled()));
+ connect(Neth0, SIGNAL(eth0_is_default(void)), Neth1, SLOT(eth1_disabled()));
+ connect(Neth0, SIGNAL(eth0_is_default(void)), Nath0, SLOT(ath0_disabled()));
+
+ connect(Nath0, SIGNAL(ath0_is_default(void)), Nwlan0, SLOT(wlan0_disabled()));
+ connect(Nath0, SIGNAL(ath0_is_default(void)), Nwlan1, SLOT(wlan1_disabled()));
+ connect(Nath0, SIGNAL(ath0_is_default(void)), Neth1, SLOT(eth1_disabled()));
+ connect(Nath0, SIGNAL(ath0_is_default(void)), Neth0, SLOT(eth0_disabled()));
+
+
+ HostLineEdit *HostMTUeth0 = new HostLineEdit("HostMTUeth0");
+ HostMTUeth0->setLabel(QObject::tr("MTU"));
+ HostMTUeth0->setValue("");
+ HostMTUeth0->setHelpText(QObject::tr("Leave this blank for default values. Changing this setting can have adverse affects, use with caution. Not all values will be supported by the device."));
+
+ ConfigurationGroup* settingseth0 = new GridConfigurationGroup(1,false, false, false, false);
+ settingseth0->addChild(Neth0);
+ settingseth0->addChild(HostMTUeth0);
+
+
+ HostLineEdit *HostMTUeth1 = new HostLineEdit("HostMTUeth1");
+ HostMTUeth1->setLabel(QObject::tr("MTU"));
+ HostMTUeth1->setValue("");
+ HostMTUeth1->setHelpText(QObject::tr("Leave this blank for default values. Changing this setting can have adverse affects, use with caution. Not all values will be supported by the device."));
+
+ ConfigurationGroup* settingseth1 = new GridConfigurationGroup(1,false, false, true, true);
+ settingseth1->addChild(Neth1);
+ settingseth1->addChild(HostMTUeth1);
+
+ HostLineEdit *HostMTUwlan0 = new HostLineEdit("HostMTUwlan0");
+ HostMTUwlan0->setLabel(QObject::tr("MTU"));
+ HostMTUwlan0->setValue("");
+ HostMTUwlan0->setHelpText(QObject::tr("Leave this blank for default values. Changing this setting can have adverse affects, use with caution. Not all values will be supported by the device."));
+
+ ConfigurationGroup* settingswlan0 = new GridConfigurationGroup(1,false, false, false, false);
+ settingswlan0->addChild(Nwlan0);
+ settingswlan0->addChild(HostMTUwlan0);
+
+ HostLineEdit *HostMTUwlan1 = new HostLineEdit("HostMTUwlan1");
+ HostMTUwlan1->setLabel(QObject::tr("MTU"));
+ HostMTUwlan1->setValue("");
+ HostMTUwlan1->setHelpText(QObject::tr("Leave this blank for default values. Changing this setting can have adverse affects, use with caution. Not all values will be supported by the device."));
+
+ ConfigurationGroup* settingswlan1 = new GridConfigurationGroup(1,false, false, false, false);
+ settingswlan1->addChild(Nwlan1);
+ settingswlan1->addChild(HostMTUwlan1);
+
+ HostLineEdit *HostMTUath0 = new HostLineEdit("HostMTUath0");
+ HostMTUath0->setLabel(QObject::tr("MTU"));
+ HostMTUath0->setValue("");
+ HostMTUath0->setHelpText(QObject::tr("Leave this blank for default values. Changing this setting can have adverse affects, use with caution. Not all values will be supported by the device."));
+
+ ConfigurationGroup* settingsath0 = new GridConfigurationGroup(1,false, false, false, false);
+ settingsath0->addChild(Nath0);
+ settingsath0->addChild(HostMTUath0);
+
+
+
+ addTarget("wlan0", settingswlan0);
+ addTarget("wlan1", settingswlan1);
+ addTarget("eth0", settingseth0);
+ addTarget("eth1", settingseth1);
+ addTarget("ath0", settingsath0);
+ };
+};
+
+
+static HostCheckBox *HostAutodown()
+{
+ HostCheckBox *gc = new HostCheckBox("HostAutodown");
+ gc->setLabel(QObject::tr("Turn off machine at a specified time"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Will turn off this system."));
+ return gc;
+};
+
+
+static HostSpinBox *HostWakeupTime()
+{
+ HostSpinBox *gc = new HostSpinBox("HostWakeupTime", -1, 23, 1, true);
+ gc->setLabel(QObject::tr("Power on time"));
+ gc->setValue(6);
+ gc->setHelpText(QObject::tr("Select the hour to auto poweron this system. Use -1 to disable" ));
+ return gc;
+}
+
+
+
+static HostSpinBox *HostShutdownTime()
+{
+ HostSpinBox *gc = new HostSpinBox("HostShutdownTime", -1, 23, 1, true);
+ gc->setLabel(QObject::tr("Auto Shutdown time"));
+ gc->setValue(2);
+ gc->setHelpText(QObject::tr("Select the hour to poweroff this syste. Times are in 24hour format. Use -1 to disable" ));
+ return gc;
+}
+static HostSpinBox *HostShutdownTime2()
+{
+ HostSpinBox *gc = new HostSpinBox("HostShutdownTime2", -1, 23, 1, true);
+ gc->setLabel(QObject::tr("2nd auto Shutdown time"));
+ gc->setValue(2);
+ gc->setHelpText(QObject::tr("Select the hour to poweroff this syste. Times are in 24hour format. Use -1 to disable" ));
+ return gc;
+}
+
+
+
+static HostCheckBox *HostUseWOL()
+{
+ HostCheckBox *gc = new HostCheckBox("HostUseWOL");
+ gc->setLabel(QObject::tr("Use Wake on Lan to turn on system"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Unless you know what your doing leave it checked"));
+ return gc;
+};
+
+static HostCheckBox *HostUseNVRAM()
+{
+ HostCheckBox *gc = new HostCheckBox("HostUseNVRAM");
+ gc->setLabel(QObject::tr("Use nvram to turn on system"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Leaved checked unless nvram causes problems."));
+ return gc;
+};
+
+
+
+
+
+class WakeSettings: public TriggeredConfigurationGroup {
+public:
+ WakeSettings():
+
+ TriggeredConfigurationGroup(true) {
+ setLabel(QObject::tr("Shutdown Settings"));
+ Setting* Autodown = HostAutodown();
+ addChild(Autodown);
+ setTrigger(Autodown);
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false);
+ settings->addChild(HostShutdownTime());
+ settings->addChild(HostShutdownTime2());
+ settings->addChild(HostWakeupTime());
+ settings->addChild(HostUseNVRAM());
+ settings->addChild(HostUseWOL());
+ addTarget("0", new VerticalConfigurationGroup(true));
+ addTarget("1", settings);
+
+ };
+};
+
+class Frontend_settings_group: public TriggeredConfigurationGroup {
+public:
+ Frontend_settings_group():
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+ Setting* fe = HostRunFrontend();
+ addChild(fe);
+ setTrigger(fe);
+ //HostXres = new HostComboBox("HostXres");
+ ConfigurationGroup* setting1 = new GridConfigurationGroup(2,false);
+ setting1->addChild(HostXres());
+ setting1->addChild(HostUsemythfrontend());
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false);
+ settings->addChild(setting1);
+ settings->addChild(new HostRemoteType);
+
+ addTarget("0", new VerticalConfigurationGroup(false));
+ addTarget("1", settings);
+
+ };
+};
+
+SystemtypeGroup::SystemtypeGroup(): TriggeredConfigurationGroup(true,true,true,true,true,true,true,true) {
+ setLabel(QObject::tr("System Type"));
+ HostSystemType = new HostComboBox("HostSystemType");
+ HostSystemType->setLabel(QObject::tr("Type of system setup"));
+ HostSystemType->addSelection("Standalone");
+ HostSystemType->addSelection("Frontend_only");
+ HostSystemType->addSelection("Master_backend");
+ HostSystemType->addSelection("Slave_backend");
+
+// HostXres = new HostComboBox("HostXres");
+ if ( ((gContext->GetSetting("HostaccesshostypeSystemtype")) == "0" ))
+ HostSystemType->setEnabled(false);
+
+ addChild(HostSystemType);
+ setTrigger(HostSystemType);
+
+ ConfigurationGroup* standalone = new VerticalConfigurationGroup(false,false,true,true);
+ standalone->addChild(HostXres());
+ standalone->addChild(new HostRemoteType);
+ standalone->addChild(HostUsemythfrontend());
+
+ ConfigurationGroup* frontend = new VerticalConfigurationGroup(false,false,true,true);
+ frontend->addChild(HostMysqlserverip_listbox());
+ frontend->addChild(HostXres());
+ frontend->addChild(new HostRemoteType);
+ frontend->addChild(HostUsemythfrontend());
+
+ ConfigurationGroup* backend = new VerticalConfigurationGroup(false,false,false,false);
+ backend->addChild( new Frontend_settings_group);
+
+ ConfigurationGroup* slave = new VerticalConfigurationGroup(false,false,true,true);
+ slave->addChild(HostMysqlserverip_listbox());
+ slave->addChild( new Frontend_settings_group);
+
+
+ addTarget("Standalone", standalone);
+ addTarget("Frontend_only", frontend);
+ addTarget("Master_backend", backend);
+ addTarget("Slave_backend", slave);
+ connect(HostSystemType, SIGNAL(valueChanged(const QString&)),
+ this, SLOT(SystemtypeHelp()));
+
+ };
+
+void SystemtypeGroup::SystemtypeHelp(void)
+ {
+ QString msg = (QObject::tr("Configuration for this system. Most people will use standalone"));
+ QString selectedhostype;
+ selectedhostype = HostSystemType->getValue();
+ if ( selectedhostype.isEmpty())
+ {
+ HostSystemType->setHelpText(msg) ;
+ return;
+ }
+
+ if (selectedhostype == "Standalone")
+ msg="Complete System, that doesn't allow outside connections";
+ if (selectedhostype == "Frontend_only")
+ msg="Frontend only, needs a master backend already on the network";
+ if (selectedhostype == "Master_backend")
+ msg="Tuners, scheduling and database. This allows for remote frontend and slave backends";
+ if (selectedhostype == "Slave_backend")
+ msg="Extra tuners";
+
+ HostSystemType->setHelpText(msg) ;
+}
+
+
+
+HostRemoteType::HostRemoteType():
+ HostImageSelect("HostRemoteType") {
+ setLabel(QObject::tr("Remote"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/remotes");
+ QDir remotes(dirtxt);
+ remotes.setFilter(QDir::Dirs);
+ remotes.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *fil = remotes.entryInfoList(QDir::Dirs);
+ if (!fil)
+ return;
+
+ QFileInfoListIterator it( *fil );
+ QFileInfo *remote;
+ for( ; it.current() != 0 ; ++it )
+ {
+ remote = it.current();
+ QFileInfo preview(remote->absFilePath() + "/preview.jpg");
+ if (remote->fileName()[0] == '.' || !preview.exists() )
+ {
+ //cout << remote->absFilePath() << " Can't find preivew image, doesn't look like a remote\n";
+ continue;
+ }
+ QImage* previewImage = new QImage(preview.absFilePath());
+ addImageSelection(remote->fileName(), previewImage);
+
+ }
+
+}
+/*
+static HostComboBox *HostLCDType()
+{
+ HostComboBox *gc = new HostComboBox("HostLCDType",false);
+ gc->setLabel(QObject::tr("LCD/VFD model"));
+ gc->addSelection("no_lcd");
+ gc->addSelection("tinker");
+ gc->setValue(0);
+ gc->setHelpText(QObject::tr("VFD or LCD"));
+ QString dirtxt;
+ dirtxt=MV_ROOT;
+ dirtxt.append("templates/LCD");
+ QDir transmit(dirtxt);
+
+ //QDir transmit("/usr/share/templates/LCD");
+ transmit.setFilter(QDir::Dirs);
+ transmit.setSorting(QDir::Name | QDir::IgnoreCase);
+ const QFileInfoList *infos = transmit.entryInfoList();
+ const QFileInfo *info;
+ if (!infos)
+ return gc;
+ QFileInfoListIterator infoIt( *infos );
+ QString currentitem = ".";
+ while( (info=infoIt.current()) != 0 )
+ {
+ currentitem = info->baseName( TRUE );
+ if ( currentitem != ".." && currentitem != "." && currentitem != "")
+ {
+ gc->addSelection(currentitem);
+ }
+ ++infoIt;
+ }
+ return gc;
+};
+*/
+
+class AdvancedSettings: public TriggeredConfigurationGroup {
+public:
+ void smb_busy_box() {
+ system ("nmbscan -d > /tmp/smbdomainlist & ");
+ QString msgtext="Searching for windows workgroups";
+ int return_code;
+ MythBusyDialog *busy = new MythBusyDialog(msgtext);
+ // yet another incorrect way todo things, but I don't know anybetter
+ // as long as ps can find systemconfig in the list the busy box will appear and update
+ busy->start();
+ while ( return_code == 0 )
+ {
+ return_code = myth_system("ps -ef|grep nmbscan|grep -v grep > /dev/null");
+ qApp->processEvents ();
+ usleep(900);
+ }
+ busy->Close();
+ busy->deleteLater();
+ }
+
+ AdvancedSettings():
+ TriggeredConfigurationGroup(true,true,true,true,true,true,true,true)
+ {
+
+ setLabel(QObject::tr("Advanced settings (1/3)"));
+ Setting* Autodown = HostAutodown();
+ setTrigger(Autodown);
+ hostparm.ThisSystemType = gContext->GetSetting("HostSystemType");
+ ConfigurationGroup *checkbox = new GridConfigurationGroup(2,false);
+ checkbox->addChild(HostServiceMythWEB());
+ checkbox->addChild(HostServiceNFS());
+ checkbox->addChild(Hostbootsplash());
+ checkbox->addChild(HostncidClient());
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false);
+ if ( hostparm.ThisSystemType == "Standalone" )
+ {
+ smb_busy_box();
+ settings->addChild(new NCIDsettings);
+ settings->addChild(new SAMBAsettings);
+ #ifdef __MVAPP__
+ checkbox->addChild(GlobalServiceHobbitserver() );
+ #else
+ checkbox->addChild(HostServiceRRD() );
+ #endif
+ settings->addChild(checkbox) ;
+ }
+ else if (hostparm.ThisSystemType == "Master_backend" )
+ {
+ smb_busy_box();
+ checkbox->addChild(GlobalPKG_MIRROR());
+ settings->addChild(new NCIDsettings);
+ settings->addChild(new SAMBAsettings);
+ #ifdef __MVAPP__
+ checkbox->addChild(GlobalServiceHobbitserver() );
+ #else
+ checkbox->addChild(HostServiceRRD() );
+ #endif
+ settings->addChild(checkbox) ;
+ }
+ else if (hostparm.ThisSystemType == "Frontend_only" )
+ {
+ settings->addChild(Hostbootsplash());
+ settings->addChild(HostncidClient());
+ #ifdef __MVAPP__
+ cout << gContext->GetSetting("GlobalServiceHobbitserver") << endl;
+ cout << "above"<<endl;
+ if ( gContext->GetSetting("GlobalServiceHobbitserver") != "0" )
+ settings->addChild(HostServiceHobbitclient() );
+ #else
+ settings->addChild(HostServiceRRD() );
+ #endif
+
+
+ if ( (gContext->GetSetting("GlobalPKG_MIRROR") ) == "1" )
+ settings->addChild(HostPKG_MIRROR());
+ }
+ else if (hostparm.ThisSystemType == "Slave_backend" )
+ {
+ settings->addChild(Hostbootsplash());
+ settings->addChild(HostncidClient());
+ #ifdef __MVAPP__
+ if ( gContext->GetSetting("GlobalServiceHobbitserver") != "0" )
+ settings->addChild(HostServiceHobbitclient() );
+ #else
+ settings->addChild(HostServiceRRD() );
+ #endif
+
+ if ( (gContext->GetSetting("GlobalPKG_MIRROR")) == "1")
+ settings->addChild(HostPKG_MIRROR());
+ };
+ addTarget("", settings);
+ };
+};
+
+
+class AdvancedSettings_2: public TriggeredConfigurationGroup {
+public:
+ AdvancedSettings_2():
+ TriggeredConfigurationGroup(true,true,true,true,true,true,true,true) {
+ setLabel(QObject::tr("Advanced settings (2/3)"));
+ Setting* Autodown = HostAutodown();
+ setTrigger(Autodown);
+ hostparm.ThisSystemType = gContext->GetSetting("HostSystemType");
+
+ ConfigurationGroup *checkbox = new GridConfigurationGroup(2,false);
+ checkbox->addChild(HostServiceMythWEB());
+ checkbox->addChild(HostServiceNFS());
+ checkbox->addChild(Hostbootsplash());
+ checkbox->addChild(HostncidClient());
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false);
+ if ( hostparm.ThisSystemType == "Standalone" )
+ {
+// settings->addChild(HostLCDType());
+// settings->addChild(HostTransmitproto());
+// settings->addChild(new LIRCsettings);
+ settings->addChild(HostRunDHCP());
+
+ settings->addChild(new Evroutersettings);
+ }
+ else if (hostparm.ThisSystemType == "Master_backend" )
+ {
+// settings->addChild(HostLCDType());
+// settings->addChild(HostTransmitproto());
+// settings->addChild(new LIRCsettings);
+ settings->addChild(new Backupsettings);
+ settings->addChild(HostRunDHCP());
+ settings->addChild(new Evroutersettings);
+ }
+ else if (hostparm.ThisSystemType == "Frontend_only" )
+ {
+// settings->addChild(HostLCDType());
+// settings->addChild(new LIRCsettings);
+ settings->addChild(new Evroutersettings);
+ }
+ else if (hostparm.ThisSystemType == "Slave_backend" )
+ {
+// settings->addChild(HostLCDType());
+// settings->addChild(HostTransmitproto());
+// settings->addChild(new LIRCsettings);
+ settings->addChild(new Evroutersettings);
+ };
+
+ addTarget("", settings);
+
+};
+};
+
+
+
+/*_______________________________Sound settings ____________________*/
+SoundSettings::SoundSettings():
+ TriggeredConfigurationGroup(true,true,true,true,true,true,true,true) {
+ setLabel(QObject::tr("Audio out settings"));
+
+ HostAudiotype = new HostComboBox("HostAudiotype",false);
+ HostAudiotype->setLabel(QObject::tr("Sound card driver"));
+ HostAudiotype->addSelection("OSS");
+ HostAudiotype->addSelection("ALSA");
+ HostAudiotype->addSelection("tinker");
+
+ HostAudiotype->setHelpText(QObject::tr("OSS or ALSA, your choice"));
+ addChild(HostAudiotype);
+ setTrigger(HostAudiotype);
+
+ HostsyncXine = new HostCheckBox("HostsyncXine");
+ HostsyncXine->setLabel(QObject::tr("Xine"));
+ HostsyncXine->setValue(true);
+
+ HostsyncMplayer = new HostCheckBox("HostsyncMplayer");
+ HostsyncMplayer->setLabel(QObject::tr("mplayer"));
+ HostsyncMplayer->setValue(true);
+
+ HostsyncMythMusic = new HostCheckBox("HostsyncMythMusic");
+ HostsyncMythMusic->setLabel(QObject::tr("mythmusic"));
+ HostsyncMythMusic->setValue(true);
+
+ HostsyncMythFrontend = new HostCheckBox("HostsyncMythFrontend");
+ HostsyncMythFrontend->setLabel(QObject::tr("mythfrontend"));
+ HostsyncMythFrontend->setValue(true);
+
+ HorizontalConfigurationGroup *syncboxes = new HorizontalConfigurationGroup(false, false, true, true);
+ syncboxes->addChild(HostsyncXine);
+ syncboxes->addChild(HostsyncMplayer);
+ syncboxes->addChild(HostsyncMythMusic);
+ syncboxes->addChild(HostsyncMythFrontend);
+
+ HorizontalConfigurationGroup *lp = new HorizontalConfigurationGroup(false, false, true, true);
+ HorizontalConfigurationGroup *lpalsa = new HorizontalConfigurationGroup(false, false, true, true);
+
+ TransButtonSetting *LoadOSSbutton = new TransButtonSetting();
+ LoadOSSbutton->setLabel(tr("Load OSS driver"));
+ TransButtonSetting *LoadALSAbutton = new TransButtonSetting();
+ LoadALSAbutton->setLabel(tr("Load ALSA driver"));
+
+ TransButtonSetting *TestAudiobutton = new TransButtonSetting();
+ TestAudiobutton->setLabel(tr("Test Audio Settings"));
+ lp->addChild(TestAudiobutton);
+ lp->addChild(LoadOSSbutton);
+
+ TransButtonSetting *TestALSAAudiobutton = new TransButtonSetting();
+ TestALSAAudiobutton->setLabel(tr("Test ALSA Audio Settings"));
+ lpalsa->addChild(TestALSAAudiobutton);
+ lpalsa->addChild(LoadALSAbutton);
+
+ TransLabelSetting *osslabel = new TransLabelSetting();
+ osslabel->setValue("The real OSS! More information can be found at:");
+
+ TransLabelSetting *osslabel1 = new TransLabelSetting();
+ osslabel1->setValue(" http://www.opensound.com ");
+
+ TransLabelSetting *AlsaLabel = new TransLabelSetting();
+ AlsaLabel->setValue("The inferior and complicated soundsystem known as ALSA ");
+
+// OSS GROUP
+ SoundOSSsettings *OSS = new SoundOSSsettings ;
+ ConfigurationGroup* osssettings = new VerticalConfigurationGroup(false);
+ osssettings->addChild(osslabel);
+ osssettings->addChild(osslabel1);
+ osssettings->addChild(OSS);
+ osssettings->addChild(syncboxes);
+ osssettings->addChild(lp);
+ connect(this, SIGNAL(oss_sig()),
+ OSS, SLOT(soundossgathersettings()));
+ connect(TestAudiobutton, SIGNAL(pressed()),
+ this, SLOT(soundossgathersettings_1()));
+ connect(LoadOSSbutton, SIGNAL(pressed()),
+ OSS, SLOT(loadossdriver()));
+
+// ALSA GROUP
+ SoundALSAsettings *ALSA = new SoundALSAsettings ;
+ ConfigurationGroup* alsasettings = new VerticalConfigurationGroup(false);
+ alsasettings->addChild(AlsaLabel);
+ alsasettings->addChild(ALSA);
+ alsasettings->addChild(syncboxes);
+ alsasettings->addChild(lpalsa);
+
+ connect(this, SIGNAL(alsa_sig()),
+ ALSA, SLOT(soundalsagathersettings()));
+ connect(TestALSAAudiobutton, SIGNAL(pressed()),
+ this, SLOT(soundalsagathersettings_1()));
+ connect(LoadALSAbutton, SIGNAL(pressed()),
+ ALSA, SLOT(loadalsadriver()));
+ addTarget("ALSA", alsasettings);
+ addTarget("OSS", osssettings);
+ addTarget("tinker", new VerticalConfigurationGroup(false));
+};
+
+
+SoundOSSsettings::SoundOSSsettings():
+ TriggeredConfigurationGroup(true,false,true,true,true,true,true,true)
+{
+ SetVertical(true);
+ HostSoundTypeout = new HostComboBox("HostSoundTypeout");
+ HostSoundTypeout->setLabel(QObject::tr("Type"));
+ HostSoundTypeout->addSelection("Analog");
+ HostSoundTypeout->addSelection("Digital");
+ HostSoundTypeout->setHelpText(QObject::tr(""));
+
+ HostSoundOssAnalog = new HostComboBox("HostSoundOssAnalog");
+ HostSoundOssDigital = new HostComboBox("HostSoundOssDigital");
+ fillossselection();
+ int findossanalog=HostSoundOssAnalog->findSelection(hostparm.OLDHostSoundOSSAnalog );
+ int findossdigital=HostSoundOssDigital->findSelection(hostparm.OLDHostSoundOSSDigital );
+ HostSoundOssAnalog->setValue(findossanalog);
+ HostSoundOssDigital->setValue(findossdigital);
+ addChild(HostSoundTypeout);
+ setTrigger(HostSoundTypeout);
+ addTarget("Analog", HostSoundOssAnalog);
+ addTarget("Digital", HostSoundOssDigital);
+};
+
+SoundALSAsettings::SoundALSAsettings():
+ TriggeredConfigurationGroup(true,false,true,true,true,true,true,true)
+ {
+ SetVertical(true);
+ HostSoundALSATypeout = new HostComboBox("HostSoundALSATypeout");
+ HostSoundALSATypeout->setLabel(QObject::tr("Type"));
+ HostSoundALSATypeout->addSelection("Analog");
+ HostSoundALSATypeout->addSelection("Digital");
+ HostSoundALSATypeout->setHelpText(QObject::tr(""));
+
+ HostSoundALSAAnalog = new HostComboBox("HostSoundALSAAnalog");
+ HostSoundALSADigital = new HostComboBox("HostSoundALSADigital");
+ fillALSAselection();
+ int findalsaanalog=HostSoundALSAAnalog->findSelection(hostparm.OLDHostSoundALSAAnalog );
+ int findalsadigital=HostSoundALSADigital->findSelection(hostparm.OLDHostSoundALSADigital );
+ HostSoundALSAAnalog->setValue(findalsaanalog);
+ HostSoundALSADigital->setValue(findalsadigital);
+ addChild(HostSoundALSATypeout);
+ setTrigger(HostSoundALSATypeout);
+ addTarget("Analog", HostSoundALSAAnalog);
+ addTarget("Digital", HostSoundALSADigital);
+ };
+
+void SoundOSSsettings::loadossdriver()
+{
+ cout << "oss button pressed" << endl;
+
+// Add info popup right here
+ QString cmdtxt;
+ cmdtxt="sudo ";
+ cmdtxt.append(MV_ROOT) ;
+// cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/soundconfig.sh -t LOAD -i OSS &");
+ system(cmdtxt);
+ int return_code = 0;
+ QString msgtext = "Loading OSS driver" ;
+
+ MythBusyDialog *busy = new MythBusyDialog(msgtext);
+ // yet another incorrect way todo things, but I don't know anybetter
+ // as long as ps can find systemconfig in the list the busy box will appear and update
+ busy->start();
+ while ( return_code == 0 )
+ {
+ return_code = myth_system("ps -ef|grep soundconfig.sh|grep -v grep > /dev/null");
+ qApp->processEvents ();
+ usleep(900);
+ }
+ busy->Close();
+ busy->deleteLater();
+ fillossselection();
+
+}
+void SoundALSAsettings::loadalsadriver()
+{
+ cout << "Loading alsa driver" << endl;
+ QString cmdtxt;
+ cmdtxt="sudo ";
+ cmdtxt.append(MV_ROOT) ;
+ cmdtxt.append("bin/soundconfig.sh -t LOAD -i ALSA &");
+ system(cmdtxt);
+ int return_code = 0;
+ QString msgtext = "Loading ALSA driver" ;
+
+ MythBusyDialog *busy = new MythBusyDialog(msgtext);
+ // yet another incorrect way todo things, but I don't know anybetter
+ // as long as ps can find systemconfig in the list the busy box will appear and update
+ busy->start();
+ while ( return_code == 0 )
+ {
+ return_code = myth_system("ps -ef|grep soundconfig.sh|grep -v grep > /dev/null");
+ qApp->processEvents ();
+ usleep(900);
+ }
+ busy->Close();
+ busy->deleteLater();
+ HostSoundALSAAnalog-> clearSelections();
+ HostSoundALSADigital-> clearSelections();
+
+ fillALSAselection();
+
+}
+void SoundOSSsettings::fillossselection()
+{
+ myth_system("ossinfo -v1 -a |grep device > /tmp/ossdevices");
+ QString currentitem;
+ QString currentfile = "/tmp/ossdevices";
+ QString line;
+ QString legacy_device;
+ QString simpleitem;
+ QString currentitemtext;
+ QRegExp sep( "\t" );
+ QFile file(currentfile);
+ QString ossfound="false";
+ HostSoundOssAnalog->clearSelections();
+ HostSoundOssDigital-> clearSelections();
+
+
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if (line.contains("device index") )
+ {
+ legacy_device = t.readLine();
+ legacy_device= legacy_device.section( "/",2,2);
+ currentitemtext=line.section( "/" , 0 ,0 );
+ simpleitem = currentitemtext.simplifyWhiteSpace();
+ simpleitem = simpleitem.remove ( "(" );
+ simpleitem = simpleitem.remove ( ")" );
+ simpleitem.append(" (");
+ simpleitem.append(legacy_device);
+ simpleitem.append(")");
+ if (line.contains("spdout") || line.contains("digital") )
+ HostSoundOssDigital->addSelection(simpleitem);
+ else
+ HostSoundOssAnalog->addSelection(simpleitem);
+ ossfound="true";
+ }
+ }
+ if (ossfound=="false")
+ {
+ simpleitem="No cards found, try loading the OSS drivers";
+ HostSoundOssAnalog->addSelection(simpleitem);
+ HostSoundOssDigital->addSelection(simpleitem);
+ }
+ }
+return ;
+};
+
+
+void SoundALSAsettings::fillALSAselection()
+{
+ HostSoundALSAAnalog-> clearSelections();
+ HostSoundALSADigital-> clearSelections();
+ myth_system("aplay -l > /tmp/alsadevices");
+ QString currentfile = "/tmp/alsadevices";
+ QString line;
+ QString hwdevice;
+ QString alsadescription;
+ QString temphwdevice;
+ QString simpleitem;
+ QFile file(currentfile);
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if (line.startsWith("card") )
+ {
+ if (line.contains("snd_ctl_card_info"))
+ {
+ simpleitem="Try loading the alsa drivers";
+ HostSoundALSAAnalog->addSelection(simpleitem);
+ HostSoundALSADigital->addSelection(simpleitem);
+ break;
+ }
+ //card 0: I82801DBICH4 [Intel 82801DB-ICH4], device 0: Intel ICH [Intel 82801DB-ICH4]
+ alsadescription=line.section( "," , 0 ,0 );
+ alsadescription=alsadescription.section(":",1,1);
+ hwdevice=line.section( ":" , 0 ,0 );
+ hwdevice=hwdevice.section( " " , -1,-1 );
+ //grabbing 2nd half of device
+ temphwdevice=line.section(",",1,1);
+ temphwdevice=temphwdevice.section(":",0,0);
+ temphwdevice=temphwdevice.section(" ",-1,-1 );
+ hwdevice.append(",");
+ hwdevice.append(temphwdevice);
+ simpleitem=alsadescription + "(hw:" + hwdevice + ")";
+ if (line.contains("IEC958") )
+ HostSoundALSADigital->addSelection(simpleitem);
+ else
+ HostSoundALSAAnalog->addSelection(simpleitem);
+ }
+ }
+ }
+return ;
+
+}
+
+void SoundSettings::soundossgathersettings_1 (void)
+{
+ hostparm.ThisHostAudiotype = HostAudiotype->getValue();
+ hostparm.ThisHostsyncXine = HostsyncXine->getValue();
+ hostparm.ThisHostsyncMplayer = HostsyncMplayer->getValue();
+ hostparm.ThisHostsyncMythMusic = HostsyncMythMusic->getValue();
+ hostparm.ThisHostsyncMythFrontend = HostsyncMythFrontend->getValue();
+ // emit the signal to call soundossgathersetting.
+ emit oss_sig();
+};
+void SoundSettings::soundalsagathersettings_1 (void)
+{
+ hostparm.ThisHostAudiotype = HostAudiotype->getValue();
+ hostparm.ThisHostsyncXine = HostsyncXine->getValue();
+ hostparm.ThisHostsyncMplayer = HostsyncMplayer->getValue();
+ hostparm.ThisHostsyncMythMusic = HostsyncMythMusic->getValue();
+ hostparm.ThisHostsyncMythFrontend = HostsyncMythFrontend->getValue();
+ // emit the signal to call soundALSAgathersetting.
+ emit alsa_sig();
+};
+
+
+void SoundOSSsettings::soundossgathersettings(void)
+{
+ hostparm.ThisHostSoundTypeout = HostSoundTypeout->getValue() ;
+ hostparm.ThisHostSoundOSSAnalog = HostSoundOssAnalog->getValue();
+ hostparm.ThisHostSoundOSSDigital = HostSoundOssDigital->getValue();
+ QString tempdevice;
+ if ( hostparm.ThisHostSoundTypeout == "Analog" )
+ {
+ tempdevice = hostparm.ThisHostSoundOSSAnalog ;
+ }
+ else
+ {
+ tempdevice = hostparm.ThisHostSoundOSSDigital ;
+ };
+ tempdevice = tempdevice.section( "(", 1,1 );
+ tempdevice = tempdevice.section( ")", 0,0 );
+ hostparm.ThisHostSoundDevice = "/dev/";
+ hostparm.ThisHostSoundDevice.append(tempdevice);
+ // Add info popup right here
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/soundconfig.sh -t test -i OSS -d " + hostparm.ThisHostSoundDevice + "&");
+ system(cmdtxt);
+ int return_code = 0;
+ QString msgtext = "Playing sample audio" ;
+ MythBusyDialog *busy = new MythBusyDialog(msgtext);
+ // yet another incorrect way todo things, but I don't know anybetter
+ // as long as ps can find systemconfig in the list the busy box will appear and update
+ busy->start();
+ while ( return_code == 0 )
+ {
+ return_code = myth_system("ps -ef|grep soundconfig.sh|grep -v grep > /dev/null");
+ qApp->processEvents ();
+ usleep(900);
+ }
+ busy->Close();
+ busy->deleteLater();
+};
+
+void SoundALSAsettings::soundalsagathersettings(void)
+{
+
+ hostparm.ThisHostSoundALSATypeout = HostSoundALSATypeout->getValue() ;
+ hostparm.ThisHostSoundALSAAnalog = HostSoundALSAAnalog->getValue();
+ hostparm.ThisHostSoundALSADigital = HostSoundALSADigital->getValue();
+// cout << hostparm.ThisHostSoundALSATypeout << endl;
+// cout << hostparm.ThisHostSoundALSAAnalog << endl;
+// cout << hostparm.ThisHostSoundALSADigital << endl;
+
+ // Intel [HDA Intel](hw:0,0)
+
+// cout << "--------" << endl;
+ QString tempdevice;
+ if ( hostparm.ThisHostSoundALSATypeout == "Analog" )
+ {
+ tempdevice = hostparm.ThisHostSoundALSAAnalog ;
+ }
+ else
+ {
+ tempdevice = hostparm.ThisHostSoundALSADigital ;
+ };
+ tempdevice = tempdevice.section( "(", 1,1 );
+ tempdevice = tempdevice.section( ")", 0,0 );
+ hostparm.ThisHostSoundDevice = tempdevice;
+ // Add info popup right here
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/soundconfig.sh -t test -i ALSA -d " + hostparm.ThisHostSoundDevice + "&");
+ system(cmdtxt);
+ int return_code = 0;
+ QString msgtext = "Playing sample audio" ;
+
+ MythBusyDialog *busy = new MythBusyDialog(msgtext);
+ busy->start();
+ while ( return_code == 0 )
+ {
+ return_code = myth_system("ps -ef|grep soundconfig.sh|grep -v grep > /dev/null");
+ qApp->processEvents ();
+ usleep(900);
+ }
+ busy->Close();
+ busy->deleteLater();
+};
+
+
+/* __________________________ END OF CLASSES_________________________*/
+
+void pre_writesettings ()
+{
+ hostparm.ThisSystemType = gContext->GetSetting("HostSystemType");
+ hostparm.ThisDBhost = gContext->GetSetting("HostMysqlServer");
+ hostparm.ThisHostName = gContext->GetSetting("HostMyhostname");
+
+ if ( hostparm.ThisSystemType == "Standalone" )
+ {
+ hostparm.ThisDBhost = "localhost" ;
+ hostparm.ThisRunfrontend = "1" ;
+ gContext->SaveSetting("HostRunFrontend", hostparm.ThisRunfrontend );
+ // disable pkgmirror
+ hostparm.ThisHostPKG_MIRROR = "0";
+ gContext->SaveSetting("GlobalPKG_MIRROR", hostparm.ThisHostPKG_MIRROR );
+ hostparm.ThisHostServiceHobbit = gContext->GetSetting("GlobalServiceHobbitserver");
+ if (hostparm.ThisHostServiceHobbit == "" )
+ {
+ hostparm.ThisHostServiceHobbit = "1";
+ QString s = "GlobalServiceHobbitserver";
+ gContext->SaveSettingOnHost(s, hostparm.ThisHostServiceHobbit ,NULL);
+ }
+ }
+ else if (hostparm.ThisSystemType == "Master_backend" )
+ {
+ if ( hostparm.ThisNFS =="" && gContext->GetSetting("HostServiceNFS") == "" )
+ {
+ hostparm.ThisNFS = "1";
+ gContext->SaveSetting("HostServiceNFS",hostparm.ThisNFS );
+ }
+ hostparm.ThisDBhost = "127.0.0.1" ;
+ //GlobalPKG is only an option for MBE
+ hostparm.ThisHostPKG_MIRROR = (gContext->GetSetting("GlobalPKG_MIRROR")) ;
+ hostparm.ThisHostServiceHobbit = gContext->GetSetting("GlobalServiceHobbitserver");
+ if (hostparm.ThisHostServiceHobbit == "" )
+ {
+ hostparm.ThisHostServiceHobbit = "1";
+ QString s = "GlobalServiceHobbitserver";
+ gContext->SaveSettingOnHost(s, hostparm.ThisHostServiceHobbit,NULL );
+ }
+ }
+ else if (hostparm.ThisSystemType == "Frontend_only" )
+ {
+ hostparm.ThisRunfrontend = "1" ;
+ hostparm.ThisSamba = "0";
+ hostparm.ThisNFS = "0";
+ hostparm.ThisMythWEB = "0";
+ gContext->SaveSetting("HostRunFrontend", hostparm.ThisRunfrontend );
+ gContext->SaveSetting("HostServiceSamba", hostparm.ThisSamba );
+ gContext->SaveSetting("HostServiceNFS", hostparm.ThisNFS );
+ gContext->SaveSetting("HostServiceMythWEB",hostparm.ThisMythWEB );
+ // if GBL is enabled, then check for host setting, else disable it
+ if ( (gContext->GetSetting("GlobalPKG_MIRROR") ) == "1" )
+ {
+ hostparm.ThisHostPKG_MIRROR = gContext->GetSetting("HostPKG_MIRROR");
+ }
+ else
+ {
+ hostparm.ThisHostPKG_MIRROR = "0";
+ };
+// cout << "install_hobbit:" <<endl;
+// cout << install_hobbit << endl;
+// cout <<"-----------------"<< endl;
+ if ( ((gContext->GetSetting("GlobalServiceHobbitserver") ) == "1") || install_hobbit )
+ {
+ hostparm.ThisHostServiceHobbit = gContext->GetSetting("HostServiceHobbitclient");
+// cout <<"might install hobbit!" << endl;
+ cout << hostparm.ThisHostServiceHobbit << endl;
+
+ }
+ else
+ {
+ hostparm.ThisHostServiceHobbit = "0";
+ cout <<" don't install hobbit" << endl;
+ }
+
+ gContext->SaveSetting("HostPKG_MIRROR", hostparm.ThisHostPKG_MIRROR );
+ gContext->SaveSetting("HostServiceHobbitclient", hostparm.ThisHostServiceHobbit);
+
+ }
+ else if (hostparm.ThisSystemType == "Slave_backend" )
+ {
+ hostparm.ThisSamba = "0";
+ hostparm.ThisNFS = "0";
+ hostparm.ThisMythWEB = "0";
+ gContext->SaveSetting("HostServiceSamba", hostparm.ThisSamba );
+ gContext->SaveSetting("HostServiceNFS", hostparm.ThisNFS );
+ gContext->SaveSetting("HostServiceMythWEB",hostparm.ThisMythWEB );
+ if ( (gContext->GetSetting("GlobalPKG_MIRROR") ) == "1" )
+ {
+ hostparm.ThisHostPKG_MIRROR = gContext->GetSetting("HostPKG_MIRROR");
+ }
+ else
+ {
+ hostparm.ThisHostPKG_MIRROR = "0";
+ }
+ if ( ((gContext->GetSetting("GlobalServiceHobbitserver") ) == "1") || install_hobbit )
+ {
+ hostparm.ThisHostServiceHobbit = gContext->GetSetting("HostServiceHobbitclient");
+ }
+ else
+ {
+
+ hostparm.ThisHostServiceHobbit = "0";
+ }
+
+ gContext->SaveSetting("HostPKG_MIRROR", hostparm.ThisHostPKG_MIRROR );
+ gContext->SaveSetting("HostServiceHobbitclient", hostparm.ThisHostServiceHobbit);
+
+ };
+
+ if ( hostparm.ThisHostDefaultInterface == "" )
+ {
+ if ( gContext->GetSetting("HostDefaulteth0") == "1" )
+ hostparm.ThisHostDefaultInterface = "eth0";
+ else if ( gContext->GetSetting("HostDefaulteth1") == "1" )
+ hostparm.ThisHostDefaultInterface = "eth1";
+ else if ( gContext->GetSetting("HostDefaultwlan0") == "1" )
+ hostparm.ThisHostDefaultInterface = "wlan0";
+ else if ( gContext->GetSetting("HostDefaultwlan1") == "1" )
+ hostparm.ThisHostDefaultInterface = "wlan1";
+ else if ( gContext->GetSetting("HostActiveonbooteth0") == "1" )
+ hostparm.ThisHostDefaultInterface = "eth0";
+ else if ( gContext->GetSetting("HostActiveonbooteth1") == "1" )
+ hostparm.ThisHostDefaultInterface = "eth1";
+ else if ( gContext->GetSetting("HostActiveonbootwlan0") == "1" )
+ hostparm.ThisHostDefaultInterface = "wlan0";
+ else if ( gContext->GetSetting("HostActiveonbootwlan1") == "1" )
+ hostparm.ThisHostDefaultInterface = "wlan1";
+ else
+ hostparm.ThisHostDefaultInterface = "ack";
+ }
+// Even after all the above, it's still possible to set the Default interface to one that isn't active.
+
+ hostparm.ThisDBhost = hostparm.ThisDBhost.section( "\t", 0, 0 );
+ //remove spaces from hostname
+ std::string s = hostparm.ThisHostName;
+ std::string::iterator it = std::remove_if(s.begin(), s.end(), std::bind2nd(std::equal_to<char>(), ' '));
+ s = std::string(s.begin(), it);
+ hostparm.ThisHostName = s;
+ if ( hostparm.ThisHostName == "" )
+ {
+ hostparm.ThisHostName=gContext->GetHostName();
+ std::string s = hostparm.ThisHostName;
+ std::string::iterator it = std::remove_if(s.begin(), s.end(), std::bind2nd(std::equal_to<char>(), ' '));
+ s = std::string(s.begin(), it);
+ hostparm.ThisHostName = s;
+ if ( hostparm.ThisHostName == "" )
+ hostparm.ThisHostName = "You_Fool";
+ }
+ // piece togther the timezone
+ QString tz;
+ QString tregion;
+ QString tsubregion;
+
+ tz=gContext->GetSetting("HostTimeZone");
+
+ cout << "tz extracted from database: " << tz << endl;
+ if ( tz.isEmpty() || (tz == "Unknown"))
+ timezone_unknown = TRUE;
+
+ tregion=gContext->GetSetting("HostTimeZoneRegion");
+ tsubregion=gContext->GetSetting("HostTimeZoneRegion_"+tregion);
+ if ( tsubregion.isEmpty() )
+ hostparm.ThisTimeZone = tregion;
+ else
+ hostparm.ThisTimeZone = tregion + "/" + tsubregion;
+
+ cout << "hostparm.ThisTimeZone " << hostparm.ThisTimeZone << endl;
+ // save some settings back to the datebase
+ gContext->SaveSetting("HostMyhostname" , hostparm.ThisHostName );
+ gContext->SaveSetting("HostMysqlserver", hostparm.ThisDBhost );
+ gContext->SaveSetting("HostTimeZone", hostparm.ThisTimeZone );
+}
+
+void run_systemconfig(QString modulelist, bool restart, QString dbcommand)
+{
+ QString cmdtxt;
+ cmdtxt="sudo ";
+ cmdtxt.append(MV_ROOT) ;
+ cmdtxt.append("bin/systemconfig.sh " + modulelist + " &");
+ myth_system(cmdtxt);
+ int return_code = 0;
+ QString msgtext = "Please wait while " ;
+ msgtext.append(gContext->GetSetting("HostMyhostname"));
+ msgtext.append(" is configured");
+ MythBusyDialog *busy = new MythBusyDialog(msgtext);
+ busy->start();
+ while ( return_code == 0 )
+ {
+ return_code = myth_system("ps -ef|grep systemconfig.sh|grep -v grep > /dev/null");
+ qApp->processEvents ();
+ usleep(900);
+ }
+ busy->Close();
+ busy->deleteLater();
+ if (restart)
+ {
+ return_code = 1;
+ int loopnumber=0 ;
+ bool doloop = true;
+ MythBusyDialog *busy = new MythBusyDialog(
+ QObject::tr("Transferring database settings"));
+ // yet another incorrect way todo things, but I don't know anybetter
+ // as long as ps can find systemconfig in the list the busy box will appear and update
+ busy->start();
+ while ( doloop )
+ {
+ return_code = myth_system(dbcommand);
+ qApp->processEvents ();
+ usleep(100);
+ loopnumber++ ;
+ if ( return_code == 0 || loopnumber >= 20000000 )
+ doloop=false;
+ cout << loopnumber << endl;
+ }
+ busy->Close();
+ busy->deleteLater();
+ };
+
+
+
+}
+
+
+
+int runsettings (bool mysqlonly , bool shownetwork , bool showhostype, bool showmisc , bool showshutdown, bool showadvanced,bool showsound,bool showadvancedX, bool showaccesscontrol, bool showplugins , bool showuser , bool showwebuser , bool showddns , bool showinfrared , bool showscreensaver )
+{
+ displaymysqlonly = false ;
+ displayshownetwork =false ;
+ displayshowhostype = false ;
+ displayshowmisc =false ;
+ displayshowshutdown =false ;
+ displayshowadvanced = false;
+ displayshowsound = false ;
+ displayshowadvancedX = false;
+ displayaccesscontrol= false;
+ displayplugins= false;
+ displayuser = false;
+ displaywebuser = false;
+ displayddns = false;
+ displayinfrared = false;
+ displayscreensaver = false;
+
+ gContext->ActivateSettingsCache(true);
+ gContext->ClearSettingsCache();
+ bool runothers=false;
+ bool continuerun=true;
+ int retc = 0 ;
+ displaymysqlonly = mysqlonly;
+
+ if (displaymysqlonly )
+ {
+ MythInstallSettings mysqlsettings;
+ mysqlsettings.load();
+ mysqlsettings.save();
+ if ( mysqlsettings.exec() == QDialog::Accepted )
+ {
+ retc = 1;
+ }
+ else
+ {
+ retc=2;
+ };
+ };
+
+ if ( shownetwork )
+ {
+ displayshownetwork = shownetwork;
+ MythInstallSettings settings;
+ settings.load();
+ settings.save();
+ if ( settings.exec() == QDialog::Accepted )
+ {
+ retc = 1;
+ }
+ else
+ {
+ continuerun=false;
+ retc=2;
+ };
+ displayshownetwork = false;
+ };
+
+ if ( showhostype && continuerun )
+ {
+ displayshowhostype = showhostype;
+ system ("avahi-browse -l -r -t _mysql._tcp > /tmp/mysqllist");
+ MythInstallSettings settings1;
+ settings1.load();
+ settings1.save();
+ if ( settings1.exec() == QDialog::Accepted )
+ {
+ retc = 1;
+ }
+ else
+ {
+ continuerun=false;
+ retc=2;
+ };
+ displayshowhostype=false;
+ }
+
+ if ( showmisc || showshutdown || showsound || showadvancedX || showadvanced || showaccesscontrol || showplugins || showuser || showwebuser || showddns || showinfrared || showscreensaver )
+ {
+ runothers=true;
+ displayshowmisc = showmisc;
+ displayshowshutdown = showshutdown;
+ displayshowadvanced = showadvanced;
+ displayshowsound = showsound;
+ displayshowadvancedX = showadvancedX;
+ hostparm.displayshowadvancedX=showadvancedX;
+ displayaccesscontrol = showaccesscontrol ;
+ displayplugins = showplugins;
+ displayuser = showuser;
+ displaywebuser = showwebuser;
+ displayddns = showddns ;
+ displayinfrared = showinfrared;
+ displayscreensaver = showscreensaver;
+
+ if (displayshowadvancedX)
+ {
+ ReadDDCvalues();
+ }
+ };
+
+
+ if ( runothers && continuerun )
+ {
+ //do I need this prewerite?
+ pre_writesettings();
+ DatabaseParams params = gContext->GetDatabaseParams();
+ QString cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/timezip.py -m ");
+ QString zipcommand=cmdtxt;
+ zipcommand.append(hostparm.ThisDBhost);
+ zipcommand.append(" -d " + params.dbHostName );
+ cout << zipcommand << endl;
+ myth_system(zipcommand);
+ hostparm.ThisHostZipcode = gContext->GetSetting("HostZipcode");
+ hostparm.ThisTimeZone = gContext->GetSetting("HostTimeZone");
+ hostparm.ThisHostServiceHobbit = gContext->GetSetting("HostServiceHobbitclient");
+ if ( hostparm.ThisHostServiceHobbit == "1" )
+ install_hobbit = true;
+/*
+ cout << "install_hobbit:" <<endl;
+ cout << install_hobbit << endl;
+ cout <<"-----------------"<< endl; */
+
+ MythInstallSettings settings2;
+ settings2.load();
+ settings2.save();
+ gContext->SaveSetting("HostServiceHobbitclient", hostparm.ThisHostServiceHobbit );
+ if ( settings2.exec() == QDialog::Accepted )
+ {
+ retc = 1;
+ cout <<"i should save my settings(2)" << endl;
+ }
+ else
+ {
+ continuerun=false;
+ retc=2;
+ cout <<"no save for settings2 " << endl;
+ };
+ };
+ pre_writesettings();
+ if ( mysqlonly )
+ {
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/systemconfig.sh Mysql_only " + hostparm.ThisDBhost);
+ myth_system(cmdtxt);
+ }
+ else
+ {
+ if (retc == 1)
+ writesettings();
+ }
+ return retc;
+};
+
+
+
+void writesettings ()
+{
+ ofstream myfile;
+ hostparm.ThisHostName = gContext->GetSetting("HostMyhostname");
+ hostparm.ThisHostDHCPhostname = gContext->GetSetting("HostDHCPhostname");
+ //hostparm.ThisTimeZone = gContext->GetSetting("HostTimeZone");
+ hostparm.ThisHostIP = gContext->GetSetting("HostIP");
+ hostparm.ThisNETMASK = gContext->GetSetting("HostNETMASK");
+ hostparm.ThisGW = gContext->GetSetting("HostGW");
+ hostparm.ThisDNS = gContext->GetSetting("HostDNS");
+ hostparm.ThisDHCP = gContext->GetSetting("HostUseDHCP");
+
+ //hostparm.ThisHostDefaultInterface=gContext->GetSetting("HostDefaultInterface");
+
+ hostparm.ThisHostIPeth0 = gContext->GetSetting("HostIPeth0");
+ hostparm.ThisHostNETMASKeth0 = gContext->GetSetting("HostNETMASKeth0");
+ hostparm.ThisHostDNSeth0 = gContext->GetSetting("HostDNSeth0");
+ hostparm.ThisHostUSEDHCPeth0 = gContext->GetSetting("HostUseDHCPeth0");
+ hostparm.ThisHostGWeth0 = gContext->GetSetting("HostGWeth0");
+ hostparm.ThisHostActiveonbooteth0 = gContext->GetSetting("HostActiveonbooteth0");
+ hostparm.ThisHOSTESSIDeth0 = gContext->GetSetting("HOSTESSIDeth0");
+ hostparm.ThisHostUseEncryptioneth0 = gContext->GetSetting("HostUseEncryptioneth0");
+ hostparm.ThisHostkeyeth0 = gContext->GetSetting("Hostkeyeth0");
+ hostparm.ThisHostMTUeth0 = gContext->GetSetting("HostMTUeth0");
+
+ hostparm.ThisHostIPeth1 = gContext->GetSetting("HostIPeth1");
+ hostparm.ThisHostNETMASKeth1 = gContext->GetSetting("HostNETMASKeth1");
+ hostparm.ThisHostDNSeth1 = gContext->GetSetting("HostDNSeth1");
+ hostparm.ThisHostUSEDHCPeth1 = gContext->GetSetting("HostUseDHCPeth1");
+ hostparm.ThisHostGWeth1 = gContext->GetSetting("HostGWeth1");
+ hostparm.ThisHostActiveonbooteth1 = gContext->GetSetting("HostActiveonbooteth1");
+ hostparm.ThisHOSTESSIDeth1 = gContext->GetSetting("HOSTESSIDeth1");
+ hostparm.ThisHostUseEncryptioneth1 = gContext->GetSetting("HostUseEncryptioneth1");
+ hostparm.ThisHostkeyeth1 = gContext->GetSetting("Hostkeyeth1");
+ hostparm.ThisHostMTUeth1 = gContext->GetSetting("HostMTUeth1");
+
+ hostparm.ThisHostIPwlan0 = gContext->GetSetting("HostIPwlan0");
+ hostparm.ThisHostNETMASKwlan0 = gContext->GetSetting("HostNETMASKwlan0");
+ hostparm.ThisHostDNSwlan0 = gContext->GetSetting("HostDNSwlan0");
+ hostparm.ThisHostUSEDHCPwlan0 = gContext->GetSetting("HostUseDHCPwlan0");
+ hostparm.ThisHostGWwlan0 = gContext->GetSetting("HostGWwlan0");
+ hostparm.ThisHostActiveonbootwlan0 = gContext->GetSetting("HostActiveonbootwlan0");
+ hostparm.ThisHOSTESSIDwlan0 = gContext->GetSetting("HOSTESSIDwlan0");
+ hostparm.ThisHostUseEncryptionwlan0 = gContext->GetSetting("HostUseEncryptionwlan0");
+ hostparm.ThisHostkeywlan0 = gContext->GetSetting("Hostkeywlan0");
+ hostparm.ThisHostMTUwlan0 = gContext->GetSetting("HostMTUwlan0");
+
+ hostparm.ThisHostIPwlan1 = gContext->GetSetting("HostIPwlan1");
+ hostparm.ThisHostNETMASKwlan1 = gContext->GetSetting("HostNETMASKwlan1");
+ hostparm.ThisHostDNSwlan1 = gContext->GetSetting("HostDNSwlan1");
+ hostparm.ThisHostUSEDHCPwlan1 = gContext->GetSetting("HostUseDHCPwlan1");
+ hostparm.ThisHostGWwlan1 = gContext->GetSetting("HostGWwlan1");
+ hostparm.ThisHostActiveonbootwlan1 = gContext->GetSetting("HostActiveonbootwlan1");
+ hostparm.ThisHOSTESSIDwlan1 = gContext->GetSetting("HOSTESSIDwlan1");
+ hostparm.ThisHostUseEncryptionwlan1 = gContext->GetSetting("HostUseEncryptionwlan1");
+ hostparm.ThisHostkeywlan1 = gContext->GetSetting("Hostkeywlan1");
+ hostparm.ThisHostMTUwlan1 = gContext->GetSetting("HostMTUwlan1");
+
+ hostparm.ThisHostIPath0 = gContext->GetSetting("HostIPath0");
+ hostparm.ThisHostNETMASKath0 = gContext->GetSetting("HostNETMASKath0");
+ hostparm.ThisHostDNSath0 = gContext->GetSetting("HostDNSath0");
+ hostparm.ThisHostUSEDHCPath0 = gContext->GetSetting("HostUseDHCPath0");
+ hostparm.ThisHostGWath0 = gContext->GetSetting("HostGWath0");
+ hostparm.ThisHostActiveonbootath0 = gContext->GetSetting("HostActiveonbootath0");
+ hostparm.ThisHOSTESSIDath0 = gContext->GetSetting("HOSTESSIDath0");
+ hostparm.ThisHostUseEncryptionath0 = gContext->GetSetting("HostUseEncryptionath0");
+ hostparm.ThisHostkeyath0 = gContext->GetSetting("Hostkeyath0");
+ hostparm.ThisHostMTUath0 = gContext->GetSetting("HostMTUath0");
+
+
+ hostparm.ThisHostServiceRRD = gContext->GetSetting("HostServiceRRD");
+ hostparm.ThisSamba = gContext->GetSetting("HostServiceSamba");
+ hostparm.ThisHostServiceSamba_media = gContext->GetSetting("HostServiceSamba_media");
+ hostparm.ThisHostServiceSamba_write = gContext->GetSetting("HostServiceSamba_write");
+ hostparm.ThisHostServiceSamba_home = gContext->GetSetting("HostServiceSamba_home");
+ hostparm.ThisHostServiceSamba_writehome = gContext->GetSetting("HostServiceSamba_writehome");
+ hostparm.ThisHostServiceSamba_domain = gContext->GetSetting("HostServiceSamba_domain");
+ hostparm.ThisNFS = gContext->GetSetting("HostServiceNFS");
+ hostparm.ThisMythWEB = gContext->GetSetting("HostServiceMythWEB");
+ hostparm.ThisHostwebauth = gContext->GetSetting("HOSTwebauth");
+
+ hostparm.ThisHostRunDHCP = gContext->GetSetting("HostRunDHCP");
+ hostparm.ThisSystemType = gContext->GetSetting("HostSystemType");
+ hostparm.ThisRemote = gContext->GetSetting("HostRemoteType");
+ hostparm.ThisHostLircWait = gContext->GetSetting("HostLircWait");
+ // hostparm.ThisBlaster = gContext->GetSetting("HostTransmitproto");
+ hostparm.ThisReceiverType = gContext->GetSetting("HostReceiverType");
+ hostparm.ThisHostSerialPortlirc = gContext->GetSetting("HostSerialPortlirc");
+ hostparm.ThisHostUseEvrouter = gContext->GetSetting("HostRunEvrouter");
+ hostparm.ThisHostEvrouterConfig = gContext->GetSetting("HostEvrouterConfig");
+ hostparm.ThisXres = gContext->GetSetting("HostXres");
+ hostparm.ThisAutodown = gContext->GetSetting("HostAutodown");
+ hostparm.ThisShutdowntime = gContext->GetSetting("HostShutdownTime");
+ hostparm.ThisShutdowntime2 = gContext->GetSetting("HostShutdownTime2");
+ hostparm.ThisWakeuptime = gContext->GetSetting("HostWakeupTime");
+ hostparm.ThisUseNVRAM = gContext->GetSetting("HostUseNVRAM");
+ hostparm.ThisUseWOL = gContext->GetSetting("HostUseWOL");
+ hostparm.ThisKeepPackage = gContext->GetSetting("HostKeepPackages");
+ hostparm.ThisMythWelcome = gContext->GetSetting("HostUseMythWelcome");
+ hostparm.ThisHaveNFS = gContext->GetSetting("HostHaveCentralNFS");
+ hostparm.ThisNFSserver = gContext->GetSetting("HostCentralNFSIP");
+ hostparm.ThisNFSmountpoint = gContext->GetSetting("HostNFSmountpoint");
+ hostparm.ThisHostupdateplan = gContext->GetSetting("Hostupdateplan");
+ hostparm.ThisShowToolTips = gContext->GetSetting("HostShowToolTips");
+ hostparm.ThisRunfrontend = gContext->GetSetting("HostRunFrontend");
+ hostparm.ThisHostZipcode = gContext->GetSetting("HostZipcode");
+ hostparm.ThisHostncidClient = gContext->GetSetting("HostncidClient");
+ hostparm.ThisHostncidDaemon = gContext->GetSetting("HostncidDaemon");
+ hostparm.ThisHostSerialPortncid = gContext->GetSetting("HostSerialPortncid");
+ hostparm.ThisHostbootsplash = gContext->GetSetting("Hostbootsplash");
+
+ hostparm.ThisXIgnoreConfig =gContext->GetSetting("HostXIgnoreConfig");
+ hostparm.ThisXcardtype =gContext->GetSetting("HostXcardtype");
+ hostparm.ThisXUseAdvanced =gContext->GetSetting("HostXUseAdvanced");
+ hostparm.ThisXIgnoreEDID =gContext->GetSetting("HostXIgnoreEDID");
+ hostparm.ThisXconnection =gContext->GetSetting("HostXconnection");
+ hostparm.ThisXDisplaysize =gContext -> GetSetting("HostXDisplaysize");
+ hostparm.ThisHostXNvidia1080p =gContext -> GetSetting("HostXNvidia1080p");
+ hostparm.ThisHostXNvidia1080i =gContext -> GetSetting("HostXNvidia1080i");
+ hostparm.ThisHostXNvidia720p =gContext -> GetSetting("HostXNvidia720p");
+ hostparm.ThisHostXNvidia480p =gContext -> GetSetting("HostXNvidia480p");
+// EDID settings
+ QString tempstring;
+ tempstring = gContext->GetSetting("HostXHsyncLow");
+ tempstring.append(" - ");
+ tempstring.append(gContext->GetSetting("HostXHsyncHigh") );
+ hostparm.ThisXHsync=tempstring;
+ tempstring ="";
+ tempstring=gContext->GetSetting("HostXVrefreshLow");
+ tempstring.append(" - ");
+ tempstring.append(gContext->GetSetting("HostXVrefreshHigh"));
+ hostparm.ThisXVrefresh=tempstring;
+
+// Assemble the advanced modeline string
+ QString modelinetype = gContext->GetSetting("HostXModelineCatagory");;
+ QString tempmodeline = "HostXadvancedres" + modelinetype ;
+ QString modeline = gContext ->GetSetting(tempmodeline);
+ hostparm.ThisXresadvanced = modelinetype +"_"+modeline;
+
+// Gather settings based on card type
+ if ( hostparm.ThisXcardtype == "nVidia" )
+ {
+ hostparm.ThisXTVstandard = gContext->GetSetting("HostXnVidiaTVstandard");
+ hostparm.ThisXTVconnection= gContext->GetSetting("HostXnVidiaTVformat");
+ modelinetype = gContext->GetSetting("HostXNvidiaModelineCatagory");;
+ tempmodeline = "HostXNvidiaadvancedres" + modelinetype ;
+ modeline = gContext ->GetSetting(tempmodeline);
+ hostparm.ThisXresadvanced = modelinetype +"_"+modeline;
+ }
+ else if ( hostparm.ThisXcardtype == "ATI" )
+ {
+ hostparm.ThisXTVstandard = gContext->GetSetting("HostXATITVstandard");
+ hostparm.ThisXTVconnection= gContext->GetSetting("HostXati-tvformat");
+ }
+
+
+//*********************************************************************************************
+// AUDIO SETTINGS
+//******************************************************************************************
+ hostparm.ThisHostAudiotype = gContext ->GetSetting("HostAudiotype");
+ hostparm.ThisHostsyncXine = gContext ->GetSetting("HostsyncXine");
+ hostparm.ThisHostsyncMplayer = gContext ->GetSetting("HostsyncMplayer");
+ hostparm.ThisHostsyncMythMusic = gContext ->GetSetting("HostsyncMythMusic");
+ hostparm.ThisHostsyncMythFrontend = gContext ->GetSetting("HostsyncMythFrontend");
+ hostparm.ThisHostSoundTypeout = gContext ->GetSetting("HostSoundTypeout") ;
+ hostparm.ThisHostSoundOSSAnalog = gContext ->GetSetting("HostSoundOssAnalog");
+ hostparm.ThisHostSoundOSSDigital = gContext ->GetSetting("HostSoundOssDigital");
+ hostparm.ThisHostSoundALSATypeout = gContext ->GetSetting("HostSoundALSATypeout") ;
+ hostparm.ThisHostSoundALSAAnalog = gContext ->GetSetting("HostSoundALSAAnalog");
+ hostparm.ThisHostSoundALSADigital = gContext ->GetSetting("HostSoundALSADigital");
+
+ if ( hostparm.ThisHostAudiotype == "OSS" )
+ {
+ QString tempdevice;
+ QChar tempchar ;
+ hostparm.ThisHostSoundDevice = "/dev/dsp";
+ if ( hostparm.ThisHostSoundTypeout == "Analog" )
+ tempdevice = hostparm.ThisHostSoundOSSAnalog ;
+
+ if ( hostparm.ThisHostSoundTypeout == "Digital" )
+ tempdevice = hostparm.ThisHostSoundOSSDigital ;
+
+ int tlength=(tempdevice.length() -2 );
+ if ( tlength > 0 )
+ {
+ tempchar = tempdevice.at( tlength);
+ hostparm.ThisHostSoundDevice.append(tempchar);
+ };
+ }
+
+
+ if ( hostparm.ThisHostAudiotype == "ALSA" )
+ {
+ QString tempdevice;
+ hostparm.ThisHostSoundTypeout = hostparm.ThisHostSoundALSATypeout;
+ if ( hostparm.ThisHostSoundTypeout == "Digital" )
+ tempdevice=hostparm.ThisHostSoundALSADigital;
+ if ( hostparm.ThisHostSoundTypeout == "Analog" )
+ tempdevice=hostparm.ThisHostSoundALSAAnalog;
+
+ tempdevice = tempdevice.section( "(", 1,1 );
+ tempdevice = tempdevice.section( ")", 0,0 );
+ hostparm.ThisHostSoundDevice = tempdevice;
+ }
+// Turn off internal audio controls is digital audio is seleced
+ if ( hostparm.ThisHostSoundTypeout == "Digital" )
+ gContext->SaveSetting("MythControlsVolume","0");
+
+// LCD TYPE
+ hostparm.ThisHostLCDType = gContext ->GetSetting("HostLCDType");
+ if ( hostparm.ThisHostLCDType != "no_lcd" && hostparm.ThisHostLCDType != "tinker" && hostparm.ThisHostLCDType != "" )
+ {
+ // enable mythtv lcddevice
+ gContext->SaveSetting("LCDEnable","1");
+ };
+// Backupsettings
+ hostparm.ThisHostRemoteBackup = gContext ->GetSetting("HostRemoteBackup");
+ hostparm.ThisHostRemoteBackupDir = gContext ->GetSetting("HostRemoteBackupDir");
+//plugins
+ hostparm.ThisHostpluginmytharchive = gContext->GetSetting("Hostpluginmytharchive");
+ hostparm.ThisHostpluginmythbrowser = gContext->GetSetting("Hostpluginmythbrowser");
+ hostparm.ThisHostpluginmythcontrols = gContext->GetSetting("Hostpluginmythcontrols");
+ hostparm.ThisHostpluginmythflix = gContext->GetSetting("Hostpluginmythflix");
+ hostparm.ThisHostpluginmythgallery = gContext->GetSetting("Hostpluginmythgallery");
+ hostparm.ThisHostpluginmythgame = gContext->GetSetting("Hostpluginmythgame");
+ hostparm.ThisHostpluginmythmovietime = gContext->GetSetting("Hostpluginmythmovietime");
+ hostparm.ThisHostpluginmythmusic = gContext->GetSetting("Hostpluginmythmusic");
+ hostparm.ThisHostpluginmythnews = gContext->GetSetting("Hostpluginmythnews");
+ hostparm.ThisHostpluginmythphone = gContext->GetSetting("Hostpluginmythphone");
+ hostparm.ThisHostpluginmythsmolt = gContext->GetSetting("Hostpluginmythsmolt");
+ hostparm.ThisHostpluginmythvideo = gContext->GetSetting("Hostpluginmythvideo");
+ hostparm.ThisHostpluginmythweather = gContext->GetSetting("Hostpluginmythweather");
+ hostparm.ThisHostpluginmythzoneminder = gContext->GetSetting("Hostpluginmythzoneminder");
+ hostparm.ThisHostpluginmythgameFceu = gContext->GetSetting("HostpluginmythgameFceu");
+ hostparm.ThisHostpluginmythgameZsnes = gContext->GetSetting("HostpluginmythgameZsnes");
+ hostparm.ThisHostpluginmythgameMame = gContext->GetSetting("HostpluginmythgameMame");
+ hostparm.ThisHostpluginmythvideo_dvdcss = gContext->GetSetting("Hostpluginmythvideo_dvdcss");
+ hostparm.ThisHostpluginmythappletrailers= gContext->GetSetting("Hostpluginmythappletrailers");
+ hostparm.ThisHostpluginmythstream= gContext->GetSetting("Hostpluginmythstream");
+ hostparm.ThisHostpluginmythvodka= gContext->GetSetting("Hostpluginmythvodka");
+ hostparm.ThisHostMiro= gContext->GetSetting("HostMiro");
+ hostparm.ThisHostpluginmythgameMednafen= gContext->GetSetting("HostpluginmythgameMednafen");
+ hostparm.ThisHostpluginmythgameROMDB= gContext->GetSetting("HostpluginmythgameROMDB");
+ hostparm.ThisHostXine = gContext->GetSetting("HostXine");
+ hostparm.ThisHostwebmin = gContext->GetSetting("Hostwebmin");
+ hostparm.ThisHostfuppes = gContext->GetSetting("Hostfuppes");
+ hostparm.ThisHostfoldingathome = gContext->GetSetting("Hostfoldingathome");
+ hostparm.ThisHostfoldingusername = gContext->GetSetting("Hostfoldingusername");
+ hostparm.ThisHostfoldingworksize = gContext->GetSetting("Hostfoldingworksize");
+ hostparm.ThisHostDDnslogin = gContext->GetSetting("HostDDnslogin");
+ hostparm.ThisHostDDnspassword = gContext->GetSetting("HostDDnspassword");
+ hostparm.ThisHostDDnshostname = gContext->GetSetting("HostDDnshostname");
+ hostparm.ThisHostDDnsEnable = gContext->GetSetting("HostDDnsEnable");
+ hostparm.ThisHostscreensavertype = gContext->GetSetting("Hostscreensavertype");
+ hostparm.ThisHostscreensaveridle = gContext->GetSetting("Hostscreensaveridle");
+ if (gContext->GetSetting("HostScreensaverBlank") == "1" )
+ hostparm.ThisHostscreensavertheme="Blank";
+ else if (gContext->GetSetting("HostScreensaverRandom") == "1" )
+ hostparm.ThisHostscreensavertheme="Random";
+ else
+ {
+ if ( hostparm.ThisHostscreensavertype == "gscreensaver" )
+ hostparm.ThisHostscreensavertheme = gContext->GetSetting("HostGScreensavertheme");
+ if ( hostparm.ThisHostscreensavertype == "xscreensaver" )
+ hostparm.ThisHostscreensavertheme = gContext->GetSetting("HostXScreensavertheme");
+ }
+
+ hostparm.ThisHostTransmitproto_1 =
+ gContext->GetSetting("HostTransmitproto_1");
+ hostparm.ThisHostTransmitproto_2 =
+ gContext->GetSetting("HostTransmitproto_2");
+ hostparm.ThisHostTransmitproto_3 =
+ gContext->GetSetting("HostTransmitproto_3");
+ hostparm.ThisHostTransmitproto_4 =
+ gContext->GetSetting("HostTransmitproto_4");
+ hostparm.ThisHostBlasterType =
+ gContext->GetSetting("HostBlasterType");
+ hostparm.ThisHostSerialPort_blasterlirc =
+ gContext->GetSetting("HostSerialPort_blasterlirc");
+ hostparm.ThisHostnumblaster = "1";
+ if ( hostparm.ThisHostBlasterType == "CommandIR" )
+ hostparm.ThisHostnumblaster = "4" ;
+ if ( hostparm.ThisHostBlasterType == "MCE" )
+ hostparm.ThisHostnumblaster = "2" ;
+ hostparm.ThisHOSTrootSSH = gContext->GetSetting("HOSTrootSSH");
+
+
+
+
+
+//______________________WRITE OUT THE FILE__________________________
+ QString systemheader;
+
+ myfile.open ("/etc/systemconfig");
+ myfile << "hostname=\"" + hostparm.ThisHostName + "\"\n";
+ myfile << "dhcphostname=\"" + hostparm.ThisHostDHCPhostname + "\"\n";
+ myfile << "timezone=\"" + hostparm.ThisTimeZone + "\"\n";
+ myfile << "ip=\"" + hostparm.ThisHostIP + "\"\n";
+ myfile << "netmask=\"" + hostparm.ThisNETMASK + "\"\n";
+ myfile << "route=\"" + hostparm.ThisGW + "\"\n";
+ myfile << "nameserver=\"" + hostparm.ThisDNS + "\"\n";
+
+ myfile << "default_interface=\"" + hostparm.ThisHostDefaultInterface + "\"\n";
+
+ if ( hostparm.ThisHostActiveonbooteth0 == "1" )
+ {
+ systemheader= "\n#Network config for eth0 \n" ;
+ myfile << systemheader ;
+ myfile << "Hostipeth0=\"" + hostparm.ThisHostIPeth0 + "\"\n";
+ myfile << "Hostnetmasketh0=\"" +hostparm.ThisHostNETMASKeth0 + "\"\n";
+ myfile << "HostDNSeth0=\"" +hostparm.ThisHostDNSeth0 + "\"\n";
+ myfile << "HostUSEDHCPeth0=\"" +hostparm.ThisHostUSEDHCPeth0 + "\"\n";
+ myfile << "HostGWeth0=\"" +hostparm.ThisHostGWeth0 + "\"\n";
+ myfile << "HostActiveeth0=\"" +hostparm.ThisHostActiveonbooteth0 + "\"\n";
+ myfile << "HostESSIDeth0=\"" + hostparm.ThisHOSTESSIDeth0 + "\"\n";
+ myfile << "HostUseEncryptioneth0=\"" + hostparm.ThisHostUseEncryptioneth0 + "\"\n";
+ myfile << "HostKeyeth0=\"" + hostparm.ThisHostkeyeth0 + "\"\n";
+ myfile << "HOST_iswirelesseth0=\"" + hostparm.ThisHOST_iswirelesseth0 + "\"\n";
+ myfile << "HostMTUeth0=\"" + hostparm.ThisHostMTUeth0 + "\"\n";
+ }
+
+ if ( hostparm.ThisHostActiveonbooteth1 == "1" )
+ {
+ systemheader= "\n#Network config for eth1 \n" ;
+ myfile << systemheader ;
+ myfile << "Hostipeth1=\"" + hostparm.ThisHostIPeth1 + "\"\n";
+ myfile << "Hostnetmasketh1=\"" +hostparm.ThisHostNETMASKeth1 + "\"\n";
+ myfile << "HostDNSeth1=\"" +hostparm.ThisHostDNSeth1 + "\"\n";
+ myfile << "HostUSEDHCPeth1=\"" +hostparm.ThisHostUSEDHCPeth1 + "\"\n";
+ myfile << "HostGWeth1=\"" +hostparm.ThisHostGWeth1 + "\"\n";
+ myfile << "HostActiveeth1=\"" +hostparm.ThisHostActiveonbooteth1 + "\"\n";
+ myfile << "HostESSIDeth1=\"" + hostparm.ThisHOSTESSIDeth1 + "\"\n";
+ myfile << "HostUseEncryptioneth1=\"" + hostparm.ThisHostUseEncryptioneth1 + "\"\n";
+ myfile << "HostKeyeth1=\"" + hostparm.ThisHostkeyeth1 + "\"\n";
+ myfile << "HOST_iswirelesseth1=\"" + hostparm.ThisHOST_iswirelesseth1 + "\"\n";
+ myfile << "HostMTUeth1=\"" + hostparm.ThisHostMTUeth1 + "\"\n";
+ }
+ if ( hostparm.ThisHostActiveonbootwlan0 == "1" )
+ {
+ systemheader= "\n#Network config for wlan0 \n" ;
+ myfile << systemheader ;
+ myfile << "Hostipwlan0=\"" + hostparm.ThisHostIPwlan0 + "\"\n";
+ myfile << "Hostnetmaskwlan0=\"" +hostparm.ThisHostNETMASKwlan0 + "\"\n";
+ myfile << "HostDNSwlan0=\"" +hostparm.ThisHostDNSwlan0 + "\"\n";
+ myfile << "HostUSEDHCPwlan0=\"" +hostparm.ThisHostUSEDHCPwlan0 + "\"\n";
+ myfile << "HostGWwlan0=\"" +hostparm.ThisHostGWwlan0 + "\"\n";
+ myfile << "HostActivewlan0=\"" +hostparm.ThisHostActiveonbootwlan0 + "\"\n";
+ myfile << "HostESSIDwlan0=\"" + hostparm.ThisHOSTESSIDwlan0 + "\"\n";
+ myfile << "HostUseEncryptionwlan0=\"" + hostparm.ThisHostUseEncryptionwlan0 + "\"\n";
+ myfile << "HostKeywlan0=\"" + hostparm.ThisHostkeywlan0 + "\"\n";
+ myfile << "HOST_iswirelesswlan0=\"" + hostparm.ThisHOST_iswirelesswlan0 + "\"\n";
+ myfile << "HostMTUwlan0=\"" + hostparm.ThisHostMTUwlan0 + "\"\n";
+ }
+ if ( hostparm.ThisHostActiveonbootwlan1 == "1" )
+ {
+ systemheader= "\n#Network config for wlan1 \n" ;
+ myfile << systemheader ;
+ myfile << "Hostipwlan1=\"" + hostparm.ThisHostIPwlan1 + "\"\n";
+ myfile << "Hostnetmaskwlan1=\"" +hostparm.ThisHostNETMASKwlan1 + "\"\n";
+ myfile << "HostDNSwlan1=\"" +hostparm.ThisHostDNSwlan1 + "\"\n";
+ myfile << "HostUSEDHCPwlan1=\"" +hostparm.ThisHostUSEDHCPwlan1 + "\"\n";
+ myfile << "HostGWwlan1=\"" +hostparm.ThisHostGWwlan1 + "\"\n";
+ myfile << "HostActivewlan1=\"" +hostparm.ThisHostActiveonbootwlan1 + "\"\n";
+ myfile << "HostESSIDwlan1=\"" + hostparm.ThisHOSTESSIDwlan1 + "\"\n";
+ myfile << "HostUseEncryptionwlan1=\"" + hostparm.ThisHostUseEncryptionwlan1 + "\"\n";
+ myfile << "HostKeywlan1=\"" + hostparm.ThisHostkeywlan1 + "\"\n";
+ myfile << "HOST_iswirelesswlan1=\"" + hostparm.ThisHOST_iswirelesswlan1 + "\"\n";
+ myfile << "HostMTUwlan1=\"" + hostparm.ThisHostMTUwlan1 + "\"\n";
+ }
+
+ if ( hostparm.ThisHostActiveonbootath0 == "1" )
+ {
+ systemheader= "\n#Network config for ath0 \n" ;
+ myfile << systemheader ;
+ myfile << "Hostipath0=\"" + hostparm.ThisHostIPath0 + "\"\n";
+ myfile << "Hostnetmaskath0=\"" +hostparm.ThisHostNETMASKath0 + "\"\n";
+ myfile << "HostDNSath0=\"" +hostparm.ThisHostDNSath0 + "\"\n";
+ myfile << "HostUSEDHCPath0=\"" +hostparm.ThisHostUSEDHCPath0 + "\"\n";
+ myfile << "HostGWath0=\"" +hostparm.ThisHostGWath0 + "\"\n";
+ myfile << "HostActiveath0=\"" +hostparm.ThisHostActiveonbootath0 + "\"\n";
+ myfile << "HostESSIDath0=\"" + hostparm.ThisHOSTESSIDath0 + "\"\n";
+ myfile << "HostUseEncryptionath0=\"" + hostparm.ThisHostUseEncryptionath0 + "\"\n";
+ myfile << "HostKeyath0=\"" + hostparm.ThisHostkeyath0 + "\"\n";
+ myfile << "HOST_iswirelessath0=\"" + hostparm.ThisHOST_iswirelessath0 + "\"\n";
+ myfile << "HostMTUath0=\"" + hostparm.ThisHostMTUath0 + "\"\n";
+ }
+
+
+ systemheader= "\n#Misc \n" ;
+ myfile << systemheader ;
+ myfile << "UseSamba=\"" + hostparm.ThisSamba + "\"\n";
+ myfile << "Samba_media=\"" + hostparm.ThisHostServiceSamba_media + "\"\n";
+ myfile << "Samba_mediareadonly=\"" + hostparm.ThisHostServiceSamba_write + "\"\n";
+ myfile << "Samba_home=\"" + hostparm.ThisHostServiceSamba_home + "\"\n";
+ myfile << "Samba_homereadonly=\"" + hostparm.ThisHostServiceSamba_writehome + "\"\n";
+ myfile << "Samba_domain=\"" + hostparm.ThisHostServiceSamba_domain + "\"\n";
+ myfile << "UseHobbit=\"" + hostparm.ThisHostServiceHobbit + "\"\n";
+ myfile << "UseRRD=\"" + hostparm.ThisHostServiceRRD + "\"\n";
+ myfile << "UseNFS=\"" + hostparm.ThisNFS + "\"\n";
+ myfile << "UseMythWEB=\"" + hostparm.ThisMythWEB + "\"\n";
+ myfile << "UseMythWEB_auth=\"" + hostparm.ThisHostwebauth + "\"\n";
+ myfile << "UseDHCP=\"" + hostparm.ThisDHCP + "\"\n";
+ myfile << "RunDHCP=\"" + hostparm.ThisHostRunDHCP + "\"\n";
+ myfile << "SystemType=\"" + hostparm.ThisSystemType + "\"\n";
+
+ myfile << "UseEvrouter=\"" + hostparm.ThisHostUseEvrouter + "\"\n";
+ myfile << "EvrouterConfig=\"" + hostparm.ThisHostEvrouterConfig + "\"\n";
+ myfile << "dbhost=\"" + hostparm.ThisDBhost + "\"\n";
+ myfile << "Xres=\"" + hostparm.ThisXres + "\"\n";
+ myfile << "AutoShutdown=\"" + hostparm.ThisAutodown + "\"\n";
+ myfile << "Shutdowntime=\"" + hostparm.ThisShutdowntime + "\"\n";
+ myfile << "Shutdowntime2=\"" + hostparm.ThisShutdowntime2 + "\"\n";
+ myfile << "Wakeuptime=\"" + hostparm.ThisWakeuptime + "\"\n";
+ myfile << "UseNVRAM=\"" + hostparm.ThisUseNVRAM + "\"\n";
+ myfile << "UseWOL=\"" + hostparm.ThisUseWOL + "\"\n";
+ myfile << "KeepPackages=\"" + hostparm.ThisKeepPackage + "\"\n";
+ myfile << "UseMythWelcome=\"" + hostparm.ThisMythWelcome + "\"\n";
+ myfile << "HaveCentralNFS=\"" + hostparm.ThisHaveNFS + "\"\n";
+ myfile << "NFSserver=\"" + hostparm.ThisNFSserver + "\"\n";
+ myfile << "NFSmount=\"" + hostparm.ThisNFSmountpoint + "\"\n";
+ myfile << "Hostupdateplan=\"" + hostparm.ThisHostupdateplan + "\"\n";
+ myfile << "ShowTips=\"" + hostparm.ThisShowToolTips + "\"\n";
+ myfile << "PKG_MIRROR=\"" + hostparm.ThisHostPKG_MIRROR + "\"\n";
+ myfile << "RunFrontend=\"" + hostparm.ThisRunfrontend + "\"\n";
+ myfile << "zipcode=\"" + hostparm.ThisHostZipcode + "\"\n";
+ myfile << "ncidclient=\"" + hostparm.ThisHostncidClient + "\"\n";
+ myfile << "Runncidd=\"" + hostparm.ThisHostncidDaemon + "\"\n";
+ myfile << "nciddSerialPort=\"" + hostparm.ThisHostSerialPortncid + "\"\n";
+ myfile << "Usebootsplash=\"" + hostparm.ThisHostbootsplash + "\"\n";
+ myfile << "LCDtype=\"" + hostparm.ThisHostLCDType + "\"\n";
+ myfile << "RemoteBackup=\"" + hostparm.ThisHostRemoteBackup + "\"\n";
+ myfile << "RemoteBackupDir=\"" + hostparm.ThisHostRemoteBackupDir + "\"\n";
+
+
+ systemheader= "\n#X display settings \n" ;
+ myfile << systemheader ;
+ myfile << "XIgnoreConfig=\"" + hostparm.ThisXIgnoreConfig + "\"\n";
+ myfile << "Xcardtype=\"" + hostparm.ThisXcardtype + "\"\n";
+ myfile << "XUseAdvanced=\"" + hostparm.ThisXUseAdvanced + "\"\n";
+ myfile << "XIgnoreEDID=\"" + hostparm.ThisXIgnoreEDID + "\"\n";
+ myfile << "Xconnection=\"" + hostparm.ThisXconnection + "\"\n";
+ myfile << "XHsync=\"" + hostparm.ThisXHsync + "\"\n";
+ myfile << "XVrefresh=\"" + hostparm.ThisXVrefresh+ "\"\n";
+ myfile << "Xresadvanced=\"" + hostparm.ThisXresadvanced + "\"\n";
+ myfile << "XTVstandard=\"" + hostparm.ThisXTVstandard + "\"\n";
+ myfile << "XTVconnection=\"" + hostparm.ThisXTVconnection + "\"\n";
+ myfile << "XDisplaysize=\"" + hostparm.ThisXDisplaysize + "\"\n";
+ myfile << "XnVidia1080p=\"" + hostparm.ThisHostXNvidia1080p+ "\"\n";
+ myfile << "XnVidia1080i=\"" + hostparm.ThisHostXNvidia1080i+ "\"\n";
+ myfile << "XnVidia720p=\"" + hostparm.ThisHostXNvidia720p+ "\"\n";
+ myfile << "XnVidia480p=\"" + hostparm.ThisHostXNvidia480p+ "\"\n";
+
+ systemheader= "\n#Audio settings\n" ;
+ myfile << systemheader ;
+ myfile << "Audiotype=\"" + hostparm.ThisHostAudiotype + "\"\n";
+ myfile << "Audiotypeout=\"" + hostparm.ThisHostSoundTypeout + "\"\n";
+ myfile << "SoundDevice=\"" + hostparm.ThisHostSoundDevice+ "\"\n";
+ myfile << "syncXine=\"" + hostparm.ThisHostsyncXine + "\"\n";
+ myfile << "syncMplayer=\"" + hostparm.ThisHostsyncMplayer + "\"\n";
+ myfile << "syncMythMusic=\"" + hostparm.ThisHostsyncMythMusic + "\"\n";
+ myfile << "syncMythFrontend=\"" + hostparm.ThisHostsyncMythFrontend + "\"\n";
+
+
+ systemheader= "\n#Software settings\n" ;
+ myfile << systemheader ;
+ myfile << "mytharchive=\"" + hostparm.ThisHostpluginmytharchive + "\"\n";
+ myfile << "mythbrowser=\"" + hostparm.ThisHostpluginmythbrowser + "\"\n";
+ myfile << "mythcontrols=\"" + hostparm.ThisHostpluginmythcontrols + "\"\n";
+ myfile << "mythflix=\"" + hostparm.ThisHostpluginmythflix + "\"\n";
+ myfile << "mythgallery=\"" + hostparm.ThisHostpluginmythgallery + "\"\n";
+ myfile << "mythgame=\"" + hostparm.ThisHostpluginmythgame + "\"\n";
+ myfile << "mythmovietime=\"" + hostparm.ThisHostpluginmythmovietime + "\"\n";
+ myfile << "mythmusic=\"" + hostparm.ThisHostpluginmythmusic + "\"\n";
+ myfile << "mythnews=\"" + hostparm.ThisHostpluginmythnews + "\"\n";
+ myfile << "mythphone=\"" + hostparm.ThisHostpluginmythphone + "\"\n";
+ myfile << "mythsmolt=\"" + hostparm.ThisHostpluginmythsmolt + "\"\n";
+ myfile << "mythvideo=\"" + hostparm.ThisHostpluginmythvideo + "\"\n";
+ myfile << "mythweather=\"" + hostparm.ThisHostpluginmythweather + "\"\n";
+ myfile << "mythzoneminder=\"" + hostparm.ThisHostpluginmythzoneminder + "\"\n";
+
+ myfile << "fceu=\"" + hostparm.ThisHostpluginmythgameFceu + "\"\n";
+ myfile << "zsnes=\"" + hostparm.ThisHostpluginmythgameZsnes + "\"\n";
+ myfile << "mame=\"" + hostparm.ThisHostpluginmythgameMame + "\"\n";
+ myfile << "dvdcss=\"" + hostparm.ThisHostpluginmythvideo_dvdcss + "\"\n";
+
+ myfile << "mythappletrailers=\"" + hostparm.ThisHostpluginmythappletrailers + "\"\n";
+ myfile << "mythstream=\"" + hostparm.ThisHostpluginmythstream + "\"\n";
+ myfile << "mythvodka=\"" +hostparm.ThisHostpluginmythvodka + "\"\n";
+ myfile << "miro=\"" + hostparm.ThisHostMiro + "\"\n";
+ myfile << "mednafen=\"" + hostparm.ThisHostpluginmythgameMednafen + "\"\n";
+ myfile << "romdb=\"" + hostparm.ThisHostpluginmythgameROMDB + "\"\n";
+ myfile << "xine=\"" + hostparm.ThisHostXine + "\"\n";
+ myfile << "webmin=\"" + hostparm.ThisHostwebmin + "\"\n";
+ myfile << "fuppes=\"" + hostparm.ThisHostfuppes + "\"\n";
+ myfile << "foldingathome=\"" + hostparm.ThisHostfoldingathome + "\"\n";
+ myfile << "foldingusername=\"" + hostparm.ThisHostfoldingusername + "\"\n";
+ myfile << "foldingworksize=\"" + hostparm.ThisHostfoldingworksize + "\"\n";
+
+
+
+ myfile << "DDnslogin=\"" + hostparm.ThisHostDDnslogin + "\"\n";
+ myfile << "DDnspassword=\"" + hostparm.ThisHostDDnspassword + "\"\n";
+ myfile << "DDnshostname=\"" + hostparm.ThisHostDDnshostname + "\"\n";
+ myfile << "DDnsEnable=\"" + hostparm.ThisHostDDnsEnable + "\"\n";
+ myfile << "Screensavertype=\"" + hostparm.ThisHostscreensavertype + "\"\n";
+ myfile << "Screensaveridle=\"" + hostparm.ThisHostscreensaveridle + "\"\n";
+ myfile << "Screensavertheme=\"" + hostparm.ThisHostscreensavertheme + "\"\n";
+
+ systemheader="\n#IR settings\n" ;
+ myfile << systemheader ;
+ myfile << "Remotetype=\"" + hostparm.ThisRemote + "\"\n";
+ //myfile << "Blastertype=\"" + hostparm.ThisBlaster + "\"\n";
+ myfile << "ReceiverType=\"" + hostparm.ThisReceiverType + "\"\n";
+ myfile << "HostLircWait=\"" + hostparm.ThisHostLircWait + "\"\n";
+ myfile << "ReceiverSerialport=\"" + hostparm.ThisHostSerialPortlirc + "\"\n";
+ myfile << "HostTransmitproto_1=\"" + hostparm.ThisHostTransmitproto_1 + "\"\n";
+ myfile << "HostTransmitproto_2=\"" + hostparm.ThisHostTransmitproto_2 + "\"\n";
+ myfile << "HostTransmitproto_3=\"" + hostparm.ThisHostTransmitproto_3 + "\"\n";
+ myfile << "HostTransmitproto_4=\"" + hostparm.ThisHostTransmitproto_4 + "\"\n";
+
+ myfile << "HostBlasterType=\"" + hostparm.ThisHostBlasterType + "\"\n";
+ myfile << "HostSerialPort_blasterlirc=\"" + hostparm.ThisHostSerialPort_blasterlirc + "\"\n";
+ myfile << "Hostnumblaster=\"" + hostparm.ThisHostnumblaster + "\"\n";
+ myfile << "rootSSH=\"" + hostparm.ThisHOSTrootSSH + "\"\n";
+
+ myfile.close();
+
+}
+
+
+MythInstallSettings::MythInstallSettings()
+{
+ VerticalConfigurationGroup* vcg = new VerticalConfigurationGroup(false,false,true,true);
+ VerticalConfigurationGroup* denied = new VerticalConfigurationGroup(false,false,true,true);
+ TransLabelSetting *deniedlabel = new TransLabelSetting();
+ deniedlabel->setValue(" You do not have access to this screen " ); denied->addChild(deniedlabel);
+ if ( displaymysqlonly )
+ {
+ vcg->addChild(HostMysqlserverip_listbox());
+ vcg->addChild(ThemePainter());
+ addChild(vcg);
+ }
+ else
+ {
+ vcg->setLabel(QObject::tr("Host Settings"));
+ // Check to see if screen should appear
+ if ( displayshownetwork )
+ {
+ //Check to see if screen is allowed to appear
+ if ( ((gContext->GetSetting("Hostaccessnetwork")) == "0" ) )
+ {
+ denied ->setLabel(QObject::tr("Host Settings"));
+ addChild(denied);
+ }
+ else
+ {
+
+ hostparm.ThisHostnetOLD = gContext ->GetSetting("HostNetDevice");
+ QString s = "HostActiveonboot";
+ s+=hostparm.ThisHostnetOLD;
+ hostparm.ThisHostnetActiveOLD = gContext ->GetSetting(s);
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare( "delete from settings where hostname=:HOSTNAME and value = 'HOSTNetDevice'; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+
+ VerticalConfigurationGroup* networksettings = new VerticalConfigurationGroup(false,true ,false,false);
+ networksettings->addChild(HostMyhostname());
+ networksettings->addChild(HostDHCPHostname());
+ networksettings ->setLabel(QObject::tr("Network Settings Page (1/2)"));
+
+ NetworkSettingsFrame *netsettingsframe = new NetworkSettingsFrame();
+ addChild(networksettings);
+ addChild(netsettingsframe);
+
+ };
+ }
+
+ if ( displayshowhostype )
+ {
+ if ( ((gContext->GetSetting("Hostaccesshostype")) =="0" ))
+ {
+ denied ->setLabel(QObject::tr("System type"));
+ addChild(denied);
+ }
+ else
+ {
+ SystemtypeGroup *systemtypegroup = new SystemtypeGroup();
+ vcg->addChild(systemtypegroup);
+ addChild(vcg);
+ }
+ }
+
+ if ( displayshowmisc )
+ {
+ if ( ((gContext->GetSetting("Hostaccessmisc")) == "0" ))
+ {
+ denied ->setLabel(QObject::tr("NFS Settings"));
+ addChild(denied);
+ }
+ else
+ {
+ MiscMainFrame *miscsettings = new MiscMainFrame();
+ MiscMainFrame2 *miscsettings2 = new MiscMainFrame2();
+ addChild(miscsettings);
+ addChild(miscsettings2);
+ }
+ }
+ if ( displayshowshutdown )
+ {
+ if ( ((gContext->GetSetting("Hostaccesssleep")) == "0" ))
+ {
+ denied ->setLabel(QObject::tr("WOL settings"));
+ addChild(denied);
+ }
+ else
+ {
+ WakeSettings *wakesettings = new WakeSettings();
+ addChild(wakesettings);
+ }
+ }
+ if ( displayshowadvanced )
+ {
+ if ( ((gContext->GetSetting("Hostaccessadvanced")) == "0" ) )
+ {
+ denied ->setLabel(QObject::tr("Advaned Settings"));
+ addChild(denied);
+ }
+ else
+ {
+ AdvancedSettings *advancedsettings = new AdvancedSettings();
+ AdvancedSettings_2 *advancedsettings_2 = new AdvancedSettings_2();
+
+ // Screensaverhostsettings *advancedsettings_3 = new Screensaverhostsettings();
+// advancedsettings_3 ->setLabel(QObject::tr("Advanced settings page 3"));
+
+
+ addChild(advancedsettings);
+ addChild(advancedsettings_2);
+ // addChild(advancedsettings_3);
+ }
+ }
+ if ( displayshowsound )
+ {
+ if ( ((gContext->GetSetting("Hostaccesssound")) =="0") )
+ {
+ denied ->setLabel(QObject::tr("Sound Settings"));
+ addChild(denied);
+ }
+ else
+ {
+ //remove old sound card setting from the db. This is useful for when the saved setting is no longer valid for this machine.
+ // Later search the list and set the value to the old setting if found in the dropdown.
+ hostparm.OLDHostSoundOSSAnalog = gContext ->GetSetting("HostSoundOssAnalog");
+ hostparm.OLDHostSoundOSSDigital = gContext ->GetSetting("HostSoundOssDigital");
+ hostparm.OLDHostSoundALSAAnalog = gContext ->GetSetting("HostSoundALSAAnalog");
+ hostparm.OLDHostSoundALSADigital= gContext ->GetSetting("HostSoundALSADigital");
+
+
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare( "delete from settings where hostname=:HOSTNAME and value = 'HOSTSoundOssAnalog'; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+ query.prepare( "delete from settings where hostname=:HOSTNAME and value = 'HOSTSoundALSAAnalog'; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+ query.prepare( "delete from settings where hostname=:HOSTNAME and value = 'HOSTSoundALSADigital'; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+ query.prepare( "delete from settings where hostname=:HOSTNAME and value = 'HOSTSoundOssDigital'; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+
+ SoundSettings *soundsettings = new SoundSettings();
+ addChild(soundsettings);
+ }
+ }
+ if ( displayshowadvancedX )
+ {
+ if ( ((gContext->GetSetting("HostaccessadvancedX")) == "0" ))
+ {
+ denied ->setLabel(QObject::tr("AdvancedX Settings"));
+ addChild(denied);
+ }
+ else
+ {
+ AdvancedXSettings *advancedXsettings = new AdvancedXSettings();
+ addChild(advancedXsettings);
+ }
+ }
+ if ( displayaccesscontrol )
+ {
+ VerticalConfigurationGroup* accessettings =
+ new VerticalConfigurationGroup(false, true,false,false);;
+ ConfigurationGroup *GridAccess =
+ new GridConfigurationGroup(2,false,false,false,false);
+
+ GridAccess->addChild(Hostaccessmisc());
+ GridAccess->addChild(Hostaccesssleep());
+ GridAccess->addChild(Hostaccessadvanced());
+ GridAccess->addChild(HostaccessadvancedX());
+ GridAccess->addChild(Hostaccesssound());
+ GridAccess->addChild(Hostaccessplugins());
+// GridAccess->addChild(Hostaccessuser());
+ GridAccess->addChild(Hostaccesswebuser());
+
+ accessettings->addChild(Hostaccessnetwork());
+ accessettings->addChild(new ACCESShostsettings);
+ accessettings->addChild(GridAccess);
+ accessettings ->setLabel(QObject::tr("Access control"));
+ addChild(accessettings);
+ }
+
+ if ( displayplugins )
+ {
+ if ( ((gContext->GetSetting("Hostaccessplugins")) == "0" ))
+ {
+ denied ->setLabel(QObject::tr("Plugins"));
+ addChild(denied);
+ }
+ else
+ {
+ ConfigurationGroup *GridShowPlugin = new GridConfigurationGroup(2);
+ GridShowPlugin->addChild(Hostpluginmytharchive());
+ GridShowPlugin->addChild(Hostpluginmythbrowser());
+ GridShowPlugin->addChild(Hostpluginmythcontrols());
+ GridShowPlugin->addChild(Hostpluginmythflix());
+ GridShowPlugin->addChild(Hostpluginmythgallery());
+ GridShowPlugin->addChild(Hostpluginmythmovietime());
+
+ ConfigurationGroup *GridShowPlugin2 = new GridConfigurationGroup(2);
+ GridShowPlugin2->addChild(Hostpluginmythmusic());
+ GridShowPlugin2->addChild(Hostpluginmythnews());
+ GridShowPlugin2->addChild(Hostpluginmythphone());
+ GridShowPlugin2->addChild(Hostpluginmythsmolt());
+ GridShowPlugin2->addChild(Hostpluginmythweather());
+ GridShowPlugin2->addChild(Hostpluginmythzoneminder());
+
+ ConfigurationGroup *GridShowPlugin4 = new GridConfigurationGroup(2);
+ GridShowPlugin4->addChild(Hostpluginmythappletrailers());
+ GridShowPlugin4->addChild(Hostpluginmythstream());
+ GridShowPlugin4->addChild(Hostpluginmythvodka());
+ GridShowPlugin4->addChild(HostMiro());
+ GridShowPlugin4->addChild(HostXine());
+ GridShowPlugin4->addChild(Hostwebmin());
+
+ ConfigurationGroup *GridShowPlugin5 = new GridConfigurationGroup(2);
+ GridShowPlugin5->addChild(Hostfuppes());
+
+ ConfigurationGroup *GridShowPlugin6 = new VerticalConfigurationGroup(true,true);
+ GridShowPlugin6->addChild(Hostfoldingathome());
+ GridShowPlugin6->addChild(Hostfoldingusername());
+ GridShowPlugin6->addChild(Hostfoldingworksize());
+
+ ConfigurationGroup *Mythvideoplugin = new HorizontalConfigurationGroup();
+ Mythvideoplugin->addChild(Hostpluginmythvideo());
+ Mythvideoplugin->addChild(Hostpluginmythvideo_dvdcss());
+
+
+ ConfigurationGroup *GridShowPlugin3 = new VerticalConfigurationGroup(true,true);
+ GridShowPlugin3->addChild(new MythGamesettings);
+ GridShowPlugin3->addChild(Mythvideoplugin);
+
+
+
+ addChild(GridShowPlugin);
+ addChild(GridShowPlugin2);
+ addChild(GridShowPlugin3);
+ addChild(GridShowPlugin4);
+ addChild(GridShowPlugin5);
+ addChild(GridShowPlugin6);
+ }
+ }
+ if ( displayuser )
+ {
+ if ( ((gContext->GetSetting("Hostaccessuser")) == "0" ))
+ {
+ denied ->setLabel(QObject::tr("User Management"));
+ addChild(denied);
+ }
+ else
+ {
+ UserManagement *usermanagement = new UserManagement();
+ addChild(usermanagement);
+ }
+ }
+
+ if ( displaywebuser )
+ {
+ if ( ((gContext->GetSetting("Hostaccesswebuser")) == "0" ))
+ {
+ denied ->setLabel(QObject::tr("Web security"));
+ addChild(denied);
+ }
+ else
+ {
+ WebPasswordFrame *webpasswordframe = new WebPasswordFrame();
+ addChild(webpasswordframe);
+
+ }
+
+ }
+ if ( displayddns )
+ {
+ if ( ((gContext->GetSetting("Hostaccessddns")) == "0" ))
+ {
+ denied ->setLabel(QObject::tr("DDNS security"));
+ addChild(denied);
+ }
+ else
+ {
+ DDnssettings *ddnsframe = new DDnssettings();
+ addChild(ddnsframe);
+ }
+ }
+ if ( displayinfrared )
+ {
+// if ( ((gContext->GetSetting("Hostaccessddns")) == "0" ))
+// {
+// denied ->setLabel(QObject::tr("DDNS security"));
+// addChild(denied);
+// }
+// else
+// {
+ VERBOSE(VB_IMPORTANT, "LIRC");
+ IRFrame *irframe = new IRFrame();
+ IR_TransmitFrame *transmitframe = new IR_TransmitFrame();
+ LCDFrame *lcdframe = new LCDFrame();
+ addChild(irframe);
+ addChild(transmitframe);
+ addChild(lcdframe);
+ //}
+ }
+ if ( displayscreensaver )
+ {
+// if ( ((gContext->GetSetting("Hostaccessddns")) == "0" ))
+// {
+// denied ->setLabel(QObject::tr("DDNS security"));
+// addChild(denied);
+// }
+// else
+// {
+ VERBOSE(VB_IMPORTANT, "screensaver");
+ Screensaverhostsettings *screensaver = new Screensaverhostsettings();
+ addChild(screensaver);
+ //}
+ }
+ }
+
+};
+
diff --git a/abs/core/mythinstall/installsettings.h b/abs/core/mythinstall/installsettings.h
new file mode 100755
index 0000000..0df1d4e
--- /dev/null
+++ b/abs/core/mythinstall/installsettings.h
@@ -0,0 +1,489 @@
+#ifndef WELCOMESETTINGS_H
+#define WELCOMESETTINGS_H
+
+#include <settings.h>
+#include "mythdialogs.h"
+#include "libmyth/mythdialogs.h"
+#include "libmyth/mythwidgets.h"
+
+
+class SystemtypeGroup: public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ SystemtypeGroup();
+ HostComboBox *HostSystemType;
+public slots:
+ void SystemtypeHelp();
+};
+
+//-------------------------------------------
+class NetworkSettingseth0:
+ public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ NetworkSettingseth0();
+
+ HostLineEdit *HostIPeth0;
+ HostComboBox *HostNETMASKeth0;
+ HostLineEdit *HostGWeth0;
+ HostLineEdit *HostDNSeth0;
+ HostCheckBox *HostActiveonbooteth0;
+ HostCheckBox *HostUseDHCPeth0 ;
+ HostCheckBox *HostDefaulteth0;
+ TransButtonSetting *wirelessbuttoneth0;
+
+signals:
+ void eth0_is_default(void);
+public slots:
+ void eth0_wireless_settings();
+ void eth0_disable_others();
+ void eth0_disabled();
+ void eth0_wireless_disable();
+};
+
+class eth0options : public ConfigurationWizard
+{
+public:
+ eth0options();
+};
+
+
+class NetworkSettingseth1:
+ public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ NetworkSettingseth1();
+
+ HostLineEdit *HostIPeth1;
+ HostComboBox *HostNETMASKeth1;
+ HostLineEdit *HostGWeth1;
+ HostLineEdit *HostDNSeth1;
+ HostCheckBox *HostActiveonbooteth1;
+ HostCheckBox *HostUseDHCPeth1 ;
+ HostCheckBox *HostDefaulteth1;
+ TransButtonSetting *wirelessbuttoneth1;
+signals:
+ void eth1_is_default(void);
+public slots:
+ void eth1_wireless_settings();
+ void eth1_disable_others();
+ void eth1_disabled();
+ void eth1_wireless_disable();
+};
+
+class eth1options : public ConfigurationWizard
+{
+public:
+ eth1options();
+};
+
+
+
+class NetworkSettingswlan0:
+ public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ NetworkSettingswlan0();
+
+ HostLineEdit *HostIPwlan0;
+ HostComboBox *HostNETMASKwlan0;
+ HostLineEdit *HostGWwlan0;
+ HostLineEdit *HostDNSwlan0;
+ HostCheckBox *HostActiveonbootwlan0;
+ HostCheckBox *HostUseDHCPwlan0 ;
+ HostCheckBox *HostDefaultwlan0;
+ TransButtonSetting *wirelessbuttonwlan0;
+signals:
+ void wlan0_is_default(void);
+public slots:
+ void wlan0_wireless_settings();
+ void wlan0_disable_others();
+ void wlan0_disabled();
+ void wlan0_wireless_disable();
+};
+
+class Wlan0options : public ConfigurationWizard
+{
+public:
+ Wlan0options();
+};
+
+
+class NetworkSettingswlan1:
+ public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ NetworkSettingswlan1();
+
+ HostLineEdit *HostIPwlan1;
+ HostComboBox *HostNETMASKwlan1;
+ HostLineEdit *HostGWwlan1;
+ HostLineEdit *HostDNSwlan1;
+ HostCheckBox *HostActiveonbootwlan1;
+ HostCheckBox *HostUseDHCPwlan1 ;
+ HostCheckBox *HostDefaultwlan1;
+ TransButtonSetting *wirelessbuttonwlan1;
+signals:
+ void wlan1_is_default(void);
+public slots:
+ void wlan1_wireless_settings();
+ void wlan1_disable_others();
+ void wlan1_disabled();
+ void wlan1_wireless_disable();
+};
+
+class wlan1options : public ConfigurationWizard
+{
+public:
+ wlan1options();
+};
+
+
+
+class NetworkSettingsath0:
+ public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ NetworkSettingsath0();
+
+ HostLineEdit *HostIPath0;
+ HostComboBox *HostNETMASKath0;
+ HostLineEdit *HostGWath0;
+ HostLineEdit *HostDNSath0;
+ HostCheckBox *HostActiveonbootath0;
+ HostCheckBox *HostUseDHCPath0 ;
+ HostCheckBox *HostDefaultath0;
+ TransButtonSetting *wirelessbuttonath0;
+signals:
+ void ath0_is_default(void);
+public slots:
+ void ath0_wireless_settings();
+ void ath0_disable_others();
+ void ath0_disabled();
+ void ath0_wireless_disable();
+};
+
+class ath0options : public ConfigurationWizard
+{
+public:
+ ath0options();
+};
+
+
+
+//--------------------------------------------
+
+
+class SoundSettings: public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ SoundSettings();
+ HostComboBox *HostAudiotype;
+ HostCheckBox *HostsyncXine;
+ HostCheckBox *HostsyncMplayer;
+ HostCheckBox *HostsyncMythMusic;
+ HostCheckBox *HostsyncMythFrontend;
+
+
+signals:
+ void oss_sig(void);
+ void alsa_sig(void);
+public slots:
+ void soundossgathersettings_1();
+ void soundalsagathersettings_1();
+
+};
+
+
+class SoundOSSsettings: public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ SoundOSSsettings();
+ HostComboBox *HostSoundOssAnalog;
+ HostComboBox *HostSoundOssDigital;
+ HostComboBox *HostSoundTypeout;
+ void fillossselection();
+public slots:
+ void soundossgathersettings();
+ void loadossdriver();
+};
+
+class SoundALSAsettings: public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ SoundALSAsettings();
+ HostComboBox *HostSoundALSAAnalog;
+ HostComboBox *HostSoundALSADigital;
+ HostComboBox *HostSoundALSATypeout;
+ void fillALSAselection();
+public slots:
+ void soundalsagathersettings();
+ void loadalsadriver();
+
+};
+
+
+//############################################
+class MythInstallSettings: public ConfigurationWizard
+{
+
+public:
+ MythInstallSettings();
+ void testme();
+private:
+ MythPopupBox *popup;
+
+};
+
+
+
+
+class HostRemoteType: public HostImageSelect {
+public:
+ HostRemoteType();
+};
+
+
+
+#define MV_ROOT "/usr/MythVantage/"
+int runsettings(bool = false , bool = false , bool = false ,bool = false ,bool = false, bool = false,bool = false,bool = false , bool = false , bool = false , bool = false, bool = false , bool = false , bool = false , bool = false);
+//void ReadDDCifno(void);
+void run_systemconfig(QString,bool = false,QString = "");
+void writesettings();
+
+//void testXconfiguration();
+
+
+
+
+
+struct HostParms
+{
+ QString ThisHostName;
+ QString ThisHostDHCPhostname;
+
+ QString ThisHostIP;
+ QString ThisNETMASK;
+ QString ThisGW;
+ QString ThisDNS;
+ QString ThisDHCP;
+ QString ThisHostnetOLD;
+ QString ThisHostnetActiveOLD;
+
+ QString ThisHostDefaultInterface;
+ QString ThisHostIPeth0;
+ QString ThisHostNETMASKeth0;
+ QString ThisHostDNSeth0;
+ QString ThisHostUSEDHCPeth0;
+ QString ThisHostGWeth0;
+ QString ThisHOST_iswirelesseth0;
+ QString ThisHostActiveonbooteth0;
+ QString ThisHOSTESSIDeth0;
+ QString ThisHostUseEncryptioneth0;
+ QString ThisHostkeyeth0;
+ QString ThisHostMTUeth0;
+
+
+ QString ThisHostIPeth1;
+ QString ThisHostNETMASKeth1;
+ QString ThisHostDNSeth1;
+ QString ThisHostUSEDHCPeth1;
+ QString ThisHostGWeth1;
+ QString ThisHostActiveonbooteth1 ;
+ QString ThisHOST_iswirelesseth1;
+ QString ThisHOSTESSIDeth1;
+ QString ThisHostUseEncryptioneth1;
+ QString ThisHostkeyeth1;
+ QString ThisHostMTUeth1;
+
+ QString ThisHostIPwlan0;
+ QString ThisHostNETMASKwlan0;
+ QString ThisHostDNSwlan0;
+ QString ThisHostUSEDHCPwlan0;
+ QString ThisHostGWwlan0;
+ QString ThisHostActiveonbootwlan0;
+ QString ThisHOST_iswirelesswlan0;
+ QString ThisHOSTESSIDwlan0;
+ QString ThisHostUseEncryptionwlan0;
+ QString ThisHostkeywlan0;
+ QString ThisHostMTUwlan0;
+
+
+ QString ThisHostIPwlan1;
+ QString ThisHostNETMASKwlan1;
+ QString ThisHostDNSwlan1;
+ QString ThisHostUSEDHCPwlan1;
+ QString ThisHostGWwlan1;
+ QString ThisHostActiveonbootwlan1;
+ QString ThisHOST_iswirelesswlan1;
+ QString ThisHOSTESSIDwlan1;
+ QString ThisHostUseEncryptionwlan1;
+ QString ThisHostkeywlan1;
+ QString ThisHostMTUwlan1;
+
+ QString ThisHostIPath0;
+ QString ThisHostNETMASKath0;
+ QString ThisHostDNSath0;
+ QString ThisHostUSEDHCPath0;
+ QString ThisHostGWath0;
+ QString ThisHostActiveonbootath0;
+ QString ThisHOST_iswirelessath0;
+ QString ThisHOSTESSIDath0;
+ QString ThisHostUseEncryptionath0;
+ QString ThisHostkeyath0;
+ QString ThisHostMTUath0;
+
+
+ QString ThisRemote;
+ QString ThisTimeZone;
+ QString ThisSamba;
+ QString ThisHostServiceSamba_media;
+ QString ThisHostServiceSamba_home;
+ QString ThisHostServiceSamba_writehome;
+ QString ThisHostServiceSamba_write;
+ QString ThisHostServiceSamba_domain;
+ QString ThisNFS;
+ QString ThisMythWEB;
+ QString ThisHostwebauth;
+ QString ThisHostServiceHobbit;
+ QString ThisHostServiceRRD;
+
+ QString ThisHostRunDHCP;
+ QString ThisSystemType;
+// QString ThisBlaster;
+
+ QString ThisHostTransmitproto_1;
+ QString ThisHostTransmitproto_2;
+ QString ThisHostTransmitproto_3;
+ QString ThisHostTransmitproto_4;
+ QString ThisHostBlasterType;
+ QString ThisHostSerialPort_blasterlirc;
+ QString ThisHostnumblaster;
+
+ QString ThisReceiverType;
+ QString ThisHostLircWait;
+ QString ThisHostSerialPortlirc;
+ QString ThisHostUseEvrouter;
+ QString ThisHostEvrouterConfig;
+ QString ThisDBhost;
+ QString ThisXres;
+ QString ThisShutdowntime;
+ QString ThisShutdowntime2;
+ QString ThisWakeuptime;
+ QString ThisAutodown;
+ QString ThisUseNVRAM;
+ QString ThisUseWOL;
+ QString ThisKeepPackage;
+ QString ThisMythWelcome;
+ QString ThisHaveNFS;
+ QString ThisNFSserver;
+ QString ThisNFSmountpoint;
+ QString ThisHostupdateplan;
+ // QString ThisOSS;
+ QString ThisShowToolTips;
+ QString ThisHostPKG_MIRROR;
+ QString ThisRunfrontend;
+ QString ThisHostZipcode;
+ QString ThisHostncidClient;
+ QString ThisHostncidDaemon;
+ QString ThisHostSerialPortncid;
+ QString ThisHostbootsplash;
+ QString ThisXIgnoreConfig;
+ QString ThisXcardtype;
+ QString ThisXUseAdvanced;
+ QString ThisXIgnoreEDID;
+ QString ThisXconnection;
+ QString ThisXHsync;
+ QString ThisXVrefresh;
+ QString ThisXresadvanced;
+ QString ThisXTVstandard;
+ QString ThisXTVconnection;
+ QString ThisXDisplaysize ;
+
+ QString ThisHostXNvidia1080p;
+ QString ThisHostXNvidia1080i;
+ QString ThisHostXNvidia720p;
+ QString ThisHostXNvidia480p;
+ QString ThisHostAudiotype;
+
+ QString ThisHostSoundTypeout;
+ QString ThisHostSoundOSSAnalog;
+ QString OLDHostSoundOSSAnalog;
+ QString ThisHostSoundOSSDigital;
+ QString OLDHostSoundOSSDigital;
+
+ QString ThisHostSoundDigital;
+ QString ThisHostSoundDevice;
+
+ QString ThisHostSoundALSAAnalog;
+ QString OLDHostSoundALSAAnalog;
+ QString ThisHostSoundALSADigital;
+ QString OLDHostSoundALSADigital;
+ QString ThisHostSoundALSATypeout;
+
+
+ QString ThisHostsyncXine;
+ QString ThisHostsyncMplayer;
+ QString ThisHostsyncMythMusic;
+ QString ThisHostsyncMythFrontend;
+ QString ThisHostLCDType;
+ QString ThisHostRemoteBackup;
+ QString ThisHostRemoteBackupDir;
+ QString ThisHostpluginmytharchive;
+ QString ThisHostpluginmythbrowser;
+ QString ThisHostpluginmythcontrols;
+ QString ThisHostpluginmythflix;
+ QString ThisHostpluginmythgallery;
+ QString ThisHostpluginmythgame;
+ QString ThisHostpluginmythmovietime;
+ QString ThisHostpluginmythmusic;
+ QString ThisHostpluginmythnews;
+ QString ThisHostpluginmythphone;
+ QString ThisHostpluginmythsmolt;
+ QString ThisHostpluginmythvideo;
+ QString ThisHostpluginmythweather;
+ QString ThisHostpluginmythzoneminder;
+ QString ThisHostpluginmythgameFceu;
+ QString ThisHostpluginmythgameZsnes;
+ QString ThisHostpluginmythgameMame;
+ QString ThisHostpluginmythvideo_dvdcss;
+ QString ThisHostpluginmythappletrailers;
+ QString ThisHostpluginmythstream;
+ QString ThisHostpluginmythvodka;
+ QString ThisHostMiro;
+ QString ThisHostpluginmythgameMednafen;
+ QString ThisHostpluginmythgameROMDB;
+ QString ThisHostXine;
+ QString ThisHostwebmin;
+ QString ThisHostfuppes;
+ QString ThisHostfoldingathome;
+ QString ThisHostfoldingusername;
+ QString ThisHostfoldingworksize;
+
+ QString ThisHostDDnslogin;
+ QString ThisHostDDnspassword;
+ QString ThisHostDDnshostname;
+ QString ThisHostDDnsEnable;
+ QString ThisHostscreensavertype;
+ QString ThisHostscreensaveridle;
+ QString ThisHostscreensavertheme;
+ QString ThisHOSTrootSSH;
+ bool displayshowadvancedX;
+
+
+};
+
+struct DDCinfo
+{
+ QString XVrefresh;
+ QString XHsync;
+ QString Displaysize;
+};
+
+
+
+
+
+
+
+#endif
diff --git a/abs/core/mythinstall/main.cpp b/abs/core/mythinstall/main.cpp
new file mode 100755
index 0000000..afee4ea
--- /dev/null
+++ b/abs/core/mythinstall/main.cpp
@@ -0,0 +1,533 @@
+#include <qapplication.h>
+#include <cstdlib>
+//#include "libmyth/mythdialogs.h"
+#include "libmyth/mythcontext.h"
+#include "libmyth/settings.h"
+#include "libmyth/langsettings.h"
+#include "libmyth/mythdbcon.h"
+#include <libmyth/exitcodes.h>
+#include "libmythtv/tv.h"
+#include "installdialog.h"
+#include "installsettings.h"
+#include "password_manage.h"
+#include "autocard.h"
+#include "settemplate.h"
+#include "mythdialogbox.h"
+//#include "mv_common.h"
+
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+
+#include "libmyth/dialogbox.h"
+#include <qlist.h>
+#include <qvaluevector.h>
+#include <qdir.h>
+HostParms hostparm;
+DDCinfo ddcinfo;
+
+
+void initKeys(void)
+{
+ REG_KEY("Welcome", "STARTXTERM", "Open an Xterm window", "F12");
+ REG_KEY("Welcome", "SHOWSETTINGS", "Show Mythshutdown settings", "F11");
+}
+
+
+int main(int argc, char **argv)
+{
+ bool bShowSettings = false;
+ bool bShowNetwork = false;
+ bool bShowHostype = false;
+ bool bShowMisc = false;
+ bool bShowshutdown = false;
+ bool bShowadvanced = false;
+ bool bShowsound = false;
+ bool bShowadvancedX = false;
+ bool bShowAccesscontrol = false;
+ bool bShowplugins = false;
+ bool bShowTemplate = false;
+ bool bShowuser = false;
+ bool bShowwebuser = false;
+ bool bRunSetup = false;
+ bool bShowHelp = false;
+ bool bShowReadme = false;
+ bool bShowddns = false;
+ bool bShowinfrared = false;
+ bool bShowscreensaver = false;
+
+ QStringList template_c_line ;
+ QString modulelist = "" ;
+ QString templateop="";
+ QString templatename="";
+ QString templatehostname="";
+ QApplication a(argc, argv);
+
+ gContext = NULL;
+ gContext = new MythContext(MYTH_BINARY_VERSION);
+ if (!gContext->Init())
+ {
+ VERBOSE(VB_IMPORTANT, "mythwelcome: Could not initialize myth context. "
+ "Exiting.");
+ return FRONTEND_EXIT_NO_MYTHCONTEXT;
+ }
+
+ if (!MSqlQuery::testDBConnection())
+ {
+ VERBOSE(VB_IMPORTANT, "mythwelcome: Could not open the database. "
+ "Exiting.");
+ return -1;
+ }
+
+ // Check command line arguments
+ for (int argpos = 1; argpos < a.argc(); ++argpos)
+ {
+
+ if (!strcmp(a.argv()[argpos],"-v") ||
+ !strcmp(a.argv()[argpos],"--verbose"))
+ {
+ if (a.argc()-1 > argpos)
+ {
+ if (parse_verbose_arg(a.argv()[argpos+1]) ==
+ GENERIC_EXIT_INVALID_CMDLINE)
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+
+ ++argpos;
+ }
+ else
+ {
+ cerr << "Missing argument to -v/--verbose option\n";
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+ }
+ else if (!strcmp(a.argv()[argpos],"-s") ||
+ !strcmp(a.argv()[argpos],"--setup"))
+ {
+ bShowSettings = true;
+//---------------------------------------------
+ if (a.argc()-1 > argpos)
+ {
+ QString tmpArg = a.argv()[argpos+1];
+ if (tmpArg.startsWith("-"))
+ {
+ cerr << "Invalid or missing argument to -s \n";
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+
+ QStringList pairs = QStringList::split(",", tmpArg);
+ for (unsigned int index = 0; index < pairs.size(); ++index)
+ {
+ if ( pairs[index] == "network" )
+ {
+ // cout << pairs[index] << endl;
+ bShowNetwork = true;
+ modulelist.append("network,");
+ }
+ else if ( pairs[index] == "misc" )
+ {
+ // cout << pairs[index] << endl;
+ bShowMisc = true;
+ modulelist.append("misc,");
+ }
+ else if ( pairs[index] == "sleep" )
+ {
+ // cout << pairs[index] << endl;
+ bShowshutdown = true;
+ modulelist.append("sleep,");
+ }
+ else if ( pairs[index] == "hostype" )
+ {
+ // cout << pairs[index] << endl;
+ bShowHostype = true;
+ modulelist.append("hostype,");
+ }
+ else if ( pairs[index] == "advanced" )
+ {
+ // cout << pairs[index] << endl;
+ bShowadvanced = true;
+ modulelist.append("advanced,");
+ }
+ else if ( pairs[index] == "sound" )
+ {
+ // cout << pairs[index] << endl;
+ bShowsound = true;
+ modulelist.append("audio,");
+ }
+ else if ( pairs[index] == "advancedX" )
+ {
+ // cout << pairs[index] << endl;
+ bShowadvancedX = true;
+ modulelist.append("advancedX,");
+ }
+ else if ( pairs[index] == "accesscontrol" )
+ {
+ // cout << pairs[index] << endl;
+ bShowAccesscontrol = true;
+ modulelist.append("accesscontrol,");
+ }
+ else if ( pairs[index] == "plugins" )
+ {
+ // cout << pairs[index] << endl;
+ bShowplugins = true;
+ modulelist.append("plugins,");
+ }
+ else if ( pairs[index] == "user" )
+ {
+ // cout << pairs[index] << endl;
+ bShowuser = true;
+ modulelist.append("user,");
+ }
+ else if ( pairs[index] == "webuser" )
+ {
+ // cout << pairs[index] << endl;
+ bShowwebuser = true;
+ modulelist.append("webuser,");
+ }
+ else if ( pairs[index] == "ddns" )
+ {
+ // cout << pairs[index] << endl;
+ bShowddns = true;
+ modulelist.append("ddns,");
+ }
+ else if ( pairs[index] == "ir" )
+ {
+ // cout << pairs[index] << endl;
+ bShowinfrared = true;
+ modulelist.append("ir,");
+ }
+ else if ( pairs[index] == "screensaver" )
+ {
+ // cout << pairs[index] << endl;
+ bShowscreensaver = true;
+ modulelist.append("screensaver,");
+ }
+
+ }
+ // return FRONTEND_EXIT_OK;
+ }
+ else
+ {
+ // if no args, then show the default steup.
+ bShowNetwork = true;
+ bShowHostype = true;
+ bShowMisc = true;
+ bShowuser = true;
+ bShowshutdown = true;
+
+ modulelist="network,hostype,misc,sleep";
+
+ }
+
+ ++argpos;
+
+
+//---------------------------------------------
+ }
+ else if (!strcmp(a.argv()[argpos],"-u"))
+ bShowuser = true;
+ else if (!strcmp(a.argv()[argpos],"-t"))
+ {
+ bShowTemplate = true;
+ if (a.argc()-1 > argpos)
+ {
+ QString tmpArg = a.argv()[argpos+1];
+ if (tmpArg.startsWith("-"))
+ {
+ cerr << "Invalid or missing argument to -t \n";
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+ template_c_line = QStringList::split(",", tmpArg);
+ if ( template_c_line.size() != 0 )
+ {
+ if ( template_c_line.size() >3 || template_c_line.size() <2 )
+ {
+ cerr << "Invalid or missing argument to -t \n";
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+ }
+ ++argpos;
+ }
+
+ }
+ else if (!strcmp(a.argv()[argpos],"-b"))
+ {
+ bRunSetup = true;
+ }
+ else if (!strcmp(a.argv()[argpos],"-h"))
+ {
+ bShowHelp = true;
+ }
+ else if (!strcmp(a.argv()[argpos],"-r"))
+ {
+ bShowReadme = true;
+ }
+ else
+ {
+ cerr << "Invalid argument: " << a.argv()[argpos] << endl <<
+ "Valid options are: " << endl <<
+ "-v or --verbose debug-level Use '-v help' for level info" << endl <<
+ "-b run backend setup" << endl <<
+ "-h for help screens " << endl <<
+ "-t show template screens (op,tname,hname)" << endl <<
+ "-s or --setup (network,hostype,misc,sleep,advanced,advancedX,sound,accesscontrol, user,webuser,ddns,ir,screensaver)" << endl;
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+ }
+
+ gContext->LoadQtConfig();
+
+ LanguageSettings::load("mythfrontend");
+
+ MythMainWindow *mainWindow = GetMythMainWindow();
+ // if parms were passed to -t then doen't init the screen.
+ if ( template_c_line.size() == 0 )
+ {
+ gContext->SaveSetting("HOSTtemplatetype","Do Nothing" );
+ mainWindow->Init();
+ gContext->SetMainWindow(mainWindow);
+ };
+ initKeys();
+
+
+ if (bShowSettings)
+ {
+ bool runconfig = false;
+ system("cp -f /etc/systemconfig /tmp/systemconfig.bak");
+ QString olddb = gContext->GetSetting("HostMysqlserver");
+ QString oldhostype = gContext->GetSetting("HostSystemType");
+ runsettings(false,bShowNetwork,bShowHostype,bShowMisc,bShowshutdown,bShowadvanced,bShowsound,bShowadvancedX,bShowAccesscontrol,bShowplugins,bShowuser,bShowwebuser,bShowddns,bShowinfrared,bShowscreensaver);
+ QString newdb = gContext->GetSetting("HostMysqlserver");
+ QString newhostype = gContext->GetSetting("HostSystemType");
+ int status = system("diff /tmp/systemconfig.bak /etc/systemconfig");
+ bool restart = false;
+
+ // save my settings in case db switches
+ //cout << "save for the heck of it " << endl;
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/restore_default_settings.sh -c save -t syssettings -d " + olddb);
+ system(cmdtxt);
+ //system("/root/restore_default_settings.sh -c save -t syssettings -d " + olddb);
+
+ if ( status != 0 )
+ {
+ runconfig = true;
+ }
+
+ if ( newdb != olddb )
+ {
+ runconfig = true;
+ restart = true;
+ //db changed save setting from olddb
+ // cout << "newdb_olddb" << endl;
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/restore_default_settings.sh -c save -t syssettings -d " + olddb ) ;
+ system(cmdtxt);
+ //system("/root/restore_default_settings.sh -c save -t syssettings -d " + olddb ) ;
+ }
+
+ if ( runconfig )
+ {
+ if ( newhostype != oldhostype )
+ modulelist.append("hostypec,");
+ //trim off last ,
+ modulelist.truncate(modulelist.length()-1);
+
+
+ cout << modulelist <<endl;
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/restore_default_settings.sh -c restore -t syssettings -d ");
+ QString dbcommand = cmdtxt;
+ //QString dbcommand="/root/restore_default_settings.sh -c restore -t syssettings -d ";
+ dbcommand.append(newdb);
+ // cout << dbcommand << endl;
+ run_systemconfig(modulelist,restart,dbcommand);
+ // cout << "running config" <<endl;
+ }
+ system("rm -f /tmp/systemconfig.bak");
+
+ if ( restart )
+ {
+ //restore settings to new database
+ //cout << " restoreing settings to new db" << endl;
+ //system("/root/restore_default_settings.sh save syssettings " + olddb ) ;
+ // system("/root/restore_default_settings.sh restore syssettings " + newdb) ;
+ DialogBox *dia = NULL;
+ QString prompt;
+ QString *problems = new QString("The network address of the database has changed.");
+ problems->append("\n");
+ problems->append("The frontend will need to restart to connect to the new database.");
+ problems->append("\n");
+ dia = new DialogBox(mainWindow, problems->append("\n" ));
+ dia->AddButton(QObject::tr("OK"));
+ int returncode = 0;
+ returncode = dia->exec();
+ dia->deleteLater();
+ cout << "restarting" << endl;
+ //system("/root/systemconfig.sh restartfe" );
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/systemconfig.sh reloadfe" );
+ system(cmdtxt);
+ }
+
+ }
+ else if (bShowTemplate)
+ {
+ // cout << templateparms << endl;
+ if ( template_c_line.size() == 2)
+ {
+ templateop=template_c_line[0];
+ templatename=template_c_line[1];
+ }
+ else if ( template_c_line.size() == 3)
+ {
+ templateop=template_c_line[0];
+ templatename=template_c_line[1];
+ templatehostname=template_c_line[2];
+ };
+ choosetemplate(templateop,templatename,templatehostname);
+ }
+
+ else if (bRunSetup)
+ {
+ DialogBox *dia = NULL;
+ QString prompt;
+ QString *problems = new QString("To configure the TV cards and program guide the setup program needs to be run.");
+ problems->append("\n");
+ problems->append("\n");
+
+ problems->append("For those in North America, guide data is provided by Schedules Direct.");
+ problems->append("\n");
+ problems->append("Visit http://www.schedulesdirect.org/ to signup for your account today");
+ problems->append("\n"); problems->append("\n"); problems->append("\n");
+
+ problems->append("If you choose to not run mythtv-setup now, the program can be run at any time by typing mythtv-setup or hitting ALT+s");
+ problems->append("\n");
+
+ problems->append("\n");
+ prompt = QObject::tr("Do you wish to run mythtv-setup ?");
+
+ dia = new DialogBox(mainWindow, problems->append("\n" + prompt));
+ dia->AddButton(QObject::tr("Yes"));
+ dia->AddButton(QObject::tr("Yes and try to autodetect cards"));
+ dia->AddButton(QObject::tr("No"));
+ int returncode = 0;
+ //returncode = dia->exec();
+ DialogCode dcode = dia->exec();
+ dia->deleteLater();
+ if (kDialogCodeButton0 == dcode )
+ returncode = 0;
+ if (kDialogCodeButton1 == dcode )
+ returncode = 1;
+ if (kDialogCodeButton2 == dcode )
+ returncode = 2;
+
+ if (returncode == 1)
+ {
+ AutoCard listcards;
+ listcards.exec();
+ }
+
+ return returncode;
+
+
+ }
+else if (bShowHelp)
+ {
+ DialogBox *dia = NULL;
+ QString prompt;
+ QString *problems = new QString(" Help Screen");
+ problems->append("\n");
+ problems->append("-------------------------------------------------");
+ problems->append("\n");
+ problems->append("Alt+h This screen");
+ problems->append("\n");
+ #ifdef __MVAPP__
+ problems->append("F2 open/close terminal");
+ problems->append("\n");
+ problems->append("Shift + Return opens new xterm");
+ problems->append("\n");
+ problems->append("Alt+F2 for 2nd desktop Alt+F1 to go back");
+ problems->append("\n");
+ problems->append("Alt+c Capture myth screenshot");
+ problems->append("\n");
+ #else
+ problems->append("Alt + X opens new xterm ");
+ problems->append("\n");
+ problems->append("Alt + m start mythfrontend");
+ problems->append("\n");
+ problems->append("m will display a popup for power/about");
+ problems->append("\n");
+ #endif
+ problems->append("Ctrl + Alt + u unhide mouse cursor");
+ problems->append("\n");
+ problems->append("Alt+1 start masterbackend");
+ problems->append("\n");
+ problems->append("Alt+2 stop masterbackend");
+ problems->append("\n");
+ problems->append("Alt+3 restart masterbackend");
+ problems->append("\n");
+ problems->append("Alt+s run mythtv-setup");
+ problems->append("\n");
+
+
+ dia = new DialogBox(mainWindow, problems->append("\n" ));
+ dia->AddButton(QObject::tr("OK"));
+ // dia->AddButton(QObject::tr("No"));
+ int returncode = 0;
+ returncode = dia->exec();
+ dia->deleteLater();
+ return returncode;
+
+
+ }
+else if (bShowReadme)
+ {
+ DialogBox *dia = NULL;
+ QString prompt;
+ QString line;
+ QString *problems = new QString("");
+ problems->append("\n");
+ QFile file("/usr/MythVantage/README");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ problems->append(line);
+ problems->append("\n");
+ }
+ file.close();
+ }
+ else
+ problems->append("Couldn't open file");
+
+ dia = new DialogBox(mainWindow, problems->append("\n" ));
+ dia->AddButton(QObject::tr("OK"));
+ // dia->AddButton(QObject::tr("No"));
+ int returncode = 0;
+ returncode = dia->exec();
+ dia->deleteLater();
+ return returncode;
+ }
+ else
+
+ {
+ WelcomeDialog *mythWelcome = new WelcomeDialog(gContext->GetMainWindow(),
+ "welcome_screen", "install-",
+ "welcome_screen");
+
+ mythWelcome->exec();
+
+
+ delete mythWelcome;
+ }
+
+// delete gContext;
+
+ return 0;
+}
diff --git a/abs/core/mythinstall/misc_settings.cpp b/abs/core/mythinstall/misc_settings.cpp
new file mode 100755
index 0000000..7c3eb67
--- /dev/null
+++ b/abs/core/mythinstall/misc_settings.cpp
@@ -0,0 +1,621 @@
+#include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include <stdlib.h>
+#include <cstdlib>
+#include "misc_settings.h"
+#include "mv_common.h"
+#include "uitypes.h"
+
+extern HostParms hostparm;
+
+static HostCheckBox *HostShowToolTips()
+{
+ HostCheckBox *gc = new HostCheckBox("HostShowToolTips");
+ gc->setLabel(QObject::tr("Show shortcuts"));
+ gc->setValue(true);
+ gc->setHelpText(QObject::tr("Shows a popup window describing how to open a console and various other items."));
+ return gc;
+};
+
+static HostComboBox *Hostupdateplan()
+{
+ HostComboBox *gc = new HostComboBox("Hostupdateplan");
+ gc->setLabel(QObject::tr("Automatic updates"));
+ gc->addSelection("None");
+ gc->addSelection("Myth_only");
+ gc->addSelection("All");
+ gc->setHelpText("Download and apply updates. None: Will not download any updates , Myth_only: automatic updates for MythTV, All: Automatic updates for the entire system.");
+ return gc;
+
+}
+static HostLineEdit *HostZipcode()
+{
+ HostLineEdit *gc = new HostLineEdit("HostZipcode");
+ gc->setLabel(QObject::tr("Zip Code"));
+ gc->setHelpText(QObject::tr("The zipcode will be used to configure MythMovieTimes. Leave it blank to use the existing value. People located outside the U.S.A should probably leave this blank"));
+ //gc->setRW();
+ //gc->setRO();
+ return gc;
+};
+
+//_______________Misc main frame
+MiscMainFrame::MiscMainFrame():
+ VerticalConfigurationGroup(false,false,false,false)
+
+{
+ bool MVAPP;
+ #ifdef __MVAPP__
+ MVAPP = true ;
+ #else
+ MVAPP = false ;
+ #endif
+ bool showLabels;
+ hostparm.ThisSystemType = gContext->GetSetting("HostSystemType");
+ if ( hostparm.ThisSystemType == "Standalone" || hostparm.ThisSystemType=="Master_backend")
+ {
+ showLabels = false;
+ }
+ else
+ {
+ showLabels = true;
+ }
+ TransLabelSetting *temptimezone = new TransLabelSetting();
+ temptimezone->setValue("Timezone: " + hostparm.ThisTimeZone );
+ TransLabelSetting *tempzipcode = new TransLabelSetting();
+ tempzipcode->setValue("Zipcode: " + hostparm.ThisHostZipcode );
+ GridConfigurationGroup* miscsettings_2 =
+ new GridConfigurationGroup(1,true, true,false,false);
+
+ if ( showLabels && ( hostparm.ThisHostZipcode != "" ))
+ if (MVAPP)
+ miscsettings_2->addChild(tempzipcode);
+ else
+ miscsettings_2->addChild(HostZipcode());
+ else
+ miscsettings_2->addChild(HostZipcode());
+
+ TimezoneRegion *timezoneregion = new TimezoneRegion();
+ TimezoneButton *timezonebutton = new TimezoneButton();
+
+ VerticalConfigurationGroup* miscsettings =
+ new VerticalConfigurationGroup(false, true,false,false);
+ if ( showLabels && ( hostparm.ThisTimeZone != "" ))
+ {
+ if (MVAPP)
+ {
+ miscsettings->addChild(temptimezone);
+ timezonebutton->disableButton();
+ }
+ else
+ miscsettings->addChild(timezoneregion);
+ }
+ else
+ miscsettings->addChild(timezoneregion);
+
+ miscsettings->addChild(timezonebutton);
+ miscsettings->addChild(miscsettings_2);
+ addChild(miscsettings);
+
+ connect(timezonebutton, SIGNAL(mf_launch_tzgui()),timezoneregion ,SLOT(timezone_gathersettings()));
+ connect(timezoneregion,SIGNAL(mf_show_tz(QString)),this,SLOT(mf_show_tz(QString)));
+ connect(this,SIGNAL(update_timezone(QString)),timezoneregion,SLOT(update_timezone_values(QString)));
+
+ autoLaunchTimer = new QTimer(this);
+ connect(autoLaunchTimer, SIGNAL(timeout()), timezonebutton, SLOT(launch_tzgui()));
+ autoLaunchTimer->start(0);
+ }
+
+QString MiscMainFrame::mf_show_tz(QString tz)
+{
+ QString GTimezone;
+ int rc;
+
+ if (autoLaunchTimer->isActive())
+ {
+ autoLaunchTimer->stop();
+
+ // This was triggered by the timer. Only launch the timezone gui if the timezone is unknown.
+ if (!timezone_unknown)
+ return NULL;
+ }
+
+ cout << "MiscMainFrame::mf_show_tz " << tz << "\n";
+
+ if ((tz == "") || timezone_unknown)
+ tz = "guess";
+
+ //launch tzgui and load output into Gtimezone
+ int screenheight = 0, screenwidth = 0;
+ float wmult = 0, hmult = 0;
+ QString m_height , m_width , cmd;
+ gContext->GetScreenSettings(screenwidth, wmult, screenheight, hmult);
+ m_height.setNum(screenheight);
+ m_width.setNum(screenwidth);
+ QString tzpath;
+ tzpath=MV_ROOT;
+ tzpath.append("bin/timezone.bin");
+ //cmd="ACCEL=500 " + tzpath + " -z " + tz + " -h " + m_height + " -w " + m_width + " > /tmp/.selected_tz" ;
+ cmd=tzpath + " -z " + tz + " -h " + m_height + " -w " + m_width + " > /tmp/.selected_tz" ;
+ rc=myth_system(cmd);
+ if ( rc == 0 )
+ {
+ //read in value
+ QString line;
+ QFile file("/tmp/.selected_tz");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.contains("/"))
+ {
+ GTimezone = line.simplifyWhiteSpace();
+ break;
+ }
+ }
+ file.close();
+ }
+ timezone_unknown = FALSE;
+ emit update_timezone(GTimezone);
+ }
+
+}
+
+
+//_______________Misc main frame
+MiscMainFrame2::MiscMainFrame2():
+ VerticalConfigurationGroup(false,false,false,false)
+ {
+ VerticalConfigurationGroup* miscsettings =
+ new VerticalConfigurationGroup(false, true,false,false);
+
+ GridConfigurationGroup* miscsettings_2 =
+ new GridConfigurationGroup(1,false, false,false,false);
+ miscsettings_2->addChild(HostShowToolTips());
+ miscsettings_2->addChild(Hostupdateplan());
+
+ NFSSettings *nfssettings = new NFSSettings();
+
+ miscsettings->addChild(nfssettings);
+ miscsettings->addChild(miscsettings_2);
+
+ addChild(miscsettings);
+
+ }
+
+
+//_______________Misc time timezone
+
+TimezoneButton::TimezoneButton():
+ VerticalConfigurationGroup(false,false,false,false)
+ {
+ TZButton = new TransButtonSetting;
+ TZButton->setLabel("Hitchhikers guide to timezones");
+ addChild(TZButton);
+ connect(TZButton, SIGNAL(pressed()),this,SLOT(launch_tzgui()));
+
+ };
+
+void TimezoneButton::launch_tzgui()
+{
+ emit mf_launch_tzgui();
+}
+
+void TimezoneButton::disableButton()
+{
+ TZButton->setEnabled(false);
+}
+
+
+
+//This is used for the timezone
+QStringList findFilesRecursively ( QStringList paths, QString fileTypes ) {
+ if ( fileTypes.isEmpty() ) fileTypes = "*";
+ QStringList result, more;
+ QStringList::Iterator it;
+ for ( uint i = 0 ; i < paths.size() ; i++ )
+ { // inefficient...whatever
+ QDir dir( paths[i] );
+ dir.setSorting( QDir::Reversed );
+ more = dir.entryList( fileTypes, QDir::Files );
+ for ( it = more.begin() ; it != more.end() ; ++it )
+ result.append( paths[i] + "/" + *it );
+ // reg exp in next line excludes . and .. dirs (and .* actually)
+ more = dir.entryList( QDir::Dirs ).grep( QRegExp( "[^.]" ) );
+ for ( it = more.begin() ; it != more.end() ; ++it )
+ *it = paths[i] + "/" + *it;
+ more = findFilesRecursively( more, fileTypes );
+ for ( it = more.begin() ; it != more.end() ; ++it )
+ result.append( *it );
+ }
+ return result; // yields absolute paths
+}
+
+
+void TimezoneRegion::timezoneregion_fillselection_zone()
+{
+ HostTimeZoneRegion->setLabel(QObject::tr("TimeZone"));
+ HostTimeZoneRegion->addSelection("US");
+ HostTimeZoneRegion->addSelection("Pacific");
+ HostTimeZoneRegion->addSelection("Mideast");
+ HostTimeZoneRegion->addSelection("Mexico");
+ HostTimeZoneRegion->addSelection("Indian");
+ HostTimeZoneRegion->addSelection("Europe");
+ HostTimeZoneRegion->addSelection("Etc");
+ HostTimeZoneRegion->addSelection("Chile");
+ HostTimeZoneRegion->addSelection("Canada");
+ HostTimeZoneRegion->addSelection("Brazil");
+ HostTimeZoneRegion->addSelection("Australia");
+ HostTimeZoneRegion->addSelection("Atlantic");
+ HostTimeZoneRegion->addSelection("Asia");
+ HostTimeZoneRegion->addSelection("Arctic");
+ HostTimeZoneRegion->addSelection("Antarctica");
+ HostTimeZoneRegion->addSelection("America");
+ HostTimeZoneRegion->addSelection("Africa");
+ //--single region
+ HostTimeZoneRegion->addSelection("Zulu");
+ HostTimeZoneRegion->addSelection("WET");
+ HostTimeZoneRegion->addSelection("W-SU");
+ HostTimeZoneRegion->addSelection("Universal");
+ HostTimeZoneRegion->addSelection("UTC");
+ HostTimeZoneRegion->addSelection("UCT");
+ HostTimeZoneRegion->addSelection("Turkey");
+ HostTimeZoneRegion->addSelection("Singapore");
+ HostTimeZoneRegion->addSelection("ROK");
+ HostTimeZoneRegion->addSelection("ROC");
+ HostTimeZoneRegion->addSelection("Portugal");
+ HostTimeZoneRegion->addSelection("Poland");
+ HostTimeZoneRegion->addSelection("PST8PDT");
+ HostTimeZoneRegion->addSelection("PRC");
+ HostTimeZoneRegion->addSelection("Navajo");
+ HostTimeZoneRegion->addSelection("NZ-CHAT");
+ HostTimeZoneRegion->addSelection("NZ");
+ HostTimeZoneRegion->addSelection("MST7MDT");
+ HostTimeZoneRegion->addSelection("MST");
+ HostTimeZoneRegion->addSelection("MET");
+ HostTimeZoneRegion->addSelection("Libya");
+ HostTimeZoneRegion->addSelection("Kwajalein");
+ HostTimeZoneRegion->addSelection("Japan");
+ HostTimeZoneRegion->addSelection("Jamaica");
+ HostTimeZoneRegion->addSelection("Israel");
+ HostTimeZoneRegion->addSelection("Iran");
+ HostTimeZoneRegion->addSelection("Iceland");
+ HostTimeZoneRegion->addSelection("Hongkong");
+ HostTimeZoneRegion->addSelection("HST");
+ HostTimeZoneRegion->addSelection("Greenwich");
+ HostTimeZoneRegion->addSelection("GMT0");
+ HostTimeZoneRegion->addSelection("GMT-0");
+ HostTimeZoneRegion->addSelection("GMT+0");
+ HostTimeZoneRegion->addSelection("GMT");
+ HostTimeZoneRegion->addSelection("GB-Eire");
+ HostTimeZoneRegion->addSelection("GB");
+ HostTimeZoneRegion->addSelection("Factory");
+ HostTimeZoneRegion->addSelection("Eire");
+ HostTimeZoneRegion->addSelection("Egypt");
+ HostTimeZoneRegion->addSelection("EST5EDT");
+ HostTimeZoneRegion->addSelection("EST");
+ HostTimeZoneRegion->addSelection("EET");
+ HostTimeZoneRegion->addSelection("Cuba");
+ HostTimeZoneRegion->addSelection("CST6CDT");
+ HostTimeZoneRegion->addSelection("CET");
+ HostTimeZoneRegion->setHelpText(QObject::tr("Timezone Region"));
+}
+
+void TimezoneRegion::timezoneregion_fillselection(QString tzonefile )
+{
+ QString currentitem;
+ int foundtab;
+ int foundslashes;
+ QString timezonefile="/usr/share/zoneinfo/posix/";
+ timezonefile.append(tzonefile);
+ QStringList answer = findFilesRecursively( timezonefile, "*" );
+ QStringList onlyfiles = "";
+ QStringList::Iterator it;
+ for ( it = answer.begin(); it != answer.end(); ++it )
+ {
+ currentitem = *it;
+ foundtab=currentitem.contains(".tab");
+ if ( foundtab == 0 )
+ {
+ foundslashes=currentitem.contains("/");
+ currentitem = currentitem.section( '/', 6, foundslashes );
+
+ if ( tzonefile == "US")
+ HostTimezoneRegion_US->addSelection(currentitem);
+ else if ( tzonefile == "Pacific")
+ HostTimezoneRegion_Pacific->addSelection(currentitem);
+ else if ( tzonefile == "Mideast")
+ HostTimezoneRegion_Mideast->addSelection(currentitem);
+ else if ( tzonefile == "Mexico")
+ HostTimezoneRegion_Mexico->addSelection(currentitem);
+ else if ( tzonefile == "Indian")
+ HostTimezoneRegion_Indian->addSelection(currentitem);
+ else if ( tzonefile == "Europe")
+ HostTimezoneRegion_Europe->addSelection(currentitem);
+ else if ( tzonefile == "Etc")
+ HostTimezoneRegion_Etc->addSelection(currentitem);
+ else if ( tzonefile == "Chile")
+ HostTimezoneRegion_Chile->addSelection(currentitem);
+ else if ( tzonefile == "Canada")
+ HostTimezoneRegion_Canada->addSelection(currentitem);
+ else if ( tzonefile == "Brazil")
+ HostTimezoneRegion_Brazil->addSelection(currentitem);
+ else if ( tzonefile == "Australia")
+ HostTimezoneRegion_Australia->addSelection(currentitem);
+ else if ( tzonefile == "Atlantic")
+ HostTimezoneRegion_Atlantic->addSelection(currentitem);
+ else if ( tzonefile == "Asia")
+ HostTimezoneRegion_Asia->addSelection(currentitem);
+ else if ( tzonefile == "Arctic")
+ HostTimezoneRegion_Arctic->addSelection(currentitem);
+ else if ( tzonefile == "Antarctica")
+ HostTimezoneRegion_Antarctica->addSelection(currentitem);
+ else if ( tzonefile == "America")
+ HostTimezoneRegion_America->addSelection(currentitem);
+ else if ( tzonefile == "Africa")
+ HostTimezoneRegion_Africa->addSelection(currentitem);
+ }
+ }
+};
+
+void TimezoneRegion::timezone_gathersettings()
+{
+ QString tz;
+ QString subregion;
+ QString region=HostTimeZoneRegion->getValue();
+ if ( region == "US")
+ subregion=HostTimezoneRegion_US->getValue();
+ else if ( region == "Pacific")
+ subregion=HostTimezoneRegion_Pacific->getValue();
+ else if ( region == "Mideast")
+ subregion=HostTimezoneRegion_Mideast->getValue();
+ else if ( region == "Mexico")
+ subregion=HostTimezoneRegion_Mexico->getValue();
+ else if ( region == "Indian")
+ subregion=HostTimezoneRegion_Indian->getValue();
+ else if ( region == "Europe")
+ subregion=HostTimezoneRegion_Europe->getValue();
+ else if ( region == "Etc")
+ subregion=HostTimezoneRegion_Etc->getValue();
+ else if ( region == "Chile")
+ subregion=HostTimezoneRegion_Chile->getValue();
+ else if ( region == "Canada")
+ subregion=HostTimezoneRegion_Canada->getValue();
+ else if ( region == "Brazil")
+ subregion=HostTimezoneRegion_Brazil->getValue();
+ else if ( region == "Australia")
+ subregion=HostTimezoneRegion_Australia->getValue();
+ else if ( region == "Atlantic")
+ subregion=HostTimezoneRegion_Atlantic->getValue();
+ else if ( region == "Asia")
+ subregion=HostTimezoneRegion_Asia->getValue();
+ else if ( region == "Arctic")
+ subregion=HostTimezoneRegion_Arctic->getValue();
+ else if ( region == "Antarctica")
+ subregion=HostTimezoneRegion_Antarctica->getValue();
+ else if ( region == "America")
+ subregion=HostTimezoneRegion_America->getValue();
+ else if ( region == "Africa")
+ subregion=HostTimezoneRegion_Africa->getValue();
+
+ tz=region+"/"+subregion;
+
+ emit mf_show_tz(tz);
+}
+
+TimezoneRegion::TimezoneRegion():
+ TriggeredConfigurationGroup(true,false,true,true,true,true,true,true)
+{
+ SetVertical(false);
+ HostTimeZoneRegion= new HostComboBox("HostTimeZoneRegion");
+ timezoneregion_fillselection_zone();
+ Setting* trigger = HostTimeZoneRegion;
+ addChild(trigger);
+ setTrigger(trigger);
+ //define all the new comboboxes
+ HostTimezoneRegion_US = new HostComboBox("HostTimezoneRegion_US");
+ HostTimezoneRegion_Pacific = new HostComboBox("HostTimezoneRegion_Pacific");
+ HostTimezoneRegion_Mideast = new HostComboBox("HostTimezoneRegion_Mideast");
+ HostTimezoneRegion_Mexico = new HostComboBox("HostTimezoneRegion_Mexico");
+ HostTimezoneRegion_Indian = new HostComboBox("HostTimezoneRegion_Indian");
+ HostTimezoneRegion_Europe = new HostComboBox("HostTimezoneRegion_Europe");
+ HostTimezoneRegion_Etc = new HostComboBox("HostTimezoneRegion_Etc");
+ HostTimezoneRegion_Chile = new HostComboBox("HostTimezoneRegion_Chile");
+ HostTimezoneRegion_Canada = new HostComboBox("HostTimezoneRegion_Canada");
+ HostTimezoneRegion_Brazil = new HostComboBox("HostTimezoneRegion_Brazil");
+ HostTimezoneRegion_Australia = new HostComboBox("HostTimezoneRegion_Australia");
+ HostTimezoneRegion_Atlantic = new HostComboBox("HostTimezoneRegion_Atlantic");
+ HostTimezoneRegion_Asia = new HostComboBox("HostTimezoneRegion_Asia");
+ HostTimezoneRegion_Arctic = new HostComboBox("HostTimezoneRegion_Arctic");
+ HostTimezoneRegion_Antarctica = new HostComboBox("HostTimezoneRegion_Antarctica");
+ HostTimezoneRegion_America = new HostComboBox("HostTimezoneRegion_America");
+ HostTimezoneRegion_Africa = new HostComboBox("HostTimezoneRegion_Africa");
+ //fill the new comboboxes
+ timezoneregion_fillselection("US");
+ timezoneregion_fillselection("Pacific");
+ timezoneregion_fillselection("Mideast");
+ timezoneregion_fillselection("Mexico");
+ timezoneregion_fillselection("Indian");
+ timezoneregion_fillselection("Europe");
+ timezoneregion_fillselection("Etc");
+ timezoneregion_fillselection("Chile");
+ timezoneregion_fillselection("Canada");
+ timezoneregion_fillselection("Brazil");
+ timezoneregion_fillselection("Australia");
+ timezoneregion_fillselection("Atlantic");
+ timezoneregion_fillselection("Asia");
+ timezoneregion_fillselection("Arctic");
+ timezoneregion_fillselection("Antarctica");
+ timezoneregion_fillselection("America");
+ timezoneregion_fillselection("Africa");
+
+ // Add subregions to regions
+ addTarget("US", HostTimezoneRegion_US );
+ addTarget("Pacific", HostTimezoneRegion_Pacific );
+ addTarget("Mideast", HostTimezoneRegion_Mideast );
+ addTarget("Mexico", HostTimezoneRegion_Mexico );
+ addTarget("Indian", HostTimezoneRegion_Indian );
+ addTarget("Europe", HostTimezoneRegion_Europe );
+ addTarget("Etc", HostTimezoneRegion_Etc );
+ addTarget("Chile", HostTimezoneRegion_Chile );
+ addTarget("Canada", HostTimezoneRegion_Canada );
+ addTarget("Brazil", HostTimezoneRegion_Brazil );
+ addTarget("Australia", HostTimezoneRegion_Australia );
+ addTarget("Atlantic", HostTimezoneRegion_Atlantic );
+ addTarget("Asia", HostTimezoneRegion_Asia );
+ addTarget("Arctic", HostTimezoneRegion_Arctic );
+ addTarget("Antarctica", HostTimezoneRegion_Antarctica );
+ addTarget("America", HostTimezoneRegion_America );
+ addTarget("Africa", HostTimezoneRegion_Africa );
+ //--single region
+ addTarget("Zulu", new VerticalConfigurationGroup(false, false));
+ addTarget("WET", new VerticalConfigurationGroup(false, false));
+ addTarget("W-SU", new VerticalConfigurationGroup(false, false));
+ addTarget("Universal", new VerticalConfigurationGroup(false, false));
+ addTarget("UTC", new VerticalConfigurationGroup(false, false));
+ addTarget("UCT", new VerticalConfigurationGroup(false, false));
+ addTarget("Turkey", new VerticalConfigurationGroup(false, false));
+ addTarget("Singapore", new VerticalConfigurationGroup(false, false));
+ addTarget("ROK", new VerticalConfigurationGroup(false, false));
+ addTarget("ROC", new VerticalConfigurationGroup(false, false));
+ addTarget("Portugal", new VerticalConfigurationGroup(false, false));
+ addTarget("Poland", new VerticalConfigurationGroup(false, false));
+ addTarget("PST8PDT", new VerticalConfigurationGroup(false, false));
+ addTarget("PRC", new VerticalConfigurationGroup(false, false));
+ addTarget("Navajo", new VerticalConfigurationGroup(false, false));
+ addTarget("NZ-CHAT", new VerticalConfigurationGroup(false, false));
+ addTarget("NZ", new VerticalConfigurationGroup(false, false));
+ addTarget("MST7MDT", new VerticalConfigurationGroup(false, false));
+ addTarget("MST", new VerticalConfigurationGroup(false, false));
+ addTarget("MET", new VerticalConfigurationGroup(false, false));
+ addTarget("Libya", new VerticalConfigurationGroup(false, false));
+ addTarget("Kwajalein", new VerticalConfigurationGroup(false, false));
+ addTarget("Japan", new VerticalConfigurationGroup(false, false));
+ addTarget("Jamaica", new VerticalConfigurationGroup(false, false));
+ addTarget("Israel", new VerticalConfigurationGroup(false, false));
+ addTarget("Iran", new VerticalConfigurationGroup(false, false));
+ addTarget("Iceland", new VerticalConfigurationGroup(false, false));
+ addTarget("Hongkong", new VerticalConfigurationGroup(false, false));
+ addTarget("HST", new VerticalConfigurationGroup(false, false));
+ addTarget("Greenwich", new VerticalConfigurationGroup(false, false));
+ addTarget("GMT0", new VerticalConfigurationGroup(false, false));
+ addTarget("GMT-0", new VerticalConfigurationGroup(false, false));
+ addTarget("GMT+0", new VerticalConfigurationGroup(false, false));
+ addTarget("GMT", new VerticalConfigurationGroup(false, false));
+ addTarget("GB-Eire", new VerticalConfigurationGroup(false, false));
+ addTarget("GB", new VerticalConfigurationGroup(false, false));
+ addTarget("Factory", new VerticalConfigurationGroup(false, false));
+ addTarget("Eire", new VerticalConfigurationGroup(false, false));
+ addTarget("Egypt", new VerticalConfigurationGroup(false, false));
+ addTarget("EST5EDT", new VerticalConfigurationGroup(false, false));
+ addTarget("EST", new VerticalConfigurationGroup(false, false));
+ addTarget("EET", new VerticalConfigurationGroup(false, false));
+ addTarget("Cuba", new VerticalConfigurationGroup(false, false));
+ addTarget("CST6CDT", new VerticalConfigurationGroup(false, false));
+ addTarget("CET", new VerticalConfigurationGroup(false, false));
+};
+
+void TimezoneRegion::update_timezone_values(QString Gtimezone)
+{
+ QString region;
+ QString subregion;
+ region=Gtimezone.section('/',0,0);
+ subregion=Gtimezone.section('/',1,1);
+ HostTimeZoneRegion->setValue(region);
+
+ if ( region == "US")
+ HostTimezoneRegion_US->setValue(subregion);
+ else if ( region == "Pacific")
+ HostTimezoneRegion_Pacific->setValue(subregion);
+ else if ( region == "Mideast")
+ HostTimezoneRegion_Mideast->setValue(subregion);
+ else if ( region == "Mexico")
+ HostTimezoneRegion_Mexico->setValue(subregion);
+ else if ( region == "Indian")
+ HostTimezoneRegion_Indian->setValue(subregion);
+ else if ( region == "Europe")
+ HostTimezoneRegion_Europe->setValue(subregion);
+ else if ( region == "Etc")
+ HostTimezoneRegion_Etc->setValue(subregion);
+ else if ( region == "Chile")
+ HostTimezoneRegion_Chile->setValue(subregion);
+ else if ( region == "Canada")
+ HostTimezoneRegion_Canada->setValue(subregion);
+ else if ( region == "Brazil")
+ HostTimezoneRegion_Brazil->setValue(subregion);
+ else if ( region == "Australia")
+ HostTimezoneRegion_Australia->setValue(subregion);
+ else if ( region == "Atlantic")
+ HostTimezoneRegion_Atlantic->setValue(subregion);
+ else if ( region == "Asia")
+ HostTimezoneRegion_Asia->setValue(subregion);
+ else if ( region == "Arctic")
+ HostTimezoneRegion_Arctic->setValue(subregion);
+ else if ( region == "Antarctica")
+ HostTimezoneRegion_Antarctica->setValue(subregion);
+ else if ( region == "America")
+ HostTimezoneRegion_America->setValue(subregion);
+ else if ( region == "Africa")
+ HostTimezoneRegion_Africa->setValue(subregion);
+}
+
+
+//________________Misc (NFS) Screen SETTINGS_________________________
+static HostComboBox *HostHaveCentralNFS()
+{
+ HostComboBox *gc = new HostComboBox("HostHaveCentralNFS");
+ gc->setLabel(QObject::tr("Central NFS server"));
+ gc->addSelection("no");
+ gc->addSelection("yes") ;
+ gc->setHelpText(QObject::tr("Select yes, if your media is stored on an NFS server different than the masterbackend. Say no if you are confused."));
+
+ return gc;
+}
+
+static HostComboBox *HostCentralNFSIP()
+{
+ HostComboBox *gc = new HostComboBox("HostCentralNFSIP",true);
+ gc->setLabel(QObject::tr("NFS server and sharename "));
+ gc->setHelpText(QObject::tr("Format should be IP:/SHARENAME, for example 192.168.1.6:/media. file:nfsmap will load shares from the nfsmap file"));
+ gc->addSelection("file:nfsmap") ;
+ gc->addSelection("") ;
+ return gc;
+};
+
+static HostComboBox *HostNFSmountpoint()
+{
+ #ifdef __MVAPP__
+ HostComboBox *gc = new HostComboBox("HostNFSmountpoint");
+ gc->addSelection("/data/media");
+ #else
+ HostComboBox *gc = new HostComboBox("HostNFSmountpoint",true);
+ gc->addSelection("/myth");
+ #endif
+ gc->setLabel(QObject::tr("Local mount point of NFS share"));
+ gc->addSelection("/mnt") ;
+ gc->setHelpText(QObject::tr(""));
+ return gc;
+}
+
+
+NFSSettings::NFSSettings():
+ TriggeredConfigurationGroup(false,false,false,true,true,false,false,true)
+ {
+ setLabel(QObject::tr("Misc Settings"));
+
+ Setting* havenfs = HostHaveCentralNFS();
+ addChild(havenfs);
+ setTrigger(havenfs);
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup();
+ settings->addChild(HostCentralNFSIP());
+ settings->addChild(HostNFSmountpoint());
+
+ addTarget("no", new VerticalConfigurationGroup());
+ addTarget("yes", settings);
+ };
+
diff --git a/abs/core/mythinstall/misc_settings.h b/abs/core/mythinstall/misc_settings.h
new file mode 100755
index 0000000..66ad99c
--- /dev/null
+++ b/abs/core/mythinstall/misc_settings.h
@@ -0,0 +1,97 @@
+#include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include "settings.h"
+#include "installsettings.h"
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+
+#include <stdlib.h>
+#include <cstdlib>
+#include <mythtv/mythdbcon.h>
+#include <qdir.h>
+#include <qapplication.h>
+#include "util.h"
+
+
+class MiscMainFrame: public VerticalConfigurationGroup {
+Q_OBJECT
+public:
+ MiscMainFrame();
+QTimer *autoLaunchTimer;
+
+public slots:
+ QString mf_show_tz(QString);
+
+signals:
+ void update_timezone(QString);
+};
+
+class MiscMainFrame2: public VerticalConfigurationGroup {
+Q_OBJECT
+public:
+ MiscMainFrame2();
+};
+
+
+class TimezoneButton: public VerticalConfigurationGroup {
+Q_OBJECT
+public:
+ TimezoneButton();
+ TransButtonSetting *TZButton;
+ void disableButton();
+public slots:
+ void launch_tzgui();
+signals:
+ QString mf_launch_tzgui();
+ //QString update_timezone(QString);
+};
+
+class TimezoneRegion: public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ TimezoneRegion();
+ HostComboBox *HostTimeZoneRegion;
+ HostComboBox *HostTimezoneRegion_US;
+ HostComboBox *HostTimezoneRegion_Pacific;
+ HostComboBox *HostTimezoneRegion_Mideast;
+ HostComboBox *HostTimezoneRegion_Mexico;
+ HostComboBox *HostTimezoneRegion_Indian;
+ HostComboBox *HostTimezoneRegion_Europe;
+ HostComboBox *HostTimezoneRegion_Etc;
+ HostComboBox *HostTimezoneRegion_Chile;
+ HostComboBox *HostTimezoneRegion_Canada;
+ HostComboBox *HostTimezoneRegion_Brazil;
+ HostComboBox *HostTimezoneRegion_Australia;
+ HostComboBox *HostTimezoneRegion_Atlantic;
+ HostComboBox *HostTimezoneRegion_Asia;
+ HostComboBox *HostTimezoneRegion_Arctic;
+ HostComboBox *HostTimezoneRegion_Antarctica;
+ HostComboBox *HostTimezoneRegion_America;
+ HostComboBox *HostTimezoneRegion_Africa;
+ void timezoneregion_fillselection(QString);
+ void timezoneregion_fillselection_zone();
+
+
+public slots:
+ void update_timezone_values(QString);
+ void timezone_gathersettings();
+signals:
+ void mf_show_tz(QString);
+};
+
+
+class NFSSettings: public
+ TriggeredConfigurationGroup {
+ public:
+ NFSSettings();
+
+};
+
+
+
+
+
+
diff --git a/abs/core/mythinstall/mv_common.h b/abs/core/mythinstall/mv_common.h
new file mode 100755
index 0000000..865eb3d
--- /dev/null
+++ b/abs/core/mythinstall/mv_common.h
@@ -0,0 +1,4 @@
+//#define __MVAPP__ MythVantage
+#define RELEASEFILE "LinHES-release"
+
+extern int timezone_unknown;
diff --git a/abs/core/mythinstall/mythinstall.pro b/abs/core/mythinstall/mythinstall.pro
new file mode 100755
index 0000000..0a273cc
--- /dev/null
+++ b/abs/core/mythinstall/mythinstall.pro
@@ -0,0 +1,46 @@
+# This is the path to the mythtv src. The assumtion is that this package and
+# mythtv are both being build in the LinHES-PKGBUILD.
+MYTHPATH="/data/LinHES-PKGBUILD/abs/core-testing/mythtv/stable/mythtv/src/mythtv-0.21"
+
+include ( $$MYTHPATH/libs/libmyth/mythconfig.mak)
+include ( $$MYTHPATH/settings.pro)
+
+#pulled from program-libs.pro and modified to use $$MYTHPATH
+INCLUDEPATH += $$MYTHPATH $$MYTHPATH/libs/ $$MYTHPATH/libs/libmyth $$MYTHPATH/libs/libmythtv
+INCLUDEPATH += $$MYTHPATH/libs/libavutil $$MYTHPATH/libs/libavformat $$MYTHPATH/libs/libavcodec
+INCLUDEPATH += $$MYTHPATH/libs/libmythupnp $$MYTHPATH/libs/libmythui
+INCLUDEPATH += $$MYTHPATH/libs/libmythlivemedia
+
+LIBS += -L$$MYTHPATH/libs/libmyth -L$$MYTHPATH/libs/libmythtv
+LIBS += -L$$MYTHPATH/libs/libavutil -L$$MYTHPATH/libs/libavcodec -L$$MYTHPATH/libs/libavformat
+LIBS += -L$$MYTHPATH/libs/libmythfreemheg
+LIBS += -L$$MYTHPATH/libs/libmythui
+LIBS += -L$$MYTHPATH/libs/libmythupnp
+LIBS += -L$$MYTHPATH/libs/libmythlivemedia
+
+LIBS += -lmythtv-$$LIBVERSION -lmythavformat-$$LIBVERSION
+LIBS += -lmythavutil-$$LIBVERSION -lmythavcodec-$$LIBVERSION
+LIBS += -lmythfreemheg-$$LIBVERSION
+LIBS += -lmythupnp-$$LIBVERSION
+LIBS += -lmythlivemedia-$$LIBVERSION
+
+
+
+TEMPLATE = app
+CONFIG += thread
+TARGET = mythinstall
+target.path = $${PREFIX}/bin
+
+INSTALLS = target
+
+uifiles.path = $${PREFIX}/share/mythtv/themes/default
+uifiles.files = install-ui.xml images/*.png
+
+INSTALLS += uifiles
+
+QMAKE_CLEAN += $(TARGET)
+
+# Input
+HEADERS += installdialog.h installsettings.h settemplate.h installationtype.h autocard.h xorgsettings.h password_manage.h misc_settings.h mv_common.h infrared.h
+SOURCES += main.cpp installdialog.cpp installsettings.cpp settemplate.cpp installationtype.cpp autocard.cpp xorgsettings.cpp password_manage.cpp misc_settings.cpp infrared.cpp
+INCLUDEPATH += /usr/include/mythtv
diff --git a/abs/core/mythinstall/password_manage.cpp b/abs/core/mythinstall/password_manage.cpp
new file mode 100755
index 0000000..5156636
--- /dev/null
+++ b/abs/core/mythinstall/password_manage.cpp
@@ -0,0 +1,445 @@
+#include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include "settings.h"
+#include "installsettings.h"
+#include "installdialog.h"
+#include "password_manage.h"
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+
+#include <stdlib.h>
+#include <cstdlib>
+#include <mythtv/mythdbcon.h>
+#include <qdir.h>
+#include <qapplication.h>
+#include "util.h"
+#include <qregexp.h>
+/****************************************************************************/
+typedef enum {
+ UseraddPopup_OK = 0,
+ UseraddPopup_CANCEL,
+ UseraddPopup_DELETE
+}
+ UseraddPopupResult;
+ bool passtoggle = TRUE;
+ QString invalid_chars = "&<>/~`;:!";
+
+class AddUserPopup
+{
+ public:
+ static UseraddPopupResult showPopup(MythMainWindow *parent, QString title,
+ QString message, QString& text);
+};
+
+UseraddPopupResult AddUserPopup::showPopup(MythMainWindow *parent,
+ QString title, QString message, QString& text)
+{
+ MythPopupBox *popup = new MythPopupBox(parent, title);
+ popup->addLabel(message);
+
+ MythLineEdit *textEdit = new MythLineEdit(popup, "chooseEdit");
+ textEdit->setText(text);
+ popup->addWidget(textEdit);
+
+ popup->addButton(QObject::tr("OK"), popup, SLOT(accept()));
+ popup->addButton(QObject::tr("Cancel"), popup, SLOT(reject()));
+
+ textEdit->setFocus();
+
+ bool ok = (MythDialog::Accepted == popup->ExecPopup());
+ if (ok)
+ text = QDeepCopy<QString>(textEdit->text());
+
+ popup->hide();
+ popup->deleteLater();
+
+ return (ok) ? UseraddPopup_OK : UseraddPopup_CANCEL;
+}
+
+/****************************************************************************/
+
+
+void UserManagement::user_fillselection()
+{
+ //only add users with UID above 1000
+ QString line;
+ QString user;
+ QString quid;
+ int uid;
+ QFile file("/etc/passwd");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ user = line.section(":",0,0);
+ quid = line.section(":",2,2);
+ uid=quid.toInt();
+ if ( uid >= 1000 )
+ userlist->addSelection(user);
+ }
+ file.close();
+ }
+
+}
+
+bool UserManagement::user_exisit_check(QString name)
+{
+ QString line;
+ QString user;
+ QString quid;
+ bool founduser;
+ founduser=false;
+ int uid;
+ QFile file("/etc/passwd");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ user = line.section(":",0,0);
+ quid = line.section(":",2,2);
+ uid=quid.toInt();
+ if ( user == name )
+ {
+ founduser=true;
+ break;
+ }
+ }
+ file.close();
+ }
+
+ return founduser;
+
+}
+
+bool UserManagement::user_valid_check(QString check_string)
+{
+ QChar current_char;
+ int upperlimit;
+ int found_char;
+ int i ;
+ upperlimit = invalid_chars.length() -1 ;
+ for(i= 0; i <= upperlimit; i++)
+ {
+ found_char = -1;
+ current_char = invalid_chars.at(i);
+ found_char = check_string.contains(current_char,FALSE);
+ if ( found_char > 0 )
+ return FALSE;
+ }
+ return TRUE ;
+
+}
+
+UserManagement::UserManagement():
+ VerticalConfigurationGroup(false,false,false,false)
+ {
+ setLabel(QObject::tr("Password Management"));
+ userlist = new TransComboBoxSetting(false);
+ userlist->setLabel(QObject::tr("Current Accounts"));
+ userlist->addSelection("root");
+ userlist->addSelection("mythtv");
+ user_fillselection();
+ userlist->setHelpText(QObject::tr("Select the account for password reset"));
+
+ userpass1= new TransLineEditSetting(true);
+ userpass1->setLabel("Password");
+ userpass1->SetPasswordEcho(passtoggle);
+ userpass1->setHelpText(QObject::tr("The following characters will not be accepted: " + invalid_chars));
+
+
+ passToggleButton = new TransButtonSetting;
+ passToggleButton->setLabel("Toggle password view");
+ passToggleButton->setHelpText(QObject::tr("Hide or show the password"));
+
+ info = new TransLabelSetting;
+ info->setValue("");
+
+ userapplyButton = new TransButtonSetting;
+ userapplyButton->setLabel("Apply new password");
+
+ usercreateButton = new TransButtonSetting;
+ usercreateButton->setLabel("Create a new user account");
+ usercreateButton->setHelpText(QObject::tr("The following characters will not be accepted: " + invalid_chars));
+
+ userdeleteButton = new TransButtonSetting;
+ userdeleteButton->setLabel("Delete current account");
+ ConfigurationGroup *buttonlist = new GridConfigurationGroup(2,false);
+ buttonlist-> addChild(usercreateButton);
+ buttonlist-> addChild(userdeleteButton);
+
+ ConfigurationGroup *buttonlist2 = new GridConfigurationGroup(2,false);
+ buttonlist2-> addChild(passToggleButton);
+ buttonlist2-> addChild(userapplyButton);
+
+ rootSSH = new HostCheckBox("HOSTrootSSH");
+ rootSSH->setLabel("Enable remote access for the root account.");
+ rootSSH->setHelpText(QObject::tr("Checking this will enable ssh for the root account. Leave this disabled unless you know what your doing."));
+ rootSSH->setValue(false);
+
+ addChild(userlist);
+ addChild(buttonlist);
+ addChild(userpass1);
+ addChild(info);
+ addChild(rootSSH);
+ addChild(buttonlist2);
+
+ connect(userapplyButton, SIGNAL(pressed()), this, SLOT(applychanges()));
+ connect(userlist, SIGNAL(valueChanged(const QString&)), this, SLOT(userchanged()));
+ connect(usercreateButton, SIGNAL(pressed()), this, SLOT(usercreatepopup()));
+ connect(userdeleteButton, SIGNAL(pressed()), this, SLOT(userdeletepopup()));
+ connect(passToggleButton, SIGNAL(pressed()), this, SLOT(togglepass()));
+};
+
+void UserManagement::togglepass()
+{
+
+ if ( passtoggle)
+ passtoggle = false;
+ else
+ passtoggle = true;
+ userpass1->SetPasswordEcho(passtoggle);
+}
+
+void UserManagement::applychanges()
+{
+ QString user;
+ QString password;
+ QString user_e;
+
+ user=userlist->getValue();
+ password=userpass1->getValue();
+
+ user_e = QRegExp::escape( user );
+ password = QRegExp::escape( password );
+ if ( ! user_valid_check (password))
+ {
+ info->setValue(" Password contains invalid characters!");
+ return;
+ }
+ info->setValue(" Password has been changed for user: " + user );
+ QString cmdtxt;
+ cmdtxt="sudo ";
+ cmdtxt.append("myth_user_call -c pass -u " + user_e + " -p " + password );
+ myth_system(cmdtxt);
+
+
+}
+
+void UserManagement::userchanged()
+{
+ info->setValue(" ");
+ userpass1->setValue("");
+}
+
+void UserManagement::usercreatepopup()
+{
+ QString name;
+ QString name_e;
+ int key = 0;
+ UseraddPopupResult result = AddUserPopup::showPopup(
+ gContext->GetMainWindow(),
+ tr(""),
+ tr("Enter a new user account name"), name);
+ if (result == UseraddPopup_CANCEL)
+ return;
+ //check if name exisit || add it
+ if ( user_exisit_check(name) )
+ {
+ info->setValue(name + " Already present");
+ userlist->setFocus();
+ key = Qt::Key_Down;
+ QApplication::postEvent(gContext->GetMainWindow(),
+ new ExternalKeycodeEvent(key));
+
+ return;
+ }
+
+ if ( ! user_valid_check (name))
+ {
+ info->setValue(" Username contains invalid characters!");
+ return;
+ }
+ userlist->addSelection(name);
+ userlist->setValue(name);
+ //run program to add user right here
+ QString cmdtxt;
+ name_e = QRegExp::escape( name );
+
+ cmdtxt="sudo ";
+ cmdtxt.append("myth_user_call -c add -u " + name_e );
+ myth_system(cmdtxt);
+
+ info->setValue("Now enter a password for " + name + " and press the apply button.");
+ //Set focus to userlist, then press down three times to set focus to the password box.
+ userlist->setFocus();
+
+ key = Qt::Key_Down;
+ QApplication::postEvent(gContext->GetMainWindow(),
+ new ExternalKeycodeEvent(key));
+ key = Qt::Key_Down;
+ QApplication::postEvent(gContext->GetMainWindow(),
+ new ExternalKeycodeEvent(key));
+ key = Qt::Key_Down;
+ QApplication::postEvent(gContext->GetMainWindow(),
+ new ExternalKeycodeEvent(key));
+
+}
+
+void UserManagement::userdeletepopup()
+{
+ QString user;
+ QString user_e;
+ user=userlist->getValue();
+ QString message = user ;
+
+ DialogCode value = MythPopupBox::Show2ButtonPopup(
+ gContext->GetMainWindow(), "", message,
+ tr("Remove this account"),
+ tr("Do not remove this account"),
+ kDialogCodeButton1);
+
+ if (kDialogCodeButton0 == value)
+ {
+ info->setValue("removed account: " + user);
+ if ( user == "root" || user == "mythtv" )
+ {
+ info->setValue("Can not remove the account");
+ return;
+ }
+ userlist->setValue("root");
+ userlist->removeSelection(user);
+ //run program to remove user
+ QString cmdtxt;
+ user_e = QRegExp::escape( user );
+ cmdtxt="sudo ";
+ cmdtxt.append("myth_user_call -c delete -u " + user_e );
+ myth_system(cmdtxt);
+ info->setValue("Removed account: " + user);
+ }
+ else
+ info->setValue("Did not remove account: " + user);
+}
+
+WebPassword::WebPassword():
+ TriggeredConfigurationGroup(true,false,true,true,true,true,true,true)
+{
+
+ webAuth = new HostCheckBox("HOSTwebauth");
+ webAuth->setLabel("Enable password");
+ webAuth->setHelpText(QObject::tr("Enable the use of password protection for the local website."));
+ webAuth->setValue(false);
+ webuser = new HostLineEdit("Hostwebuser");
+ webuser->setLabel("Username");
+ webuser->setHelpText(QObject::tr("The following characters will not be accepted: " + invalid_chars));
+
+ webpassword = new HostLineEdit("Hostwebpassword");
+ webpassword->setLabel("Password");
+ webpassword->SetPasswordEcho(passtoggle);
+ webpassword->setHelpText(QObject::tr("The following characters will not be accepted: " + invalid_chars));
+
+ webpassToggleButton = new TransButtonSetting;
+ webpassToggleButton->setLabel("Toggle password view");
+ webpassToggleButton->setHelpText(QObject::tr("Hide or show the password"));
+
+ webapplyButton = new TransButtonSetting;
+ webapplyButton->setLabel("Apply new password");
+
+ info = new TransLabelSetting;
+ info->setValue("");
+
+ connect(webpassToggleButton, SIGNAL(pressed()), this, SLOT(togglepass()));
+ connect(webapplyButton, SIGNAL(pressed()),this , SLOT(webpassword_gathersettings()));
+
+ ConfigurationGroup* webpassgroup = new VerticalConfigurationGroup(false);
+ webpassgroup->addChild(webuser);
+ webpassgroup->addChild(webpassword);
+ webpassgroup->addChild(info);
+ webpassgroup->addChild(webpassToggleButton);
+ webpassgroup->addChild(webapplyButton);
+
+ addChild(webAuth);
+ setTrigger(webAuth);
+
+ addTarget("0", new VerticalConfigurationGroup(false, false));
+ addTarget("1", webpassgroup);
+
+}
+
+
+void WebPassword::togglepass()
+{
+ if ( passtoggle)
+ passtoggle = false;
+ else
+ passtoggle = true;
+ webpassword->SetPasswordEcho(passtoggle);
+}
+
+bool WebPassword::valid_check(QString check_string)
+{
+ // QString invalid_chars;
+ QChar current_char;
+ int upperlimit;
+ int found_char;
+ int i ;
+ //invalid_chars = "&<>/~`;";
+ upperlimit = invalid_chars.length() -1 ;
+ for(i= 0; i <= upperlimit; i++)
+ {
+ found_char = -1;
+ current_char = invalid_chars.at(i);
+ found_char = check_string.contains(current_char,FALSE);
+ if ( found_char > 0 )
+ return FALSE;
+ }
+ return TRUE ;
+
+}
+
+void WebPassword::webpassword_gathersettings()
+{
+
+ QString pass_enabled;
+ QString web_user;
+ QString web_pass;
+ QString webuser_e;
+ QString webpass_e;
+ pass_enabled=webAuth->getValue();
+ web_user=webuser->getValue();
+ web_pass=webpassword->getValue();
+ webuser_e = QRegExp::escape( web_user );
+ webpass_e = QRegExp::escape( web_pass );
+ if ( ! valid_check (webuser_e))
+ {
+ info->setValue(" Username contains invalid characters!");
+ return;
+ }
+
+ if ( ! valid_check (webpass_e))
+ {
+ info->setValue(" Password contains invalid characters!");
+ return;
+ }
+ cout << "Running program to make the changes for web password" << endl;
+ QString cmdtxt;
+
+ cmdtxt="sudo ";
+ cmdtxt.append("myth_user_call -c web -u " + webuser_e + " -p " + webpass_e );
+ myth_system(cmdtxt);
+ info->setValue(" Changes applied");
+
+}
+
+WebPasswordFrame::WebPasswordFrame():
+ VerticalConfigurationGroup()
+{
+ WebPassword *webpassword = new WebPassword();
+ addChild(webpassword);
+}
diff --git a/abs/core/mythinstall/password_manage.h b/abs/core/mythinstall/password_manage.h
new file mode 100755
index 0000000..665f23f
--- /dev/null
+++ b/abs/core/mythinstall/password_manage.h
@@ -0,0 +1,60 @@
+#include <settings.h>
+#include "mythdialogs.h"
+#include "libmyth/mythdialogs.h"
+#include "libmyth/mythwidgets.h"
+#include "installsettings.h"
+
+
+class UserManagement: public VerticalConfigurationGroup {
+ Q_OBJECT
+public:
+ UserManagement();
+ TransComboBoxSetting *userlist;
+ TransLineEditSetting *userpass1;
+ TransButtonSetting *userapplyButton;
+ TransButtonSetting *usercreateButton;
+ TransButtonSetting *userdeleteButton;
+ TransButtonSetting *passToggleButton;
+ TransLabelSetting *info;
+ TransCheckBoxSetting *lockaccount;
+ HostCheckBox *rootSSH;
+ void user_fillselection(void);
+ bool user_exisit_check(QString);
+ bool user_valid_check(QString);
+
+public slots:
+ void applychanges();
+ void userchanged();
+ void usercreatepopup();
+ void userdeletepopup();
+ void togglepass();
+};
+
+
+
+class WebPassword: public
+ TriggeredConfigurationGroup {
+ Q_OBJECT
+public:
+ WebPassword();
+ HostLineEdit *webuser;
+ HostLineEdit *webpassword;
+ HostCheckBox *webAuth;
+ TransButtonSetting *webpassToggleButton;
+ TransLabelSetting *info;
+ bool valid_check(QString);
+ TransButtonSetting *webapplyButton;
+
+public slots:
+ void webpassword_gathersettings();
+ void togglepass();
+};
+
+class WebPasswordFrame: public
+ VerticalConfigurationGroup {
+ Q_OBJECT
+public:
+ WebPasswordFrame();
+ TransButtonSetting *webapplyButton;
+
+};
diff --git a/abs/core/mythinstall/settemplate.cpp b/abs/core/mythinstall/settemplate.cpp
new file mode 100755
index 0000000..c12ef06
--- /dev/null
+++ b/abs/core/mythinstall/settemplate.cpp
@@ -0,0 +1,419 @@
+#include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include "settings.h"
+#include "installsettings.h"
+#include "installdialog.h"
+#include "settemplate.h"
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+#include <stdlib.h>
+#include <cstdlib>
+
+#include <mythtv/mythdbcon.h>
+
+void create_temp_table (QString create_table_name,QString like_name)
+{
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("create table " + create_table_name + " like " + like_name + ";" );
+ query.exec();
+ if ( like_name == "settings")
+ {
+ query.prepare("Alter table " + create_table_name + " add unique ( value ) ; " );
+ query.exec();
+ }
+ query.prepare(" truncate " + create_table_name + ";" );
+ query.exec();
+};
+
+void drop_temp_table (QString tname)
+{
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("drop table " + tname + ";" );
+ query.exec();
+}
+
+void restart_frontend ()
+{
+
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/systemconfig.sh reloadfe" );
+ cout << "Calling systemconfig.sh reloadfe" << endl;
+ system(cmdtxt);
+ //system("/root/systemconfig.sh reloadfe" );
+}
+
+void choosetemplate (QString templateop, QString templatename , QString templatehostname = "")
+{
+ if ( templateop == "" )
+ {
+ MythCtemplate setting;
+ setting.load();
+ setting.save();
+ setting.exec();
+ };
+
+ QString thistemplate;
+ QString thisoperation;
+ QString thishost;
+ //QString runcommand = "/root/restore_default_settings.sh";
+ QString runcommand = "echo ";
+ // cout << templateop << endl;
+ // cout << templatename << endl;
+ // cout << templatehostname << endl;
+
+ if (templateop == "")
+ thisoperation = gContext -> GetSetting("HOSTtemplatetype");
+ else
+ thisoperation = templateop;
+
+ thistemplate = "none";
+
+
+ if ( thisoperation == "save" )
+ {
+ if (templatename == "" )
+ thistemplate = gContext -> GetSetting("HostTemplateSave");
+ else
+ thistemplate = templatename;
+
+ savesettings(thistemplate);
+ }
+ else if ( thisoperation == "restore" )
+ {
+ if (templatename == "" )
+ thistemplate = gContext -> GetSetting("HostTemplateRestore");
+ else
+ thistemplate = templatename;
+
+ if ( thistemplate == "default_1")
+ c_from("default_1" , thistemplate);
+ else if ( thistemplate == "default_2")
+ c_from("default_2" ,thistemplate);
+ else
+ restoresettings(thistemplate);
+
+ }
+ else if ( thisoperation == "copy_from" )
+ {
+ if (templatename == "" )
+ {
+ thishost = gContext ->GetSetting("HostSelectcopy_from");
+ thistemplate = gContext ->GetSetting("HostTemplateRestore");
+ }
+ else
+ {
+ thishost=templatehostname;
+ thistemplate=templatename;
+ };
+
+ c_from(thishost,thistemplate);
+ }
+
+
+// if ( thistemplate != "none" )
+// {
+// std::cout << runcommand << endl;
+ // system(runcommand);
+ //}
+};
+
+
+void savesettings (QString templatenumber )
+{
+ cout << "SAVING....." << templatenumber << endl;
+ QString templatename = "settings_" + templatenumber ;
+ // Remove old saved values
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare( "delete from " + templatename + " where hostname=:HOSTNAME ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+ //insert all new settings
+ query.prepare( "replace into " + templatename + " (select * from settings where hostname=:HOSTNAME ) ;" ) ;
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // repeat for keybindings
+ templatename = "keybindings_" + templatenumber ;
+ query.prepare( "delete from " + templatename + " where hostname=:HOSTNAME ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ query.prepare( "replace into " + templatename + " (select * from keybindings where hostname=:HOSTNAME ) ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+}
+
+void restoresettings (QString templatenumber )
+{
+ cout << "RESTORING....." << templatenumber << endl;
+// DEFAULT settings are handled by the copy from routine
+ MSqlQuery query(MSqlQuery::InitCon());
+ QStringList tablelist ;
+ QStringList::Iterator it;
+ QString current_table;
+ tablelist.append ("settings");
+ tablelist.append ("keybindings");
+ QString templatename;
+
+ for ( it = tablelist.begin(); it != tablelist.end(); ++it )
+ {
+ current_table = *it ;
+ //find template table to use
+ QString templatename = current_table + "_" + templatenumber ;
+ QString temptable="temp_table_" + current_table + "_" + gContext->GetHostName() ;
+ // create temp table for merging settings, The merge is needed to accoutn for any new settings.
+ create_temp_table(temptable, current_table );
+
+ // copy in current settings
+ query.prepare( "replace into " + temptable + " (select * from " + current_table + " where hostname=:HOSTNAME ) ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // need to remove all non HOST settigns
+
+ // copy in stored settings
+ query.prepare( "replace into " + temptable + " (select * from " + templatename + " where hostname=:HOSTNAME ) ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // remove current settings. Need to remove because the old table allows for duplicates and replace into doesn' seem to "replace"
+ query.prepare( "delete from " + current_table + " where hostname=:HOSTNAME ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+
+ // copy new settings from temp to current
+ query.prepare( "replace into " + current_table + " (select * from " + temptable + " );" );
+ query.exec();
+
+ // drop temptable
+ drop_temp_table(temptable);
+
+ }
+restart_frontend();
+};
+
+void c_from(QString copyhost, QString templatenumber)
+{
+ cout << "Copying....." + copyhost + " " + "templatenumber" << endl;
+ MSqlQuery query(MSqlQuery::InitCon());
+ //Create temp table, copy in settings from host_template, update hostname for new host,copy temp_table to settings.
+ QStringList tablelist ;
+ QStringList::Iterator it;
+ QString current_table ;
+ tablelist.append ("settings");
+ tablelist.append ("keybindings");
+ QString templatename;
+ QString temptable;
+ for ( it = tablelist.begin(); it != tablelist.end(); ++it )
+ {
+ current_table = *it ;
+ cout << current_table << endl;
+ //find template table to use
+ if ( templatenumber == "Current" )
+ templatename = current_table ;
+ else
+ templatename = current_table + "_" + templatenumber ;
+
+ temptable="temp_table_" + current_table + "_" + gContext->GetHostName() ;
+ // create temp table for merging settings
+
+ create_temp_table(temptable, current_table );
+ cout << temptable + " " + current_table << endl;
+
+ // copy current settings from this host into temptable minus all Mythvantage settings
+ if ( current_table == "settings")
+ {
+ query.prepare( "replace into " + temptable + " (select * from " + current_table + " where hostname=:HOSTNAME and value not like 'HOST%' ) ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ }
+ else
+ query.prepare( "replace into " + temptable + " (select * from " + current_table + " where hostname=:HOSTNAME ) ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // update hostname to match whatever the hostname of the template is
+ query.prepare ("update " + temptable + " set hostname=:HOSTNAME ; " );
+ query.bindValue( ":HOSTNAME" , copyhost );
+ query.exec();
+
+ // copy current settings from copy host into temptable minus all Mythvantage settings
+ if ( current_table == "settings")
+ query.prepare( "replace into " + temptable + " (select * from " + templatename + " where hostname=:HOSTNAME and value not like 'HOST%' ) ; " );
+
+ else
+ query.prepare( "replace into " + temptable + " (select * from " + templatename + " where hostname=:HOSTNAME ) ; " );
+
+ query.bindValue( ":HOSTNAME" , copyhost );
+ query.exec();
+
+ //update hostname
+ query.prepare ("update " + temptable + " set hostname=:HOSTNAME ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // delete old settings from settings table
+ if ( current_table == "settings")
+ {
+ query.prepare( "delete from " + current_table + " where hostname=:HOSTNAME and value not like 'HOST%' ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ }
+ else
+ {
+ query.prepare( "delete from " + current_table + " where hostname=:HOSTNAME ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ }
+ query.exec();
+
+ // copy settings from temptable to settings
+ if ( current_table == "settings")
+ query.prepare( "replace into " + current_table + " (select * from " + temptable + " where value not like 'HOST% ' ) ;" );
+ else
+ query.prepare( "replace into " + current_table + " (select * from " + temptable + " );" );
+
+
+ query.exec();
+
+ // drop temptable
+ // drop_temp_table(temptable);
+
+
+restart_frontend();
+};
+
+
+};
+
+
+
+
+ static HostComboBox *HOSTtemplatetype()
+{
+ HostComboBox *gc = new HostComboBox("HOSTtemplatetype");
+ gc->setLabel(QObject::tr("Template options"));
+ gc->addSelection("Do Nothing") ;
+ gc->addSelection("restore");
+ gc->addSelection("save") ;
+ gc->addSelection("copy_from");
+
+ gc->setHelpText(QObject::tr("Select the name to save, this will make a copy of your keybindings and videoplayback. Choose none if you do not wish to change anything."));
+
+ return gc;
+}
+
+ static HostComboBox *HostTemplateSave()
+{
+ HostComboBox *gc = new HostComboBox("HostTemplateSave");
+ gc->setLabel(QObject::tr("Save Template"));
+ // gc->addSelection("none");
+ gc->addSelection("user1") ;
+ gc->addSelection("user2") ;
+ gc->addSelection("user3") ;
+ gc->setHelpText(QObject::tr("Select the name to save, this will make a copy of your keybindings and videoplayback. Choose none if you do not wish to change anything."));
+
+ return gc;
+}
+ static HostComboBox *HostTemplateCopy_restore()
+{
+ HostComboBox *gc = new HostComboBox("HostTemplateRestore");
+ gc->setLabel(QObject::tr("Template"));
+ // gc->addSelection("none");
+ gc->addSelection("Current");
+ gc->addSelection("user1") ;
+ gc->addSelection("user2") ;
+ gc->addSelection("user3") ;
+ gc->setHelpText(QObject::tr("Select the template you wish to restore. This will change the way Myth repsonds to you remote buttons. Choose none if you do not wish to change anything."));
+
+ return gc;
+}
+
+ static HostComboBox *HostTemplateRestore()
+{
+ HostComboBox *gc = new HostComboBox("HostTemplateRestore");
+ gc->setLabel(QObject::tr("Template"));
+ // gc->addSelection("none");
+ gc->addSelection("default_1");
+ gc->addSelection("default_2");
+ gc->addSelection("user1") ;
+ gc->addSelection("user2") ;
+ gc->addSelection("user3") ;
+ gc->setHelpText(QObject::tr("Select the template you wish to restore. This will change the way Myth repsonds to you remote buttons. Choose none if you do not wish to change anything."));
+
+ return gc;
+}
+
+ static HostComboBox *HostSelectcopy_from()
+{
+ HostComboBox *gc = new HostComboBox("HostSelectcopy_from");
+ gc->setLabel(QObject::tr("Host"));
+ // gc->addSelection("none");
+
+ QString tempItem;
+
+ MSqlQuery query(MSqlQuery::InitCon());
+
+ query.prepare( "SELECT DISTINCT hostname from settings where hostname is not null;");
+
+ if (query.exec() && query.isActive() && query.size() > 0)
+ {
+ while (query.next())
+ {
+ tempItem = query.value(0).toString();
+ gc->addSelection(tempItem);
+
+ }
+ }
+ gc->setHelpText(QObject::tr("Select the Host you wish to copy settings from."));
+
+ return gc;
+}
+
+class TemplateSettings:
+ public TriggeredConfigurationGroup {
+public:
+ TemplateSettings():
+ //ConfigurationGroup(false, true, false, false),
+ //VerticalConfigurationGroup(false, true, false, false),
+ TriggeredConfigurationGroup(true) {
+ setLabel(QObject::tr("Manage templates"));
+// setUseLabel(false);
+
+ Setting* Mtemplate = HOSTtemplatetype();
+ addChild(Mtemplate);
+ setTrigger(Mtemplate);
+
+
+ ConfigurationGroup* trestore = new VerticalConfigurationGroup(false);
+ trestore->addChild(HostTemplateRestore());
+
+ ConfigurationGroup* tsave = new VerticalConfigurationGroup(false);
+ tsave->addChild(HostTemplateSave());
+
+ ConfigurationGroup* tcopy = new VerticalConfigurationGroup(false);
+ tcopy->addChild(HostSelectcopy_from());
+ tcopy->addChild(HostTemplateCopy_restore());
+
+
+ addTarget("Do Nothing", new VerticalConfigurationGroup(true));
+ addTarget("restore", trestore);
+ addTarget("save", tsave);
+ addTarget("copy_from", tcopy);
+
+ };
+};
+
+MythCtemplate::MythCtemplate()
+{
+
+ TemplateSettings *templatesettings = new TemplateSettings();
+ addChild(templatesettings);
+
+}
+
+
+
diff --git a/abs/core/mythinstall/settemplate.h b/abs/core/mythinstall/settemplate.h
new file mode 100755
index 0000000..a730cf5
--- /dev/null
+++ b/abs/core/mythinstall/settemplate.h
@@ -0,0 +1,13 @@
+#include <settings.h>
+#include "mythdialogs.h"
+
+class MythCtemplate: public ConfigurationWizard {
+public:
+ MythCtemplate();
+
+};
+
+void choosetemplate(QString,QString,QString);
+void savesettings(QString);
+void restoresettings(QString);
+void c_from(QString , QString="current" );
diff --git a/abs/core/mythinstall/statusbox.cpp b/abs/core/mythinstall/statusbox.cpp
new file mode 100755
index 0000000..fd8a6cd
--- /dev/null
+++ b/abs/core/mythinstall/statusbox.cpp
@@ -0,0 +1,1411 @@
+#include <qlayout.h>
+#include <qiconview.h>
+#include <qsqldatabase.h>
+#include <qwidgetstack.h>
+#include <qvbox.h>
+#include <qgrid.h>
+#include <qregexp.h>
+#include <qhostaddress.h>
+
+#include <unistd.h>
+
+#include <iostream>
+#include <cerrno>
+using namespace std;
+
+#include "config.h"
+#include "statusbox.h"
+#include "mythcontext.h"
+#include "remoteutil.h"
+#include "programinfo.h"
+#include "tv.h"
+#include "jobqueue.h"
+#include "util.h"
+#include "mythdbcon.h"
+#include "cardutil.h"
+
+#define REC_CAN_BE_DELETED(rec) \
+ ((((rec)->programflags & FL_INUSEPLAYING) == 0) && \
+ ((((rec)->programflags & FL_INUSERECORDING) == 0) || \
+ ((rec)->recgroup != "LiveTV")))
+
+
+/** \class StatusBox
+ * \brief Reports on various status items.
+ *
+ * StatusBox reports on the listing status, that is how far
+ * into the future program listings exits. It also reports
+ * on the status of each tuner, the log entries, the status
+ * of the job queue, and the machine status.
+ */
+
+StatusBox::StatusBox(MythMainWindow *parent, const char *name)
+ : MythDialog(parent, name), errored(false)
+{
+ // Set this value to the number of items in icon_list
+ // to prevent scrolling off the bottom
+ int item_count = 0;
+ dateFormat = gContext->GetSetting("ShortDateFormat", "M/d");
+ timeFormat = gContext->GetSetting("TimeFormat", "h:mm AP");
+ timeDateFormat = timeFormat + " " + dateFormat;
+
+ setNoErase();
+ LoadTheme();
+ if (IsErrored())
+ return;
+
+ icon_list->SetItemText(item_count++, QObject::tr("Listings Status"));
+ icon_list->SetItemText(item_count++, QObject::tr("Tuner Status"));
+ icon_list->SetItemText(item_count++, QObject::tr("Log Entries"));
+ icon_list->SetItemText(item_count++, QObject::tr("Job Queue"));
+ icon_list->SetItemText(item_count++, QObject::tr("Machine Status"));
+ icon_list->SetItemText(item_count++, QObject::tr("AutoExpire List"));
+ icon_list->SetItemCurrent(0);
+ icon_list->SetActive(true);
+
+ QStringList strlist;
+ strlist << "QUERY_IS_ACTIVE_BACKEND";
+ strlist << gContext->GetHostName();
+
+ gContext->SendReceiveStringList(strlist);
+
+ if (QString(strlist[0]) == "FALSE")
+ isBackend = false;
+ else if (QString(strlist[0]) == "TRUE")
+ isBackend = true;
+ else
+ isBackend = false;
+
+ VERBOSE(VB_NETWORK, QString("QUERY_IS_ACTIVE_BACKEND=%1").arg(strlist[0]));
+
+ max_icons = item_count;
+ inContent = false;
+ contentPos = 0;
+ contentTotalLines = 0;
+ contentSize = 0;
+ contentMid = 0;
+ min_level = gContext->GetNumSetting("LogDefaultView",5);
+ my_parent = parent;
+ clicked();
+
+ gContext->addCurrentLocation("StatusBox");
+}
+
+StatusBox::~StatusBox(void)
+{
+ gContext->removeCurrentLocation();
+}
+
+void StatusBox::paintEvent(QPaintEvent *e)
+{
+ QRect r = e->rect();
+
+ if (r.intersects(TopRect))
+ updateTopBar();
+ if (r.intersects(SelectRect))
+ updateSelector();
+ if (r.intersects(ContentRect))
+ updateContent();
+}
+
+void StatusBox::updateContent()
+{
+ QRect pr = ContentRect;
+ QPixmap pix(pr.size());
+ pix.fill(this, pr.topLeft());
+ QPainter tmp(&pix);
+ QPainter p(this);
+
+ // Normalize the variables here and set the contentMid
+ contentSize = list_area->GetItems();
+ if (contentSize > contentTotalLines)
+ contentSize = contentTotalLines;
+ contentMid = contentSize / 2;
+
+ int startPos = 0;
+ int highlightPos = 0;
+
+ if (contentPos < contentMid)
+ {
+ startPos = 0;
+ highlightPos = contentPos;
+ }
+ else if (contentPos >= (contentTotalLines - contentMid))
+ {
+ startPos = contentTotalLines - contentSize;
+ highlightPos = contentSize - (contentTotalLines - contentPos);
+ }
+ else if (contentPos >= contentMid)
+ {
+ startPos = contentPos - contentMid;
+ highlightPos = contentMid;
+ }
+
+ if (content == NULL) return;
+ LayerSet *container = content;
+
+ list_area->ResetList();
+ for (int x = startPos; (x - startPos) <= contentSize; x++)
+ {
+ if (contentLines.contains(x))
+ {
+ list_area->SetItemText(x - startPos, contentLines[x]);
+ if (contentFont.contains(x))
+ list_area->EnableForcedFont(x - startPos, contentFont[x]);
+ }
+ }
+
+ list_area->SetItemCurrent(highlightPos);
+
+ if (inContent)
+ {
+ helptext->SetText(contentDetail[contentPos]);
+ update(TopRect);
+ }
+
+ list_area->SetUpArrow((startPos > 0) && (contentSize < contentTotalLines));
+ list_area->SetDownArrow((startPos + contentSize) < contentTotalLines);
+
+ container->Draw(&tmp, 0, 0);
+ container->Draw(&tmp, 1, 0);
+ container->Draw(&tmp, 2, 0);
+ container->Draw(&tmp, 3, 0);
+ container->Draw(&tmp, 4, 0);
+ container->Draw(&tmp, 5, 0);
+ container->Draw(&tmp, 6, 0);
+ container->Draw(&tmp, 7, 0);
+ container->Draw(&tmp, 8, 0);
+ tmp.end();
+ p.drawPixmap(pr.topLeft(), pix);
+}
+
+void StatusBox::updateSelector()
+{
+ QRect pr = SelectRect;
+ QPixmap pix(pr.size());
+ pix.fill(this, pr.topLeft());
+ QPainter tmp(&pix);
+ QPainter p(this);
+
+ if (selector == NULL) return;
+ LayerSet *container = selector;
+
+ container->Draw(&tmp, 0, 0);
+ container->Draw(&tmp, 1, 0);
+ container->Draw(&tmp, 2, 0);
+ container->Draw(&tmp, 3, 0);
+ container->Draw(&tmp, 4, 0);
+ container->Draw(&tmp, 5, 0);
+ container->Draw(&tmp, 6, 0);
+ container->Draw(&tmp, 7, 0);
+ container->Draw(&tmp, 8, 0);
+ tmp.end();
+ p.drawPixmap(pr.topLeft(), pix);
+}
+
+void StatusBox::updateTopBar()
+{
+ QRect pr = TopRect;
+ QPixmap pix(pr.size());
+ pix.fill(this, pr.topLeft());
+ QPainter tmp(&pix);
+ QPainter p(this);
+
+ if (topbar == NULL) return;
+ LayerSet *container = topbar;
+
+ container->Draw(&tmp, 0, 0);
+ tmp.end();
+ p.drawPixmap(pr.topLeft(), pix);
+}
+
+void StatusBox::LoadTheme()
+{
+ int screenheight = 0, screenwidth = 0;
+ float wmult = 0, hmult = 0;
+
+ gContext->GetScreenSettings(screenwidth, wmult, screenheight, hmult);
+
+ theme = new XMLParse();
+ theme->SetWMult(wmult);
+ theme->SetHMult(hmult);
+ if (!theme->LoadTheme(xmldata, "status", "status-"))
+ {
+ VERBOSE(VB_IMPORTANT, "StatusBox: Unable to load theme.");
+ errored = true;
+ return;
+ }
+
+ for (QDomNode child = xmldata.firstChild(); !child.isNull();
+ child = child.nextSibling()) {
+
+ QDomElement e = child.toElement();
+ if (!e.isNull()) {
+ if (e.tagName() == "font") {
+ theme->parseFont(e);
+ }
+ else if (e.tagName() == "container") {
+ QRect area;
+ QString name;
+ int context;
+ theme->parseContainer(e, name, context, area);
+
+ if (name.lower() == "topbar")
+ TopRect = area;
+ if (name.lower() == "selector")
+ SelectRect = area;
+ if (name.lower() == "content")
+ ContentRect = area;
+ }
+ else {
+ QString msg =
+ QString(tr("The theme you are using contains an "
+ "unknown element ('%1'). It will be ignored"))
+ .arg(e.tagName());
+ VERBOSE(VB_IMPORTANT, msg);
+ errored = true;
+ }
+ }
+ }
+
+ selector = theme->GetSet("selector");
+ if (!selector)
+ {
+ VERBOSE(VB_IMPORTANT, "StatusBox: Failed to get selector container.");
+ errored = true;
+ }
+
+ icon_list = (UIListType*)selector->GetType("icon_list");
+ if (!icon_list)
+ {
+ VERBOSE(VB_IMPORTANT, "StatusBox: Failed to get icon list area.");
+ errored = true;
+ }
+
+ content = theme->GetSet("content");
+ if (!content)
+ {
+ VERBOSE(VB_IMPORTANT, "StatusBox: Failed to get content container.");
+ errored = true;
+ }
+
+ list_area = (UIListType*)content->GetType("list_area");
+ if (!list_area)
+ {
+ VERBOSE(VB_IMPORTANT, "StatusBox: Failed to get list area.");
+ errored = true;
+ }
+
+ topbar = theme->GetSet("topbar");
+ if (!topbar)
+ {
+ VERBOSE(VB_IMPORTANT, "StatusBox: Failed to get topbar container.");
+ errored = true;
+ }
+
+ heading = (UITextType*)topbar->GetType("heading");
+ if (!heading)
+ {
+ VERBOSE(VB_IMPORTANT, "StatusBox: Failed to get heading area.");
+ errored = true;
+ }
+
+ helptext = (UITextType*)topbar->GetType("helptext");
+ if (!helptext)
+ {
+ VERBOSE(VB_IMPORTANT, "StatusBox: Failed to get helptext area.");
+ errored = true;
+ }
+}
+
+void StatusBox::keyPressEvent(QKeyEvent *e)
+{
+ bool handled = false;
+ QStringList actions;
+ gContext->GetMainWindow()->TranslateKeyPress("Status", e, actions);
+
+ for (unsigned int i = 0; i < actions.size() && !handled; i++)
+ {
+ QString action = actions[i];
+ QString currentItem;
+ QRegExp logNumberKeys( "^[12345678]$" );
+
+ currentItem = icon_list->GetItemText(icon_list->GetCurrentItem());
+ handled = true;
+
+ if (action == "SELECT")
+ {
+ clicked();
+ }
+ else if (action == "MENU")
+ {
+ if ((inContent) &&
+ (currentItem == QObject::tr("Log Entries")))
+ {
+ int retval = MythPopupBox::show2ButtonPopup(my_parent,
+ QString("AckLogEntry"),
+ QObject::tr("Acknowledge all log entries at "
+ "this priority level or lower?"),
+ QObject::tr("Yes"), QObject::tr("No"), 0);
+ if (retval == 0)
+ {
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("UPDATE mythlog SET acknowledged = 1 "
+ "WHERE priority <= :PRIORITY ;");
+ query.bindValue(":PRIORITY", min_level);
+ query.exec();
+ doLogEntries();
+ }
+ }
+ else if ((inContent) &&
+ (currentItem == QObject::tr("Job Queue")))
+ {
+ clicked();
+ }
+ }
+ else if (action == "UP")
+ {
+ if (inContent)
+ {
+ if (contentPos > 0)
+ contentPos--;
+ update(ContentRect);
+ }
+ else
+ {
+ if (icon_list->GetCurrentItem() > 0)
+ icon_list->SetItemCurrent(icon_list->GetCurrentItem()-1);
+ clicked();
+ setHelpText();
+ update(SelectRect);
+ }
+
+ }
+ else if (action == "DOWN")
+ {
+ if (inContent)
+ {
+ if (contentPos < (contentTotalLines - 1))
+ contentPos++;
+ update(ContentRect);
+ }
+ else
+ {
+ if (icon_list->GetCurrentItem() < (max_icons - 1))
+ icon_list->SetItemCurrent(icon_list->GetCurrentItem()+1);
+ clicked();
+ setHelpText();
+ update(SelectRect);
+ }
+ }
+ else if (action == "PAGEUP" && inContent)
+ {
+ contentPos -= contentSize;
+ if (contentPos < 0)
+ contentPos = 0;
+ update(ContentRect);
+ }
+ else if (action == "PAGEDOWN" && inContent)
+ {
+ contentPos += contentSize;
+ if (contentPos > (contentTotalLines - 1))
+ contentPos = contentTotalLines - 1;
+ update(ContentRect);
+ }
+ else if ((action == "RIGHT") &&
+ (!inContent) &&
+ ((contentTotalLines > contentSize) ||
+ (doScroll)))
+ {
+ clicked();
+ inContent = true;
+ contentPos = 0;
+ icon_list->SetActive(false);
+ list_area->SetActive(true);
+ update(SelectRect);
+ update(ContentRect);
+ }
+ else if (action == "LEFT")
+ {
+ if (inContent)
+ {
+ inContent = false;
+ contentPos = 0;
+ list_area->SetActive(false);
+ icon_list->SetActive(true);
+ setHelpText();
+ update(SelectRect);
+ update(ContentRect);
+ }
+ else
+ {
+ if (gContext->GetNumSetting("UseArrowAccels", 1))
+ accept();
+ }
+ }
+ else if ((currentItem == QObject::tr("Log Entries")) &&
+ (logNumberKeys.search(action) == 0))
+ {
+ min_level = action.toInt();
+ helptext->SetText(QObject::tr("Setting priority level to %1")
+ .arg(min_level));
+ update(TopRect);
+ doLogEntries();
+ }
+ else
+ handled = false;
+ }
+
+ if (!handled)
+ MythDialog::keyPressEvent(e);
+}
+
+void StatusBox::setHelpText()
+{
+ if (inContent)
+ {
+ helptext->SetText(contentDetail[contentPos]);
+ } else {
+ topbar->ClearAllText();
+ QString currentItem;
+
+ currentItem = icon_list->GetItemText(icon_list->GetCurrentItem());
+
+ if (currentItem == QObject::tr("Listings Status"))
+ helptext->SetText(QObject::tr("Listings Status shows the latest "
+ "status information from "
+ "mythfilldatabase"));
+
+ if (currentItem == QObject::tr("Tuner Status"))
+ helptext->SetText(QObject::tr("Tuner Status shows the current "
+ "information about the state of "
+ "backend tuner cards"));
+
+ if (currentItem == QObject::tr("DVB Status"))
+ helptext->SetText(QObject::tr("DVB Status shows the quality "
+ "statistics of all DVB cards, if "
+ "present"));
+
+ if (currentItem == QObject::tr("Log Entries"))
+ helptext->SetText(QObject::tr("Log Entries shows any unread log "
+ "entries from the system if you "
+ "have logging enabled"));
+ if (currentItem == QObject::tr("Job Queue"))
+ helptext->SetText(QObject::tr("Job Queue shows any jobs currently "
+ "in Myth's Job Queue such as a "
+ "commercial flagging job."));
+ if (currentItem == QObject::tr("Machine Status"))
+ {
+ QString machineStr = QObject::tr("Machine Status shows "
+ "some operating system "
+ "statistics of this machine");
+ if (!isBackend)
+ machineStr.append(" " + QObject::tr("and the MythTV server"));
+
+ helptext->SetText(machineStr);
+ }
+
+ if (currentItem == QObject::tr("AutoExpire List"))
+ helptext->SetText(QObject::tr("The AutoExpire List shows all "
+ "recordings which may be expired and the order of their "
+ "expiration. Recordings at the top of the list will be "
+ "expired first."));
+ }
+ update(TopRect);
+}
+
+void StatusBox::clicked()
+{
+ QString currentItem = icon_list->GetItemText(icon_list->GetCurrentItem());
+
+ if (inContent)
+ {
+ if (currentItem == QObject::tr("Log Entries"))
+ {
+ int retval;
+
+ retval = MythPopupBox::show2ButtonPopup(my_parent,
+ QString("AckLogEntry"),
+ QObject::tr("Acknowledge this log entry?"),
+ QObject::tr("Yes"), QObject::tr("No"), 0);
+ if (retval == 0)
+ {
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("UPDATE mythlog SET acknowledged = 1 "
+ "WHERE logid = :LOGID ;");
+ query.bindValue(":LOGID", contentData[contentPos]);
+ query.exec();
+ doLogEntries();
+ }
+ }
+ else if (currentItem == QObject::tr("Job Queue"))
+ {
+ QStringList msgs;
+ int jobStatus;
+ int retval;
+
+ jobStatus = JobQueue::GetJobStatus(
+ contentData[contentPos].toInt());
+
+ if (jobStatus == JOB_QUEUED)
+ {
+ retval = MythPopupBox::show2ButtonPopup(my_parent,
+ QString("JobQueuePopup"),
+ QObject::tr("Delete Job?"),
+ QObject::tr("Yes"),
+ QObject::tr("No"), 1);
+ if (retval == 0)
+ {
+ JobQueue::DeleteJob(contentData[contentPos].toInt());
+ doJobQueueStatus();
+ }
+ }
+ else if ((jobStatus == JOB_PENDING) ||
+ (jobStatus == JOB_STARTING) ||
+ (jobStatus == JOB_RUNNING))
+ {
+ msgs << QObject::tr("Pause");
+ msgs << QObject::tr("Stop");
+ msgs << QObject::tr("No Change");
+ retval = MythPopupBox::showButtonPopup(my_parent,
+ QString("JobQueuePopup"),
+ QObject::tr("Job Queue Actions:"),
+ msgs, 2);
+ if (retval == 0)
+ {
+ JobQueue::PauseJob(contentData[contentPos].toInt());
+ doJobQueueStatus();
+ }
+ else if (retval == 1)
+ {
+ JobQueue::StopJob(contentData[contentPos].toInt());
+ doJobQueueStatus();
+ }
+ }
+ else if (jobStatus == JOB_PAUSED)
+ {
+ msgs << QObject::tr("Resume");
+ msgs << QObject::tr("Stop");
+ msgs << QObject::tr("No Change");
+ retval = MythPopupBox::showButtonPopup(my_parent,
+ QString("JobQueuePopup"),
+ QObject::tr("Job Queue Actions:"),
+ msgs, 2);
+ if (retval == 0)
+ {
+ JobQueue::ResumeJob(contentData[contentPos].toInt());
+ doJobQueueStatus();
+ }
+ else if (retval == 1)
+ {
+ JobQueue::StopJob(contentData[contentPos].toInt());
+ doJobQueueStatus();
+ }
+ }
+ else if (jobStatus & JOB_DONE)
+ {
+ retval = MythPopupBox::show2ButtonPopup(my_parent,
+ QString("JobQueuePopup"),
+ QObject::tr("Requeue Job?"),
+ QObject::tr("Yes"),
+ QObject::tr("No"), 1);
+ if (retval == 0)
+ {
+ JobQueue::ChangeJobStatus(contentData[contentPos].toInt(),
+ JOB_QUEUED);
+ doJobQueueStatus();
+ }
+ }
+ }
+ else if (currentItem == QObject::tr("AutoExpire List"))
+ {
+ ProgramInfo* rec;
+
+ rec = expList[contentPos];
+
+ if (rec)
+ {
+ QStringList msgs;
+ int retval;
+
+ msgs << QObject::tr("Delete Now");
+ msgs << QObject::tr("Disable AutoExpire");
+ msgs << QObject::tr("No Change");
+
+ retval = MythPopupBox::showButtonPopup(my_parent,
+ QString("AutoExpirePopup"),
+ QObject::tr("AutoExpire Actions:"),
+ msgs, 2);
+
+ if (retval == 0 && REC_CAN_BE_DELETED(rec))
+ {
+ RemoteDeleteRecording(rec, false, false);
+ }
+ else if (retval == 1)
+ {
+ rec->SetAutoExpire(0);
+ if ((rec)->recgroup == "LiveTV")
+ rec->ApplyRecordRecGroupChange("Default");
+ }
+
+ // Update list, prevent selected item going off bottom
+ doAutoExpireList();
+ if (contentPos >= (int)expList.size())
+ contentPos = max((int)expList.size()-1,0);
+ }
+ }
+ return;
+ }
+
+ // Clear all visible content elements here
+ // I'm sure there's a better way to do this but I can't find it
+ content->ClearAllText();
+ list_area->ResetList();
+ contentLines.clear();
+ contentDetail.clear();
+ contentFont.clear();
+ contentData.clear();
+
+ if (currentItem == QObject::tr("Listings Status"))
+ doListingsStatus();
+ else if (currentItem == QObject::tr("Tuner Status"))
+ doTunerStatus();
+ else if (currentItem == QObject::tr("Log Entries"))
+ doLogEntries();
+ else if (currentItem == QObject::tr("Job Queue"))
+ doJobQueueStatus();
+ else if (currentItem == QObject::tr("Machine Status"))
+ doMachineStatus();
+ else if (currentItem == QObject::tr("AutoExpire List"))
+ doAutoExpireList();
+}
+
+void StatusBox::doListingsStatus()
+{
+ QString mfdLastRunStart, mfdLastRunEnd, mfdLastRunStatus, mfdNextRunStart;
+ QString querytext, Status, DataDirectMessage;
+ int DaysOfData;
+ QDateTime qdtNow, GuideDataThrough;
+ int count = 0;
+
+ contentLines.clear();
+ contentDetail.clear();
+ contentFont.clear();
+ doScroll = false;
+
+ qdtNow = QDateTime::currentDateTime();
+
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("SELECT max(endtime) FROM program WHERE manualid=0;");
+ query.exec();
+
+ if (query.isActive() && query.size())
+ {
+ query.next();
+ GuideDataThrough = QDateTime::fromString(query.value(0).toString(),
+ Qt::ISODate);
+ }
+
+ mfdLastRunStart = gContext->GetSetting("mythfilldatabaseLastRunStart");
+ mfdLastRunEnd = gContext->GetSetting("mythfilldatabaseLastRunEnd");
+ mfdLastRunStatus = gContext->GetSetting("mythfilldatabaseLastRunStatus");
+ mfdNextRunStart = gContext->GetSetting("MythFillSuggestedRunTime");
+ DataDirectMessage = gContext->GetSetting("DataDirectMessage");
+
+ mfdNextRunStart.replace("T", " ");
+
+ extern const char *myth_source_version;
+ contentLines[count++] = QObject::tr("Myth version:") + " " +
+ MYTH_BINARY_VERSION + " " +
+ myth_source_version;
+ contentLines[count++] = QObject::tr("Last mythfilldatabase guide update:");
+ contentLines[count++] = QObject::tr("Started: ") + mfdLastRunStart;
+
+ if (mfdLastRunEnd >= mfdLastRunStart) //if end < start, it's still running.
+ contentLines[count++] = QObject::tr("Finished: ") + mfdLastRunEnd;
+
+ contentLines[count++] = QObject::tr("Result: ") + mfdLastRunStatus;
+
+
+ if (mfdNextRunStart >= mfdLastRunStart)
+ contentLines[count++] = QObject::tr("Suggested Next: ") +
+ mfdNextRunStart;
+
+ DaysOfData = qdtNow.daysTo(GuideDataThrough);
+
+ if (GuideDataThrough.isNull())
+ {
+ contentLines[count++] = "";
+ contentLines[count++] = QObject::tr("There's no guide data available!");
+ contentLines[count++] = QObject::tr("Have you run mythfilldatabase?");
+ }
+ else
+ {
+ contentLines[count++] = QObject::tr("There is guide data until ") +
+ QDateTime(GuideDataThrough)
+ .toString("yyyy-MM-dd hh:mm");
+
+ if (DaysOfData > 0)
+ {
+ Status = QString("(%1 ").arg(DaysOfData);
+ if (DaysOfData >1)
+ Status += QObject::tr("days");
+ else
+ Status += QObject::tr("day");
+ Status += ").";
+ contentLines[count++] = Status;
+ }
+ }
+
+ if (DaysOfData <= 3)
+ {
+ contentLines[count++] = QObject::tr("WARNING: is mythfilldatabase "
+ "running?");
+ }
+
+ if (!DataDirectMessage.isNull())
+ {
+ contentLines[count++] = QObject::tr("DataDirect Status: ");
+ contentLines[count++] = DataDirectMessage;
+ }
+
+ contentTotalLines = count;
+ update(ContentRect);
+}
+
+void StatusBox::doTunerStatus()
+{
+ doScroll = true;
+ contentLines.clear();
+ contentDetail.clear();
+ contentFont.clear();
+
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare(
+ "SELECT cardid, cardtype, videodevice "
+ "FROM capturecard WHERE parentid='0' ORDER BY cardid");
+
+ if (!query.exec() || !query.isActive())
+ {
+ MythContext::DBError("StatusBox::doTunerStatus()", query);
+ contentTotalLines = 0;
+ update(ContentRect);
+ return;
+ }
+
+ uint count = 0;
+ while (query.next())
+ {
+ int cardid = query.value(0).toInt();
+
+ QString cmd = QString("QUERY_REMOTEENCODER %1").arg(cardid);
+ QStringList strlist = cmd;
+ strlist << "GET_STATE";
+
+ gContext->SendReceiveStringList(strlist);
+ int state = strlist[0].toInt();
+
+ QString status = "";
+ if (state == kState_Error)
+ status = tr("is unavailable");
+ else if (state == kState_WatchingLiveTV)
+ status = tr("is watching live TV");
+ else if (state == kState_RecordingOnly ||
+ state == kState_WatchingRecording)
+ status = tr("is recording");
+ else
+ status = tr("is not recording");
+
+ QString tun = tr("Tuner %1 ").arg(cardid);
+ QString devlabel = CardUtil::GetDeviceLabel(
+ cardid, query.value(1).toString(), query.value(2).toString());
+
+ contentLines[count] = tun + status;
+ contentDetail[count] = tun + devlabel + " " + status;
+
+ if (state == kState_RecordingOnly ||
+ state == kState_WatchingRecording)
+ {
+ strlist = QString("QUERY_RECORDER %1").arg(cardid);
+ strlist << "GET_RECORDING";
+ gContext->SendReceiveStringList(strlist);
+ ProgramInfo *proginfo = new ProgramInfo;
+ proginfo->FromStringList(strlist, 0);
+
+ status += " " + proginfo->title;
+ status += "\n";
+ status += proginfo->subtitle;
+ contentDetail[count] = tun + devlabel + " " + status;
+ }
+ count++;
+ }
+ contentTotalLines = count;
+ update(ContentRect);
+}
+
+void StatusBox::doLogEntries(void)
+{
+ QString line;
+ int count = 0;
+
+ doScroll = true;
+
+ contentLines.clear();
+ contentDetail.clear();
+ contentFont.clear();
+ contentData.clear();
+
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("SELECT logid, module, priority, logdate, host, "
+ "message, details "
+ "FROM mythlog WHERE acknowledged = 0 "
+ "AND priority <= :PRIORITY ORDER BY logdate DESC;");
+ query.bindValue(":PRIORITY", min_level);
+ query.exec();
+
+ if (query.isActive())
+ {
+ while (query.next())
+ {
+ line = QString("%1").arg(query.value(5).toString());
+ contentLines[count] = line;
+
+ if (query.value(6).toString() != "")
+ line = tr("On %1 %2 from %3.%4\n%5\n%6")
+ .arg(query.value(3).toDateTime()
+ .toString(dateFormat))
+ .arg(query.value(3).toDateTime()
+ .toString(timeFormat))
+ .arg(query.value(4).toString())
+ .arg(query.value(1).toString())
+ .arg(query.value(5).toString())
+ .arg(QString::fromUtf8(query.value(6).toString()));
+ else
+ line = tr("On %1 %2 from %3.%4\n%5\nNo other details")
+ .arg(query.value(3).toDateTime()
+ .toString(dateFormat))
+ .arg(query.value(3).toDateTime()
+ .toString(timeFormat))
+ .arg(query.value(4).toString())
+ .arg(query.value(1).toString())
+ .arg(query.value(5).toString());
+ contentDetail[count] = line;
+ contentData[count++] = query.value(0).toString();
+ }
+ }
+
+ if (!count)
+ {
+ doScroll = false;
+ contentLines[count++] = QObject::tr("No items found at priority "
+ "level %1 or lower.")
+ .arg(min_level);
+ contentLines[count++] = QObject::tr("Use 1-8 to change priority "
+ "level.");
+ }
+
+ contentTotalLines = count;
+ if (contentPos > (contentTotalLines - 1))
+ contentPos = contentTotalLines - 1;
+
+ update(ContentRect);
+}
+
+void StatusBox::doJobQueueStatus()
+{
+ QMap<int, JobQueueEntry> jobs;
+ QMap<int, JobQueueEntry>::Iterator it;
+ int count = 0;
+
+ QString detail;
+
+ JobQueue::GetJobsInQueue(jobs,
+ JOB_LIST_NOT_DONE | JOB_LIST_ERROR |
+ JOB_LIST_RECENT);
+
+ doScroll = true;
+
+ contentLines.clear();
+ contentDetail.clear();
+ contentFont.clear();
+ contentData.clear();
+
+ if (jobs.size())
+ {
+ for (it = jobs.begin(); it != jobs.end(); ++it)
+ {
+ QString chanid = it.data().chanid;
+ QDateTime starttime = it.data().starttime;
+ ProgramInfo *pginfo;
+
+ pginfo = ProgramInfo::GetProgramFromRecorded(chanid, starttime);
+
+ if (!pginfo)
+ continue;
+
+ detail = pginfo->title + "\n" +
+ pginfo->channame + " " + pginfo->chanstr +
+ " @ " + starttime.toString(timeDateFormat) + "\n" +
+ tr("Job:") + " " + JobQueue::JobText(it.data().type) +
+ " " + tr("Status: ") +
+ JobQueue::StatusText(it.data().status);
+
+ if (it.data().status != JOB_QUEUED)
+ detail += " (" + it.data().hostname + ")";
+
+ detail += "\n" + it.data().comment;
+
+ contentLines[count] = pginfo->title + " @ " +
+ starttime.toString(timeDateFormat);
+
+ contentDetail[count] = detail;
+ contentData[count] = QString("%1").arg(it.data().id);
+
+ if (it.data().status == JOB_ERRORED)
+ contentFont[count] = "error";
+ else if (it.data().status == JOB_ABORTED)
+ contentFont[count] = "warning";
+
+ count++;
+
+ delete pginfo;
+ }
+ }
+ else
+ {
+ contentLines[count++] = QObject::tr("Job Queue is currently empty.");
+ doScroll = false;
+ }
+
+ contentTotalLines = count;
+ update(ContentRect);
+}
+
+// Some helper routines for doMachineStatus() that format the output strings
+
+/** \fn sm_str(long long, int)
+ * \brief Returns a short string describing an amount of space, choosing
+ * one of a number of useful units, "TB", "GB", "MB", or "KB".
+ * \param sizeKB Number of kilobytes.
+ * \param prec Precision to use if we have less than ten of whatever
+ * unit is chosen.
+ */
+static const QString sm_str(long long sizeKB, int prec=1)
+{
+ if (sizeKB>1024*1024*1024) // Terabytes
+ {
+ double sizeGB = sizeKB/(1024*1024*1024.0);
+ return QString("%1 TB").arg(sizeGB, 0, 'f', (sizeGB>10)?0:prec);
+ }
+ else if (sizeKB>1024*1024) // Gigabytes
+ {
+ double sizeGB = sizeKB/(1024*1024.0);
+ return QString("%1 GB").arg(sizeGB, 0, 'f', (sizeGB>10)?0:prec);
+ }
+ else if (sizeKB>1024) // Megabytes
+ {
+ double sizeMB = sizeKB/1024.0;
+ return QString("%1 MB").arg(sizeMB, 0, 'f', (sizeMB>10)?0:prec);
+ }
+ // Kilobytes
+ return QString("%1 KB").arg(sizeKB);
+}
+
+static const QString usage_str_kb(long long total,
+ long long used,
+ long long free)
+{
+ QString ret = QObject::tr("Unknown");
+ if (total > 0.0 && free > 0.0)
+ {
+ double percent = (100.0*free)/total;
+ ret = QObject::tr("%1 total, %2 used, %3 (or %4%) free.")
+ .arg(sm_str(total)).arg(sm_str(used))
+ .arg(sm_str(free)).arg(percent, 0, 'f', (percent >= 10.0) ? 0 : 2);
+ }
+ return ret;
+}
+
+static const QString usage_str_mb(float total, float used, float free)
+{
+ return usage_str_kb((long long)(total*1024), (long long)(used*1024),
+ (long long)(free*1024));
+}
+
+static void disk_usage_with_rec_time_kb(QStringList& out, long long total,
+ long long used, long long free,
+ const recprof2bps_t& prof2bps)
+{
+ const QString tail = QObject::tr(", using your %1 rate of %2 Kb/sec");
+
+ out<<usage_str_kb(total, used, free);
+ if (free<0)
+ return;
+
+ recprof2bps_t::const_iterator it = prof2bps.begin();
+ for (; it != prof2bps.end(); ++it)
+ {
+ const QString pro =
+ tail.arg(it.key()).arg((int)((float)it.data() / 1024.0));
+
+ long long bytesPerMin = (it.data() >> 1) * 15;
+ uint minLeft = ((free<<5)/bytesPerMin)<<5;
+ minLeft = (minLeft/15)*15;
+ uint hoursLeft = minLeft/60;
+ if (hoursLeft > 3)
+ out<<QObject::tr("%1 hours left").arg(hoursLeft) + pro;
+ else if (minLeft > 90)
+ out<<QObject::tr("%1 hours and %2 minutes left")
+ .arg(hoursLeft).arg(minLeft%60) + pro;
+ else
+ out<<QObject::tr("%1 minutes left").arg(minLeft) + pro;
+ }
+}
+
+static const QString uptimeStr(time_t uptime)
+{
+ int days, hours, min, secs;
+ QString str;
+
+ str = QString(" " + QObject::tr("Uptime") + ": ");
+
+ if (uptime == 0)
+ return str + "unknown";
+
+ days = uptime/(60*60*24);
+ uptime -= days*60*60*24;
+ hours = uptime/(60*60);
+ uptime -= hours*60*60;
+ min = uptime/60;
+ secs = uptime%60;
+
+ if (days > 0)
+ {
+ char buff[6];
+ QString dayLabel;
+
+ if (days == 1)
+ dayLabel = QObject::tr("day");
+ else
+ dayLabel = QObject::tr("days");
+
+ sprintf(buff, "%d:%02d", hours, min);
+
+ return str + QString("%1 %2, %3").arg(days).arg(dayLabel).arg(buff);
+ }
+ else
+ {
+ char buff[9];
+
+ sprintf(buff, "%d:%02d:%02d", hours, min, secs);
+
+ return str + buff;
+ }
+}
+
+/** \fn StatusBox::getActualRecordedBPS(QString hostnames)
+ * \brief Fills in recordingProfilesBPS w/ average bitrate from recorded table
+ */
+void StatusBox::getActualRecordedBPS(QString hostnames)
+{
+ recordingProfilesBPS.clear();
+
+ QString querystr;
+ MSqlQuery query(MSqlQuery::InitCon());
+
+ querystr =
+ "SELECT sum(filesize) * 8 / "
+ "sum(((unix_timestamp(endtime) - unix_timestamp(starttime)))) "
+ "AS avg_bitrate "
+ "FROM recorded WHERE hostname in (%1) "
+ "AND (unix_timestamp(endtime) - unix_timestamp(starttime)) > 300;";
+
+ query.prepare(querystr.arg(hostnames));
+
+ if (query.exec() && query.isActive() && query.size() > 0 && query.next() &&
+ query.value(0).toDouble() > 0)
+ {
+ recordingProfilesBPS[QObject::tr("average")] =
+ (int)(query.value(0).toDouble());
+ }
+
+ querystr =
+ "SELECT max(filesize * 8 / "
+ "(unix_timestamp(endtime) - unix_timestamp(starttime))) "
+ "AS max_bitrate "
+ "FROM recorded WHERE hostname in (%1) "
+ "AND (unix_timestamp(endtime) - unix_timestamp(starttime)) > 300;";
+
+ query.prepare(querystr.arg(hostnames));
+
+ if (query.exec() && query.isActive() && query.size() > 0 && query.next() &&
+ query.value(0).toDouble() > 0)
+ {
+ recordingProfilesBPS[QObject::tr("maximum")] =
+ (int)(query.value(0).toDouble());
+ }
+}
+
+/** \fn StatusBox::doMachineStatus()
+ * \brief Show machine status.
+ *
+ * This returns statisics for master backend when using
+ * a frontend only machine. And returns info on the current
+ * system if frontend is running on a backend machine.
+ * \bug We should report on all backends and the current frontend.
+ */
+void StatusBox::doMachineStatus()
+{
+ int count(0);
+ int totalM, usedM, freeM; // Physical memory
+ int totalS, usedS, freeS; // Virtual memory (swap)
+ time_t uptime;
+ int detailBegin;
+ QString detailString;
+ int detailLoop;
+
+ contentLines.clear();
+ contentDetail.clear();
+ contentFont.clear();
+ doScroll = true;
+
+ detailBegin = count;
+ detailString = "";
+
+ if (isBackend)
+ contentLines[count] = QObject::tr("System") + ":";
+ else
+ contentLines[count] = QObject::tr("This machine") + ":";
+ detailString += contentLines[count] + "\n";
+ count++;
+
+ // uptime
+ if (!getUptime(uptime))
+ uptime = 0;
+ contentLines[count] = uptimeStr(uptime);
+
+ // weighted average loads
+ contentLines[count].append(". " + QObject::tr("Load") + ": ");
+
+ double loads[3];
+ if (getloadavg(loads,3) == -1)
+ contentLines[count].append(QObject::tr("unknown") +
+ " - getloadavg() " + QObject::tr("failed"));
+ else
+ {
+ char buff[30];
+
+ sprintf(buff, "%0.2lf, %0.2lf, %0.2lf", loads[0], loads[1], loads[2]);
+ contentLines[count].append(QString(buff));
+ }
+ detailString += contentLines[count] + "\n";
+ count++;
+
+
+ // memory usage
+ if (getMemStats(totalM, freeM, totalS, freeS))
+ {
+ usedM = totalM - freeM;
+ if (totalM > 0)
+ {
+ contentLines[count] = " " + QObject::tr("RAM") +
+ ": " + usage_str_mb(totalM, usedM, freeM);
+ detailString += contentLines[count] + "\n";
+ count++;
+ }
+ usedS = totalS - freeS;
+ if (totalS > 0)
+ {
+ contentLines[count] = " " + QObject::tr("Swap") +
+ ": " + usage_str_mb(totalS, usedS, freeS);
+ detailString += contentLines[count] + "\n";
+ count++;
+ }
+ }
+
+ for (detailLoop = detailBegin; detailLoop < count; detailLoop++)
+ contentDetail[detailLoop] = detailString;
+
+ detailBegin = count;
+ detailString = "";
+
+ if (!isBackend)
+ {
+ contentLines[count] = QObject::tr("MythTV server") + ":";
+ detailString += contentLines[count] + "\n";
+ count++;
+
+ // uptime
+ if (!RemoteGetUptime(uptime))
+ uptime = 0;
+ contentLines[count] = uptimeStr(uptime);
+
+ // weighted average loads
+ contentLines[count].append(". " + QObject::tr("Load") + ": ");
+ float loads[3];
+ if (RemoteGetLoad(loads))
+ {
+ char buff[30];
+
+ sprintf(buff, "%0.2f, %0.2f, %0.2f", loads[0], loads[1], loads[2]);
+ contentLines[count].append(QString(buff));
+ }
+ else
+ contentLines[count].append(QObject::tr("unknown"));
+
+ detailString += contentLines[count] + "\n";
+ count++;
+
+ // memory usage
+ if (RemoteGetMemStats(totalM, freeM, totalS, freeS))
+ {
+ usedM = totalM - freeM;
+ if (totalM > 0)
+ {
+ contentLines[count] = " " + QObject::tr("RAM") +
+ ": " + usage_str_mb(totalM, usedM, freeM);
+ detailString += contentLines[count] + "\n";
+ count++;
+ }
+
+ usedS = totalS - freeS;
+ if (totalS > 0)
+ {
+ contentLines[count] = " " + QObject::tr("Swap") +
+ ": " + usage_str_mb(totalS, usedS, freeS);
+ detailString += contentLines[count] + "\n";
+ count++;
+ }
+ }
+ }
+
+ for (detailLoop = detailBegin; detailLoop < count; detailLoop++)
+ contentDetail[detailLoop] = detailString;
+
+ detailBegin = count;
+ detailString = "";
+
+ // get free disk space
+ QString hostnames;
+
+ vector<FileSystemInfo> fsInfos = RemoteGetFreeSpace();
+ for (uint i=0; i<fsInfos.size(); i++)
+ {
+ hostnames = QString("\"%1\"").arg(fsInfos[i].hostname);
+ hostnames.replace(QRegExp(" "), "");
+ hostnames.replace(QRegExp(","), "\",\"");
+
+ getActualRecordedBPS(hostnames);
+
+ QStringList list;
+ disk_usage_with_rec_time_kb(list,
+ fsInfos[i].totalSpaceKB, fsInfos[i].usedSpaceKB,
+ fsInfos[i].totalSpaceKB - fsInfos[i].usedSpaceKB,
+ recordingProfilesBPS);
+
+ contentLines[count] =
+ QObject::tr("Disk usage on %1:").arg(fsInfos[i].hostname);
+ detailString += contentLines[count] + "\n";
+ count++;
+
+ QStringList::iterator it = list.begin();
+ for (;it != list.end(); ++it)
+ {
+ contentLines[count] = QString(" ") + (*it);
+ detailString += contentLines[count] + "\n";
+ count++;
+ }
+
+ for (detailLoop = detailBegin; detailLoop < count; detailLoop++)
+ contentDetail[detailLoop] = detailString;
+
+ detailBegin = count;
+ detailString = "";
+ }
+
+ contentTotalLines = count;
+ update(ContentRect);
+}
+
+/** \fn StatusBox::doAutoExpireList()
+ * \brief Show list of recordings which may AutoExpire
+ */
+void StatusBox::doAutoExpireList()
+{
+ int count(0);
+ ProgramInfo* pginfo;
+ QString contentLine;
+ QString detailInfo;
+ QString staticInfo;
+ long long totalSize(0);
+ long long liveTVSize(0);
+ int liveTVCount(0);
+
+ contentLines.clear();
+ contentDetail.clear();
+ contentFont.clear();
+ doScroll = true;
+
+ vector<ProgramInfo *>::iterator it;
+ for (it = expList.begin(); it != expList.end(); it++)
+ delete *it;
+ expList.clear();
+
+ RemoteGetAllExpiringRecordings(expList);
+
+ for (it = expList.begin(); it != expList.end(); it++)
+ {
+ pginfo = *it;
+
+ totalSize += pginfo->filesize;
+ if (pginfo->recgroup == "LiveTV")
+ {
+ liveTVSize += pginfo->filesize;
+ liveTVCount++;
+ }
+ }
+
+ staticInfo = tr("%1 recordings consuming %2 are allowed to expire")
+ .arg(expList.size()).arg(sm_str(totalSize / 1024)) + "\n";
+
+ if (liveTVCount)
+ staticInfo += tr("%1 of these are LiveTV and consume %2")
+ .arg(liveTVCount).arg(sm_str(liveTVSize / 1024)) + "\n";
+ else
+ staticInfo += "\n";
+
+ for (it = expList.begin(); it != expList.end(); it++)
+ {
+ pginfo = *it;
+ contentLine = pginfo->recstartts.toString(dateFormat) + " - ";
+
+ if (pginfo->recgroup == "LiveTV")
+ contentLine += "(" + tr("LiveTV") + ") ";
+
+ contentLine += pginfo->title +
+ " (" + sm_str(pginfo->filesize / 1024) + ")";
+
+ detailInfo = staticInfo;
+ detailInfo += pginfo->recstartts.toString(timeDateFormat) + " - " +
+ pginfo->recendts.toString(timeDateFormat);
+
+ detailInfo += " (" + sm_str(pginfo->filesize / 1024) + ")";
+
+ if (pginfo->recgroup == "LiveTV")
+ detailInfo += " (" + tr("LiveTV") + ")";
+
+ detailInfo += "\n" + pginfo->title;
+
+ if (pginfo->subtitle != "")
+ detailInfo += " - " + pginfo->subtitle + "";
+
+ contentLines[count] = contentLine;
+ contentDetail[count] = detailInfo;
+ count++;
+ }
+
+ contentTotalLines = count;
+ update(ContentRect);
+}
+
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
diff --git a/abs/core/mythinstall/statusbox.h b/abs/core/mythinstall/statusbox.h
new file mode 100755
index 0000000..dd209ca
--- /dev/null
+++ b/abs/core/mythinstall/statusbox.h
@@ -0,0 +1,76 @@
+#ifndef STATUSBOX_H_
+#define STATUSBOX_H_
+
+#include <qstringlist.h>
+#include "mythwidgets.h"
+#include "mythdialogs.h"
+#include "uitypes.h"
+#include "xmlparse.h"
+#include "programinfo.h"
+
+typedef QMap<QString, unsigned int> recprof2bps_t;
+
+class LayerSet;
+
+class StatusBox : public MythDialog
+{
+ Q_OBJECT
+ public:
+ StatusBox(MythMainWindow *parent, const char *name = 0);
+ ~StatusBox(void);
+
+ bool IsErrored() const { return errored; }
+
+ protected slots:
+
+ protected:
+ void keyPressEvent(QKeyEvent *e);
+ void paintEvent(QPaintEvent *e);
+
+ private:
+ void updateTopBar();
+ void updateSelector();
+ void updateContent();
+ void LoadTheme();
+ void doListingsStatus();
+ void doTunerStatus();
+ void doLogEntries();
+ void doJobQueueStatus();
+ void doMachineStatus();
+ void doAutoExpireList();
+ void clicked();
+ void setHelpText();
+ void getActualRecordedBPS(QString hostnames);
+
+ XMLParse *theme;
+ QDomElement xmldata;
+ QRect TopRect, SelectRect, ContentRect;
+ UITextType *heading, *helptext;
+ UIListType *icon_list, *list_area;
+ LayerSet *selector, *topbar, *content;
+
+ int max_icons;
+
+ bool inContent, doScroll;
+ int contentTotalLines;
+ int contentSize;
+ int contentPos;
+ int contentMid;
+ int min_level;
+ QString dateFormat, timeFormat, timeDateFormat;
+
+ QMap<int, QString> contentLines;
+ QMap<int, QString> contentDetail;
+ QMap<int, QString> contentFont;
+ QMap<int, QString> contentData;
+ recprof2bps_t recordingProfilesBPS;
+
+ vector<ProgramInfo *> expList;
+
+ MythMainWindow *my_parent;
+
+ bool isBackend;
+ bool errored;
+};
+
+#endif
diff --git a/abs/core/mythinstall/xorgsettings.cpp b/abs/core/mythinstall/xorgsettings.cpp
new file mode 100755
index 0000000..02fa3ce
--- /dev/null
+++ b/abs/core/mythinstall/xorgsettings.cpp
@@ -0,0 +1,686 @@
+
+
+//_include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include "settings.h"
+
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <stdexcept>
+#include <vector>
+#include <cassert>
+#include <algorithm>
+#include <tr1/unordered_map>
+
+
+#include <sys/wait.h> // For WIFEXITED on Mac OS X
+#include <qapplication.h>
+#include "mythcontext.h"
+#include "libmyth/mythdialogs.h"
+#include "mythdbcon.h"
+#include "lcddevice.h"
+#include "tv.h"
+#include "programinfo.h"
+#include "uitypes.h"
+#include "remoteutil.h"
+#include <qdir.h>
+#include <qimage.h>
+#include <stdlib.h>
+#include <cstdlib>
+
+#include "installsettings.h"
+#include "installdialog.h"
+#include "xorgsettings.h"
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+#include "installsettings.h"
+extern HostParms hostparm;
+extern DDCinfo ddcinfo;
+// __________________All the Xorg settings______________
+void ReadDDCvalues (void)
+{
+ QString line;
+ QString currentitem;
+ system ("/usr/sbin/ddcprobe > /tmp/ddcinfo");
+ QFile file("/tmp/ddcinfo");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.contains("Timing ranges:") )
+ {
+ currentitem = line.section( "=", 1,1 );
+ ddcinfo.XVrefresh = line.section( "=", 2,2 );
+ ddcinfo.XHsync = currentitem.section( "," , 0,0 );
+ }
+ else if ( line.contains (" Dimensions") )
+ {
+ ddcinfo.Displaysize= line.section( ":", 1,1 );
+ };
+ }
+ file.close();
+ }
+};
+
+static HostCheckBox *HostXUseAdvanced()
+{
+ HostCheckBox *gc = new HostCheckBox("HostXUseAdvanced");
+ gc->setLabel(QObject::tr("Advanced xorg configuration"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Displays more settings for Xorg"));
+ return gc;
+};
+
+static HostComboBox *HostXgeneric_connection()
+{
+ HostComboBox *gc = new HostComboBox("HostXgenericConnection",false);
+ gc->setLabel(QObject::tr("Connection"));
+ gc->addSelection("VGA");
+ gc->addSelection("DVI");
+ gc->addSelection("TV");
+ gc->addSelection("AUTO");
+ gc->setHelpText(QObject::tr("Video-out"));
+ return gc;
+}
+
+
+static HostCheckBox *HostXIgnoreEDID()
+{
+ HostCheckBox *gc = new HostCheckBox("HostXIgnoreEDID");
+ gc->setLabel(QObject::tr("Ignore data provided by monitor"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr(""));
+ return gc;
+};
+
+
+static HostSpinBox *HostXHsyncLow()
+{
+ HostSpinBox *gc = new HostSpinBox("HostXHsyncLow", 1, 200, 1, true);
+ gc->setLabel(QObject::tr("Hsync"));
+ gc->setValue(6);
+ gc->setHelpText(QObject::tr("" ));
+ return gc;
+}
+static HostSpinBox *HostXHsyncHigh()
+{
+ HostSpinBox *gc = new HostSpinBox("HostXHsyncHigh", 1, 200, 1, true);
+ gc->setLabel(QObject::tr(""));
+ gc->setValue(6);
+ gc->setHelpText(QObject::tr("" ));
+ return gc;
+}
+
+static HostSpinBox *HostXVrefreshLow()
+{
+ HostSpinBox *gc = new HostSpinBox("HostXVrefreshLow", 1, 200, 1, true);
+ gc->setLabel(QObject::tr("Vrefresh"));
+ gc->setValue(6);
+ gc->setHelpText(QObject::tr("" ));
+ return gc;
+}
+static HostSpinBox *HostXVrefreshHigh()
+{
+ HostSpinBox *gc = new HostSpinBox("HostXVrefreshHigh", 1, 200, 1, true);
+ gc->setLabel(QObject::tr(""));
+ gc->setValue(6);
+ gc->setHelpText(QObject::tr("" ));
+ return gc;
+}
+
+static HostComboBox *HostXDisplaysize()
+{
+ HostComboBox *gc = new HostComboBox("HostXdisplaysize",true);
+ gc->setLabel(QObject::tr("Display size"));
+ gc->setHelpText(QObject::tr("Format should be two numbers 320 250" ));
+ gc->addSelection("487 274 _ 1920x1080 at 100dpi (16:9)");
+ gc->addSelection("325 182 _ 1280x720 at 100dpi (16:9)");
+ gc->addSelection("325 243 _ 1280x960 at 100dpi (4:3)");
+ gc->addSelection("260 195 _ 1024x768 at 100dpi (4:3)");
+ gc->addSelection("203 153 _ 800x600 at 100dpi (4:3)");
+ gc->addSelection("162 121 _ 640x480 at 100dpi (4:3)");
+ gc->addSelection("Custom");
+ return gc;
+}
+
+class EDIDprobedinfo : public TransLabelSetting
+{
+public:
+ EDIDprobedinfo()
+ {
+ QString currentitem = "Reported info \n";
+ currentitem.append("Hsync: ");
+ currentitem.append (ddcinfo.XHsync);
+ currentitem.append (" Vrefresh: ");
+ currentitem.append(ddcinfo.XVrefresh );
+ currentitem.append (" Displaysize: ");
+ currentitem.append(ddcinfo.Displaysize);
+ setLabel(currentitem);
+ };
+};
+
+
+void AdvancedXGeneric_modelines::generic_fillselection(QString modelinefile )
+{
+ if ( hostparm.displayshowadvancedX )
+ {
+ QString currentitem;
+ QString cfiletxt;
+ cfiletxt=MV_ROOT;
+ cfiletxt.append("templates/xorg/modeline." );
+ QString currentfile = cfiletxt;
+ currentfile.append(modelinefile);
+ QString line;
+ QRegExp sep( "\"" );
+ QFile file(currentfile);
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.startsWith("ModeLine"))
+ {
+ currentitem = line.section( sep , 1,1 );
+ if ( modelinefile == "VESA")
+ HostXadvancedresVESA->addSelection(currentitem);
+ else if ( modelinefile == "ATSC")
+ HostXadvancedresATSC->addSelection(currentitem);
+ else if ( modelinefile == "DVD")
+ HostXadvancedresDVD->addSelection(currentitem);
+ else if ( modelinefile == "NTSC")
+ HostXadvancedresNTSC->addSelection(currentitem);
+ else if ( modelinefile == "Custom")
+ HostXadvancedresCustom->addSelection(currentitem);
+ }
+ }
+ file.close();
+ }
+ }
+return ;
+
+}
+
+
+class UseEDID: public TriggeredConfigurationGroup {
+public:
+ UseEDID():
+ TriggeredConfigurationGroup(true,false,true,true,false,false,false,true) {
+ Setting* useedid = HostXIgnoreEDID();
+ addChild(useedid);
+ setTrigger(useedid);
+
+ ConfigurationGroup* XSYNC = new GridConfigurationGroup(2,false);
+ XSYNC->addChild(HostXHsyncLow());
+ XSYNC->addChild(HostXHsyncHigh());
+
+ ConfigurationGroup* XVREFRESH = new GridConfigurationGroup(2,false);
+ XVREFRESH->addChild(HostXVrefreshLow());
+ XVREFRESH->addChild(HostXVrefreshHigh());
+
+
+ ConfigurationGroup* settings = new GridConfigurationGroup(1,false);
+ settings->addChild(new EDIDprobedinfo);
+ settings->addChild( XSYNC);
+ settings->addChild(XVREFRESH);
+ settings->addChild(HostXDisplaysize());
+
+ addTarget("0", new GridConfigurationGroup(1,false));
+ addTarget("1", settings);
+ };
+};
+
+
+EDIDOptions::EDIDOptions()
+{
+ VerticalConfigurationGroup* rec = new VerticalConfigurationGroup(false);
+ rec->setLabel(QObject::tr("Advanced X options"));
+ rec->setUseLabel(false);
+ rec->addChild(new UseEDID);
+ addChild(rec);
+}
+
+
+AdvancedXGeneric_modelines::AdvancedXGeneric_modelines():
+ TriggeredConfigurationGroup(true,false,true,true,true,true,true,true)
+{
+ SetVertical(false);
+ HostXModelineCatagory = new HostComboBox("HostXModelineCatagory");
+ HostXModelineCatagory->setLabel(QObject::tr("Type"));
+ HostXModelineCatagory->addSelection("Auto");
+ HostXModelineCatagory->addSelection("VESA");
+ HostXModelineCatagory->addSelection("ATSC");
+ HostXModelineCatagory->addSelection("DVD");
+ HostXModelineCatagory->addSelection("NTSC");
+ HostXModelineCatagory->addSelection("Custom");
+ //HostXModelineCatagory->addSelection("nVidia Modeline");
+ HostXModelineCatagory->setHelpText(QObject::tr(""));
+
+ HostXadvancedresVESA = new HostComboBox("HostXadvancedresVESA");
+ HostXadvancedresATSC = new HostComboBox("HostXadvancedresATSC");
+ HostXadvancedresDVD = new HostComboBox("HostXadvancedresDVD");
+ HostXadvancedresNTSC = new HostComboBox("HostXadvancedresNTSC");
+ HostXadvancedresCustom= new HostComboBox("HostXadvancedresCustom");
+
+ generic_fillselection("VESA");
+ generic_fillselection("ATSC");
+ generic_fillselection("DVD");
+ generic_fillselection("NTSC");
+ generic_fillselection("Custom");
+
+ addChild(HostXModelineCatagory);
+ setTrigger(HostXModelineCatagory);
+
+ addTarget("VESA", HostXadvancedresVESA);
+ addTarget("ATSC", HostXadvancedresATSC);
+ addTarget("DVD", HostXadvancedresDVD);
+ addTarget("NTSC", HostXadvancedresNTSC);
+ addTarget("Custom",HostXadvancedresCustom);
+ addTarget("Auto", new VerticalConfigurationGroup(false, false));
+
+};
+
+void AdvancedXGeneric_modelines::AdvancedXGeneric_modelines_GatherSettings(void)
+{
+ QString modelinetype = HostXModelineCatagory->getValue();
+ QString tempmodeline = "HostXadvancedres" + modelinetype ;
+ QString modeline;
+ if ( modelinetype == "VESA")
+ modeline= HostXadvancedresVESA->getValue() ;
+ else if ( modelinetype == "ATSC")
+ modeline= HostXadvancedresATSC->getValue() ;
+ else if ( modelinetype == "DVD")
+ modeline= HostXadvancedresDVD->getValue();
+ else if ( modelinetype == "NTSC")
+ modeline= HostXadvancedresNTSC->getValue();
+ else if ( modelinetype == "Custom")
+ modeline= HostXadvancedresCustom->getValue();
+ hostparm.ThisXresadvanced = modelinetype +"_"+modeline;
+ // Jump to final step
+ testXconfiguration();
+}
+
+
+// --------------------------------------------start of nvidia specific ------------------------------------
+
+
+AdvancedXNvidiaConnections::AdvancedXNvidiaConnections():
+ TriggeredConfigurationGroup(false,false,true,true,true,true,true,true) {
+
+ HostXNvidiaConnection = new HostComboBox("HostXNvidiaConnection",false);
+ HostXNvidiaConnection->setLabel(QObject::tr("Connection"));
+ HostXNvidiaConnection->addSelection("Auto");
+ HostXNvidiaConnection->addSelection("DVI");
+ HostXNvidiaConnection->addSelection("VGA");
+ HostXNvidiaConnection->addSelection("TV");
+ HostXNvidiaConnection->setHelpText(QObject::tr("Video-out"));
+
+ addChild(HostXNvidiaConnection);
+ setTrigger(HostXNvidiaConnection);
+ AdvancedXNvidia_modelines *ADVANCEDXNVIDIA_MODELINES = new AdvancedXNvidia_modelines;
+
+ HostXnVidiaTVstandard = new HostComboBox("HostXnVidiaTVstandard");
+ HostXnVidiaTVstandard->setLabel(QObject::tr("nVidia-out"));
+ HostXnVidiaTVstandard->addSelection("PAL-B" );
+ HostXnVidiaTVstandard->addSelection("PAL-D" );
+ HostXnVidiaTVstandard->addSelection("PAL-G" );
+ HostXnVidiaTVstandard->addSelection("PAL-H" );
+ HostXnVidiaTVstandard->addSelection("PAL-I" );
+ HostXnVidiaTVstandard->addSelection("PAL-K1");
+ HostXnVidiaTVstandard->addSelection("PAL-M" );
+ HostXnVidiaTVstandard->addSelection("PAL-N" );
+ HostXnVidiaTVstandard->addSelection("PAL-NC");
+ HostXnVidiaTVstandard->addSelection("NTSC-J");
+ HostXnVidiaTVstandard->addSelection("NTSC-M");
+ HostXnVidiaTVstandard->addSelection("HD480i" );
+ HostXnVidiaTVstandard->addSelection("HD480p" );
+ HostXnVidiaTVstandard->addSelection("HD720p" );
+ HostXnVidiaTVstandard->addSelection("HD1080i" );
+ HostXnVidiaTVstandard->addSelection("HD1080p");
+ HostXnVidiaTVstandard->addSelection("HD576i" );
+ HostXnVidiaTVstandard->addSelection("HD576p" );
+ HostXnVidiaTVstandard->setHelpText(QObject::tr("Indrustry standard resolution to send to the TV"));
+
+ HostXnVidiaTVformat = new HostComboBox("HostXnVidiaTVformat");
+ HostXnVidiaTVformat->setLabel(QObject::tr("TV-Format(nvidia)"));
+ HostXnVidiaTVformat->addSelection("AUTOSELECT");
+ HostXnVidiaTVformat->addSelection("COMPOSITE");
+ HostXnVidiaTVformat->addSelection("SVIDEO");
+ HostXnVidiaTVformat->addSelection("COMPONENT");
+ HostXnVidiaTVformat->addSelection("SCART");
+ HostXnVidiaTVformat->setHelpText(QObject::tr("Physical connection to the nvidia card"));
+
+ ConfigurationGroup* nvtvout = new VerticalConfigurationGroup(false);
+ nvtvout ->addChild(HostXnVidiaTVformat);
+ nvtvout->addChild(HostXnVidiaTVstandard);
+
+ addTarget("Auto",ADVANCEDXNVIDIA_MODELINES );
+ addTarget("DVI", ADVANCEDXNVIDIA_MODELINES );
+ addTarget("VGA",ADVANCEDXNVIDIA_MODELINES);
+ addTarget("TV", nvtvout);
+
+ connect(this, SIGNAL(nVidia_sig(void)),
+ ADVANCEDXNVIDIA_MODELINES, SLOT(AdvancedXNvidia_modelines_GatherSettings()));
+};
+
+
+
+
+void AdvancedXNvidia_modelines::Nvidia_fillselection(QString modelinefile )
+{
+ if ( hostparm.displayshowadvancedX )
+ {
+ QString currentitem;
+ QString cfiletxt;
+ cfiletxt=MV_ROOT;
+ cfiletxt.append("templates/xorg/modeline." );
+ QString currentfile = cfiletxt;
+ currentfile.append(modelinefile);
+ QString line;
+ QRegExp sep( "\"" );
+ QFile file(currentfile);
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.startsWith("ModeLine"))
+ {
+ currentitem = line.section( sep , 1,1 );
+ if ( modelinefile == "VESA")
+ HostXNvidiaadvancedresVESA->addSelection(currentitem);
+ else if ( modelinefile == "ATSC")
+ HostXNvidiaadvancedresATSC->addSelection(currentitem);
+ else if ( modelinefile == "DVD")
+ HostXNvidiaadvancedresDVD->addSelection(currentitem);
+ else if ( modelinefile == "NTSC")
+ HostXNvidiaadvancedresNTSC->addSelection(currentitem);
+ else if ( modelinefile == "Custom")
+ HostXNvidiaadvancedresCustom->addSelection(currentitem);
+ }
+ }
+ file.close();
+ }
+ }
+return ;
+
+}
+
+
+
+AdvancedXNvidia_modelines::AdvancedXNvidia_modelines():
+ TriggeredConfigurationGroup(true,false,true,true,true,true,true,true)
+{
+ SetVertical(true);
+ HostXNvidiaModelineCatagory = new HostComboBox("HostXNvidiaModelineCatagory");
+ HostXNvidiaModelineCatagory->setLabel(QObject::tr("Category"));
+ HostXNvidiaModelineCatagory->addSelection("Auto");
+ HostXNvidiaModelineCatagory->addSelection("VESA");
+ HostXNvidiaModelineCatagory->addSelection("ATSC");
+ HostXNvidiaModelineCatagory->addSelection("DVD");
+ HostXNvidiaModelineCatagory->addSelection("NTSC");
+ HostXNvidiaModelineCatagory->addSelection("Custom");
+ HostXNvidiaModelineCatagory->addSelection("nVidia Modeline");
+ HostXNvidiaModelineCatagory->setHelpText(QObject::tr(""));
+
+ HostXNvidiaadvancedresVESA = new HostComboBox("HostXNvidiaadvancedresVESA");
+ HostXNvidiaadvancedresATSC = new HostComboBox("HostXNvidiaadvancedresATSC");
+ HostXNvidiaadvancedresDVD = new HostComboBox("HostXNvidiaadvancedresDVD");
+ HostXNvidiaadvancedresNTSC = new HostComboBox("HostXNvidiaadvancedresNTSC");
+ HostXNvidiaadvancedresCustom= new HostComboBox("HostXNvidiaadvancedresCustom");
+
+ Nvidia_fillselection("VESA");
+ Nvidia_fillselection("ATSC");
+ Nvidia_fillselection("DVD");
+ Nvidia_fillselection("NTSC");
+ Nvidia_fillselection("Custom");
+
+ HostXnVidia1080p = new HostCheckBox("HostXnVidia1080p");
+ HostXnVidia1080p->setLabel(QObject::tr("1080p"));
+ HostXnVidia1080p->setValue(true);
+ HostXnVidia1080p->setHelpText(QObject::tr(" "));
+
+ HostXnVidia1080i = new HostCheckBox("HostXnVidia1080i");
+ HostXnVidia1080i->setLabel(QObject::tr("1080i"));
+ HostXnVidia1080i->setValue(true);
+ HostXnVidia1080i->setHelpText(QObject::tr(" "));
+
+ HostXnVidia720p = new HostCheckBox("HostXnVidia720p");
+ HostXnVidia720p->setLabel(QObject::tr("720p"));
+ HostXnVidia720p->setValue(true);
+ HostXnVidia720p->setHelpText(QObject::tr(" "));
+
+ HostXnVidia480p = new HostCheckBox("HostXnVidia480p");
+ HostXnVidia480p->setLabel(QObject::tr("480p"));
+ HostXnVidia480p->setValue(true);
+ HostXnVidia480p->setHelpText(QObject::tr(" "));
+
+ ConfigurationGroup* nVidiastandard = new HorizontalConfigurationGroup(false,false,true,true);
+ nVidiastandard ->addChild(HostXnVidia480p);
+ nVidiastandard ->addChild(HostXnVidia720p);
+ nVidiastandard ->addChild(HostXnVidia1080p);
+ nVidiastandard ->addChild(HostXnVidia1080i);
+ nVidiastandard ->setLabel(QObject::tr("Standard Nvidia Modelines"));
+
+
+ addChild(HostXNvidiaModelineCatagory);
+ setTrigger(HostXNvidiaModelineCatagory);
+
+ addTarget("VESA", HostXNvidiaadvancedresVESA);
+ addTarget("ATSC", HostXNvidiaadvancedresATSC);
+ addTarget("DVD", HostXNvidiaadvancedresDVD);
+ addTarget("NTSC", HostXNvidiaadvancedresNTSC);
+ addTarget("Custom",HostXNvidiaadvancedresCustom);
+ addTarget("nVidia Modeline",nVidiastandard);
+ addTarget("Auto", new VerticalConfigurationGroup(false, false));
+};
+
+
+void AdvancedXNvidiaConnections::AdvancedXNvidiaConnectionsGatherSettings(void)
+{
+ cout << "inside AdvancedXNvidiaConnectionsGatherSettings" << endl;
+ hostparm.ThisXconnection = HostXNvidiaConnection->getValue();
+ hostparm.ThisXTVstandard = HostXnVidiaTVformat->getValue();
+ hostparm.ThisXTVconnection = HostXnVidiaTVstandard->getValue();
+ emit nVidia_sig(); // jump to AdvancedXNvidia_modelines_GatherSettings
+
+};
+
+
+void AdvancedXNvidia_modelines::AdvancedXNvidia_modelines_GatherSettings(void)
+{
+ QString modelinecatagory = HostXNvidiaModelineCatagory->getValue();
+ QString tempmodeline = "HostXadvancedres" + modelinecatagory ;
+ QString modeline;
+
+ if ( modelinecatagory == "VESA")
+ modeline= HostXNvidiaadvancedresVESA->getValue() ;
+ else if ( modelinecatagory == "ATSC")
+ modeline= HostXNvidiaadvancedresATSC->getValue() ;
+ else if ( modelinecatagory == "DVD")
+ modeline= HostXNvidiaadvancedresDVD->getValue();
+ else if ( modelinecatagory == "NTSC")
+ modeline= HostXNvidiaadvancedresNTSC->getValue();
+ else if ( modelinecatagory == "Custom")
+ modeline= HostXNvidiaadvancedresCustom->getValue();
+ else if ( modelinecatagory == "nVidia Modeline" )
+ modeline = "Builtin" ;
+ // need to add stuff to find the built in nvidia modelines
+ hostparm.ThisXresadvanced = modelinecatagory +"_"+modeline;
+
+ cout << " in nvidia modeline gather settings" << endl;
+ // Jump to final step
+ testXconfiguration();
+};
+// ----------------------------------------END nvidia specific
+
+
+
+AdvancedXcardtype::AdvancedXcardtype():
+ TriggeredConfigurationGroup(false,false,true,true,true,true,false,false) {
+ HostXcardtype = new HostComboBox("HostXcardtype",false);
+ HostXcardtype->setLabel(QObject::tr("Video card/driver"));
+ HostXcardtype->addSelection("nVidia");
+ HostXcardtype->addSelection("ATI");
+ HostXcardtype->addSelection("VMWARE");
+ HostXcardtype->addSelection("Intel");
+ HostXcardtype->addSelection("Via");
+ HostXcardtype->setHelpText(QObject::tr("nVidia work, ati works,VMWARE works, Intel does not work(yet), Via is a joke"));
+ addChild(HostXcardtype);
+ setTrigger(HostXcardtype);
+
+ AdvancedXGeneric_modelines *ADVANCEDXGENERICMODELINES = new AdvancedXGeneric_modelines;
+ AdvancedXNvidiaConnections *ADVANCEDXNVIDIACONNECTIONS = new AdvancedXNvidiaConnections;
+
+ addTarget("VMWARE", ADVANCEDXGENERICMODELINES);
+ addTarget("Intel", ADVANCEDXGENERICMODELINES);
+ addTarget("Via", ADVANCEDXGENERICMODELINES);
+
+ addTarget("nVidia",ADVANCEDXNVIDIACONNECTIONS);
+ addTarget("ATI",ADVANCEDXGENERICMODELINES);
+
+ connect(this, SIGNAL(go(void)),
+ ADVANCEDXGENERICMODELINES, SLOT(AdvancedXGeneric_modelines_GatherSettings()));
+ connect(this, SIGNAL(gonVidia(void)),
+ ADVANCEDXNVIDIACONNECTIONS, SLOT(AdvancedXNvidiaConnectionsGatherSettings()));
+
+};
+
+void AdvancedXcardtype::AdvancedXcardgatherSettings(void)
+{
+ //called when test button is pressed
+ hostparm.ThisXcardtype = HostXcardtype->getValue() ;
+ if (hostparm.ThisXcardtype == "nVidia")
+ emit gonVidia();
+ else if (hostparm.ThisXcardtype =="ATI")
+ emit goATI();
+ else
+ emit go();
+};
+
+
+AdvancedXSettings::AdvancedXSettings():
+ TriggeredConfigurationGroup(true,true,true,true,true,true,true,true) {
+ setLabel(QObject::tr("Advanced X settings"));
+ Setting* Advancedxsettings = HostXUseAdvanced();
+ addChild(Advancedxsettings);
+ setTrigger(Advancedxsettings);
+ HostXIgnoreConfig = new HostCheckBox("HostXIgnoreConfig");
+ HostXIgnoreConfig->setLabel(QObject::tr("User supplied config. "));
+ HostXIgnoreConfig->setValue(false);
+ #ifdef __MVAPP__
+ HostXIgnoreConfig->setHelpText(QObject::tr("When this is checked, the system will use the configuration file provided by YOU. Place the file you want to use in /data/home/mythtv/templates/xorg.user."));
+ #else
+ HostXIgnoreConfig->setHelpText(QObject::tr("When this is checked, the system will use the configuration file provided by YOU. Place the file you want to use in /home/mythtv/templates/xorg.user."));
+ #endif
+ HorizontalConfigurationGroup *lp =
+ new HorizontalConfigurationGroup(false, false, true, true);
+
+ TransButtonSetting *EDIDbutton = new TransButtonSetting();
+ EDIDbutton->setLabel(tr("Display Settings"));
+
+ TransButtonSetting *TestXbutton = new TransButtonSetting();
+ TestXbutton->setLabel(tr("Test X Configuration"));
+ lp->addChild(EDIDbutton);
+ lp->addChild(TestXbutton);
+
+ AdvancedXcardtype *AXCT = new AdvancedXcardtype ;
+
+ ConfigurationGroup* settings = new VerticalConfigurationGroup(false);
+ settings->addChild(AXCT);
+ settings->addChild(lp);
+
+ ConfigurationGroup* setting1 = new GridConfigurationGroup(1,false);
+ setting1->addChild(HostXres());
+ setting1->addChild(HostXIgnoreConfig);
+
+ connect(EDIDbutton, SIGNAL(pressed()), this, SLOT(ADJUSTEDID()));
+ connect(TestXbutton, SIGNAL(pressed()), AXCT, SLOT(AdvancedXcardgatherSettings()));
+ addTarget("0",setting1);
+ addTarget("1", settings);
+};
+
+void AdvancedXSettings::ADJUSTEDID(void)
+{
+ EDIDOptions edidscreen;
+ edidscreen.exec();
+}
+
+
+void testXconfiguration(void)
+{
+ hostparm.ThisXIgnoreEDID =gContext->GetSetting("HostXIgnoreEDID");
+ QString tempstring ;
+ tempstring = gContext->GetSetting("HostXHsyncLow");
+ tempstring.append(" - ");
+ tempstring.append(gContext->GetSetting("HostXHsyncHigh") );
+ hostparm.ThisXHsync=tempstring;
+
+ tempstring ="";
+ tempstring=gContext->GetSetting("HostXVrefreshLow");
+ tempstring.append(" - ");
+ tempstring.append(gContext->GetSetting("HostXVrefreshHigh"));
+ hostparm.ThisXVrefresh=tempstring;
+ hostparm.ThisXDisplaysize= gContext -> GetSetting("HostXDisplaysize");
+
+// Assemble the advanced modeline string
+/*
+ QString modelinetype = gContext->GetSetting("HostXModelineCatagory");;
+ QString tempmodeline = "HostXadvancedres" + modelinetype ;
+ QString modeline = gContext ->GetSetting(tempmodeline);
+ hostparm.ThisXresadvanced = modelinetype +"_"+modeline;
+*/
+/*
+ cout << "start of parm list" << endl;
+ cout << "--------------------"<<endl;
+ cout << hostparm.ThisXcardtype << endl;
+ cout << hostparm. ThisXresadvanced<< endl;
+ cout << hostparm.ThisXconnection << endl;
+ cout << hostparm.ThisXTVstandard << endl;
+ cout << hostparm.ThisXTVconnection << endl;
+ cout << hostparm.ThisXIgnoreEDID << endl;
+ cout << hostparm.ThisXHsync << endl;
+ cout << hostparm.ThisXVrefresh<< endl;
+ cout << hostparm.ThisXDisplaysize<< endl;
+*/
+ QString commandline = "xconfig.sh test 0 ";
+ commandline.append(hostparm.ThisXcardtype);
+ commandline.append(" " );
+ commandline.append(hostparm.ThisXIgnoreEDID );
+ commandline.append(" " );
+ commandline.append(hostparm.ThisXconnection );
+ commandline.append(" \"" );
+ commandline.append(hostparm.ThisXHsync );
+ commandline.append(" \" " );
+ commandline.append(" \"" );
+ commandline.append(hostparm.ThisXVrefresh);
+ commandline.append(" \" " );
+ commandline.append(hostparm.ThisXresadvanced );
+ commandline.append(" " );
+ commandline.append(hostparm.ThisXTVconnection );
+ commandline.append(" " );
+ commandline.append(" \"" );
+ commandline.append(hostparm.ThisXDisplaysize);
+ commandline.append(" \" " );
+ //cout << commandline << endl;
+
+ QString message;
+ message = "Someday this button will do something, but for right now all it does is show this message.";
+ message.append ("\n");
+
+ message.append(commandline);
+ MythPopupBox::showOkPopup(
+ gContext->GetMainWindow(), QObject::tr("Test X button"),
+ message);
+};
+
+
+
+
diff --git a/abs/core/mythinstall/xorgsettings.h b/abs/core/mythinstall/xorgsettings.h
new file mode 100755
index 0000000..46c4952
--- /dev/null
+++ b/abs/core/mythinstall/xorgsettings.h
@@ -0,0 +1,178 @@
+#include <settings.h>
+#include "mythdialogs.h"
+#include "libmyth/mythdialogs.h"
+#include "libmyth/mythwidgets.h"
+#include "installsettings.h"
+
+class AdvancedXNvidiaConnections: public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ AdvancedXNvidiaConnections();
+ HostComboBox *HostXNvidiaConnection;
+ HostComboBox *HostXnVidiaTVformat;
+ HostComboBox *HostXnVidiaTVstandard;
+
+public slots:
+ void AdvancedXNvidiaConnectionsGatherSettings();
+signals:
+ void nVidia_sig(void);
+};
+
+
+class AdvancedXNvidia_modelines: public TriggeredConfigurationGroup {
+ Q_OBJECT
+public:
+ AdvancedXNvidia_modelines();
+ HostComboBox *HostXNvidiaModelineCatagory;
+ HostComboBox *HostXNvidiaadvancedresVESA;
+ HostComboBox *HostXNvidiaadvancedresATSC;
+ HostComboBox *HostXNvidiaadvancedresDVD;
+ HostComboBox *HostXNvidiaadvancedresNTSC;
+ HostComboBox *HostXNvidiaadvancedresCustom;
+ HostCheckBox *HostXnVidia1080p;
+ HostCheckBox *HostXnVidia1080i;
+ HostCheckBox *HostXnVidia720p;
+ HostCheckBox *HostXnVidia480p;
+ void Nvidia_fillselection(QString);
+public slots:
+ void AdvancedXNvidia_modelines_GatherSettings(void);
+};
+
+
+//-------------------------------------------------
+
+class AdvancedXcardtype: public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ AdvancedXcardtype();
+ HostComboBox *HostXcardtype;
+
+public slots:
+ void AdvancedXcardgatherSettings();
+signals:
+ void go(void );
+ void goATI(void);
+ void gonVidia(void);
+};
+
+
+class AdvancedXSettings: public TriggeredConfigurationGroup {
+Q_OBJECT
+public:
+ AdvancedXSettings();
+ HostCheckBox *HostXIgnoreConfig;
+protected slots:
+ void ADJUSTEDID(void);
+};
+
+
+class AdvancedXGeneric_modelines: public TriggeredConfigurationGroup {
+ Q_OBJECT
+public:
+ AdvancedXGeneric_modelines();
+ HostComboBox *HostXModelineCatagory;
+ HostComboBox *HostXadvancedresVESA;
+ HostComboBox *HostXadvancedresATSC;
+ HostComboBox *HostXadvancedresDVD;
+ HostComboBox *HostXadvancedresNTSC;
+ HostComboBox *HostXadvancedresCustom;
+ void generic_fillselection(QString);
+public slots:
+ void AdvancedXGeneric_modelines_GatherSettings(void);
+};
+
+
+class EDIDOptions : public ConfigurationWizard
+{
+public:
+ EDIDOptions();
+};
+
+
+
+
+
+
+
+
+void testXconfiguration();
+void ReadDDCvalues();
+static HostComboBox *HostXres()
+//Used in the simple config
+{
+ HostComboBox *gc = new HostComboBox("HostXres");
+ gc->setLabel(QObject::tr("Initial resolution"));
+ const int num_defaults = 2;
+ char *defaults[num_defaults]={"800x600","1280x720"};
+ int defaults_added[num_defaults]={0,0};
+ int found_modes_in_xorg_log = FALSE;
+
+ gc->addSelection("Auto");
+
+ {
+ FILE *modelines;
+ const char*mode_extract_command =
+ "sed -n 's/[[:space:]]\\+/ /g;" // compress whitespace
+ "s/[\\) ]: /#/g;" // Insert # as a field delimiter
+ "/Modes in ModePool/,/ModePool/p'" // get the Modelool lines
+ " /var/log/Xorg.0.log |" // from the Xorg log
+ "cut -d# -f2-3 | " // select the mode and description fields
+ "sed '/^\\\"/!d;" // Only selest modeline lines.
+ "/DoubleScan/d;" // Remove doublescan modelines.
+ "/nvidia-auto-select/d;" // Remove auto modeline.
+ "s/ x /x/g;"
+ "s/ @ /@/g;"
+ "s/From: //g;"
+ "s/ Format [0-9]*) (/, /g;"
+ "s/ Format [0-9]*//g;"
+ "s/ Server//g'"; //reformat.
+ cout << mode_extract_command << endl;
+ modelines = popen (mode_extract_command, "r");
+
+ char previous_mode[200]={0};
+
+ if (modelines)
+ {
+ char line_in[200];
+ while (fgets (line_in, sizeof (line_in), modelines))
+ {
+ char *separator;
+
+ if (strchr (line_in, '\n'))
+ strchr (line_in, '\n')[0]=0;
+
+ separator = strchr (line_in, '#');
+
+ if (separator)
+ {
+ separator[0]=0;
+ separator++;
+
+ // Skip this mode if the description is identical to the previous.
+ if (strcmp (previous_mode, separator) == 0)
+ continue;
+
+ strncpy (previous_mode, separator, sizeof(previous_mode));
+ gc->addSelection(separator, line_in);
+ found_modes_in_xorg_log = TRUE;
+
+ for (int def = 0; def < num_defaults; def++)
+ if (strncmp (&line_in[1], defaults[def], strlen (defaults[def]))==0)
+ defaults_added[def]=1;
+ }
+ }
+ pclose (modelines);
+ }
+ }
+
+ for (int def = 0; def < num_defaults; def++)
+ if (!defaults_added[def])
+ gc->addSelection(defaults[def], defaults[def]);
+
+ if (found_modes_in_xorg_log)
+ gc->setHelpText(QObject::tr("Choose a resolution to match your display and a refresh rate to match the content you will be recording - 60 Hz for NTSC (e.g. US) 50 Hz for PAL (e.g. UK, Aust, NZ)."));
+ else
+ gc->setHelpText(QObject::tr("Choose the resolution to use when the system reboots."));
+
+ return gc;
+}