2
0
forked from Ivasoft/DSView

Add 32 channels trigger support

This commit is contained in:
DreamSourceLab
2020-01-08 10:49:11 +08:00
parent caad239315
commit 7328b0b2cc
20 changed files with 777 additions and 367 deletions

View File

@@ -23,6 +23,7 @@
#include "../sigsession.h"
#include "../device/devinst.h"
#include "../dialogs/dsmessagebox.h"
#include "../view/view.h"
#include <QObject>
#include <QGridLayout>
@@ -30,6 +31,7 @@
#include <QPainter>
#include <QRegExpValidator>
#include <QSplitter>
#include <QInputMethodEvent>
#include "libsigrok4DSL/libsigrok.h"
@@ -42,14 +44,16 @@ TriggerDock::TriggerDock(QWidget *parent, SigSession &session) :
QScrollArea(parent),
_session(session)
{
int i;
_cur_ch_num = 16;
if (_session.get_device()) {
GVariant *gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_TOTAL_CH_NUM);
if (gvar != NULL) {
_cur_ch_num = g_variant_get_int16(gvar);
g_variant_unref(gvar);
}
}
_widget = new QWidget(this);
QFont font("Monaco");
font.setStyleHint(QFont::Monospace);
font.setFixedPitch(true);
_simple_radioButton = new QRadioButton(_widget);
_simple_radioButton->setChecked(true);
_adv_radioButton = new QRadioButton(_widget);
@@ -66,189 +70,15 @@ TriggerDock::TriggerDock(QWidget *parent, SigSession &session) :
_stages_label = new QLabel(_widget);
_stages_label->setDisabled(true);
stages_comboBox = new QComboBox(_widget);
for (i = 1; i <= TriggerStages; i++)
for (int i = 1; i <= TriggerStages; i++)
stages_comboBox->addItem(QString::number(i));
//stages_comboBox->setCurrentIndex(stages_comboBox->count() - 1);
stages_comboBox->setDisabled(true);
_stage_tabWidget = new QTabWidget(_widget);
_stage_tabWidget->setTabPosition(QTabWidget::East);
//_stage_tabWidget->setDisabled(true);
_stage_tabWidget->setUsesScrollButtons(false);
QRegExp value_rx("[10XRFCxrfc ]+");
QValidator *value_validator = new QRegExpValidator(value_rx, _widget);
for (i = 0; i < TriggerStages; i++) {
QComboBox *_logic_comboBox = new QComboBox(_widget);
_logic_comboBox->addItem(tr("Or"));
_logic_comboBox->addItem(tr("And"));
_logic_comboBox->setCurrentIndex(1);
_logic_comboBox_list.push_back(_logic_comboBox);
QLineEdit *_value0_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _widget);
_value0_lineEdit->setFont(font);
_value0_lineEdit->setValidator(value_validator);
_value0_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_value0_lineEdit->setInputMask("X X X X X X X X X X X X X X X X");
_value0_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_value0_lineEdit_list.push_back(_value0_lineEdit);
QSpinBox *_count_spinBox = new QSpinBox(_widget);
_count_spinBox->setRange(1, INT32_MAX);
_count_spinBox->setButtonSymbols(QAbstractSpinBox::NoButtons);
_count_spinBox_list.push_back(_count_spinBox);
QComboBox *_inv0_comboBox = new QComboBox(_widget);
_inv0_comboBox->addItem(tr("=="));
_inv0_comboBox->addItem(tr("!="));
_inv0_comboBox_list.push_back(_inv0_comboBox);
QLineEdit *_value1_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _widget);
_value1_lineEdit->setFont(font);
_value1_lineEdit->setValidator(value_validator);
_value1_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_value1_lineEdit->setInputMask("X X X X X X X X X X X X X X X X");
_value1_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_value1_lineEdit_list.push_back(_value1_lineEdit);
QComboBox *_inv1_comboBox = new QComboBox(_widget);
_inv1_comboBox->addItem(tr("=="));
_inv1_comboBox->addItem(tr("!="));
_inv1_comboBox_list.push_back(_inv1_comboBox);
QCheckBox *_contiguous_checkbox = new QCheckBox(_widget);
_contiguous_checkbox_list.push_back(_contiguous_checkbox);
QLabel *value_exp_label = new QLabel("1 1 1 1 1 1\n5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 ", _widget);
QLabel *inv_exp_label = new QLabel(_widget);
_inv_exp_label_list.push_back(inv_exp_label);
QLabel *count_exp_label = new QLabel(_widget);
_count_exp_label_list.push_back(count_exp_label);
value_exp_label->setFont(font);
QVBoxLayout *stage_layout = new QVBoxLayout();
QGridLayout *stage_glayout = new QGridLayout();
stage_glayout->setVerticalSpacing(5);
stage_glayout->addWidget(value_exp_label, 1, 0);
stage_glayout->addWidget(inv_exp_label, 1, 1);
stage_glayout->addWidget(_value0_lineEdit, 2, 0);
stage_glayout->addWidget(_inv0_comboBox, 2, 1);
stage_glayout->addWidget(_logic_comboBox, 2, 2);
stage_glayout->addWidget(_value1_lineEdit, 3, 0);
stage_glayout->addWidget(_inv1_comboBox, 3, 1);
stage_glayout->addWidget(new QLabel(_widget), 4, 0);
QLabel *contiguous_label = new QLabel(_widget);
_contiguous_label_list.push_back(contiguous_label);
stage_glayout->addWidget(contiguous_label, 5, 1, 1, 2);
stage_glayout->addWidget(_contiguous_checkbox, 5, 0, 1, 1, Qt::AlignRight);
stage_glayout->addWidget(count_exp_label, 6, 1, 1, 2);
stage_glayout->addWidget(_count_spinBox, 6, 0);
stage_layout->addLayout(stage_glayout);
stage_layout->addSpacing(20);
QLabel *stage_note_label = new QLabel(_widget);
_stage_note_label_list.push_back(stage_note_label);
stage_layout->addWidget(stage_note_label);
stage_layout->addStretch(1);
QGroupBox *stage_groupBox = new QGroupBox(_widget);
stage_groupBox->setFlat(true);
stage_groupBox->setLayout(stage_layout);
_stage_groupBox_list.push_back(stage_groupBox);
_stage_tabWidget->addTab((QWidget *)stage_groupBox, QString::number(i));
connect(_value0_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_value1_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
}
_serial_start_label = new QLabel(_widget);
_serial_start_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _widget);
_serial_start_lineEdit->setFont(font);
_serial_start_lineEdit->setValidator(value_validator);
_serial_start_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_start_lineEdit->setInputMask("X X X X X X X X X X X X X X X X");
_serial_start_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_stop_label = new QLabel(_widget);
_serial_stop_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _widget);
_serial_stop_lineEdit->setFont(font);
_serial_stop_lineEdit->setValidator(value_validator);
_serial_stop_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_stop_lineEdit->setInputMask("X X X X X X X X X X X X X X X X");
_serial_stop_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_edge_label = new QLabel(_widget);
_serial_edge_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _widget);
_serial_edge_lineEdit->setFont(font);
_serial_edge_lineEdit->setValidator(value_validator);
_serial_edge_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_edge_lineEdit->setInputMask("X X X X X X X X X X X X X X X X");
_serial_edge_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_data_label = new QLabel(_widget);
_serial_data_comboBox = new QComboBox(_widget);
for(i = 0; i < TriggerProbes; i++)
_serial_data_comboBox->addItem(QString::number(i));
_serial_value_label = new QLabel(_widget);
_serial_value_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _widget);
_serial_value_lineEdit->setFont(font);
_serial_value_lineEdit->setValidator(value_validator);
_serial_value_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_value_lineEdit->setInputMask("X X X X X X X X X X X X X X X X");
_serial_value_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_bits_comboBox = new QComboBox(_widget);
for(i = 1; i <= 16; i++)
_serial_bits_comboBox->addItem(QString::number(i));
QLabel *serial_value_exp_label = new QLabel("1 1 1 1 1 1\n5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0", _widget);
serial_value_exp_label->setFont(font);
QVBoxLayout *serial_layout = new QVBoxLayout();
QGridLayout *serial_glayout = new QGridLayout();
serial_glayout->setVerticalSpacing(5);
serial_glayout->addWidget(serial_value_exp_label, 1, 1, 1, 3);
serial_glayout->addWidget(_serial_start_label, 2, 0);
serial_glayout->addWidget(_serial_start_lineEdit, 2, 1, 1, 3);
serial_glayout->addWidget(new QLabel(_widget), 2, 4);
serial_glayout->addWidget(_serial_stop_label, 3, 0);
serial_glayout->addWidget(_serial_stop_lineEdit, 3, 1, 1, 3);
serial_glayout->addWidget(_serial_edge_label, 4, 0);
serial_glayout->addWidget(_serial_edge_lineEdit, 4, 1, 1, 3);
serial_glayout->addWidget(new QLabel(_widget), 5, 0, 1, 5);
serial_glayout->addWidget(_serial_data_label, 6, 0);
serial_glayout->addWidget(_serial_data_comboBox, 6, 1);
_data_bits_label = new QLabel(_widget);
serial_glayout->addWidget(_data_bits_label, 7, 0);
serial_glayout->addWidget(_serial_bits_comboBox, 7, 1);
serial_glayout->addWidget(_serial_value_label, 8, 0);
serial_glayout->addWidget(_serial_value_lineEdit, 8, 1, 1, 3);
_serial_note_label = new QLabel(_widget);
serial_layout->addLayout(serial_glayout);
serial_layout->addSpacing(20);
serial_layout->addWidget(_serial_note_label);
serial_layout->addStretch(1);
_serial_groupBox = new QGroupBox(_widget);
_serial_groupBox->setFlat(true);
_serial_groupBox->setLayout(serial_layout);
//_serial_groupBox->setDisabled(true);
connect(_serial_start_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_serial_stop_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_serial_edge_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_serial_value_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
_adv_tabWidget = new QTabWidget(_widget);
_adv_tabWidget->setTabPosition(QTabWidget::North);
_adv_tabWidget->setDisabled(true);
_adv_tabWidget->addTab((QWidget *)_stage_tabWidget, tr("Stage Trigger"));
_adv_tabWidget->addTab((QWidget *)_serial_groupBox, tr("Serial Trigger"));
setup_adv_tab();
connect(_simple_radioButton, SIGNAL(clicked()), this, SLOT(simple_trigger()));
connect(_adv_radioButton, SIGNAL(clicked()), this, SLOT(adv_trigger()));
@@ -383,17 +213,16 @@ void TriggerDock::widget_enable(int index)
{
(void) index;
int i;
int enable_stages;
_stages_label->setDisabled(false);
stages_comboBox->setVisible(true);
stages_comboBox->setDisabled(false);
_adv_tabWidget->setDisabled(false);
enable_stages = stages_comboBox->currentText().toInt();
for (i = 0; i < enable_stages; i++) {
for (int i = 0; i < enable_stages; i++) {
_stage_tabWidget->setTabEnabled(i, true);
}
for (i = enable_stages; i < TriggerStages; i++) {
for (int i = enable_stages; i < TriggerStages; i++) {
_stage_tabWidget->setTabEnabled(i, false);
}
}
@@ -401,8 +230,16 @@ void TriggerDock::widget_enable(int index)
void TriggerDock::value_changed()
{
QLineEdit* sc=dynamic_cast<QLineEdit*>(sender());
if(sc != NULL)
if(sc != NULL) {
for (int i = 0; i < TriggerProbes*2-1; i++) {
if ((i >= sc->text().size()) || (i % 2 == 0 && sc->text().at(i) == ' ')) {
sc->setText(sc->text().insert(i, 'X'));
i++;
}
}
sc->setText(sc->text().toUpper());
lineEdit_highlight(sc);
}
}
void TriggerDock::device_updated()
@@ -441,6 +278,18 @@ void TriggerDock::device_updated()
}
}
}
gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_TOTAL_CH_NUM);
if (gvar != NULL) {
int ch_num = g_variant_get_int16(gvar);
g_variant_unref(gvar);
if (ch_num != _cur_ch_num) {
_cur_ch_num = ch_num;
setup_adv_tab();
retranslateUi();
}
}
}
bool TriggerDock::commit_trigger()
@@ -462,43 +311,60 @@ bool TriggerDock::commit_trigger()
// trigger stage update
ds_trigger_set_stage(stages_comboBox->currentText().toInt() - 1);
int i;
// trigger value update
if (_adv_tabWidget->currentIndex() == 0) {
for (i = 0; i < stages_comboBox->currentText().toInt(); i++) {
ds_trigger_stage_set_value(i, TriggerProbes,
_value0_lineEdit_list.at(i)->text().toLocal8Bit().data(),
_value1_lineEdit_list.at(i)->text().toLocal8Bit().data());
for (int i = 0; i < stages_comboBox->currentText().toInt(); i++) {
QString value0_str, value1_str;
if (_cur_ch_num == 32) {
value0_str = _value0_ext32_lineEdit_list.at(i)->text() + " " + _value0_lineEdit_list.at(i)->text();
value1_str = _value1_ext32_lineEdit_list.at(i)->text() + " " + _value1_lineEdit_list.at(i)->text();
} else {
value0_str = _value0_lineEdit_list.at(i)->text();
value1_str = _value1_lineEdit_list.at(i)->text();
}
ds_trigger_stage_set_value(i, _cur_ch_num, value0_str.toLocal8Bit().data(),
value1_str.toLocal8Bit().data());
}
} else if(_adv_tabWidget->currentIndex() == 1){
ds_trigger_stage_set_value(0, TriggerProbes,
_serial_start_lineEdit->text().toLocal8Bit().data(),
_serial_stop_lineEdit->text().toLocal8Bit().data());
ds_trigger_stage_set_value(1, TriggerProbes,
_serial_edge_lineEdit->text().toLocal8Bit().data(),
_value1_lineEdit_list.at(1)->text().toLocal8Bit().data());
QString start_str, stop_str, edge_str, comp_str;
if (_cur_ch_num == 32) {
start_str = _serial_start_ext32_lineEdit->text() + " " + _serial_start_lineEdit->text();
stop_str = _serial_stop_ext32_lineEdit->text() + " " + _serial_stop_lineEdit->text();
edge_str = _serial_edge_ext32_lineEdit->text() + " " + _serial_edge_lineEdit->text();
comp_str = _value1_ext32_lineEdit_list.at(1)->text() + " " + _value1_lineEdit_list.at(1)->text();
} else {
start_str = _serial_start_lineEdit->text();
stop_str = _serial_stop_lineEdit->text();
edge_str = _serial_edge_lineEdit->text();
comp_str = _value1_lineEdit_list.at(1)->text();
}
ds_trigger_stage_set_value(0, _cur_ch_num, start_str.toLocal8Bit().data(),
stop_str.toLocal8Bit().data());
ds_trigger_stage_set_value(1, _cur_ch_num, edge_str.toLocal8Bit().data(),
comp_str.toLocal8Bit().data());
//_serial_data_comboBox
const int data_channel = _serial_data_comboBox->currentText().toInt();
char channel[31];
for(i = 0; i < 31; i++){
if (i == (30 - 2*data_channel))
channel[i] = '0';
else if (i%2 == 0)
channel[i] = 'X';
QString channel = "X X X X X X X X X X X X X X X X";
QString channel_ext32 = "X X X X X X X X X X X X X X X X";
if (_cur_ch_num == 32) {
if (data_channel < 16)
channel.replace(30 - 2*data_channel, 1, '0');
else
channel[i] = ' ';
channel_ext32.replace(30 - 2*(data_channel - 16), 1, '0');
} else {
channel.replace(30 - 2*data_channel, 1, '0');
}
ds_trigger_stage_set_value(2, TriggerProbes,
channel,
_value1_lineEdit_list.at(2)->text().toLocal8Bit().data());
channel.toLocal8Bit().data(),
channel_ext32.toLocal8Bit().data());
ds_trigger_stage_set_value(STriggerDataStage, TriggerProbes,
_serial_value_lineEdit->text().toLocal8Bit().data(),
_value1_lineEdit_list.at(3)->text().toLocal8Bit().data());
}
// trigger logic update
for (i = 0; i < stages_comboBox->currentText().toInt(); i++) {
for (int i = 0; i < stages_comboBox->currentText().toInt(); i++) {
const char logic = (_contiguous_checkbox_list.at(i)->isChecked() << 1) +
_logic_comboBox_list.at(i)->currentIndex();
ds_trigger_stage_set_logic(i, TriggerProbes,
@@ -506,7 +372,7 @@ bool TriggerDock::commit_trigger()
}
// trigger inv update
for (i = 0; i < stages_comboBox->currentText().toInt(); i++) {
for (int i = 0; i < stages_comboBox->currentText().toInt(); i++) {
ds_trigger_stage_set_inv(i, TriggerProbes,
_inv0_comboBox_list.at(i)->currentIndex(),
_inv1_comboBox_list.at(i)->currentIndex());
@@ -514,7 +380,7 @@ bool TriggerDock::commit_trigger()
// trigger count update
if (_adv_tabWidget->currentIndex() == 0) {
for (i = 0; i < stages_comboBox->currentText().toInt(); i++) {
for (int i = 0; i < stages_comboBox->currentText().toInt(); i++) {
ds_trigger_stage_set_count(i, TriggerProbes,
_count_spinBox_list.at(i)->value(),
0);
@@ -564,6 +430,14 @@ QJsonObject TriggerDock::get_session()
trigSes[logic_str] = _logic_comboBox_list.at(i)->currentIndex();
trigSes[count_str] = _count_spinBox_list.at(i)->value();
trigSes[conti_str] = _contiguous_checkbox_list.at(i)->isChecked();
if (_cur_ch_num == 32) {
QString value0_ext32_str = "stageTriggerExt32Value0" + QString::number(i);
QString value1_ext32_str = "stageTriggerExt32Value1" + QString::number(i);
trigSes[value0_ext32_str] = _value0_ext32_lineEdit_list.at(i)->text();
trigSes[value1_ext32_str] = _value1_ext32_lineEdit_list.at(i)->text();
}
}
trigSes["serialTriggerStart"] = _serial_start_lineEdit->text();
@@ -573,6 +447,12 @@ QJsonObject TriggerDock::get_session()
trigSes["serialTriggerData"] = _serial_value_lineEdit->text();
trigSes["serialTriggerBits"] = _serial_bits_comboBox->currentIndex();
if (_cur_ch_num == 32) {
trigSes["serialTriggerExt32Start"] = _serial_start_ext32_lineEdit->text();
trigSes["serialTriggerExt32Stop"] = _serial_stop_ext32_lineEdit->text();
trigSes["serialTriggerExt32Clock"] = _serial_edge_ext32_lineEdit->text();
}
return trigSes;
}
@@ -597,21 +477,408 @@ void TriggerDock::set_session(QJsonObject ses)
QString conti_str = "stageTriggerContiguous" + QString::number(i);
_value0_lineEdit_list.at(i)->setText(ses[value0_str].toString());
lineEdit_highlight(_value0_lineEdit_list.at(i));
_value1_lineEdit_list.at(i)->setText(ses[value1_str].toString());
lineEdit_highlight(_value1_lineEdit_list.at(i));
_inv0_comboBox_list.at(i)->setCurrentIndex(ses[inv0_str].toDouble());
_inv1_comboBox_list.at(i)->setCurrentIndex(ses[inv1_str].toDouble());
_logic_comboBox_list.at(i)->setCurrentIndex(ses[logic_str].toDouble());
_count_spinBox_list.at(i)->setValue(ses[count_str].toDouble());
_contiguous_checkbox_list.at(i)->setChecked(ses[conti_str].toBool());
if (_cur_ch_num == 32) {
QString value0_ext32_str = "stageTriggerExt32Value0" + QString::number(i);
QString value1_ext32_str = "stageTriggerExt32Value1" + QString::number(i);
if (ses.contains(value0_ext32_str)) {
_value0_ext32_lineEdit_list.at(i)->setText(ses[value0_ext32_str].toString());
lineEdit_highlight(_value0_ext32_lineEdit_list.at(i));
}
if (ses.contains(value1_ext32_str)) {
_value1_ext32_lineEdit_list.at(i)->setText(ses[value1_ext32_str].toString());
lineEdit_highlight(_value1_ext32_lineEdit_list.at(i));
}
}
}
_serial_start_lineEdit->setText(ses["serialTriggerStart"].toString());
lineEdit_highlight(_serial_start_lineEdit);
_serial_stop_lineEdit->setText(ses["serialTriggerStop"].toString());
lineEdit_highlight(_serial_stop_lineEdit);
_serial_edge_lineEdit->setText(ses["serialTriggerClock"].toString());
lineEdit_highlight(_serial_edge_lineEdit);
_serial_data_comboBox->setCurrentIndex(ses["serialTriggerChannel"].toDouble());
_serial_value_lineEdit->setText(ses["serialTriggerData"].toString());
lineEdit_highlight(_serial_value_lineEdit);
_serial_bits_comboBox->setCurrentIndex(ses["serialTriggerBits"].toDouble());
if (_cur_ch_num == 32) {
if (ses.contains("serialTriggerExt32Start")) {
_serial_start_ext32_lineEdit->setText(ses["serialTriggerExt32Start"].toString());
lineEdit_highlight(_serial_start_ext32_lineEdit);
}
if (ses.contains("serialTriggerExt32Stop")) {
_serial_stop_ext32_lineEdit->setText(ses["serialTriggerExt32Stop"].toString());
lineEdit_highlight(_serial_stop_ext32_lineEdit);
}
if (ses.contains("serialTriggerExt32Clock")) {
_serial_edge_ext32_lineEdit->setText(ses["serialTriggerExt32Clock"].toString());
lineEdit_highlight(_serial_edge_ext32_lineEdit);
}
}
}
void TriggerDock::setup_adv_tab()
{
int row;
for (int i = _adv_tabWidget->count(); i > 0; i--)
{
_adv_tabWidget->widget(i-1)->deleteLater();
_adv_tabWidget->removeTab(i-1);
}
_logic_comboBox_list.clear();
_value0_lineEdit_list.clear();
_count_spinBox_list.clear();
_inv0_comboBox_list.clear();
_value1_lineEdit_list.clear();
_inv1_comboBox_list.clear();
_contiguous_checkbox_list.clear();
_inv_exp_label_list.clear();
_count_exp_label_list.clear();
_contiguous_label_list.clear();
_stage_note_label_list.clear();
_stage_groupBox_list.clear();
_value0_ext32_lineEdit_list.clear();
_value1_ext32_lineEdit_list.clear();
QFont font("Monaco");
font.setStyleHint(QFont::Monospace);
font.setFixedPitch(true);
_stage_tabWidget = new QTabWidget(_widget);
_stage_tabWidget->setTabPosition(QTabWidget::East);
//_stage_tabWidget->setDisabled(true);
_stage_tabWidget->setUsesScrollButtons(false);
const QString mask = "N N N N N N N N N N N N N N N N";
QRegExp value_rx("[10XRFCxrfc ]+");
QValidator *value_validator = new QRegExpValidator(value_rx, _stage_tabWidget);
for (int i = 0; i < TriggerStages; i++) {
QComboBox *_logic_comboBox = new QComboBox(_stage_tabWidget);
_logic_comboBox->addItem(tr("Or"));
_logic_comboBox->addItem(tr("And"));
_logic_comboBox->setCurrentIndex(1);
_logic_comboBox_list.push_back(_logic_comboBox);
QLineEdit *_value0_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _stage_tabWidget);
_value0_lineEdit->setFont(font);
_value0_lineEdit->setValidator(value_validator);
_value0_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_value0_lineEdit->setInputMask(mask);
_value0_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_value0_lineEdit_list.push_back(_value0_lineEdit);
QSpinBox *_count_spinBox = new QSpinBox(_stage_tabWidget);
_count_spinBox->setRange(1, INT32_MAX);
_count_spinBox->setButtonSymbols(QAbstractSpinBox::NoButtons);
_count_spinBox_list.push_back(_count_spinBox);
QComboBox *_inv0_comboBox = new QComboBox(_stage_tabWidget);
_inv0_comboBox->addItem(tr("=="));
_inv0_comboBox->addItem(tr("!="));
_inv0_comboBox_list.push_back(_inv0_comboBox);
QLineEdit *_value1_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _stage_tabWidget);
_value1_lineEdit->setFont(font);
_value1_lineEdit->setValidator(value_validator);
_value1_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_value1_lineEdit->setInputMask(mask);
_value1_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_value1_lineEdit_list.push_back(_value1_lineEdit);
QComboBox *_inv1_comboBox = new QComboBox(_stage_tabWidget);
_inv1_comboBox->addItem(tr("=="));
_inv1_comboBox->addItem(tr("!="));
_inv1_comboBox_list.push_back(_inv1_comboBox);
connect(_value0_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_value1_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
QCheckBox *_contiguous_checkbox = new QCheckBox(_stage_tabWidget);
_contiguous_checkbox_list.push_back(_contiguous_checkbox);
QLabel *value0_exp_label = new QLabel("15 ---------- 8 7 ----------- 0 ", _stage_tabWidget);
value0_exp_label->setFont(font);
QLabel *inv0_exp_label = new QLabel(_stage_tabWidget);
_inv_exp_label_list.push_back(inv0_exp_label);
QLabel *value1_exp_label = new QLabel("15 ---------- 8 7 ----------- 0 ", _stage_tabWidget);
value1_exp_label->setFont(font);
QLabel *inv1_exp_label = new QLabel(_stage_tabWidget);
_inv_exp_label_list.push_back(inv1_exp_label);
QLabel *count_exp_label = new QLabel(_stage_tabWidget);
_count_exp_label_list.push_back(count_exp_label);
QVBoxLayout *stage_layout = new QVBoxLayout();
QGridLayout *stage_glayout = new QGridLayout();
stage_glayout->setVerticalSpacing(5);
row = 1;
if (_cur_ch_num == 32) {
QLineEdit *_value0_ext32_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _stage_tabWidget);
_value0_ext32_lineEdit->setFont(font);
_value0_ext32_lineEdit->setValidator(value_validator);
_value0_ext32_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_value0_ext32_lineEdit->setInputMask(mask);
_value0_ext32_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_value0_ext32_lineEdit_list.push_back(_value0_ext32_lineEdit);
QLineEdit *_value1_ext32_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _stage_tabWidget);
_value1_ext32_lineEdit->setFont(font);
_value1_ext32_lineEdit->setValidator(value_validator);
_value1_ext32_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_value1_ext32_lineEdit->setInputMask(mask);
_value1_ext32_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_value1_ext32_lineEdit_list.push_back(_value1_ext32_lineEdit);
QLabel *value0_ext32_exp_label = new QLabel("31 --------- 24 23 ---------- 16", _stage_tabWidget);
value0_ext32_exp_label->setFont(font);
QLabel *value1_ext32_exp_label = new QLabel("31 --------- 24 23 ---------- 16", _stage_tabWidget);
value1_ext32_exp_label->setFont(font);
stage_glayout->addWidget(value0_ext32_exp_label, row++, 0);
stage_glayout->addWidget(_value0_ext32_lineEdit, row++, 0);
stage_glayout->addWidget(value0_exp_label, row, 0);
stage_glayout->addWidget(inv0_exp_label, row++, 1);
stage_glayout->addWidget(_value0_lineEdit, row, 0);
stage_glayout->addWidget(_inv0_comboBox, row, 1);
stage_glayout->addWidget(_logic_comboBox, row++, 2);
stage_glayout->addWidget(new QLabel(_stage_tabWidget), row++, 0);
stage_glayout->addWidget(value1_ext32_exp_label, row++, 0);
stage_glayout->addWidget(_value1_ext32_lineEdit, row++, 0);
stage_glayout->addWidget(value1_exp_label, row, 0);
stage_glayout->addWidget(inv1_exp_label, row++, 1);
stage_glayout->addWidget(_value1_lineEdit, row, 0);
stage_glayout->addWidget(_inv1_comboBox, row++, 1);
connect(_value0_ext32_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_value1_ext32_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
} else {
stage_glayout->addWidget(value0_exp_label, row, 0);
stage_glayout->addWidget(inv0_exp_label, row++, 1);
stage_glayout->addWidget(_value0_lineEdit, row, 0);
stage_glayout->addWidget(_inv0_comboBox, row, 1);
stage_glayout->addWidget(_logic_comboBox, row++, 2);
stage_glayout->addWidget(new QLabel(_stage_tabWidget), row++, 0);
stage_glayout->addWidget(value1_exp_label, row, 0);
stage_glayout->addWidget(inv1_exp_label, row++, 1);
stage_glayout->addWidget(_value1_lineEdit, row, 0);
stage_glayout->addWidget(_inv1_comboBox, row++, 1);
}
stage_glayout->addWidget(new QLabel(_stage_tabWidget), row++, 0);
QLabel *contiguous_label = new QLabel(_stage_tabWidget);
_contiguous_label_list.push_back(contiguous_label);
stage_glayout->addWidget(contiguous_label, row, 1, 1, 2);
stage_glayout->addWidget(_contiguous_checkbox, row++, 0, 1, 1, Qt::AlignRight);
stage_glayout->addWidget(count_exp_label, row, 1, 1, 2);
stage_glayout->addWidget(_count_spinBox, row++, 0);
stage_layout->addLayout(stage_glayout);
stage_layout->addSpacing(20);
QLabel *stage_note_label = new QLabel(_stage_tabWidget);
_stage_note_label_list.push_back(stage_note_label);
stage_layout->addWidget(stage_note_label);
stage_layout->addStretch(1);
QGroupBox *stage_groupBox = new QGroupBox(_stage_tabWidget);
stage_groupBox->setFlat(true);
stage_groupBox->setLayout(stage_layout);
_stage_groupBox_list.push_back(stage_groupBox);
_stage_tabWidget->addTab((QWidget *)stage_groupBox, QString::number(i));
}
_serial_groupBox = new QGroupBox(_widget);
_serial_groupBox->setFlat(true);
_serial_start_label = new QLabel(_serial_groupBox);
_serial_start_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _serial_groupBox);
_serial_start_lineEdit->setFont(font);
_serial_start_lineEdit->setValidator(value_validator);
_serial_start_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_start_lineEdit->setInputMask(mask);
_serial_start_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_stop_label = new QLabel(_serial_groupBox);
_serial_stop_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _serial_groupBox);
_serial_stop_lineEdit->setFont(font);
_serial_stop_lineEdit->setValidator(value_validator);
_serial_stop_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_stop_lineEdit->setInputMask(mask);
_serial_stop_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_edge_label = new QLabel(_serial_groupBox);
_serial_edge_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _serial_groupBox);
_serial_edge_lineEdit->setFont(font);
_serial_edge_lineEdit->setValidator(value_validator);
_serial_edge_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_edge_lineEdit->setInputMask(mask);
_serial_edge_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_data_label = new QLabel(_serial_groupBox);
_serial_data_comboBox = new QComboBox(_serial_groupBox);
for(int i = 0; i < _cur_ch_num; i++)
_serial_data_comboBox->addItem(QString::number(i));
_serial_value_label = new QLabel(_serial_groupBox);
_serial_value_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _serial_groupBox);
_serial_value_lineEdit->setFont(font);
_serial_value_lineEdit->setValidator(value_validator);
_serial_value_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_value_lineEdit->setInputMask(mask);
_serial_value_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_bits_comboBox = new QComboBox(_serial_groupBox);
for(int i = 1; i <= 16; i++)
_serial_bits_comboBox->addItem(QString::number(i));
QVBoxLayout *serial_layout = new QVBoxLayout();
QGridLayout *serial_glayout = new QGridLayout();
serial_glayout->setVerticalSpacing(5);
row = 1;
if (_cur_ch_num == 32) {
_serial_start_ext32_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _serial_groupBox);
_serial_start_ext32_lineEdit->setFont(font);
_serial_start_ext32_lineEdit->setValidator(value_validator);
_serial_start_ext32_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_start_ext32_lineEdit->setInputMask(mask);
_serial_start_ext32_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_stop_ext32_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _serial_groupBox);
_serial_stop_ext32_lineEdit->setFont(font);
_serial_stop_ext32_lineEdit->setValidator(value_validator);
_serial_stop_ext32_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_stop_ext32_lineEdit->setInputMask(mask);
_serial_stop_ext32_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
_serial_edge_ext32_lineEdit = new QLineEdit("X X X X X X X X X X X X X X X X", _serial_groupBox);
_serial_edge_ext32_lineEdit->setFont(font);
_serial_edge_ext32_lineEdit->setValidator(value_validator);
_serial_edge_ext32_lineEdit->setMaxLength(TriggerProbes * 2 - 1);
_serial_edge_ext32_lineEdit->setInputMask(mask);
_serial_edge_ext32_lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
connect(_serial_start_ext32_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_serial_stop_ext32_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_serial_edge_ext32_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
QLabel *serial0_value_exp_label = new QLabel("31 --------- 24 23 ---------- 16", _serial_groupBox);
serial0_value_exp_label->setFont(font);
serial_glayout->addWidget(serial0_value_exp_label, row++, 1, 1, 3);
serial_glayout->addWidget(_serial_start_ext32_lineEdit, row, 1, 1, 3);
serial_glayout->addWidget(new QLabel(_serial_groupBox), row++, 4);
QLabel *serial1_value_exp_label = new QLabel("15 ---------- 8 7 ----------- 0 ", _serial_groupBox);
serial1_value_exp_label->setFont(font);
serial_glayout->addWidget(serial1_value_exp_label, row++, 1, 1, 3);
serial_glayout->addWidget(_serial_start_label, row, 0);
serial_glayout->addWidget(_serial_start_lineEdit, row, 1, 1, 3);
serial_glayout->addWidget(new QLabel(_serial_groupBox), row++, 4);
serial_glayout->addWidget(new QLabel(_stage_tabWidget), row++, 0);
QLabel *serial2_value_exp_label = new QLabel("31 --------- 24 23 ---------- 16", _serial_groupBox);
serial2_value_exp_label->setFont(font);
serial_glayout->addWidget(serial2_value_exp_label, row++, 1, 1, 3);
serial_glayout->addWidget(_serial_stop_ext32_lineEdit, row++, 1, 1, 3);
QLabel *serial3_value_exp_label = new QLabel("15 ---------- 8 7 ----------- 0 ", _serial_groupBox);
serial3_value_exp_label->setFont(font);
serial_glayout->addWidget(serial3_value_exp_label, row++, 1, 1, 3);
serial_glayout->addWidget(_serial_stop_label, row, 0);
serial_glayout->addWidget(_serial_stop_lineEdit, row++, 1, 1, 3);
serial_glayout->addWidget(new QLabel(_stage_tabWidget), row++, 0);
QLabel *serial4_value_exp_label = new QLabel("31 --------- 24 23 ---------- 16", _serial_groupBox);
serial4_value_exp_label->setFont(font);
serial_glayout->addWidget(serial4_value_exp_label, row++, 1, 1, 3);
serial_glayout->addWidget(_serial_edge_ext32_lineEdit, row++, 1, 1, 3);
QLabel *serial5_value_exp_label = new QLabel("15 ---------- 8 7 ----------- 0 ", _serial_groupBox);
serial5_value_exp_label->setFont(font);
serial_glayout->addWidget(serial5_value_exp_label, row++, 1, 1, 3);
serial_glayout->addWidget(_serial_edge_label, row, 0);
serial_glayout->addWidget(_serial_edge_lineEdit, row++, 1, 1, 3);
} else {
QLabel *serial0_value_exp_label = new QLabel("15 ---------- 8 7 ----------- 0 ", _serial_groupBox);
serial0_value_exp_label->setFont(font);
serial_glayout->addWidget(serial0_value_exp_label, row++, 1, 1, 3);
serial_glayout->addWidget(_serial_start_label, row, 0);
serial_glayout->addWidget(_serial_start_lineEdit, row, 1, 1, 3);
serial_glayout->addWidget(new QLabel(_serial_groupBox), row++, 4);
serial_glayout->addWidget(new QLabel(_stage_tabWidget), row++, 0);
QLabel *serial1_value_exp_label = new QLabel("15 ---------- 8 7 ----------- 0 ", _serial_groupBox);
serial1_value_exp_label->setFont(font);
serial_glayout->addWidget(serial1_value_exp_label, row++, 1, 1, 3);
serial_glayout->addWidget(_serial_stop_label, row, 0);
serial_glayout->addWidget(_serial_stop_lineEdit, row++, 1, 1, 3);
serial_glayout->addWidget(new QLabel(_stage_tabWidget), row++, 0);
QLabel *serial2_value_exp_label = new QLabel("15 ---------- 8 7 ----------- 0 ", _serial_groupBox);
serial2_value_exp_label->setFont(font);
serial_glayout->addWidget(serial2_value_exp_label, row++, 1, 1, 3);
serial_glayout->addWidget(_serial_edge_label, row, 0);
serial_glayout->addWidget(_serial_edge_lineEdit, row++, 1, 1, 3);
}
serial_glayout->addWidget(new QLabel(_serial_groupBox), row++, 0, 1, 5);
serial_glayout->addWidget(_serial_data_label, row, 0);
serial_glayout->addWidget(_serial_data_comboBox, row++, 1);
_data_bits_label = new QLabel(_serial_groupBox);
serial_glayout->addWidget(_data_bits_label, row, 0);
serial_glayout->addWidget(_serial_bits_comboBox, row++, 1);
serial_glayout->addWidget(_serial_value_label, row, 0);
serial_glayout->addWidget(_serial_value_lineEdit, row++, 1, 1, 3);
_serial_note_label = new QLabel(_serial_groupBox);
serial_layout->addLayout(serial_glayout);
serial_layout->addSpacing(20);
serial_layout->addWidget(_serial_note_label);
serial_layout->addStretch(1);
_serial_groupBox->setLayout(serial_layout);
connect(_serial_start_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_serial_stop_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_serial_edge_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
connect(_serial_value_lineEdit, SIGNAL(editingFinished()), this, SLOT(value_changed()));
_adv_tabWidget->addTab((QWidget *)_stage_tabWidget, tr("Stage Trigger"));
_adv_tabWidget->addTab((QWidget *)_serial_groupBox, tr("Serial Trigger"));
}
void TriggerDock::lineEdit_highlight(QLineEdit *dst) {
if (dst == NULL)
return;
QTextCharFormat fmt;
fmt.setForeground(view::View::Red);
QList<QInputMethodEvent::Attribute> attributes;
for (int i = 0; i < dst->text().size(); i++) {
if (dst->text().at(i) != 'X' && dst->text().at(i) != ' ')
attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, i-dst->cursorPosition(), 1, fmt));
}
QInputMethodEvent event(QString(), attributes);
QCoreApplication::sendEvent(dst, &event);
}
} // namespace dock

