diff options
Diffstat (limited to 'abs/core/mythinstall')
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; +} |