MythTV  0.27pre
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Groups Pages
scanwizardconfig.cpp
Go to the documentation of this file.
1 #include "scanwizardconfig.h"
2 
3 #include "videosource.h"
4 #include "cardutil.h"
6 
8 #include "inputselectorsetting.h"
9 #include "scanwizard.h"
10 
11 #include "panedvbs.h"
12 #include "panedvbs2.h"
13 #include "panedvbc.h"
14 #include "panedvbt.h"
15 #include "paneatsc.h"
16 #include "paneanalog.h"
17 #include "panesingle.h"
18 #include "paneall.h"
19 #include "panedvbutilsimport.h"
20 #include "paneexistingscanimport.h"
21 
23  ScanWizard *_parent,
24  uint default_sourceid, uint default_cardid,
25  QString default_inputname) :
27  videoSource(new VideoSourceSelector(
28  default_sourceid, CardUtil::GetScanableCardTypes(), false)),
29  input(new InputSelector(default_cardid, default_inputname)),
30  scanType(new ScanTypeSetting()),
31  scanConfig(new ScanOptionalConfig(scanType)),
32  services(new DesiredServices()),
33  ftaOnly(new FreeToAirOnly()),
34  trustEncSI(new TrustEncSISetting())
35 {
36  setLabel(tr("Scan Configuration"));
37 
38  ConfigurationGroup *cfg =
39  new HorizontalConfigurationGroup(false, false, true, true);
40  cfg->addChild(services);
41  cfg->addChild(ftaOnly);
42  cfg->addChild(trustEncSI);
43 
45  addChild(input);
46  addChild(cfg);
49 
50  connect(videoSource, SIGNAL(valueChanged(const QString&)),
51  scanConfig, SLOT( SetSourceID( const QString&)));
52 
53  connect(videoSource, SIGNAL(valueChanged(const QString&)),
54  input, SLOT( SetSourceID( const QString&)));
55 
56  connect(input, SIGNAL(valueChanged(const QString&)),
57  scanType, SLOT( SetInput( const QString&)));
58 
59  connect(input, SIGNAL(valueChanged(const QString&)),
60  _parent, SLOT( SetInput( const QString&)));
61 }
62 
64 {
65  return videoSource->getValue().toUInt();
66 }
67 
69 {
71 }
72 
74 {
75  return ftaOnly->getValue().toInt();
76 }
77 
79 {
80  return trustEncSI->getValue().toInt();
81 }
82 
85 
86 void ScanTypeSetting::SetInput(const QString &cardids_inputname)
87 {
88  uint cardid = 0;
89  QString inputname = QString::null;
90  if (!InputSelector::Parse(cardids_inputname, cardid, inputname))
91  return;
92 
93  // Only refresh if we really have to. If we do it too often
94  // Then we end up fighting the scan routine when we want to
95  // check the type of dvb card :/
96  if (cardid == hw_cardid)
97  return;
98 
99  hw_cardid = cardid;
100  QString subtype = CardUtil::ProbeSubTypeName(hw_cardid);
101  int nCardType = CardUtil::toCardType(subtype);
102  clearSelections();
103 
104  switch (nCardType)
105  {
106  case CardUtil::V4L:
107  case CardUtil::MPEG:
108  addSelection(tr("Full Scan"),
109  QString::number(FullScan_Analog), true);
110  addSelection(tr("Import existing scan"),
111  QString::number(ExistingScanImport));
112  return;
113  case CardUtil::DVBT:
114  addSelection(tr("Full Scan"),
115  QString::number(FullScan_DVBT), true);
116  addSelection(tr("Full Scan (Tuned)"),
117  QString::number(NITAddScan_DVBT));
118  addSelection(tr("Import channels.conf"),
119  QString::number(DVBUtilsImport));
120  addSelection(tr("Import existing scan"),
121  QString::number(ExistingScanImport));
122  break;
123  case CardUtil::DVBS:
124  addSelection(tr("Full Scan (Tuned)"),
125  QString::number(NITAddScan_DVBS));
126  addSelection(tr("Import channels.conf"),
127  QString::number(DVBUtilsImport));
128  addSelection(tr("Import existing scan"),
129  QString::number(ExistingScanImport));
130  break;
131  case CardUtil::DVBS2:
132  addSelection(tr("Full Scan (Tuned)"),
133  QString::number(NITAddScan_DVBS2));
134  addSelection(tr("Import channels.conf"),
135  QString::number(DVBUtilsImport));
136  addSelection(tr("Import existing scan"),
137  QString::number(ExistingScanImport));
138  break;
139  case CardUtil::QAM:
140  addSelection(tr("Full Scan (Tuned)"),
141  QString::number(NITAddScan_DVBC));
142  addSelection(tr("Full Scan"),
143  QString::number(FullScan_DVBC));
144  addSelection(tr("Import channels.conf"),
145  QString::number(DVBUtilsImport));
146  addSelection(tr("Import existing scan"),
147  QString::number(ExistingScanImport));
148  break;
149  case CardUtil::ATSC:
150  addSelection(tr("Full Scan"),
151  QString::number(FullScan_ATSC), true);
152  addSelection(tr("Import channels.conf"),
153  QString::number(DVBUtilsImport));
154  addSelection(tr("Import existing scan"),
155  QString::number(ExistingScanImport));
156  break;
157  case CardUtil::HDHOMERUN:
159  {
160  addSelection(tr("Full Scan"),
161  QString::number(FullScan_DVBT), true);
162  addSelection(tr("Full Scan (Tuned)"),
163  QString::number(NITAddScan_DVBT));
164  }
165  else
166  addSelection(tr("Full Scan"),
167  QString::number(FullScan_ATSC), true);
168  addSelection(tr("Import channels.conf"),
169  QString::number(DVBUtilsImport));
170  addSelection(tr("Import existing scan"),
171  QString::number(ExistingScanImport));
172  break;
173  case CardUtil::FREEBOX:
174  addSelection(tr("M3U Import"),
175  QString::number(IPTVImport), true);
176  return;
177  case CardUtil::ASI:
178  addSelection(tr("ASI Scan"),
179  QString::number(CurrentTransportScan), true);
180  return;
182  addSelection(QObject::tr("Failed to probe the card"),
183  QString::number(Error_Probe), true);
184  return;
185  default:
186  addSelection(QObject::tr("Failed to open the card"),
187  QString::number(Error_Open), true);
188  return;
189  }
190 
191  addSelection(tr("Scan of all existing transports"),
192  QString::number(FullTransportScan));
193  addSelection(tr("Scan of single existing transport"),
194  QString::number(TransportScan));
195 }
196 
199 
202  false, false, true, true),
203  scanType(_scan_type),
204  country(new ScanCountry()),
205  network(new ScanNetwork()),
206  paneDVBT(new PaneDVBT()), paneDVBS(new PaneDVBS()),
207  paneDVBS2(new PaneDVBS2()), paneATSC(new PaneATSC()),
208  paneDVBC(new PaneDVBC()), paneAnalog(new PaneAnalog()),
209  paneSingle(new PaneSingle()), paneAll(new PaneAll()),
210  paneDVBUtilsImport(new PaneDVBUtilsImport()),
211  paneExistingScanImport(new PaneExistingScanImport())
212 {
214 
215  // only save settings for the selected pane
216  setSaveAll(false);
217 
218  addTarget(QString::number(ScanTypeSetting::Error_Open),
219  new PaneError(QObject::tr("Failed to open the card")));
220  addTarget(QString::number(ScanTypeSetting::Error_Probe),
221  new PaneError(QObject::tr("Failed to probe the card")));
223  paneDVBC);
225  paneDVBS);
227  paneDVBS2);
229  paneDVBT);
230  addTarget(QString::number(ScanTypeSetting::FullScan_ATSC),
231  paneATSC);
232  addTarget(QString::number(ScanTypeSetting::FullScan_DVBC),
233  network);
234  addTarget(QString::number(ScanTypeSetting::FullScan_DVBT),
235  country);
237  paneAnalog);
238  addTarget(QString::number(ScanTypeSetting::TransportScan),
239  paneSingle);
241  paneAll);
243  new BlankSetting());
244  addTarget(QString::number(ScanTypeSetting::IPTVImport),
245  new BlankSetting());
250 }
251 
252 void ScanOptionalConfig::triggerChanged(const QString& value)
253 {
255 }
256 
257 void ScanOptionalConfig::SetSourceID(const QString &sourceid)
258 {
259  paneAnalog->SetSourceID(sourceid.toUInt());
260  paneSingle->SetSourceID(sourceid.toUInt());
261  paneExistingScanImport->SetSourceID(sourceid.toUInt());
262 }
263 
265 {
266  int st = scanType->getValue().toInt();
267 
268  switch (st)
269  {
271  return "atsc";
273  return "dvbc";
275  return "dvbt";
277  return "analog";
278  default:
279  return "unknown";
280  }
281 }
282 
284 {
285  int st = scanType->getValue().toInt();
286 
287  switch (st)
288  {
290  return paneATSC->GetModulation();
292  return "qam";
294  return "ofdm";
296  return "analog";
297  default:
298  return "unknown";
299  }
300 }
301 
303 {
304  int st = scanType->getValue().toInt();
305 
306  switch (st)
307  {
309  return paneATSC->GetFrequencyTable();
311  return network->getValue();
313  return country->getValue();
315  return paneAnalog->GetFrequencyTable();
316  default:
317  return "unknown";
318  }
319 }
320 
322  QString &start, QString &end) const
323 {
324  start = end = QString::null;
325 
326  int st = scanType->getValue().toInt();
328  return paneATSC->GetFrequencyTableRange(start, end);
329 
330  return false;
331 }
332 
334 {
335  int st = scanType->getValue().toInt();
336 
337  switch (st)
338  {
342  return paneAll->ignoreSignalTimeout();
345  default:
346  return false;
347  }
348 }
349 
351 {
352  int st = scanType->getValue().toInt();
353  switch (st)
354  {
356  return paneSingle->GetFollowNIT();
358  return paneAll->GetFollowNIT();
359  default:
360  return false;
361  }
362 }
363 
365 {
367 }
368 
370 {
371  int mplexid = paneSingle->GetMultiplex();
372  return (mplexid <= 0) ? 0 : mplexid;
373 }
374 
376 {
378 }
379 
380 QMap<QString,QString> ScanOptionalConfig::GetStartChan(void) const
381 {
382  QMap<QString,QString> startChan;
383 
384  int st = scanType->getValue().toInt();
386  {
387  const PaneDVBT *pane = paneDVBT;
388 
389  startChan["std"] = "dvb";
390  startChan["type"] = "OFDM";
391  startChan["frequency"] = pane->frequency();
392  startChan["inversion"] = pane->inversion();
393  startChan["bandwidth"] = pane->bandwidth();
394  startChan["coderate_hp"] = pane->coderate_hp();
395  startChan["coderate_lp"] = pane->coderate_lp();
396  startChan["constellation"] = pane->constellation();
397  startChan["trans_mode"] = pane->trans_mode();
398  startChan["guard_interval"] = pane->guard_interval();
399  startChan["hierarchy"] = pane->hierarchy();
400  }
401  else if (ScanTypeSetting::NITAddScan_DVBS == st)
402  {
403  const PaneDVBS *pane = paneDVBS;
404 
405  startChan["std"] = "dvb";
406  startChan["type"] = "QPSK";
407  startChan["modulation"] = "qpsk";
408  startChan["frequency"] = pane->frequency();
409  startChan["inversion"] = pane->inversion();
410  startChan["symbolrate"] = pane->symbolrate();
411  startChan["fec"] = pane->fec();
412  startChan["polarity"] = pane->polarity();
413  }
414  else if (ScanTypeSetting::NITAddScan_DVBC == st)
415  {
416  const PaneDVBC *pane = paneDVBC;
417 
418  startChan["std"] = "dvb";
419  startChan["type"] = "QAM";
420  startChan["frequency"] = pane->frequency();
421  startChan["inversion"] = pane->inversion();
422  startChan["symbolrate"] = pane->symbolrate();
423  startChan["fec"] = pane->fec();
424  startChan["modulation"] = pane->modulation();
425  }
426  else if (ScanTypeSetting::NITAddScan_DVBS2 == st)
427  {
428  const PaneDVBS2 *pane = paneDVBS2;
429 
430  startChan["std"] = "dvb";
431  startChan["type"] = "DVB_S2";
432  startChan["frequency"] = pane->frequency();
433  startChan["inversion"] = pane->inversion();
434  startChan["symbolrate"] = pane->symbolrate();
435  startChan["fec"] = pane->fec();
436  startChan["modulation"] = pane->modulation();
437  startChan["polarity"] = pane->polarity();
438  startChan["mod_sys"] = pane->mod_sys();
439  startChan["rolloff"] = pane->rolloff();
440  }
441 
442  return startChan;
443 }
444