MythTV  master
channelsettings.cpp
Go to the documentation of this file.
1 // Qt headers
2 #include <QWidget>
3 #include <QFile>
4 #include <QCoreApplication>
5 
6 // MythTV headers
7 #include "channelsettings.h"
8 #include "channelutil.h"
9 #include "programinfo.h" // for COMM_DETECT*, GetPreferredSkipTypeCombinations()
10 #include "mpegtables.h"
11 #include "mythdirs.h"
12 #include "cardutil.h"
13 
14 
16 {
17  QString fieldTag = (":WHERE" + id.getField().toUpper());
18  QString query(id.getField() + " = " + fieldTag);
19 
20  bindings.insert(fieldTag, id.getValue());
21 
22  return query;
23 }
24 
26 {
27  QString fieldTag = (":SET" + id.getField().toUpper());
28  QString nameTag = (":SET" + GetColumnName().toUpper());
29 
30  QString query(id.getField() + " = " + fieldTag + ", " +
31  GetColumnName() + " = " + nameTag);
32 
33  bindings.insert(fieldTag, id.getValue());
34  bindings.insert(nameTag, user->GetDBValue());
35 
36  return query;
37 }
38 
39 /*****************************************************************************
40  Channel Options - Common
41  *****************************************************************************/
42 
44 {
45  public:
46  explicit Name(const ChannelID &id) :
47  MythUITextEditSetting(new ChannelDBStorage(this, id, "name"))
48  {
49  setLabel(QCoreApplication::translate("(Common)", "Channel Name"));
50  }
51 };
52 
54 {
55  public:
56  explicit Channum(const ChannelID &id) :
57  MythUITextEditSetting(new ChannelDBStorage(this, id, "channum"))
58  {
59  setLabel(QCoreApplication::translate("(Common)", "Channel Number"));
60  setHelpText(QCoreApplication::translate("(Common)",
61  "This is the number by which the channel is known to MythTV."));
62  }
63 };
64 
66 {
67  public:
68  Source(const ChannelID &id, uint _default_sourceid) :
69  MythUIComboBoxSetting(new ChannelDBStorage(this, id, "sourceid")),
70  default_sourceid(_default_sourceid)
71  {
72  setLabel(QCoreApplication::translate("(Common)", "Video Source"));
73  }
74 
75  void Load(void) override // StandardSetting
76  {
79 
80  if (default_sourceid && !getValue().toUInt())
81  {
83  if (which)
84  setValue(which);
85  }
86  }
87 
88  void fillSelections(void)
89  {
90  addSelection(QCoreApplication::translate("(ChannelSettings)",
91  "[Not Selected]"), "0");
92 
94  query.prepare("SELECT name, sourceid "
95  "FROM videosource "
96  "ORDER BY sourceid");
97 
98  if (!query.exec() || !query.isActive())
99  {
100  MythDB::DBError("Source::fillSelections", query);
101  }
102  else
103  {
104  for (uint i = 1; query.next(); i++)
105  {
106  sourceid_to_index[query.value(1).toUInt()] = i;
107  addSelection(query.value(0).toString(),
108  query.value(1).toString());
109  }
110  }
111 
112  sourceid_to_index[0] = 0; // Not selected entry.
113  }
114 
115  private:
117  QMap<uint,uint> sourceid_to_index;
118 };
119 
121 {
122  public:
123  explicit Callsign(const ChannelID &id) :
124  MythUITextEditSetting(new ChannelDBStorage(this, id, "callsign"))
125  {
126  setLabel(QCoreApplication::translate("(Common)", "Callsign"));
127  }
128 };
129 
131  MythUIComboBoxSetting(new ChannelDBStorage(this, id, "tvformat"))
132 {
133  setLabel(QCoreApplication::translate("(ChannelSettings)", "TV Format"));
134  setHelpText(QCoreApplication::translate("(ChannelSettings)",
135  "If this channel uses a format other than TV Format in the General "
136  "Backend Setup screen, set it here."));
137 
138  addSelection(QCoreApplication::translate("(Common)", "Default"), "Default");
139 
140  QStringList list = GetFormats();
141  for (int i = 0; i < list.size(); i++)
142  addSelection(list[i]);
143 }
144 
146 {
147  QStringList list;
148 
149  list.push_back("NTSC");
150  list.push_back("NTSC-JP");
151  list.push_back("PAL");
152  list.push_back("PAL-60");
153  list.push_back("PAL-BG");
154  list.push_back("PAL-DK");
155  list.push_back("PAL-D");
156  list.push_back("PAL-I");
157  list.push_back("PAL-M");
158  list.push_back("PAL-N");
159  list.push_back("PAL-NC");
160  list.push_back("SECAM");
161  list.push_back("SECAM-D");
162  list.push_back("SECAM-DK");
163 
164  return list;
165 }
166 
168 {
169  public:
170  explicit TimeOffset(const ChannelID &id) :
171  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "tmoffset"),
172  -1440, 1440, 1)
173  {
174  setLabel(QCoreApplication::translate("(ChannelSettings)",
175  "DataDirect Time Offset"));
176 
177  setHelpText(QCoreApplication::translate("(ChannelSettings)",
178  "Offset (in minutes) to apply to the program guide data during "
179  "import. This can be used when the listings for a particular "
180  "channel are in a different time zone. (Works for DataDirect "
181  "listings only.)"));
182  }
183 };
184 
186 {
187  public:
188  explicit Priority(const ChannelID &id) :
189  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "recpriority"),
190  -99, 99, 1)
191  {
192  setLabel(QCoreApplication::translate("(ChannelSettings)", "Priority"));
193 
194  setHelpText(QCoreApplication::translate("(ChannelSettings)",
195  "Number of priority points to be added to any recording on this "
196  "channel during scheduling. Use a positive number as the priority "
197  "if you want this to be a preferred channel, a negative one to "
198  "depreciate this channel."));
199  }
200 };
201 
203 {
204  public:
205  explicit Icon(const ChannelID &id) :
206  MythUITextEditSetting(new ChannelDBStorage(this, id, "icon"))
207  {
208  setLabel(QCoreApplication::translate("(ChannelSettings)", "Icon"));
209 
210  setHelpText(QCoreApplication::translate("(ChannelSettings)",
211  "Image file to use as the icon for this channel on various MythTV "
212  "displays."));
213  }
214 };
215 
217 {
218  public:
219  explicit VideoFilters(const ChannelID &id) :
220  MythUITextEditSetting(new ChannelDBStorage(this, id, "videofilters"))
221  {
222  setLabel(QCoreApplication::translate("(ChannelSettings)",
223  "Video filters"));
224 
225  setHelpText(QCoreApplication::translate("(ChannelSettings)",
226  "Filters to be used when recording from this channel. Not used "
227  "with hardware encoding cards."));
228 
229  }
230 };
231 
232 
234 {
235  public:
236  explicit OutputFilters(const ChannelID &id) :
237  MythUITextEditSetting(new ChannelDBStorage(this, id, "outputfilters"))
238  {
239  setLabel(QCoreApplication::translate("(ChannelSettings)",
240  "Playback filters"));
241 
242  setHelpText(QCoreApplication::translate("(ChannelSettings)",
243  "Filters to be used when recordings from this channel are viewed. "
244  "Start with a plus to append to the global playback filters."));
245  }
246 };
247 
249 {
250  public:
251  XmltvID(const ChannelID &id, const QString &_sourceName) :
252  MythUIComboBoxSetting(new ChannelDBStorage(this, id, "xmltvid"), true),
253  sourceName(_sourceName)
254  {
255  setLabel(QCoreApplication::translate("(Common)", "XMLTV ID"));
256 
257  setHelpText(QCoreApplication::translate("(ChannelSettings)",
258  "ID used by listing services to get an exact correspondence "
259  "between a channel in your line-up and a channel in their "
260  "database. Normally this is set automatically when "
261  "'mythfilldatabase' is run."));
262  }
263 
264  void Load(void) override // StandardSetting
265  {
266  fillSelections();
268  }
269 
270  void fillSelections(void)
271  {
272  clearSelections();
273 
274  QString xmltvFile = GetConfDir() + '/' + sourceName + ".xmltv";
275 
276  if (QFile::exists(xmltvFile))
277  {
278  QFile file(xmltvFile);
279  if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
280  return;
281 
282  QStringList idList;
283 
284  while (!file.atEnd())
285  {
286  QByteArray line = file.readLine();
287 
288  if (line.startsWith("channel="))
289  {
290  QString id = line.mid(8, -1).trimmed();
291  idList.append(id);
292  }
293  }
294 
295  idList.sort();
296 
297  for (int x = 0; x < idList.size(); x++)
298  addSelection(idList.at(x), idList.at(x));
299  }
300  }
301 
302  private:
303  QString sourceName;
304 };
305 
307 {
308  public:
309  explicit ServiceID(const ChannelID &id)
310  : MythUISpinBoxSetting(new ChannelDBStorage(this, id, "serviceid"),
311  -1, UINT16_MAX, 1, true, "NULL")
312  {
313  setLabel(QCoreApplication::translate("(ChannelSettings)", "ServiceID"));
314 
315  setHelpText(QCoreApplication::translate("(ChannelSettings)",
316  "Service ID (Program Number) of desired channel within the transport stream. "
317  "If there is only one channel, then setting this to anything will still find it."));
318  }
319 
320  void Load(void) override // StandardSetting
321  {
323 
324  if (getValue().isNull())
325  setValue("-1");
326  }
327 
328  QString getValue(void) const override // StandardSetting
329  {
330  if (StandardSetting::getValue().toInt() == -1)
331  return QString();
332  else
333  return StandardSetting::getValue();
334  }
335 };
336 
338 {
339  public:
340  explicit CommMethod(const ChannelID &id) :
341  MythUIComboBoxSetting(new ChannelDBStorage(this, id, "commmethod"))
342  {
343  setLabel(QCoreApplication::translate("(ChannelSettings)",
344  "Commercial Detection Method"));
345 
346  setHelpText(QCoreApplication::translate("(ChannelSettings)",
347  "Changes the method of commercial detection used for recordings on "
348  "this channel or skips detection by marking the channel as "
349  "Commercial Free."));
350 
351  deque<int> tmp = GetPreferredSkipTypeCombinations();
352  tmp.push_front(COMM_DETECT_UNINIT);
353  tmp.push_back(COMM_DETECT_COMMFREE);
354 
355  for (uint i = 0; i < tmp.size(); i++)
356  addSelection(SkipTypeToString(tmp[i]), QString::number(tmp[i]));
357  }
358 };
359 
361 {
362  public:
363  explicit Visible(const ChannelID &id) :
364  MythUICheckBoxSetting(new ChannelDBStorage(this, id, "visible"))
365  {
366  setValue(true);
367 
368  setLabel(QCoreApplication::translate("(ChannelSettings)", "Visible"));
369 
370  setHelpText(QCoreApplication::translate("(ChannelSettings)",
371  "If enabled, the channel will be visible in the EPG."));
372  }
373 };
374 
376 {
377  public:
378  explicit OnAirGuide(const ChannelID &id) :
379  MythUICheckBoxSetting(new ChannelDBStorage(this, id, "useonairguide"))
380  {
381  setLabel(QCoreApplication::translate("(ChannelSettings)",
382  "Use on air guide"));
383 
384  setHelpText(QCoreApplication::translate("(ChannelSettings)",
385  "If enabled, guide information for this channel will be updated "
386  "using 'Over-the-Air' program listings."));
387  }
388 };
389 
390 /*****************************************************************************
391  Channel Options - Video 4 Linux
392  *****************************************************************************/
393 
395 {
396  public:
397  explicit Freqid(const ChannelID &id) :
398  MythUITextEditSetting(new ChannelDBStorage(this, id, "freqid"))
399  {
400  setLabel(QCoreApplication::translate("(ChannelSettings)",
401  "Freq/Channel"));
402  setHelpText(QCoreApplication::translate("(ChannelSettings)",
403  "Depending on the tuner type, specify either the exact "
404  "frequency (in kHz) or a valid channel "
405  "number that will be understood by your tuners."));
406  }
407 };
408 
410 {
411  public:
412  explicit Finetune(const ChannelID& id)
413  : MythUISpinBoxSetting(new ChannelDBStorage(this, id, "finetune"),
414  -300, 300, 1)
415  {
416  setLabel(QCoreApplication::translate("(ChannelSettings)",
417  "Finetune (kHz)"));
418 
419  setHelpText(QCoreApplication::translate("(ChannelSettings)",
420  "Value to be added to your desired frequency (in kHz) for "
421  "'fine tuning'."));
422 
423  setValue("0");
424  }
425 };
426 
428 {
429  public:
430  explicit Contrast(const ChannelID &id) :
431  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "contrast"),
432  0, 65535, 655)
433  {
434  setLabel(QCoreApplication::translate("(Common)", "Contrast"));
435  }
436 };
437 
439 {
440  public:
441  explicit Brightness(const ChannelID &id) :
442  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "brightness"),
443  0, 65535, 655)
444  {
445  setLabel(QCoreApplication::translate("(Common)", "Brightness"));
446  }
447 };
448 
450 {
451  public:
452  explicit Colour(const ChannelID &id) :
453  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "colour"),
454  0, 65535, 655)
455  {
456  setLabel(QCoreApplication::translate("(Common)", "Color"));
457  }
458 };
459 
460 class Hue : public MythUISpinBoxSetting
461 {
462  public:
463  explicit Hue(const ChannelID &id) :
464  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "hue"),
465  0, 65535, 655)
466  {
467  setLabel(QCoreApplication::translate("(Common)", "Hue"));
468  }
469 };
470 
472  uint default_sourceid, bool add_freqid)
473 {
474  setLabel(QCoreApplication::translate("(ChannelSettings)",
475  "Channel Options - Common"));
476  addChild(new Name(id));
477 
478  Source *source = new Source(id, default_sourceid);
479  source->Load();
480 
481  Channum *channum = new Channum(id);
482  addChild(channum);
483  if (add_freqid)
484  {
485  freqid = new Freqid(id);
486  addChild(freqid);
487  }
488  else
489  freqid = nullptr;
490  addChild(new Callsign(id));
491 
492 
493 
494  addChild(new Visible(id));
495  addChild(new ServiceID(id));
496 
497  addChild(source);
498  addChild(new ChannelTVFormat(id));
499  addChild(new Priority(id));
500 
501  addChild(onairguide = new OnAirGuide(id));
502  addChild(xmltvID = new XmltvID(id, source->getValueLabel()));
503  addChild(new TimeOffset(id));
504 
505  addChild(new CommMethod(id));
506  addChild(new Icon(id));
507 
508  connect(onairguide, SIGNAL(valueChanged( bool)),
509  this, SLOT( onAirGuideChanged(bool)));
510  connect(source, SIGNAL(valueChanged( const QString&)),
511  this, SLOT( sourceChanged(const QString&)));
512 };
513 
515 {
516  (void)fValue;
517 }
518 
519 void ChannelOptionsCommon::sourceChanged(const QString& sourceid)
520 {
521  bool supports_eit = true;
522  bool uses_eit_only = false;
523 
524  MSqlQuery query(MSqlQuery::InitCon());
525  query.prepare("SELECT cardtype "
526  "FROM capturecard, videosource "
527  "WHERE capturecard.sourceid = videosource.sourceid AND "
528  " videosource.sourceid = :SOURCEID");
529  query.bindValue(":SOURCEID", sourceid);
530 
531  if (!query.exec() || !query.isActive())
532  MythDB::DBError("sourceChanged -- supports eit", query);
533  else
534  {
535  supports_eit = (query.size()) ? false : true;
536  while (query.next())
537  {
538  supports_eit |= CardUtil::IsEITCapable(
539  query.value(0).toString().toUpper());
540  }
541 
542  query.prepare("SELECT xmltvgrabber "
543  "FROM videosource "
544  "WHERE sourceid = :SOURCEID");
545  query.bindValue(":SOURCEID", sourceid);
546 
547  if (!query.exec() || !query.isActive())
548  MythDB::DBError("sourceChanged -- eit only", query);
549  else
550  {
551  uses_eit_only = (query.size()) ? true : false;
552  while (query.next())
553  {
554  uses_eit_only &= (query.value(0).toString() == "eitonly");
555  }
556  }
557  }
558 
559  onairguide->setEnabled(supports_eit);
560  xmltvID->setEnabled(!uses_eit_only);
561  xmltvID->Load();
562 }
563 
565 {
566  setLabel(QCoreApplication::translate("(ChannelSettings)",
567  "Channel Options - Filters"));
568 
569  addChild(new VideoFilters(id));
570  addChild(new OutputFilters(id));
571 }
572 
574 {
575  setLabel(QCoreApplication::translate("(ChannelSettings)",
576  "Channel Options - Video4Linux"));
577 
578  addChild(new Freqid(id));
579  addChild(new Finetune(id));
580  addChild(new Contrast(id));
581  addChild(new Brightness(id));
582  addChild(new Colour(id));
583  addChild(new Hue(id));
584 };
585 
586 /*****************************************************************************
587  Channel Options - Video 4 Linux
588  *****************************************************************************/
589 
591  cid(id)
592 {
593  setLabel(QCoreApplication::translate("(ChannelSettings)",
594  "Channel Options - Raw Transport Stream"));
595 
596  const uint mx = kMaxPIDs;
597  pids.resize(mx);
598  sids.resize(mx);
599  pcrs.resize(mx);
600 
601  for (uint i = 0; i < mx; i++)
602  {
603  addChild((pids[i] = new TransTextEditSetting()));
604  pids[i]->setLabel("PID");
606  sids[i]->setLabel(" StreamID");
607  for (uint j = 0x101; j <= 0x1ff; j++)
608  {
609  QString desc = StreamID::GetDescription(j&0xff);
610  if (!desc.isEmpty())
611  sids[i]->addSelection(
612  QString("%1 (0x%2)")
613  .arg(desc).arg(j&0xff,2,16,QLatin1Char('0')),
614  QString::number(j), false);
615  }
616  for (uint j = 0x101; j <= 0x1ff; j++)
617  {
618  QString desc = StreamID::GetDescription(j&0xff);
619  if (desc.isEmpty())
620  sids[i]->addSelection(
621  QString("0x%1").arg(j&0xff,2,16,QLatin1Char('0')),
622  QString::number(j), false);
623  }
624 /* we don't allow tables right now, PAT & PMT generated on the fly
625  for (uint j = 0; j <= 0xff; j++)
626  {
627  QString desc = TableID::GetDescription(j);
628  if (!desc.isEmpty())
629  {
630  sids[i]->addSelection(
631  QString("%1 (0x%2)").arg(j,0,16,QLatin1Char('0')),
632  QString::number(j),
633  false);
634  }
635  }
636 */
638  pcrs[i]->setLabel(" Is PCR");
639  }
640 };
641 
643 {
644  uint chanid = cid.getValue().toUInt();
645 
646  pid_cache_t pid_cache;
647  if (!ChannelUtil::GetCachedPids(chanid, pid_cache))
648  return;
649 
650  pid_cache_t::const_iterator it = pid_cache.begin();
651  for (uint i = 0; i < kMaxPIDs && it != pid_cache.end(); )
652  {
653  if (!(it->IsPermanent()))
654  {
655  ++it;
656  continue;
657  }
658 
659  pids[i]->setValue(QString("0x%1")
660  .arg(it->GetPID(),2,16,QLatin1Char('0')));
661  sids[i]->setValue(QString::number(it->GetComposite()&0x1ff));
662  pcrs[i]->setValue(it->IsPCRPID());
663 
664  ++it;
665  ++i;
666  }
667 }
668 
670 {
671  uint chanid = cid.getValue().toUInt();
672 
673  pid_cache_t pid_cache;
674  for (uint i = 0; i < kMaxPIDs; i++)
675  {
676  bool ok;
677  uint pid = pids[i]->getValue().toUInt(&ok, 0);
678  if (!ok || !sids[i]->getValue().toUInt())
679  continue;
680 
681  pid_cache.push_back(
683  pid, sids[i]->getValue().toUInt() | 0x10000 |
684  (pcrs[i]->getValue().toUInt() ? 0x200 : 0x0)));
685  }
686 
687  ChannelUtil::SaveCachedPids(chanid, pid_cache, true /* delete_all */);
688 }
689 
690 /* vim: set expandtab tabstop=4 shiftwidth=4: */
QString sourceName
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
Definition: mythdbcon.cpp:794
StorageUser * user
Definition: mythstorage.h:46
QString getValueLabel(void) const
void bindValue(const QString &placeholder, const QVariant &val)
Definition: mythdbcon.cpp:875
void Save(void) override
#define Brightness
Definition: synaesthesia.h:12
VERBOSE_PREAMBLE Most true
Definition: verbosedefs.h:91
const ChannelID & cid
QString GetColumnName(void) const
Definition: mythstorage.h:43
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition: mythdbcon.h:125
static bool GetCachedPids(uint chanid, pid_cache_t &pid_cache)
Returns cached MPEG PIDs when given a Channel ID.
virtual void Load(void)
void addSelection(const QString &label, QString value=QString(), bool select=false)
void fillSelections(void)
virtual void setHelpText(const QString &str)
vector< pid_cache_item_t > pid_cache_t
Definition: channelutil.h:43
ChannelOptionsRawTS(const ChannelID &id)
int size(void) const
Definition: mythdbcon.h:187
static QStringList GetFormats(void)
OutputFilters(const ChannelID &id)
void Load(void) override
QString SkipTypeToString(int flags)
unsigned int uint
Definition: compat.h:140
CommMethod(const ChannelID &id)
virtual QString GetDBValue(void) const =0
static const uint kMaxPIDs
std::vector< TransTextEditSetting * > pids
Contrast(const ChannelID &id)
Channum(const ChannelID &id)
static guint32 * tmp
Definition: goom_core.c:35
ChannelTVFormat(const ChannelID &id)
Finetune(const ChannelID &id)
int id
Definition: filldata.h:32
ChannelOptionsFilters(const ChannelID &id)
virtual QString getValue(void) const
Name(const ChannelID &id)
QString GetConfDir(void)
Definition: mythdirs.cpp:224
QVariant value(int i) const
Definition: mythdbcon.h:182
ServiceID(const ChannelID &id)
Source(const ChannelID &id, uint _default_sourceid)
void setValue(int value) override
XmltvID(const ChannelID &id, const QString &_sourceName)
virtual void setLabel(QString str)
std::vector< TransMythUIComboBoxSetting * > sids
Colour(const ChannelID &id)
static bool IsEITCapable(const QString &rawtype)
Definition: cardutil.h:155
QString GetSetClause(MSqlBindings &bindings) const override
QMap< uint, uint > sourceid_to_index
TimeOffset(const ChannelID &id)
bool isActive(void) const
Definition: mythdbcon.h:188
OnAirGuide(const ChannelID &id)
virtual void setEnabled(bool enabled)
static MSqlQueryInfo InitCon(ConnectionReuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Definition: mythdbcon.cpp:547
VideoFilters(const ChannelID &id)
virtual void addChild(StandardSetting *child)
void Load(void) override
QString GetWhereClause(MSqlBindings &bindings) const override
QString getValue(void) const override
deque< int > GetPreferredSkipTypeCombinations(void)
uint default_sourceid
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
Definition: mythdbcon.cpp:819
Priority(const ChannelID &id)
static int x0
Definition: mythsocket.cpp:59
static QString Source(const QNetworkRequest &request)
Definition: netstream.cpp:141
Visible(const ChannelID &id)
static bool SaveCachedPids(uint chanid, const pid_cache_t &_pid_cache, bool delete_all=false)
Saves PIDs for PSIP tables to database.
static QString GetDescription(uint streamID)
Freqid(const ChannelID &id)
Callsign(const ChannelID &id)
void setValue(const QString &) override
QMap< QString, QVariant > MSqlBindings
typedef for a map of string -> string bindings for generic queries.
Definition: mythdbcon.h:98
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
Definition: mythdbcon.cpp:615
void sourceChanged(const QString &)
static void DBError(const QString &where, const MSqlQuery &query)
Definition: mythdb.cpp:179
ChannelOptionsV4L(const ChannelID &id)
void Load(void) override
std::vector< TransMythUICheckBoxSetting * > pcrs
Brightness(const ChannelID &id)
virtual void setValue(const QString &newValue)
Hue(const ChannelID &id)
void Load(void) override
Icon(const ChannelID &id)
void fillSelections(void)
ChannelOptionsCommon(const ChannelID &id, uint default_sourceid, bool add_freqid)
void valueChanged(const QString &)