43 if (ModuleData->IsUIInitialized())
47 ModuleData->MinFuncDesc = ModuleData->GetFuncGen()->GetMinCaps();
48 ModuleData->MaxFuncDesc = ModuleData->GetFuncGen()->GetMaxCaps();
49 ModuleData->DefaultFuncDesc = ModuleData->GetFuncGen()->GetParamDefaults();
50 ModuleData->WaveformCaps = ModuleData->GetFuncGen()->GetWaveformCaps();
51 ModuleData->TriggerCaps = ModuleData->GetFuncGen()->GetTriggerCaps();
54 auto InstrData = DynExp::dynamic_InstrumentData_cast<DynExpInstr::FunctionGenerator>(ModuleData->GetFuncGen()->GetInstrumentData());
58 ModuleData->CurrentWaveform = InstrData->GetCurrentWaveformType();
59 ModuleData->CurrentFrequencyInHz = InstrData->GetCurrentFrequencyInHz();
60 ModuleData->CurrentAmplitude = InstrData->GetCurrentAmplitude();
61 ModuleData->CurrentOffset = InstrData->GetCurrentOffset();
62 ModuleData->CurrentPhaseInRad = InstrData->GetCurrentPhaseInRad();
63 ModuleData->CurrentDutyCycle = InstrData->GetCurrentDutyCycle();
64 ModuleData->CurrentPulses = InstrData->GetCurrentPulses();
80 ModuleData->CurrentFrequencyInHz = ModuleData->DefaultFuncDesc.FrequencyInHz;
81 ModuleData->CurrentAmplitude = ModuleData->DefaultFuncDesc.Amplitude;
82 ModuleData->CurrentOffset = ModuleData->DefaultFuncDesc.Offset;
83 ModuleData->CurrentPhaseInRad = 0;
84 ModuleData->CurrentDutyCycle = .5;
85 ModuleData->CurrentPulses.Reset();
88 ModuleData->CurrentTriggerMode = InstrData->GetCurrentTriggerMode();
89 ModuleData->CurrentTriggerEdge = InstrData->GetCurrentTriggerEdge();
90 ModuleData->CurrentAutostart = InstrData->GetShouldAutostart();
93 const QSignalBlocker SBFrequencyInHzBlocker(
ui->SBFrequencyInHz);
94 const QSignalBlocker SBAmplitudeBlocker(
ui->SBAmplitude);
95 const QSignalBlocker SBYOffsetBlocker(
ui->SBYOffset);
96 const QSignalBlocker SBPhaseInDegreeBlocker(
ui->SBPhaseInDegree);
97 const QSignalBlocker SBDutyCycleBlocker(
ui->SBDutyCycle);
98 const QSignalBlocker CBAutostartBlocker(
ui->CBAutostart);
99 const QSignalBlocker TWPulsesBlocker(
ui->TWPulses);
100 const QSignalBlocker CBTriggerModeBlocker(
ui->CBTriggerMode);
101 const QSignalBlocker CBTriggerEdgeBlocker(
ui->CBTriggerEdge);
102 const QSignalBlocker BPersistBlocker(
ui->BPersist);
105 auto SigTypeListView = qobject_cast<QListView*>(
ui->CBSignalType->view());
107 const QSignalBlocker CBSignalTypeBlocker(
ui->CBSignalType);
110 SigTypeListView->setRowHidden(
ui->CBSignalType->findText(
"Sine", Qt::MatchFlag::MatchContains),
114 SigTypeListView->setRowHidden(
ui->CBSignalType->findText(
"Rect", Qt::MatchFlag::MatchContains),
117 SigTypeListView->setRowHidden(
ui->CBSignalType->findText(
"Ramp", Qt::MatchFlag::MatchContains),
121 SigTypeListView->setRowHidden(
ui->CBSignalType->findText(
"Pulse", Qt::MatchFlag::MatchContains),
126 int CBSignalTypeIndex = -1;
128 !SigTypeListView->isRowHidden(
ui->CBSignalType->findText(
"Sine", Qt::MatchFlag::MatchContains)))
129 CBSignalTypeIndex =
ui->CBSignalType->findText(
"Sine", Qt::MatchFlag::MatchContains);
131 !SigTypeListView->isRowHidden(
ui->CBSignalType->findText(
"Rect", Qt::MatchFlag::MatchContains)))
132 CBSignalTypeIndex =
ui->CBSignalType->findText(
"Rect", Qt::MatchFlag::MatchContains);
134 !SigTypeListView->isRowHidden(
ui->CBSignalType->findText(
"Ramp", Qt::MatchFlag::MatchContains)))
135 CBSignalTypeIndex =
ui->CBSignalType->findText(
"Ramp", Qt::MatchFlag::MatchContains);
137 !SigTypeListView->isRowHidden(
ui->CBSignalType->findText(
"Pulse", Qt::MatchFlag::MatchContains)))
138 CBSignalTypeIndex =
ui->CBSignalType->findText(
"Pulse", Qt::MatchFlag::MatchContains);
140 const auto RowHiddenFunc = [SigTypeListView](
int i) {
return SigTypeListView->isRowHidden(i); };
141 const auto SignalTypeIndexRange = std::views::iota(0,
ui->CBSignalType->count());
142 if (std::ranges::all_of(SignalTypeIndexRange, RowHiddenFunc))
143 for (
auto* Widget : this->findChildren<QWidget*>())
144 Widget->setEnabled(
false);
145 else if (CBSignalTypeIndex < 0)
147 auto FirstAvailable = std::ranges::find_if(SignalTypeIndexRange, RowHiddenFunc);
149 if (FirstAvailable != SignalTypeIndexRange.end())
152 ui->CBSignalType->setCurrentIndex(*FirstAvailable);
153 emit
ui->CBSignalType->currentTextChanged(
ui->CBSignalType->currentText());
158 const QSignalBlocker CBSignalTypeBlocker(
ui->CBSignalType);
159 ui->CBSignalType->setCurrentIndex(CBSignalTypeIndex);
163 ui->SBFrequencyInHz->setMinimum(ModuleData->MinFuncDesc.FrequencyInHz);
164 ui->SBFrequencyInHz->setMaximum(ModuleData->MaxFuncDesc.FrequencyInHz);
165 ui->SBFrequencyInHz->setValue(ModuleData->CurrentFrequencyInHz);
170 ui->SBAmplitude->setMinimum(ModuleData->MinFuncDesc.Amplitude);
171 ui->SBAmplitude->setMaximum(ModuleData->MaxFuncDesc.Amplitude);
172 ui->SBAmplitude->setValue(ModuleData->CurrentAmplitude);
173 ui->SBAmplitude->setSuffix(QString(
" ") + ModuleData->GetFuncGen()->GetValueUnitStr());
177 if ((ModuleData->MinFuncDesc.Offset == 0 && ModuleData->MaxFuncDesc.Offset == 0)
180 ui->LYOffset->setVisible(
false);
181 ui->SBYOffset->setVisible(
false);
185 ui->LYOffset->setVisible(
true);
186 ui->SBYOffset->setVisible(
true);
187 ui->SBYOffset->setMinimum(ModuleData->MinFuncDesc.Offset);
188 ui->SBYOffset->setMaximum(ModuleData->MaxFuncDesc.Offset);
189 ui->SBYOffset->setValue(ModuleData->CurrentOffset);
190 ui->SBYOffset->setSuffix(QString(
" ") + ModuleData->GetFuncGen()->GetValueUnitStr());
194 if (ModuleData->GetFuncGen()->IsPhaseAdjustable())
195 ui->SBPhaseInDegree->setValue(ModuleData->CurrentPhaseInRad / std::numbers::pi * 180.0);
198 ui->SBDutyCycle->setValue(ModuleData->CurrentDutyCycle * 100.0);
201 ui->TWPulses->clear();
202 ui->TWPulses->setRowCount(0);
203 ui->TWPulses->setHorizontalHeaderLabels({
"Time [us]",
"Value [" + QString(ModuleData->GetFuncGen()->GetValueUnitStr()) +
"]" });
204 auto OldDelegate =
ui->TWPulses->itemDelegateForColumn(1);
208 OldDelegate->deleteLater();
209 for (
const auto& Pulse : ModuleData->CurrentPulses.Pulses)
211 ui->TWPulses->insertRow(
ui->TWPulses->rowCount());
218 int CBTriggerModeIndex = 0;
220 CBTriggerModeIndex =
ui->CBTriggerMode->findText(
"Continuous", Qt::MatchFlag::MatchContains);
222 CBTriggerModeIndex =
ui->CBTriggerMode->findText(
"Single", Qt::MatchFlag::MatchContains);
224 CBTriggerModeIndex =
ui->CBTriggerMode->findText(
"Step", Qt::MatchFlag::MatchContains);
226 CBTriggerModeIndex =
ui->CBTriggerMode->findText(
"Manual", Qt::MatchFlag::MatchContains);
227 ui->CBTriggerMode->setCurrentIndex(CBTriggerModeIndex);
230 ui->CBTriggerEdge->findText(
"Fall", Qt::MatchFlag::MatchContains) :
ui->CBTriggerEdge->findText(
"Rise", Qt::MatchFlag::MatchContains));
235 ui->CBAutostart->setChecked(ModuleData->CurrentAutostart);
236 ui->BPersist->setChecked(ModuleData->CurrentPersistParameters);
238 ModuleData->SetUIInitialized();