View File

@@ -78,6 +78,9 @@ private:
void retranslateUi();
void reStyle();
void setup_adv_tab();
void lineEdit_highlight(QLineEdit *dst);
signals:
public slots:
@@ -94,6 +97,7 @@ private:
private:
SigSession &_session;
int _cur_ch_num;
QWidget *_widget;
QRadioButton *_simple_radioButton;
@@ -112,9 +116,11 @@ private:
QVector <QLabel *> _mu_label_list;
QVector <QComboBox *> _logic_comboBox_list;
QVector <QLineEdit *> _value0_lineEdit_list;
QVector <QLineEdit *> _value0_ext32_lineEdit_list;
QVector <QSpinBox *> _count_spinBox_list;
QVector <QComboBox *> _inv0_comboBox_list;
QVector <QLineEdit *> _value1_lineEdit_list;
QVector <QLineEdit *> _value1_ext32_lineEdit_list;
QVector <QComboBox *> _inv1_comboBox_list;
QVector <QCheckBox *> _contiguous_checkbox_list;
@@ -122,10 +128,13 @@ private:
QGroupBox *_serial_groupBox;
QLabel *_serial_start_label;
QLineEdit *_serial_start_lineEdit;
QLineEdit *_serial_start_ext32_lineEdit;
QLabel *_serial_stop_label;
QLineEdit *_serial_stop_lineEdit;
QLineEdit *_serial_stop_ext32_lineEdit;
QLabel *_serial_edge_label;
QLineEdit *_serial_edge_lineEdit;
QLineEdit *_serial_edge_ext32_lineEdit;
QLabel *_serial_data_label;
QComboBox *_serial_data_comboBox;
QLabel *_serial_value_label;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.