00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include <qlocale.h>
00035
00036
00037 #include "mythcontext.h"
00038 #include "frequencies.h"
00039 #include "videosource.h"
00040 #include "cardutil.h"
00041 #include "sourceutil.h"
00042 #include "scanwizardhelpers.h"
00043 #include "scanwizardscanner.h"
00044 #include "scanwizard.h"
00045
00046 static QString card_types(void)
00047 {
00048 QString cardTypes = "";
00049
00050 #ifdef USING_DVB
00051 cardTypes += "'DVB'";
00052 #endif // USING_DVB
00053
00054 #ifdef USING_V4L
00055 if (!cardTypes.isEmpty())
00056 cardTypes += ",";
00057 cardTypes += "'V4L'";
00058 # ifdef USING_IVTV
00059 cardTypes += ",'MPEG'";
00060 # endif // USING_IVTV
00061 #endif // USING_V4L
00062
00063 #ifdef USING_IPTV
00064 if (!cardTypes.isEmpty())
00065 cardTypes += ",";
00066 cardTypes += "'FREEBOX'";
00067 #endif // USING_IPTV
00068
00069 #ifdef USING_HDHOMERUN
00070 if (!cardTypes.isEmpty())
00071 cardTypes += ",";
00072 cardTypes += "'HDHOMERUN'";
00073 #endif // USING_HDHOMERUN
00074
00075 if (cardTypes.isEmpty())
00076 cardTypes = "'DUMMY'";
00077
00078 return QString("(%1)").arg(cardTypes);
00079 }
00080
00081 ScanProgressPopup::ScanProgressPopup(bool lock, bool strength, bool snr) :
00082 ConfigurationPopupDialog(),
00083 done(false), ss(NULL), sn(NULL), progressBar(NULL), sl(NULL), sta(NULL)
00084 {
00085 setLabel(tr("Scan Progress"));
00086
00087 addChild(sta = new TransLabelSetting());
00088 sta->setLabel(tr("Status"));
00089 sta->setValue(tr("Tuning"));
00090
00091 if (lock)
00092 {
00093 addChild(sl = new TransLabelSetting());
00094 sl->setValue(" "
00095 " ");
00096 }
00097
00098 if (strength)
00099 {
00100 addChild(ss = new ScanSignalMeter(65535));
00101 ss->setLabel(tr("Signal Strength"));
00102 }
00103
00104 if (snr)
00105 {
00106 addChild(sn = new ScanSignalMeter(65535));
00107 sn->setLabel(tr("Signal/Noise"));
00108 }
00109
00110 addChild(progressBar = new ScanSignalMeter(65535));
00111 progressBar->setValue(0);
00112 progressBar->setLabel(tr("Scan"));
00113
00114
00115 TransButtonSetting *cancel = new TransButtonSetting();
00116 cancel->setLabel(tr("Cancel"));
00117 addChild(cancel);
00118
00119 connect(cancel, SIGNAL(pressed(void)),
00120 this, SLOT( reject(void)));
00121
00122
00123 setUseLabel(false);
00124 setUseFrame(false);
00125 }
00126
00127 ScanProgressPopup::~ScanProgressPopup()
00128 {
00129 VERBOSE(VB_SIPARSER, "~ScanProgressPopup()");
00130 }
00131
00132 void ScanProgressPopup::SetStatusSignalToNoise(int value)
00133 {
00134 if (sn)
00135 sn->setValue(value);
00136 }
00137
00138 void ScanProgressPopup::SetStatusSignalStrength(int value)
00139 {
00140 if (ss)
00141 ss->setValue(value);
00142 }
00143
00144 void ScanProgressPopup::SetStatusLock(int value)
00145 {
00146 if (sl)
00147 sl->setValue((value) ? tr("Locked") : tr("No Lock"));
00148 }
00149
00150 void ScanProgressPopup::SetScanProgress(double value)
00151 {
00152 if (progressBar)
00153 progressBar->setValue((uint)(value * 65535));
00154 }
00155
00156 void ScanProgressPopup::SetStatusText(const QString &value)
00157 {
00158 if (sta)
00159 sta->setValue(value);
00160 }
00161
00162 void ScanProgressPopup::SetStatusTitleText(const QString &value)
00163 {
00164 QString msg = tr("Scan Progress") + QString(" %1").arg(value);
00165 setLabel(msg);
00166 }
00167
00168 DialogCode ScanProgressPopup::exec(void)
00169 {
00170 if (!dialog)
00171 {
00172 dialog = (ConfigPopupDialogWidget*)
00173 dialogWidget(gContext->GetMainWindow(),
00174 "ConfigurationPopupDialog");
00175 }
00176 dialog->setResult(kDialogCodeRejected);
00177
00178 done = false;
00179 dialog->ShowPopup(this, SLOT(PopupDone(int)));
00180
00181 while (!done)
00182 wait.wait(100);
00183
00184 return dialog->result();
00185 }
00186
00187 void ScanProgressPopup::PopupDone(int)
00188 {
00189 done = true;
00190 wait.wakeAll();
00191 }
00192
00193 void MultiplexSetting::load(void)
00194 {
00195 clearSelections();
00196
00197 if (!sourceid)
00198 return;
00199
00200 MSqlQuery query(MSqlQuery::InitCon());
00201
00202 query.prepare(
00203 "SELECT mplexid, networkid, transportid, "
00204 " frequency, symbolrate, modulation "
00205 "FROM dtv_multiplex "
00206 "WHERE sourceid = :SOURCEID "
00207 "ORDER by frequency, networkid, transportid");
00208 query.bindValue(":SOURCEID", sourceid);
00209
00210 if (!query.exec() || !query.isActive() || query.size() <= 0)
00211 return;
00212
00213 while (query.next())
00214 {
00215 QString DisplayText;
00216 if (query.value(5).toString() == "8vsb")
00217 {
00218 QString ChannelNumber =
00219 QString("Freq %1").arg(query.value(3).toInt());
00220 struct CHANLIST* curList = chanlists[0].list;
00221 int totalChannels = chanlists[0].count;
00222 int findFrequency = (query.value(3).toInt() / 1000) - 1750;
00223 for (int x = 0 ; x < totalChannels ; x++)
00224 {
00225 if ((curList[x].freq <= findFrequency + 200) &&
00226 (curList[x].freq >= findFrequency - 200))
00227 {
00228 ChannelNumber = QString("%1").arg(curList[x].name);
00229 }
00230 }
00231 DisplayText = QObject::tr("ATSC Channel %1").arg(ChannelNumber);
00232 }
00233 else
00234 {
00235 DisplayText = QString("%1 Hz (%2) (%3) (%4)")
00236 .arg(query.value(3).toString())
00237 .arg(query.value(4).toString())
00238 .arg(query.value(1).toInt())
00239 .arg(query.value(2).toInt());
00240 }
00241 addSelection(DisplayText, query.value(0).toString());
00242 }
00243 }
00244
00245 void MultiplexSetting::SetSourceID(uint _sourceid)
00246 {
00247 sourceid = _sourceid;
00248 load();
00249 }
00250
00251 InputSelector::InputSelector(
00252 uint _default_cardid, const QString &_default_inputname) :
00253 ComboBoxSetting(this), sourceid(0), default_cardid(_default_cardid),
00254 default_inputname(QDeepCopy<QString>(_default_inputname))
00255 {
00256 setLabel(tr("Input"));
00257 }
00258
00259 void InputSelector::load(void)
00260 {
00261 clearSelections();
00262
00263 if (!sourceid)
00264 return;
00265
00266 MSqlQuery query(MSqlQuery::InitCon());
00267 query.prepare(
00268 "SELECT capturecard.cardid, cardtype, videodevice, inputname "
00269 "FROM capturecard, cardinput, videosource "
00270 "WHERE cardinput.sourceid = videosource.sourceid AND "
00271 " hostname = :HOSTNAME AND "
00272 " cardinput.sourceid = :SOURCEID AND "
00273 " cardinput.cardid = capturecard.cardid");
00274
00275 query.bindValue(":HOSTNAME", gContext->GetHostName());
00276 query.bindValue(":SOURCEID", sourceid);
00277
00278 if (!query.exec() || !query.isActive())
00279 {
00280 MythContext::DBError("InputSelector::load()", query);
00281 return;
00282 }
00283
00284 uint which = 0, cnt = 0;
00285 for (; query.next(); cnt++)
00286 {
00287 uint cardid = query.value(0).toUInt();
00288 QString inputname = query.value(3).toString();
00289
00290 QString desc = CardUtil::GetDeviceLabel(
00291 cardid, query.value(1).toString(), query.value(2).toString());
00292
00293 desc += QString(" (%1)").arg(inputname);
00294
00295 QString key = QString("%1:%2").arg(cardid).arg(inputname);
00296
00297 addSelection(desc, key);
00298
00299 which = (default_cardid == cardid) ? cnt : which;
00300 }
00301
00302 if (cnt)
00303 setValue(which);
00304 }
00305
00306 void InputSelector::SetSourceID(const QString &_sourceid)
00307 {
00308 if (sourceid != _sourceid.toUInt())
00309 {
00310 sourceid = _sourceid.toUInt();
00311 load();
00312 }
00313 }
00314
00315 uint InputSelector::GetCardID(void) const
00316 {
00317 uint cardid = 0;
00318 QString inputname = QString::null;
00319
00320 Parse(getValue(), cardid, inputname);
00321
00322 return cardid;
00323 }
00324
00325 QString InputSelector::GetInputName(void) const
00326 {
00327 uint cardid = 0;
00328 QString inputname = QString::null;
00329
00330 Parse(getValue(), cardid, inputname);
00331
00332 return inputname;
00333 }
00334
00335 bool InputSelector::Parse(const QString &cardid_inputname,
00336 uint &cardid,
00337 QString &inputname)
00338 {
00339 cardid = 0;
00340 inputname = QString::null;
00341
00342 int sep0 = cardid_inputname.find(':');
00343 if (sep0 < 1)
00344 return false;
00345
00346 cardid = cardid_inputname.left(sep0).toUInt();
00347 inputname = cardid_inputname.mid(sep0 + 1);
00348
00349 return true;
00350 }
00351
00352 void ScanTypeSetting::SetInput(const QString &cardids_inputname)
00353 {
00354 uint cardid = 0;
00355 QString inputname = QString::null;
00356 if (!InputSelector::Parse(cardids_inputname, cardid, inputname))
00357 return;
00358
00359
00360
00361
00362 if (cardid == hw_cardid)
00363 return;
00364
00365 hw_cardid = cardid;
00366 QString subtype = CardUtil::ProbeSubTypeName(hw_cardid);
00367 int nCardType = CardUtil::toCardType(subtype);
00368 clearSelections();
00369
00370 bool importConf = false;
00371
00372 switch (nCardType)
00373 {
00374 case CardUtil::V4L:
00375 case CardUtil::MPEG:
00376 addSelection(tr("Full Scan"),
00377 QString::number(FullScan_Analog), true);
00378 return;
00379 case CardUtil::OFDM:
00380 addSelection(tr("Full Scan"),
00381 QString::number(FullScan_OFDM), true);
00382 addSelection(tr("Full Scan (Tuned)"),
00383 QString::number(NITAddScan_OFDM));
00384 importConf = true;
00385 break;
00386 case CardUtil::QPSK:
00387 addSelection(tr("Full Scan (Tuned)"),
00388 QString::number(NITAddScan_QPSK));
00389 importConf = true;
00390 break;
00391 case CardUtil::QAM:
00392 addSelection(tr("Full Scan (Tuned)"),
00393 QString::number(NITAddScan_QAM));
00394 importConf = true;
00395 break;
00396 case CardUtil::ATSC:
00397 addSelection(tr("Full Scan"),
00398 QString::number(FullScan_ATSC), true);
00399 importConf = true;
00400 break;
00401 case CardUtil::HDHOMERUN:
00402 addSelection(tr("Full Scan (ATSC)"),
00403 QString::number(FullScan_ATSC), true);
00404 addSelection(tr("Full Scan (DVB)"),
00405 QString::number(FullScan_OFDM), true);
00406 addSelection(tr("Full Scan (DVB, tuned)"),
00407 QString::number(NITAddScan_OFDM));
00408 importConf = true;
00409 break;
00410 case CardUtil::FREEBOX:
00411 addSelection(tr("M3U Import"),
00412 QString::number(IPTVImport), true);
00413 return;
00414 case CardUtil::ERROR_PROBE:
00415 addSelection(QObject::tr("Failed to probe the card"),
00416 QString::number(Error_Probe), true);
00417 return;
00418 default:
00419 addSelection(QObject::tr("Failed to open the card"),
00420 QString::number(Error_Open), true);
00421 return;
00422 }
00423
00424 if (importConf)
00425 addSelection(tr("Import channels.conf"),
00426 QString::number(DVBUtilsImport));
00427
00428 addSelection(tr("Full Scan of Existing Transports"),
00429 QString::number(FullTransportScan));
00430 addSelection(tr("Existing Transport Scan"),
00431 QString::number(TransportScan));
00432 }
00433
00434 ScanCountry::ScanCountry() : ComboBoxSetting(this)
00435 {
00436 Country country = AU;
00437 #if (QT_VERSION >= 0x030300)
00438 QLocale locale = QLocale::system();
00439 QLocale::Country qtcountry = locale.country();
00440 if (qtcountry == QLocale::Australia)
00441 country = AU;
00442 else if (qtcountry == QLocale::Germany)
00443 country = DE;
00444 else if (qtcountry == QLocale::Finland)
00445 country = FI;
00446 else if (qtcountry == QLocale::Sweden)
00447 country = SE;
00448 else if (qtcountry == QLocale::UnitedKingdom)
00449 country = UK;
00450 else if (qtcountry == QLocale::Spain)
00451 country = ES;
00452 else if (qtcountry == QLocale::NewZealand)
00453 country = NZ;
00454 else if (qtcountry == QLocale::France)
00455 country = FR;
00456 #endif
00457
00458 setLabel(tr("Country"));
00459 addSelection(QObject::tr("Australia"), "au", country == AU);
00460 addSelection(QObject::tr("Finland"), "fi", country == FI);
00461 addSelection(QObject::tr("Sweden"), "se", country == SE);
00462 addSelection(QObject::tr("United Kingdom"), "uk", country == UK);
00463 addSelection(QObject::tr("Germany"), "de", country == DE);
00464 addSelection(QObject::tr("Spain"), "es", country == ES);
00465 addSelection(QObject::tr("New Zealand"), "nz", country == NZ);
00466 addSelection(QObject::tr("France"), "fr", country == FR);
00467 }
00468
00469 AnalogPane::AnalogPane() :
00470 VerticalConfigurationGroup(false, false, true, false),
00471 freq_table(new TransFreqTableSelector(0)),
00472 old_channel_treatment(new ScanOldChannelTreatment(false))
00473 {
00474 addChild(freq_table);
00475 addChild(old_channel_treatment);
00476 }
00477
00478 void AnalogPane::SetSourceID(uint sourceid)
00479 {
00480 freq_table->SetSourceID(sourceid);
00481 }
00482
00483 QString AnalogPane::GetFrequencyTable(void) const
00484 {
00485 return freq_table->getValue();
00486 }
00487
00488 ScanOptionalConfig::ScanOptionalConfig(ScanTypeSetting *_scan_type) :
00489 TriggeredConfigurationGroup(false, false, true, true,
00490 false, false, true, true),
00491 scanType(_scan_type),
00492 country(new ScanCountry()),
00493 ignoreSignalTimeoutAll(new IgnoreSignalTimeout()),
00494 paneOFDM(new OFDMPane()), paneQPSK(new QPSKPane()),
00495 paneDVBS2(new DVBS2Pane()), paneATSC(new ATSCPane()),
00496 paneQAM(new QAMPane()), paneAnalog(new AnalogPane()),
00497 paneSingle(new STPane()),
00498 paneDVBUtilsImport(new DVBUtilsImportPane())
00499 {
00500 setTrigger(scanType);
00501
00502
00503 setSaveAll(false);
00504
00505
00506
00507
00508
00509
00510 VerticalConfigurationGroup *scanAllTransports =
00511 new VerticalConfigurationGroup(false,false,true,true);
00512 scanAllTransports->addChild(ignoreSignalTimeoutAll);
00513
00514 addTarget(QString::number(ScanTypeSetting::Error_Open),
00515 new ErrorPane(QObject::tr("Failed to open the card")));
00516 addTarget(QString::number(ScanTypeSetting::Error_Probe),
00517 new ErrorPane(QObject::tr("Failed to probe the card")));
00518 addTarget(QString::number(ScanTypeSetting::NITAddScan_QAM),
00519 paneQAM);
00520 addTarget(QString::number(ScanTypeSetting::NITAddScan_QPSK),
00521 paneQPSK);
00522 addTarget(QString::number(ScanTypeSetting::NITAddScan_OFDM),
00523 paneOFDM);
00524 addTarget(QString::number(ScanTypeSetting::FullScan_ATSC),
00525 paneATSC);
00526 addTarget(QString::number(ScanTypeSetting::FullScan_OFDM),
00527 country);
00528 addTarget(QString::number(ScanTypeSetting::FullScan_Analog),
00529 paneAnalog);
00530 addTarget(QString::number(ScanTypeSetting::TransportScan),
00531 paneSingle);
00532 addTarget(QString::number(ScanTypeSetting::FullTransportScan),
00533 scanAllTransports);
00534 addTarget(QString::number(ScanTypeSetting::IPTVImport),
00535 new BlankSetting());
00536 addTarget(QString::number(ScanTypeSetting::DVBUtilsImport),
00537 paneDVBUtilsImport);
00538 }
00539
00540 void ScanOptionalConfig::triggerChanged(const QString& value)
00541 {
00542 TriggeredConfigurationGroup::triggerChanged(value);
00543 }
00544
00545 void ScanOptionalConfig::SetSourceID(const QString &sourceid)
00546 {
00547 paneAnalog->SetSourceID(sourceid.toUInt());
00548 paneSingle->SetSourceID(sourceid.toUInt());
00549 }
00550
00551 void ScanOptionalConfig::SetDefaultATSCFormat(const QString &atscFormat)
00552 {
00553 paneATSC->SetDefaultATSCFormat(atscFormat);
00554 paneSingle->SetDefaultATSCFormat(atscFormat);
00555 paneDVBUtilsImport->SetDefaultATSCFormat(atscFormat);
00556 }
00557
00558 QString ScanOptionalConfig::GetATSCFormat(const QString &dfl) const
00559 {
00560 int st = scanType->getValue().toInt();
00561
00562 bool ts0 = (ScanTypeSetting::FullScan_ATSC == st);
00563 QString vl0 = paneATSC->GetATSCFormat();
00564
00565 bool ts1 = (ScanTypeSetting::TransportScan == st);
00566 QString vl1 = paneSingle->GetATSCFormat();
00567
00568 bool ts2 = (ScanTypeSetting::DVBUtilsImport == st);
00569 QString vl2 = paneDVBUtilsImport->GetATSCFormat();
00570
00571 return (ts0) ? vl0 : ((ts1) ? vl1 : (ts2) ? vl2 : dfl);
00572 }
00573
00574 QString ScanOptionalConfig::GetFrequencyStandard(void) const
00575 {
00576 int st = scanType->getValue().toInt();
00577
00578 bool ts0 = (ScanTypeSetting::FullScan_ATSC == st);
00579 bool ts1 = (ScanTypeSetting::FullScan_Analog == st);
00580
00581 return (ts0) ? "atsc" : ((ts1) ? "analog" : "dvbt");
00582 }
00583
00584 QString ScanOptionalConfig::GetModulation(void) const
00585 {
00586 int st = scanType->getValue().toInt();
00587
00588 bool ts0 = (ScanTypeSetting::FullScan_ATSC == st);
00589 QString vl0 = paneATSC->atscModulation();
00590
00591 bool ts1 = (ScanTypeSetting::FullScan_OFDM == st);
00592 QString vl1 = "ofdm";
00593
00594 bool ts2 = (ScanTypeSetting::FullScan_Analog == st);
00595 QString vl2 = "analog";
00596
00597 return (ts0) ? vl0 : ((ts1) ? vl1 : (ts2) ? vl2 : "unknown");
00598 }
00599
00600 QString ScanOptionalConfig::GetFrequencyTable(void) const
00601 {
00602 int st = scanType->getValue().toInt();
00603
00604 bool ts0 = (ScanTypeSetting::FullScan_ATSC == st);
00605 QString vl0 = paneATSC->atscFreqTable();
00606
00607 bool ts1 = (ScanTypeSetting::FullScan_OFDM == st);
00608 QString vl1 = country->getValue();
00609
00610 bool ts2 = (ScanTypeSetting::FullScan_Analog == st);
00611 QString vl2 = paneAnalog->GetFrequencyTable();
00612
00613 return (ts0) ? vl0 : ((ts1) ? vl1 : (ts2) ? vl2 : "unknown");
00614 }
00615
00616 bool ScanOptionalConfig::DoIgnoreSignalTimeout(void) const
00617 {
00618 int st = scanType->getValue().toInt();
00619
00620 bool ts0 = (ScanTypeSetting::TransportScan == st);
00621 bool vl0 = paneSingle->ignoreSignalTimeout();
00622
00623 bool ts1 = (ScanTypeSetting::FullTransportScan == st);
00624 bool vl1 = (ignoreSignalTimeoutAll->getValue().toInt());
00625
00626 bool ts2 = (ScanTypeSetting::DVBUtilsImport == st);
00627 bool vl2 = paneDVBUtilsImport->DoIgnoreSignalTimeout();
00628
00629 return (ts0) ? vl0 : ((ts1) ? vl1 : (ts2) ? vl2 : false);
00630 }
00631
00632 bool ScanOptionalConfig::DoDeleteChannels(void) const
00633 {
00634 int st = scanType->getValue().toInt();
00635
00636 bool ts0 = (ScanTypeSetting::FullScan_ATSC == st);
00637 bool vl0 = paneATSC->DoDeleteChannels();
00638
00639 bool ts1 = (ScanTypeSetting::TransportScan == st);
00640 bool vl1 = paneSingle->DoDeleteChannels();
00641
00642 bool ts2 = (ScanTypeSetting::DVBUtilsImport == st);
00643 bool vl2 = paneDVBUtilsImport->DoDeleteChannels();
00644
00645 bool ts3 = (ScanTypeSetting::FullScan_Analog == st);
00646 bool vl3 = paneAnalog->DoDeleteChannels();
00647
00648 return (ts0) ? vl0 : (((ts1) ? vl1 : (ts2) ? vl2 : (ts3) ? vl3 : false));
00649 }
00650
00651 bool ScanOptionalConfig::DoRenameChannels(void) const
00652 {
00653 int st = scanType->getValue().toInt();
00654
00655 bool ts0 = (ScanTypeSetting::FullScan_ATSC == st);
00656 bool vl0 = paneATSC->DoRenameChannels();
00657
00658 bool ts1 = (ScanTypeSetting::TransportScan == st);
00659 bool vl1 = paneSingle->DoRenameChannels();
00660
00661 bool ts2 = (ScanTypeSetting::DVBUtilsImport == st);
00662 bool vl2 = paneDVBUtilsImport->DoRenameChannels();
00663
00664 bool ts3 = (ScanTypeSetting::FullScan_Analog == st);
00665 bool vl3 = paneAnalog->DoRenameChannels();
00666
00667 return (ts0) ? vl0 : (((ts1) ? vl1 : (ts2) ? vl2 : (ts3) ? vl3 : false));
00668 }
00669
00670 QString ScanOptionalConfig::GetFilename(void) const
00671 {
00672 return paneDVBUtilsImport->GetFilename();
00673 }
00674
00675 uint ScanOptionalConfig::GetMultiplex(void) const
00676 {
00677 int mplexid = paneSingle->GetMultiplex();
00678 return (mplexid <= 0) ? 0 : mplexid;
00679 }
00680
00681 QMap<QString,QString> ScanOptionalConfig::GetStartChan(void) const
00682 {
00683 QMap<QString,QString> startChan;
00684
00685 int st = scanType->getValue().toInt();
00686 if (ScanTypeSetting::NITAddScan_OFDM == st)
00687 {
00688 const OFDMPane *pane = paneOFDM;
00689
00690 startChan["std"] = "dvb";
00691 startChan["frequency"] = pane->frequency();
00692 startChan["inversion"] = pane->inversion();
00693 startChan["bandwidth"] = pane->bandwidth();
00694 startChan["modulation"] = "ofdm";
00695 startChan["coderate_hp"] = pane->coderate_hp();
00696 startChan["coderate_lp"] = pane->coderate_lp();
00697 startChan["constellation"] = pane->constellation();
00698 startChan["trans_mode"] = pane->trans_mode();
00699 startChan["guard_interval"] = pane->guard_interval();
00700 startChan["hierarchy"] = pane->hierarchy();
00701 }
00702 else if (ScanTypeSetting::NITAddScan_QPSK == st)
00703 {
00704 const QPSKPane *pane = paneQPSK;
00705
00706 startChan["std"] = "dvb";
00707 startChan["frequency"] = pane->frequency();
00708 startChan["inversion"] = pane->inversion();
00709 startChan["symbolrate"] = pane->symbolrate();
00710 startChan["fec"] = pane->fec();
00711 startChan["modulation"] = "qpsk";
00712 startChan["polarity"] = pane->polarity();
00713 }
00714 else if (ScanTypeSetting::NITAddScan_QAM == st)
00715 {
00716 const QAMPane *pane = paneQAM;
00717
00718 startChan["std"] = "dvb";
00719 startChan["frequency"] = pane->frequency();
00720 startChan["inversion"] = pane->inversion();
00721 startChan["symbolrate"] = pane->symbolrate();
00722 startChan["fec"] = pane->fec();
00723 startChan["modulation"] = pane->modulation();
00724 }
00725
00726 return startChan;
00727 }
00728
00729 ScanWizardConfig::ScanWizardConfig(
00730 ScanWizard *_parent,
00731 uint default_sourceid, uint default_cardid,
00732 QString default_inputname) :
00733 VerticalConfigurationGroup(false, true, false, false),
00734 videoSource(new VideoSourceSelector(
00735 default_sourceid, card_types(), false)),
00736 input(new InputSelector(default_cardid, default_inputname)),
00737 scanType(new ScanTypeSetting()),
00738 scanConfig(new ScanOptionalConfig(scanType))
00739 {
00740 setLabel(tr("Scan Configuration"));
00741
00742 addChild(videoSource);
00743 addChild(input);
00744 addChild(scanType);
00745 addChild(scanConfig);
00746
00747 connect(videoSource, SIGNAL(valueChanged(const QString&)),
00748 scanConfig, SLOT( SetSourceID( const QString&)));
00749
00750 connect(videoSource, SIGNAL(valueChanged(const QString&)),
00751 input, SLOT( SetSourceID( const QString&)));
00752
00753 connect(input, SIGNAL(valueChanged(const QString&)),
00754 scanType, SLOT( SetInput( const QString&)));
00755
00756 connect(input, SIGNAL(valueChanged(const QString&)),
00757 _parent, SLOT( SetInput( const QString&)));
00758 }
00759
00760 uint ScanWizardConfig::GetSourceID(void) const
00761 {
00762 return videoSource->getValue().toUInt();
00763 }
00764
00765 QString ScanWizardConfig::GetATSCFormat(void) const
00766 {
00767 QString dfl = SourceUtil::GetChannelFormat(GetSourceID());
00768 return scanConfig->GetATSCFormat(dfl);
00769 }
00770
00771 LogList::LogList() : ListBoxSetting(this), n(0)
00772 {
00773 setSelectionMode(MythListBox::NoSelection);
00774 }
00775
00776 void LogList::updateText(const QString& status)
00777 {
00778 addSelection(status,QString::number(n));
00779 setCurrentItem(n);
00780 n++;
00781 }