00001 #include "scanwizardconfig.h"
00002
00003 #include "videosource.h"
00004 #include "cardutil.h"
00005 #include "frequencytablesetting.h"
00006
00007 #include "channelscanmiscsettings.h"
00008 #include "inputselectorsetting.h"
00009 #include "scanwizard.h"
00010
00011 #include "panedvbs.h"
00012 #include "panedvbs2.h"
00013 #include "panedvbc.h"
00014 #include "panedvbt.h"
00015 #include "paneatsc.h"
00016 #include "paneanalog.h"
00017 #include "panesingle.h"
00018 #include "paneall.h"
00019 #include "panedvbutilsimport.h"
00020 #include "paneexistingscanimport.h"
00021
00022 ScanWizardConfig::ScanWizardConfig(
00023 ScanWizard *_parent,
00024 uint default_sourceid, uint default_cardid,
00025 QString default_inputname) :
00026 VerticalConfigurationGroup(false, true, false, false),
00027 videoSource(new VideoSourceSelector(
00028 default_sourceid, CardUtil::GetScanableCardTypes(), false)),
00029 input(new InputSelector(default_cardid, default_inputname)),
00030 scanType(new ScanTypeSetting()),
00031 scanConfig(new ScanOptionalConfig(scanType)),
00032 services(new DesiredServices()),
00033 ftaOnly(new FreeToAirOnly()),
00034 trustEncSI(new TrustEncSISetting())
00035 {
00036 setLabel(tr("Scan Configuration"));
00037
00038 ConfigurationGroup *cfg =
00039 new HorizontalConfigurationGroup(false, false, true, true);
00040 cfg->addChild(services);
00041 cfg->addChild(ftaOnly);
00042 cfg->addChild(trustEncSI);
00043
00044 addChild(videoSource);
00045 addChild(input);
00046 addChild(cfg);
00047 addChild(scanType);
00048 addChild(scanConfig);
00049
00050 connect(videoSource, SIGNAL(valueChanged(const QString&)),
00051 scanConfig, SLOT( SetSourceID( const QString&)));
00052
00053 connect(videoSource, SIGNAL(valueChanged(const QString&)),
00054 input, SLOT( SetSourceID( const QString&)));
00055
00056 connect(input, SIGNAL(valueChanged(const QString&)),
00057 scanType, SLOT( SetInput( const QString&)));
00058
00059 connect(input, SIGNAL(valueChanged(const QString&)),
00060 _parent, SLOT( SetInput( const QString&)));
00061 }
00062
00063 uint ScanWizardConfig::GetSourceID(void) const
00064 {
00065 return videoSource->getValue().toUInt();
00066 }
00067
00068 ServiceRequirements ScanWizardConfig::GetServiceRequirements(void) const
00069 {
00070 return services->GetServiceRequirements();
00071 }
00072
00073 bool ScanWizardConfig::DoFreeToAirOnly(void) const
00074 {
00075 return ftaOnly->getValue().toInt();
00076 }
00077
00078 bool ScanWizardConfig::DoTestDecryption(void) const
00079 {
00080 return trustEncSI->getValue().toInt();
00081 }
00082
00085
00086 void ScanTypeSetting::SetInput(const QString &cardids_inputname)
00087 {
00088 uint cardid = 0;
00089 QString inputname = QString::null;
00090 if (!InputSelector::Parse(cardids_inputname, cardid, inputname))
00091 return;
00092
00093
00094
00095
00096 if (cardid == hw_cardid)
00097 return;
00098
00099 hw_cardid = cardid;
00100 QString subtype = CardUtil::ProbeSubTypeName(hw_cardid);
00101 int nCardType = CardUtil::toCardType(subtype);
00102 clearSelections();
00103
00104 switch (nCardType)
00105 {
00106 case CardUtil::V4L:
00107 case CardUtil::MPEG:
00108 addSelection(tr("Full Scan"),
00109 QString::number(FullScan_Analog), true);
00110 addSelection(tr("Import existing scan"),
00111 QString::number(ExistingScanImport));
00112 return;
00113 case CardUtil::DVBT:
00114 addSelection(tr("Full Scan"),
00115 QString::number(FullScan_DVBT), true);
00116 addSelection(tr("Full Scan (Tuned)"),
00117 QString::number(NITAddScan_DVBT));
00118 addSelection(tr("Import channels.conf"),
00119 QString::number(DVBUtilsImport));
00120 addSelection(tr("Import existing scan"),
00121 QString::number(ExistingScanImport));
00122 break;
00123 case CardUtil::DVBS:
00124 addSelection(tr("Full Scan (Tuned)"),
00125 QString::number(NITAddScan_DVBS));
00126 addSelection(tr("Import channels.conf"),
00127 QString::number(DVBUtilsImport));
00128 addSelection(tr("Import existing scan"),
00129 QString::number(ExistingScanImport));
00130 break;
00131 case CardUtil::DVBS2:
00132 addSelection(tr("Full Scan (Tuned)"),
00133 QString::number(NITAddScan_DVBS2));
00134 addSelection(tr("Import channels.conf"),
00135 QString::number(DVBUtilsImport));
00136 addSelection(tr("Import existing scan"),
00137 QString::number(ExistingScanImport));
00138 break;
00139 case CardUtil::QAM:
00140 addSelection(tr("Full Scan (Tuned)"),
00141 QString::number(NITAddScan_DVBC));
00142 addSelection(tr("Full Scan"),
00143 QString::number(FullScan_DVBC));
00144 addSelection(tr("Import channels.conf"),
00145 QString::number(DVBUtilsImport));
00146 addSelection(tr("Import existing scan"),
00147 QString::number(ExistingScanImport));
00148 break;
00149 case CardUtil::ATSC:
00150 addSelection(tr("Full Scan"),
00151 QString::number(FullScan_ATSC), true);
00152 addSelection(tr("Import channels.conf"),
00153 QString::number(DVBUtilsImport));
00154 addSelection(tr("Import existing scan"),
00155 QString::number(ExistingScanImport));
00156 break;
00157 case CardUtil::HDHOMERUN:
00158 if (CardUtil::HDHRdoesDVB(CardUtil::GetVideoDevice(cardid)))
00159 {
00160 addSelection(tr("Full Scan"),
00161 QString::number(FullScan_DVBT), true);
00162 addSelection(tr("Full Scan (Tuned)"),
00163 QString::number(NITAddScan_DVBT));
00164 }
00165 else
00166 addSelection(tr("Full Scan"),
00167 QString::number(FullScan_ATSC), true);
00168 addSelection(tr("Import channels.conf"),
00169 QString::number(DVBUtilsImport));
00170 addSelection(tr("Import existing scan"),
00171 QString::number(ExistingScanImport));
00172 break;
00173 case CardUtil::FREEBOX:
00174 addSelection(tr("M3U Import"),
00175 QString::number(IPTVImport), true);
00176 return;
00177 case CardUtil::ASI:
00178 addSelection(tr("ASI Scan"),
00179 QString::number(CurrentTransportScan), true);
00180 return;
00181 case CardUtil::ERROR_PROBE:
00182 addSelection(QObject::tr("Failed to probe the card"),
00183 QString::number(Error_Probe), true);
00184 return;
00185 default:
00186 addSelection(QObject::tr("Failed to open the card"),
00187 QString::number(Error_Open), true);
00188 return;
00189 }
00190
00191 addSelection(tr("Scan of all existing transports"),
00192 QString::number(FullTransportScan));
00193 addSelection(tr("Scan of single existing transport"),
00194 QString::number(TransportScan));
00195 }
00196
00199
00200 ScanOptionalConfig::ScanOptionalConfig(ScanTypeSetting *_scan_type) :
00201 TriggeredConfigurationGroup(false, false, true, true,
00202 false, false, true, true),
00203 scanType(_scan_type),
00204 country(new ScanCountry()),
00205 network(new ScanNetwork()),
00206 paneDVBT(new PaneDVBT()), paneDVBS(new PaneDVBS()),
00207 paneDVBS2(new PaneDVBS2()), paneATSC(new PaneATSC()),
00208 paneDVBC(new PaneDVBC()), paneAnalog(new PaneAnalog()),
00209 paneSingle(new PaneSingle()), paneAll(new PaneAll()),
00210 paneDVBUtilsImport(new PaneDVBUtilsImport()),
00211 paneExistingScanImport(new PaneExistingScanImport())
00212 {
00213 setTrigger(scanType);
00214
00215
00216 setSaveAll(false);
00217
00218 addTarget(QString::number(ScanTypeSetting::Error_Open),
00219 new PaneError(QObject::tr("Failed to open the card")));
00220 addTarget(QString::number(ScanTypeSetting::Error_Probe),
00221 new PaneError(QObject::tr("Failed to probe the card")));
00222 addTarget(QString::number(ScanTypeSetting::NITAddScan_DVBC),
00223 paneDVBC);
00224 addTarget(QString::number(ScanTypeSetting::NITAddScan_DVBS),
00225 paneDVBS);
00226 addTarget(QString::number(ScanTypeSetting::NITAddScan_DVBS2),
00227 paneDVBS2);
00228 addTarget(QString::number(ScanTypeSetting::NITAddScan_DVBT),
00229 paneDVBT);
00230 addTarget(QString::number(ScanTypeSetting::FullScan_ATSC),
00231 paneATSC);
00232 addTarget(QString::number(ScanTypeSetting::FullScan_DVBC),
00233 network);
00234 addTarget(QString::number(ScanTypeSetting::FullScan_DVBT),
00235 country);
00236 addTarget(QString::number(ScanTypeSetting::FullScan_Analog),
00237 paneAnalog);
00238 addTarget(QString::number(ScanTypeSetting::TransportScan),
00239 paneSingle);
00240 addTarget(QString::number(ScanTypeSetting::FullTransportScan),
00241 paneAll);
00242 addTarget(QString::number(ScanTypeSetting::CurrentTransportScan),
00243 new BlankSetting());
00244 addTarget(QString::number(ScanTypeSetting::IPTVImport),
00245 new BlankSetting());
00246 addTarget(QString::number(ScanTypeSetting::DVBUtilsImport),
00247 paneDVBUtilsImport);
00248 addTarget(QString::number(ScanTypeSetting::ExistingScanImport),
00249 paneExistingScanImport);
00250 }
00251
00252 void ScanOptionalConfig::triggerChanged(const QString& value)
00253 {
00254 TriggeredConfigurationGroup::triggerChanged(value);
00255 }
00256
00257 void ScanOptionalConfig::SetSourceID(const QString &sourceid)
00258 {
00259 paneAnalog->SetSourceID(sourceid.toUInt());
00260 paneSingle->SetSourceID(sourceid.toUInt());
00261 paneExistingScanImport->SetSourceID(sourceid.toUInt());
00262 }
00263
00264 QString ScanOptionalConfig::GetFrequencyStandard(void) const
00265 {
00266 int st = scanType->getValue().toInt();
00267
00268 switch (st)
00269 {
00270 case ScanTypeSetting::FullScan_ATSC:
00271 return "atsc";
00272 case ScanTypeSetting::FullScan_DVBC:
00273 return "dvbc";
00274 case ScanTypeSetting::FullScan_DVBT:
00275 return "dvbt";
00276 case ScanTypeSetting::FullScan_Analog:
00277 return "analog";
00278 default:
00279 return "unknown";
00280 }
00281 }
00282
00283 QString ScanOptionalConfig::GetModulation(void) const
00284 {
00285 int st = scanType->getValue().toInt();
00286
00287 switch (st)
00288 {
00289 case ScanTypeSetting::FullScan_ATSC:
00290 return paneATSC->GetModulation();
00291 case ScanTypeSetting::FullScan_DVBC:
00292 return "qam";
00293 case ScanTypeSetting::FullScan_DVBT:
00294 return "ofdm";
00295 case ScanTypeSetting::FullScan_Analog:
00296 return "analog";
00297 default:
00298 return "unknown";
00299 }
00300 }
00301
00302 QString ScanOptionalConfig::GetFrequencyTable(void) const
00303 {
00304 int st = scanType->getValue().toInt();
00305
00306 switch (st)
00307 {
00308 case ScanTypeSetting::FullScan_ATSC:
00309 return paneATSC->GetFrequencyTable();
00310 case ScanTypeSetting::FullScan_DVBC:
00311 return network->getValue();
00312 case ScanTypeSetting::FullScan_DVBT:
00313 return country->getValue();
00314 case ScanTypeSetting::FullScan_Analog:
00315 return paneAnalog->GetFrequencyTable();
00316 default:
00317 return "unknown";
00318 }
00319 }
00320
00321 bool ScanOptionalConfig::GetFrequencyTableRange(
00322 QString &start, QString &end) const
00323 {
00324 start = end = QString::null;
00325
00326 int st = scanType->getValue().toInt();
00327 if (ScanTypeSetting::FullScan_ATSC == st)
00328 return paneATSC->GetFrequencyTableRange(start, end);
00329
00330 return false;
00331 }
00332
00333 bool ScanOptionalConfig::DoIgnoreSignalTimeout(void) const
00334 {
00335 int st = scanType->getValue().toInt();
00336
00337 switch (st)
00338 {
00339 case ScanTypeSetting::TransportScan:
00340 return paneSingle->ignoreSignalTimeout();
00341 case ScanTypeSetting::FullTransportScan:
00342 return paneAll->ignoreSignalTimeout();
00343 case ScanTypeSetting::DVBUtilsImport:
00344 return paneDVBUtilsImport->DoIgnoreSignalTimeout();
00345 default:
00346 return false;
00347 }
00348 }
00349
00350 bool ScanOptionalConfig::DoFollowNIT(void) const
00351 {
00352 int st = scanType->getValue().toInt();
00353 switch (st)
00354 {
00355 case ScanTypeSetting::TransportScan:
00356 return paneSingle->GetFollowNIT();
00357 case ScanTypeSetting::FullTransportScan:
00358 return paneAll->GetFollowNIT();
00359 default:
00360 return false;
00361 }
00362 }
00363
00364 QString ScanOptionalConfig::GetFilename(void) const
00365 {
00366 return paneDVBUtilsImport->GetFilename();
00367 }
00368
00369 uint ScanOptionalConfig::GetMultiplex(void) const
00370 {
00371 int mplexid = paneSingle->GetMultiplex();
00372 return (mplexid <= 0) ? 0 : mplexid;
00373 }
00374
00375 uint ScanOptionalConfig::GetScanID(void) const
00376 {
00377 return paneExistingScanImport->GetScanID();
00378 }
00379
00380 QMap<QString,QString> ScanOptionalConfig::GetStartChan(void) const
00381 {
00382 QMap<QString,QString> startChan;
00383
00384 int st = scanType->getValue().toInt();
00385 if (ScanTypeSetting::NITAddScan_DVBT == st)
00386 {
00387 const PaneDVBT *pane = paneDVBT;
00388
00389 startChan["std"] = "dvb";
00390 startChan["type"] = "OFDM";
00391 startChan["frequency"] = pane->frequency();
00392 startChan["inversion"] = pane->inversion();
00393 startChan["bandwidth"] = pane->bandwidth();
00394 startChan["coderate_hp"] = pane->coderate_hp();
00395 startChan["coderate_lp"] = pane->coderate_lp();
00396 startChan["constellation"] = pane->constellation();
00397 startChan["trans_mode"] = pane->trans_mode();
00398 startChan["guard_interval"] = pane->guard_interval();
00399 startChan["hierarchy"] = pane->hierarchy();
00400 }
00401 else if (ScanTypeSetting::NITAddScan_DVBS == st)
00402 {
00403 const PaneDVBS *pane = paneDVBS;
00404
00405 startChan["std"] = "dvb";
00406 startChan["type"] = "QPSK";
00407 startChan["modulation"] = "qpsk";
00408 startChan["frequency"] = pane->frequency();
00409 startChan["inversion"] = pane->inversion();
00410 startChan["symbolrate"] = pane->symbolrate();
00411 startChan["fec"] = pane->fec();
00412 startChan["polarity"] = pane->polarity();
00413 }
00414 else if (ScanTypeSetting::NITAddScan_DVBC == st)
00415 {
00416 const PaneDVBC *pane = paneDVBC;
00417
00418 startChan["std"] = "dvb";
00419 startChan["type"] = "QAM";
00420 startChan["frequency"] = pane->frequency();
00421 startChan["inversion"] = pane->inversion();
00422 startChan["symbolrate"] = pane->symbolrate();
00423 startChan["fec"] = pane->fec();
00424 startChan["modulation"] = pane->modulation();
00425 }
00426 else if (ScanTypeSetting::NITAddScan_DVBS2 == st)
00427 {
00428 const PaneDVBS2 *pane = paneDVBS2;
00429
00430 startChan["std"] = "dvb";
00431 startChan["type"] = "DVB_S2";
00432 startChan["frequency"] = pane->frequency();
00433 startChan["inversion"] = pane->inversion();
00434 startChan["symbolrate"] = pane->symbolrate();
00435 startChan["fec"] = pane->fec();
00436 startChan["modulation"] = pane->modulation();
00437 startChan["polarity"] = pane->polarity();
00438 startChan["mod_sys"] = pane->mod_sys();
00439 startChan["rolloff"] = pane->rolloff();
00440 }
00441
00442 return startChan;
00443 }
00444