0504合并前提交
This commit is contained in:
+210
-61
@@ -2,7 +2,41 @@
|
||||
#include "ui_BarcodeEditor.h"
|
||||
#include "DateFormatEditor.h"
|
||||
#include "DateReplaceEditor.h"
|
||||
#include "CounterEditor.h"
|
||||
#include <QDebug>
|
||||
#include <QKeyEvent>
|
||||
|
||||
// 使用SysPara的相关参数构造CounterEditorVM
|
||||
CounterEditorVM makeCounterVM(SysPara* sysPara, COUNTER_TYPE type, int digitalNum)
|
||||
{
|
||||
CounterEditorVM vm;
|
||||
if(!sysPara)
|
||||
return vm;
|
||||
|
||||
vm.counterType = type;
|
||||
vm.digitalNum = digitalNum;
|
||||
|
||||
auto& cnt1 = vm.counter1;
|
||||
cnt1.startValue = sysPara->para.cnt1StartValue;
|
||||
cnt1.endValue = sysPara->para.cnt1EndValue;
|
||||
cnt1.repeatValue = sysPara->para.cnt1RepeateValue;
|
||||
cnt1.stepValue = sysPara->para.cnt1StepValue;
|
||||
cnt1.currValue = sysPara->para.cnt1CurrValue;
|
||||
// cnt1CurrentValueInitDoneFlag 与 checkBoxResetCnt1CurrValue 的勾选互为反向
|
||||
cnt1.editCurrValue = !sysPara->status.cnt1CurrentValueInitDoneFlag;
|
||||
cnt1.eleEyeIncEn = (sysPara->para.eleEyeClearCntInSynMode & 0x10) != 0;
|
||||
|
||||
auto& cnt2 = vm.counter2;
|
||||
cnt2.startValue = sysPara->para.cnt2StartValue;
|
||||
cnt2.endValue = sysPara->para.cnt2EndValue;
|
||||
cnt2.repeatValue = sysPara->para.cnt2RepeateValue;
|
||||
cnt2.stepValue = sysPara->para.cnt2StepValue;
|
||||
cnt2.currValue = sysPara->para.cnt2CurrValue;
|
||||
cnt2.editCurrValue = !sysPara->status.cnt2CurrentValueInitDoneFlag;
|
||||
cnt2.eleEyeIncEn = (sysPara->para.eleEyeClearCntInSynMode & 0x20) != 0;
|
||||
|
||||
return vm;
|
||||
}
|
||||
|
||||
BarcodeEditor::BarcodeEditor(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
@@ -12,10 +46,15 @@ BarcodeEditor::BarcodeEditor(QWidget *parent) :
|
||||
setWindowModality(Qt::NonModal);
|
||||
m_dateFormatEditor = new DateFormatEditor();
|
||||
m_dateReplaceEditor = new DateReplaceEditor();
|
||||
m_counterEditor = new CounterEditor();
|
||||
|
||||
m_vm = QSharedPointer<BarcodeViewModel>::create();
|
||||
m_vm->setDateViewModel(DateItemModel::createDefaultReplaceModel());
|
||||
m_dateReplaceEditor->setDateModel(m_vm->dateViewModel());
|
||||
ui->lineEditContent->installEventFilter(this);
|
||||
|
||||
m_vm.dateViewModel = DateItemModel::createDefaultReplaceModel();
|
||||
m_dateReplaceEditor->setDateModel(m_vm.dateViewModel);
|
||||
|
||||
connect(&m_barcodeFormatEditor, &DlgBarcodeFormat::accepted, this, &BarcodeEditor::onBarcodeFormatConfirmed);
|
||||
connect(&m_qrcodeFormatEditor, &DlgQrcodeFormat::accepted, this, &BarcodeEditor::onQrcodeFormatConfirmed);
|
||||
}
|
||||
|
||||
BarcodeEditor::~BarcodeEditor()
|
||||
@@ -30,63 +69,50 @@ BarcodeEditor::~BarcodeEditor()
|
||||
ui->tabWidget->removeTab(index);
|
||||
}
|
||||
|
||||
index = ui->tabWidget->indexOf(m_counterEditor);
|
||||
if(index != -1) {
|
||||
ui->tabWidget->removeTab(index);
|
||||
}
|
||||
|
||||
ui->lineEditContent->removeEventFilter(this);
|
||||
|
||||
delete m_dateFormatEditor;
|
||||
delete m_dateReplaceEditor;
|
||||
delete m_counterEditor;
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void BarcodeEditor::bindViewModel(QSharedPointer<BarcodeViewModel> vm)
|
||||
void BarcodeEditor::bindViewModel(const BarcodeViewModel& vm)
|
||||
{
|
||||
if(m_vm) {
|
||||
m_vm->disconnect(this);
|
||||
}
|
||||
|
||||
m_vm = vm;
|
||||
if(!m_vm) {
|
||||
qDebug() << "view model is empty";
|
||||
return;
|
||||
}
|
||||
|
||||
auto dateVm = m_vm->dateViewModel();
|
||||
// 缺失的代替表用默认值补齐
|
||||
DateItemModel& dateVm = m_vm.dateViewModel;
|
||||
if (dateVm.dataMap.isEmpty() || dateVm.daysMap.isEmpty() || dateVm.monthsMap.isEmpty()
|
||||
|| dateVm.yearsMap.isEmpty() || dateVm.weeksMap.isEmpty() || dateVm.hoursMap.isEmpty()) {
|
||||
DateItemModel defaultReplaceModel = DateItemModel::createDefaultReplaceModel();
|
||||
if (dateVm.dataMap.isEmpty()) {
|
||||
dateVm.dataMap = defaultReplaceModel.dataMap;
|
||||
}
|
||||
if (dateVm.daysMap.isEmpty()) {
|
||||
dateVm.daysMap = defaultReplaceModel.daysMap;
|
||||
}
|
||||
if (dateVm.monthsMap.isEmpty()) {
|
||||
dateVm.monthsMap = defaultReplaceModel.monthsMap;
|
||||
}
|
||||
if (dateVm.yearsMap.isEmpty()) {
|
||||
dateVm.yearsMap = defaultReplaceModel.yearsMap;
|
||||
}
|
||||
if (dateVm.weeksMap.isEmpty()) {
|
||||
dateVm.weeksMap = defaultReplaceModel.weeksMap;
|
||||
}
|
||||
if (dateVm.hoursMap.isEmpty()) {
|
||||
dateVm.hoursMap = defaultReplaceModel.hoursMap;
|
||||
}
|
||||
m_vm->setDateViewModel(dateVm);
|
||||
DateItemModel def = DateItemModel::createDefaultReplaceModel();
|
||||
if (dateVm.dataMap.isEmpty()) dateVm.dataMap = def.dataMap;
|
||||
if (dateVm.daysMap.isEmpty()) dateVm.daysMap = def.daysMap;
|
||||
if (dateVm.monthsMap.isEmpty()) dateVm.monthsMap = def.monthsMap;
|
||||
if (dateVm.yearsMap.isEmpty()) dateVm.yearsMap = def.yearsMap;
|
||||
if (dateVm.weeksMap.isEmpty()) dateVm.weeksMap = def.weeksMap;
|
||||
if (dateVm.hoursMap.isEmpty()) dateVm.hoursMap = def.hoursMap;
|
||||
}
|
||||
|
||||
DateFormatEditorVM dateFormatVM;
|
||||
if(m_vm->dateViewModel().daysOffset > 0) {
|
||||
dateFormatVM.expirationValue = m_vm->dateViewModel().daysOffset;
|
||||
if(dateVm.daysOffset > 0) {
|
||||
dateFormatVM.expirationValue = dateVm.daysOffset;
|
||||
dateFormatVM.expirationType = EXPIRATION_TYPE_DAY;
|
||||
}
|
||||
else if(m_vm->dateViewModel().monthsOffset > 0) {
|
||||
dateFormatVM.expirationValue = m_vm->dateViewModel().monthsOffset;
|
||||
else if(dateVm.monthsOffset > 0) {
|
||||
dateFormatVM.expirationValue = dateVm.monthsOffset;
|
||||
dateFormatVM.expirationType = EXPIRATION_TYPE_MONTH;
|
||||
}
|
||||
|
||||
dateFormatVM.pattern = m_vm->dateViewModel().datetimePattern;
|
||||
dateFormatVM.pattern = dateVm.datetimePattern;
|
||||
m_dateFormatEditor->setViewModel(dateFormatVM);
|
||||
m_dateReplaceEditor->setDateModel(m_vm->dateViewModel());
|
||||
m_dateReplaceEditor->setDateModel(dateVm);
|
||||
|
||||
if(vm->contentPattern().contains("{t}")) {
|
||||
if(m_vm.contentPattern.contains("{t}")) {
|
||||
if(ui->tabWidget->indexOf(m_dateFormatEditor) == -1) {
|
||||
ui->tabWidget->addTab(m_dateFormatEditor, tr(u8"日期/时间"));
|
||||
}
|
||||
@@ -109,22 +135,72 @@ void BarcodeEditor::bindViewModel(QSharedPointer<BarcodeViewModel> vm)
|
||||
}
|
||||
}
|
||||
|
||||
if(vm->contentPattern().contains("{c}")) {
|
||||
// TODO:: 添加计数器选项卡
|
||||
if(m_vm.contentPattern.contains("{c}")) {
|
||||
if(ui->tabWidget->indexOf(m_counterEditor) == -1) {
|
||||
ui->tabWidget->addTab(m_counterEditor, tr(u8"计数器"));
|
||||
}
|
||||
m_counterEditor->setViewModel(makeCounterVM(m_sysPara,
|
||||
static_cast<COUNTER_TYPE>(m_vm.counterViewModel.counterType),
|
||||
m_vm.counterViewModel.digitalNum));
|
||||
m_counterEditor->setFixedSize(ui->tabBarcode->size());
|
||||
}
|
||||
else {
|
||||
auto index = ui->tabWidget->indexOf(m_counterEditor);
|
||||
if(index != -1) {
|
||||
ui->tabWidget->removeTab(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QSharedPointer<BarcodeViewModel> BarcodeEditor::viewModel() const
|
||||
BarcodeViewModel BarcodeEditor::viewModel()
|
||||
{
|
||||
// 从子编辑器拉取最新值回写到 m_vm
|
||||
|
||||
if(m_vm.contentPattern.contains("{t}")) {
|
||||
DateFormatEditorVM fmt = m_dateFormatEditor->viewModel();
|
||||
m_vm.dateViewModel.datetimePattern = fmt.pattern;
|
||||
if(fmt.expirationType == EXPIRATION_TYPE_DAY) {
|
||||
m_vm.dateViewModel.daysOffset = fmt.expirationValue;
|
||||
m_vm.dateViewModel.monthsOffset = 0;
|
||||
}
|
||||
else if(fmt.expirationType == EXPIRATION_TYPE_MONTH) {
|
||||
m_vm.dateViewModel.monthsOffset = fmt.expirationValue;
|
||||
m_vm.dateViewModel.daysOffset = 0;
|
||||
}
|
||||
else {
|
||||
m_vm.dateViewModel.daysOffset = 0;
|
||||
m_vm.dateViewModel.monthsOffset = 0;
|
||||
}
|
||||
|
||||
// 代替表从 DateReplaceEditor 取
|
||||
DateItemModel rep = m_dateReplaceEditor->dateModel();
|
||||
m_vm.dateViewModel.dataMap = rep.dataMap;
|
||||
m_vm.dateViewModel.daysMap = rep.daysMap;
|
||||
m_vm.dateViewModel.monthsMap = rep.monthsMap;
|
||||
m_vm.dateViewModel.yearsMap = rep.yearsMap;
|
||||
m_vm.dateViewModel.weeksMap = rep.weeksMap;
|
||||
m_vm.dateViewModel.hoursMap = rep.hoursMap;
|
||||
}
|
||||
|
||||
if(m_vm.contentPattern.contains("{c}")) {
|
||||
CounterEditorVM cnt = m_counterEditor->viewModel();
|
||||
m_vm.counterViewModel.counterType = cnt.counterType;
|
||||
m_vm.counterViewModel.digitalNum = cnt.digitalNum;
|
||||
}
|
||||
|
||||
return m_vm;
|
||||
}
|
||||
|
||||
void BarcodeEditor::onBtnFormatClicked()
|
||||
{
|
||||
if(!m_vm)
|
||||
return;
|
||||
|
||||
// 显示对话框,用于针对于条形码、二维码的格式调整,例如二维码的编码类型、大小、条形码的宽度、等等
|
||||
if(m_vm.type == BARCODE_TYPE_BARCODE) {
|
||||
m_barcodeFormatEditor.setViewModel(m_vm.format.value<DlgBarcodeFormatVM>());
|
||||
m_barcodeFormatEditor.show();
|
||||
}
|
||||
else {
|
||||
m_qrcodeFormatEditor.setViewModel(m_vm.format.value<DlgQrcodeFormatVM>());
|
||||
m_qrcodeFormatEditor.show();
|
||||
}
|
||||
}
|
||||
|
||||
void BarcodeEditor::onBtnDatetimeClicked()
|
||||
@@ -140,19 +216,75 @@ void BarcodeEditor::onBtnDatetimeClicked()
|
||||
|
||||
void BarcodeEditor::onBtnCounterClicked()
|
||||
{
|
||||
if(ui->lineEditContent->text().contains("{c}")) {
|
||||
QString cntStr = "{c}";
|
||||
if(ui->lineEditContent->text().contains(cntStr)) {
|
||||
qInfo() << "Cannot add counter format twice";
|
||||
return;
|
||||
}
|
||||
|
||||
ui->lineEditContent->insert("{c}");
|
||||
ui->lineEditContent->insert(cntStr);
|
||||
}
|
||||
|
||||
void BarcodeEditor::onContentChanged(QString content)
|
||||
void BarcodeEditor::onCheckBtnClicked()
|
||||
{
|
||||
if(!m_vm)
|
||||
return;
|
||||
m_vm = viewModel();
|
||||
emit accepted();
|
||||
}
|
||||
|
||||
void BarcodeEditor::onCloseBtnClicked()
|
||||
{
|
||||
emit rejected();
|
||||
}
|
||||
|
||||
void BarcodeEditor::onBarcodeFormatConfirmed()
|
||||
{
|
||||
m_vm.format.setValue(m_barcodeFormatEditor.viewModel());
|
||||
m_vm.type = BARCODE_TYPE_BARCODE;
|
||||
|
||||
auto b = ui->cbBoxType->blockSignals(true);
|
||||
ui->cbBoxType->setCurrentIndex(int(m_vm.type));
|
||||
ui->cbBoxType->blockSignals(b);
|
||||
}
|
||||
|
||||
void BarcodeEditor::onQrcodeFormatConfirmed()
|
||||
{
|
||||
m_vm.format.setValue(m_qrcodeFormatEditor.viewModel());
|
||||
m_vm.type = BARCODE_TYPE_QRCODE;
|
||||
|
||||
auto b = ui->cbBoxType->blockSignals(true);
|
||||
ui->cbBoxType->setCurrentIndex(int(m_vm.type));
|
||||
ui->cbBoxType->blockSignals(b);
|
||||
}
|
||||
|
||||
bool BarcodeEditor::eventFilter(QObject *obj, QEvent *event)
|
||||
{
|
||||
if(obj == ui->lineEditContent) {
|
||||
if(event->type() == QEvent::KeyPress) {
|
||||
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
|
||||
if(keyEvent->key() == Qt::Key_Backspace) {
|
||||
QString text = ui->lineEditContent->text();
|
||||
int cursor = ui->lineEditContent->cursorPosition();
|
||||
if(cursor < 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 碰到 {t} 或 {c},直接删除
|
||||
QString varText = text.mid(cursor - 3, 3);
|
||||
if(varText == "{t}" || varText == "{c}") {
|
||||
ui->lineEditContent->setText(text.remove(cursor - 3, 3));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void BarcodeEditor::onContentChanged(QString content)
|
||||
{
|
||||
const DateItemModel& dateVm = m_vm.dateViewModel;
|
||||
|
||||
// 根据内容决定是否显示日期/时间选项卡
|
||||
if(!content.contains("{t}")) {
|
||||
auto index = ui->tabWidget->indexOf(m_dateFormatEditor);
|
||||
if(index != -1) {
|
||||
@@ -176,20 +308,37 @@ void BarcodeEditor::onContentChanged(QString content)
|
||||
m_dateReplaceEditor->setFixedSize(ui->tabBarcode->size());
|
||||
|
||||
DateFormatEditorVM dateFormatVM;
|
||||
if(m_vm->dateViewModel().daysOffset > 0) {
|
||||
dateFormatVM.expirationValue = m_vm->dateViewModel().daysOffset;
|
||||
if(dateVm.daysOffset > 0) {
|
||||
dateFormatVM.expirationValue = dateVm.daysOffset;
|
||||
dateFormatVM.expirationType = EXPIRATION_TYPE_DAY;
|
||||
}
|
||||
else if(m_vm->dateViewModel().monthsOffset > 0) {
|
||||
dateFormatVM.expirationValue = m_vm->dateViewModel().monthsOffset;
|
||||
else if(dateVm.monthsOffset > 0) {
|
||||
dateFormatVM.expirationValue = dateVm.monthsOffset;
|
||||
dateFormatVM.expirationType = EXPIRATION_TYPE_MONTH;
|
||||
}
|
||||
|
||||
dateFormatVM.pattern = m_vm->dateViewModel().datetimePattern;
|
||||
dateFormatVM.pattern = dateVm.datetimePattern;
|
||||
m_dateFormatEditor->setViewModel(dateFormatVM);
|
||||
|
||||
m_dateReplaceEditor->setDateModel(m_vm->dateViewModel());
|
||||
|
||||
m_dateReplaceEditor->setDateModel(dateVm);
|
||||
}
|
||||
|
||||
m_vm->setContentPattern(content);
|
||||
// 根据内容决定是否显示计数器选项卡
|
||||
if(!content.contains("{c}")) {
|
||||
auto index = ui->tabWidget->indexOf(m_counterEditor);
|
||||
if(index != -1) {
|
||||
ui->tabWidget->removeTab(index);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(ui->tabWidget->indexOf(m_counterEditor) == -1) {
|
||||
ui->tabWidget->addTab(m_counterEditor, tr(u8"计数器"));
|
||||
m_counterEditor->setViewModel(makeCounterVM(m_sysPara,
|
||||
static_cast<COUNTER_TYPE>(m_vm.counterViewModel.counterType),
|
||||
m_vm.counterViewModel.digitalNum));
|
||||
}
|
||||
m_counterEditor->setFixedSize(ui->tabBarcode->size());
|
||||
}
|
||||
|
||||
m_vm.contentPattern = content;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user