MythTV master
paneatsc.h
Go to the documentation of this file.
1/* -*- Mode: c++ -*-
2 * vim: set expandtab tabstop=4 shiftwidth=4:
3 */
4
5#ifndef PANE_ATSC_H
6#define PANE_ATSC_H
7
8#include <algorithm>
9
10// MythTV headers
13#include "modulationsetting.h"
14#include "frequencytables.h"
15
16class PaneATSC : public GroupSetting
17{
18 Q_OBJECT
19
20 public:
21 PaneATSC(const QString &target, StandardSetting *setting) :
27 {
28 setVisible(false);
29
30 connect(m_atscTable, qOverload<const QString&>(&StandardSetting::valueChanged),
32
33 connect(m_atscModulation, qOverload<const QString&>(&StandardSetting::valueChanged),
35
36 m_transportStart->setLabel(tr("First Channel"));
37 m_transportStart->setHelpText(tr("Start scanning at this channel."));
38
39 m_transportEnd->setLabel(tr("Last Channel"));
40 m_transportEnd->setHelpText(tr("Stop scanning after this channel."));
41
42 m_transportCount->setLabel(tr("Channel Count"));
43 m_transportCount->setHelpText(tr("Total number of channels to scan."));
45
46 auto *range = new GroupSetting();
47 range->setLabel(tr("Scanning Range"));
48 range->addChild(m_transportStart);
49 range->addChild(m_transportEnd);
50 range->addChild(m_transportCount);
51
52 setting->addTargetedChildren(target,
53 {this, m_atscTable, m_atscModulation, range});
54
55 connect(m_transportStart, qOverload<const QString&>(&StandardSetting::valueChanged),
57 connect(m_transportEnd, qOverload<const QString&>(&StandardSetting::valueChanged),
59
61 }
62
63 ~PaneATSC() override
64 {
65 while (!m_tables.empty())
66 {
67 delete m_tables.back();
68 m_tables.pop_back();
69 }
70 }
71
72 void SetFrequencyTable(const QString &atsc_table)
73 { m_atscTable->setValue(atsc_table); }
74
75 QString GetFrequencyTable(void) const
76 { return m_atscTable->getValue(); }
77 QString GetModulation(void) const
78 { return m_atscModulation->getValue(); }
80 QString &start, QString &end) const
81 {
83 return false;
84
85 start = m_transportStart->getValue();
86 end = m_transportEnd->getValue();
87
88 return !start.isEmpty() && !end.isEmpty();
89 }
90
91 protected slots:
92 void FreqTableChanged(const QString &freqtbl)
93 {
94 if (freqtbl == "us")
96 else if (m_atscModulation->getValue() == "vsb8")
98
100 }
101
102 void ModulationChanged(const QString &/*modulation*/)
103 {
105 }
106
107 void TransportRangeChanged(const QString &/*range*/)
108 {
111 if (b < a)
112 {
114 b = a;
115 }
116
117 int diff = std::max(b + 1 - a, 0);
118 m_transportCount->setValue(QString::number(diff));
119 }
120
121 protected:
123 {
126 m_transportCount->setValue(QString::number(0));
127
129
130 bool first = true;
131 for (auto it = m_tables.begin(); it != m_tables.end(); ++it)
132 {
133 auto next = it;
134 ++next;
135
136 const FrequencyTable &ft = **it;
137 int name_num = ft.m_nameOffset;
138 QString strNameFormat = ft.m_nameFormat;
140 while (freq <= ft.m_frequencyEnd)
141 {
142 QString name = strNameFormat;
143 if (strNameFormat.indexOf("%") >= 0)
144 name = strNameFormat.arg(name_num);
145
146 m_transportStart->addSelection(name, name, first);
147 first = false;
148
149 bool last = (next == m_tables.end()) &&
150 ((freq + ft.m_frequencyStep) >= ft.m_frequencyEnd);
151 m_transportEnd->addSelection(name, name, last);
152
153 name_num++;
154 freq += ft.m_frequencyStep;
155 }
156 }
157 }
158
160 {
161 QString format = "atsc";
162 QString modulation = GetModulation();
163 QString country = GetFrequencyTable();
164
165 const QString new_tables_sig =
166 QString("%1_%2_%3").arg(format, modulation, country);
167
168 if (new_tables_sig != m_tablesSig)
169 {
170 while (!m_tables.empty())
171 {
172 delete m_tables.back();
173 m_tables.pop_back();
174 }
175
176 m_tablesSig = new_tables_sig;
177
179 format, modulation, country);
180 }
181 }
182
183 protected:
189 QString m_tablesSig;
191};
192
193#endif // PANE_ATSC_H
QString m_nameFormat
uint64_t m_frequencyStep
uint64_t m_frequencyEnd
uint64_t m_frequencyStart
GroupSetting()=default
virtual int size(void) const
void addSelection(const QString &label, QString value=QString(), bool select=false)
void setValue(int value) override
int getValueIndex(const QString &value) const
QString GetFrequencyTable(void) const
Definition: paneatsc.h:75
QString GetModulation(void) const
Definition: paneatsc.h:77
ScanATSCModulation * m_atscModulation
Definition: paneatsc.h:185
void ResetTransportRange(void)
Definition: paneatsc.h:122
bool GetFrequencyTableRange(QString &start, QString &end) const
Definition: paneatsc.h:79
GroupSetting * m_transportCount
Definition: paneatsc.h:188
QString m_tablesSig
Definition: paneatsc.h:189
TransMythUIComboBoxSetting * m_transportStart
Definition: paneatsc.h:186
TransMythUIComboBoxSetting * m_transportEnd
Definition: paneatsc.h:187
void ModulationChanged(const QString &)
Definition: paneatsc.h:102
void FreqTableChanged(const QString &freqtbl)
Definition: paneatsc.h:92
PaneATSC(const QString &target, StandardSetting *setting)
Definition: paneatsc.h:21
freq_table_list_t m_tables
Definition: paneatsc.h:190
void FetchFrequencyTables(void)
Definition: paneatsc.h:159
ScanFrequencyTable * m_atscTable
Definition: paneatsc.h:184
void TransportRangeChanged(const QString &)
Definition: paneatsc.h:107
void SetFrequencyTable(const QString &atsc_table)
Definition: paneatsc.h:72
~PaneATSC() override
Definition: paneatsc.h:63
virtual void setReadOnly(bool readonly)
virtual void setHelpText(const QString &str)
void addTargetedChildren(const QString &value, std::initializer_list< StandardSetting * > settings)
void setVisible(bool visible)
virtual void setValue(const QString &newValue)
void valueChanged(const QString &newValue)
virtual QString getValue(void) const
virtual void setLabel(QString str)
static const std::array< const uint32_t, 4 > freq
Definition: element.cpp:45
unsigned int uint
Definition: freesurround.h:24
freq_table_list_t get_matching_freq_tables(const QString &format, const QString &modulation, const QString &country)
std::vector< const FrequencyTable * > freq_table_list_t