40 if (ModuleData->IsUIInitialized())
44 ModuleData->MinFuncDesc = ModuleData->GetFuncGen()->GetMinCaps();
45 ModuleData->MaxFuncDesc = ModuleData->GetFuncGen()->GetMaxCaps();
46 ModuleData->DefaultFuncDesc = ModuleData->GetFuncGen()->GetParamDefaults();
47 ModuleData->WaveformCaps = ModuleData->GetFuncGen()->GetWaveformCaps();
48 ModuleData->TriggerCaps = ModuleData->GetFuncGen()->GetTriggerCaps();
51 auto InstrData = DynExp::dynamic_InstrumentData_cast<DynExpInstr::FunctionGenerator>(ModuleData->GetFuncGen()->GetInstrumentData());
55 ModuleData->CurrentWaveform = InstrData->GetCurrentWaveformType();
56 ModuleData->CurrentFrequencyInHz = InstrData->GetCurrentFrequencyInHz();
57 ModuleData->CurrentAmplitude = InstrData->GetCurrentAmplitude();
58 ModuleData->CurrentOffset = InstrData->GetCurrentOffset();
59 ModuleData->CurrentPhaseInRad = InstrData->GetCurrentPhaseInRad();
60 ModuleData->CurrentDutyCycle = InstrData->GetCurrentDutyCycle();
61 ModuleData->CurrentPulses = InstrData->GetCurrentPulses();
77 ModuleData->CurrentFrequencyInHz = ModuleData->DefaultFuncDesc.FrequencyInHz;
78 ModuleData->CurrentAmplitude = ModuleData->DefaultFuncDesc.Amplitude;
79 ModuleData->CurrentOffset = ModuleData->DefaultFuncDesc.Offset;
80 ModuleData->CurrentPhaseInRad = 0;
81 ModuleData->CurrentDutyCycle = .5;
82 ModuleData->CurrentPulses.Reset();
85 ModuleData->CurrentTriggerMode = InstrData->GetCurrentTriggerMode();
86 ModuleData->CurrentTriggerEdge = InstrData->GetCurrentTriggerEdge();
87 ModuleData->CurrentAutostart = InstrData->GetShouldAutostart();
90 const QSignalBlocker SBFrequencyInHzBlocker(
ui.SBFrequencyInHz);
91 const QSignalBlocker SBAmplitudeBlocker(
ui.SBAmplitude);
92 const QSignalBlocker SBYOffsetBlocker(
ui.SBYOffset);
93 const QSignalBlocker SBPhaseInDegreeBlocker(
ui.SBPhaseInDegree);
94 const QSignalBlocker SBDutyCycleBlocker(
ui.SBDutyCycle);
95 const QSignalBlocker CBAutostartBlocker(
ui.CBAutostart);
96 const QSignalBlocker TWPulsesBlocker(
ui.TWPulses);
97 const QSignalBlocker CBTriggerModeBlocker(
ui.CBTriggerMode);
98 const QSignalBlocker CBTriggerEdgeBlocker(
ui.CBTriggerEdge);
99 const QSignalBlocker BPersistBlocker(
ui.BPersist);
102 auto SigTypeListView = qobject_cast<QListView*>(
ui.CBSignalType->view());
104 const QSignalBlocker CBSignalTypeBlocker(
ui.CBSignalType);
107 SigTypeListView->setRowHidden(
ui.CBSignalType->findText(
"Sine", Qt::MatchFlag::MatchContains),
111 SigTypeListView->setRowHidden(
ui.CBSignalType->findText(
"Rect", Qt::MatchFlag::MatchContains),
114 SigTypeListView->setRowHidden(
ui.CBSignalType->findText(
"Ramp", Qt::MatchFlag::MatchContains),
118 SigTypeListView->setRowHidden(
ui.CBSignalType->findText(
"Pulse", Qt::MatchFlag::MatchContains),
123 int CBSignalTypeIndex = -1;
125 !SigTypeListView->isRowHidden(
ui.CBSignalType->findText(
"Sine", Qt::MatchFlag::MatchContains)))
126 CBSignalTypeIndex =
ui.CBSignalType->findText(
"Sine", Qt::MatchFlag::MatchContains);
128 !SigTypeListView->isRowHidden(
ui.CBSignalType->findText(
"Rect", Qt::MatchFlag::MatchContains)))
129 CBSignalTypeIndex =
ui.CBSignalType->findText(
"Rect", Qt::MatchFlag::MatchContains);
131 !SigTypeListView->isRowHidden(
ui.CBSignalType->findText(
"Ramp", Qt::MatchFlag::MatchContains)))
132 CBSignalTypeIndex =
ui.CBSignalType->findText(
"Ramp", Qt::MatchFlag::MatchContains);
134 !SigTypeListView->isRowHidden(
ui.CBSignalType->findText(
"Pulse", Qt::MatchFlag::MatchContains)))
135 CBSignalTypeIndex =
ui.CBSignalType->findText(
"Pulse", Qt::MatchFlag::MatchContains);
137 const auto RowHiddenFunc = [SigTypeListView](
int i) {
return SigTypeListView->isRowHidden(i); };
138 const auto SignalTypeIndexRange = std::views::iota(0,
ui.CBSignalType->count());
139 if (std::ranges::all_of(SignalTypeIndexRange, RowHiddenFunc))
140 for (
auto* Widget : this->findChildren<QWidget*>())
141 Widget->setEnabled(
false);
142 else if (CBSignalTypeIndex < 0)
144 auto FirstAvailable = std::ranges::find_if(SignalTypeIndexRange, RowHiddenFunc);
146 if (FirstAvailable != SignalTypeIndexRange.end())
149 ui.CBSignalType->setCurrentIndex(*FirstAvailable);
150 emit
ui.CBSignalType->currentTextChanged(
ui.CBSignalType->currentText());
155 const QSignalBlocker CBSignalTypeBlocker(
ui.CBSignalType);
156 ui.CBSignalType->setCurrentIndex(CBSignalTypeIndex);
160 ui.SBFrequencyInHz->setMinimum(ModuleData->MinFuncDesc.FrequencyInHz);
161 ui.SBFrequencyInHz->setMaximum(ModuleData->MaxFuncDesc.FrequencyInHz);
162 ui.SBFrequencyInHz->setValue(ModuleData->CurrentFrequencyInHz);
167 ui.SBAmplitude->setMinimum(ModuleData->MinFuncDesc.Amplitude);
168 ui.SBAmplitude->setMaximum(ModuleData->MaxFuncDesc.Amplitude);
169 ui.SBAmplitude->setValue(ModuleData->CurrentAmplitude);
170 ui.SBAmplitude->setSuffix(QString(
" ") + ModuleData->GetFuncGen()->GetValueUnitStr());
174 if ((ModuleData->MinFuncDesc.Offset == 0 && ModuleData->MaxFuncDesc.Offset == 0)
177 ui.LYOffset->setVisible(
false);
178 ui.SBYOffset->setVisible(
false);
182 ui.LYOffset->setVisible(
true);
183 ui.SBYOffset->setVisible(
true);
184 ui.SBYOffset->setMinimum(ModuleData->MinFuncDesc.Offset);
185 ui.SBYOffset->setMaximum(ModuleData->MaxFuncDesc.Offset);
186 ui.SBYOffset->setValue(ModuleData->CurrentOffset);
187 ui.SBYOffset->setSuffix(QString(
" ") + ModuleData->GetFuncGen()->GetValueUnitStr());
191 if (ModuleData->GetFuncGen()->IsPhaseAdjustable())
192 ui.SBPhaseInDegree->setValue(ModuleData->CurrentPhaseInRad / std::numbers::pi * 180.0);
195 ui.SBDutyCycle->setValue(ModuleData->CurrentDutyCycle * 100.0);
198 ui.TWPulses->clear();
199 ui.TWPulses->setRowCount(0);
200 ui.TWPulses->setHorizontalHeaderLabels({
"Time [us]",
"Value [" + QString(ModuleData->GetFuncGen()->GetValueUnitStr()) +
"]" });
201 auto OldDelegate =
ui.TWPulses->itemDelegateForColumn(1);
205 OldDelegate->deleteLater();
206 for (
const auto& Pulse : ModuleData->CurrentPulses.Pulses)
208 ui.TWPulses->insertRow(
ui.TWPulses->rowCount());
215 int CBTriggerModeIndex = 0;
217 CBTriggerModeIndex =
ui.CBTriggerMode->findText(
"Continuous", Qt::MatchFlag::MatchContains);
219 CBTriggerModeIndex =
ui.CBTriggerMode->findText(
"Single", Qt::MatchFlag::MatchContains);
221 CBTriggerModeIndex =
ui.CBTriggerMode->findText(
"Step", Qt::MatchFlag::MatchContains);
223 CBTriggerModeIndex =
ui.CBTriggerMode->findText(
"Manual", Qt::MatchFlag::MatchContains);
224 ui.CBTriggerMode->setCurrentIndex(CBTriggerModeIndex);
227 ui.CBTriggerEdge->findText(
"Fall", Qt::MatchFlag::MatchContains) :
ui.CBTriggerEdge->findText(
"Rise", Qt::MatchFlag::MatchContains));
232 ui.CBAutostart->setChecked(ModuleData->CurrentAutostart);
233 ui.BPersist->setChecked(ModuleData->CurrentPersistParameters);
235 ModuleData->SetUIInitialized();