589 lines
22 KiB
C++
589 lines
22 KiB
C++
#include "BarcodeEditor.h"
|
|
#include "ui_BarcodeEditor.h"
|
|
#include "DateFormatEditor.h"
|
|
#include "DateReplaceEditor.h"
|
|
#include "CounterEditor.h"
|
|
#include <QDebug>
|
|
#include <QKeyEvent>
|
|
#include "DlgQrcodeFormat.h"
|
|
|
|
// 使用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),
|
|
ui(new Ui::BarcodeEditor)
|
|
{
|
|
ui->setupUi(this);
|
|
applyStyleSheet();
|
|
|
|
m_dateFormatEditor = new DateFormatEditor();
|
|
m_dateReplaceEditor = new DateReplaceEditor();
|
|
m_counterEditor = new CounterEditor();
|
|
|
|
ui->lineEditContent->installEventFilter(this);
|
|
|
|
m_vm.dateViewModel = DateItemModel::createDefaultReplaceModel();
|
|
m_dateReplaceEditor->setDateModel(m_vm.dateViewModel);
|
|
|
|
connect(ui->cbBoxType, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &BarcodeEditor::onTypeChanged);
|
|
|
|
connect(&m_barcodeFormatEditor, &DlgBarcodeFormat::accepted, this, &BarcodeEditor::onBarcodeFormatConfirmed);
|
|
connect(&m_qrcodeFormatEditor, &DlgQrcodeFormat::accepted, this, &BarcodeEditor::onQrcodeFormatConfirmed);
|
|
}
|
|
|
|
BarcodeEditor::~BarcodeEditor()
|
|
{
|
|
auto index = ui->tabWidget->indexOf(m_dateFormatEditor);
|
|
if(index != -1) {
|
|
ui->tabWidget->removeTab(index);
|
|
}
|
|
|
|
index = ui->tabWidget->indexOf(m_dateReplaceEditor);
|
|
if(index != -1) {
|
|
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::bindSysPara(SysPara *sysPara)
|
|
{
|
|
if (!sysPara) {
|
|
qWarning() << "BarcodeEditor::bindSysPara: null pointer passed, ignored";
|
|
return;
|
|
}
|
|
m_sysPara = sysPara;
|
|
}
|
|
|
|
void BarcodeEditor::bindViewModel(const BarcodeViewModel &vm)
|
|
{
|
|
m_vm = vm;
|
|
|
|
// 通用设置视图模型
|
|
auto b = ui->widGeneralSettings->blockSignals(true);
|
|
ui->widGeneralSettings->setViewModel(vm.generalSettingsVM);
|
|
ui->widGeneralSettings->blockSignals(b);
|
|
|
|
// 内容模版
|
|
b = ui->lineEditContent->blockSignals(true);
|
|
ui->lineEditContent->setText(m_vm.contentPattern);
|
|
ui->lineEditContent->blockSignals(b);
|
|
|
|
// 类型选择框
|
|
b = ui->cbBoxType->blockSignals(true);
|
|
ui->cbBoxType->setCurrentIndex(m_vm.type);
|
|
ui->cbBoxType->blockSignals(b);
|
|
|
|
// 缺失的代替表用默认值补齐
|
|
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 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(dateVm.daysOffset > 0) {
|
|
dateFormatVM.expirationValue = dateVm.daysOffset;
|
|
dateFormatVM.expirationType = EXPIRATION_TYPE_DAY;
|
|
}
|
|
else if(dateVm.monthsOffset > 0) {
|
|
dateFormatVM.expirationValue = dateVm.monthsOffset;
|
|
dateFormatVM.expirationType = EXPIRATION_TYPE_MONTH;
|
|
}
|
|
dateFormatVM.pattern = dateVm.datetimePattern;
|
|
m_dateFormatEditor->setViewModel(dateFormatVM);
|
|
m_dateReplaceEditor->setDateModel(dateVm);
|
|
|
|
if(m_vm.contentPattern.contains("{t}")) {
|
|
if(ui->tabWidget->indexOf(m_dateFormatEditor) == -1) {
|
|
ui->tabWidget->addTab(m_dateFormatEditor, tr(u8"日期/时间"));
|
|
}
|
|
m_dateFormatEditor->setFixedSize(ui->tabBarcode->size());
|
|
|
|
if(ui->tabWidget->indexOf(m_dateReplaceEditor) == -1) {
|
|
ui->tabWidget->addTab(m_dateReplaceEditor, tr(u8"代替"));
|
|
}
|
|
m_dateReplaceEditor->setFixedSize(ui->tabBarcode->size());
|
|
}
|
|
else {
|
|
auto index = ui->tabWidget->indexOf(m_dateFormatEditor);
|
|
if(index != -1) {
|
|
ui->tabWidget->removeTab(index);
|
|
}
|
|
|
|
index = ui->tabWidget->indexOf(m_dateReplaceEditor);
|
|
if(index != -1) {
|
|
ui->tabWidget->removeTab(index);
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
BarcodeViewModel BarcodeEditor::viewModel()
|
|
{
|
|
m_vm.contentPattern = ui->lineEditContent->text();
|
|
m_vm.type = (BarcodeType) (ui->cbBoxType->currentIndex());
|
|
|
|
// 从子编辑器拉取最新值回写到 m_vm
|
|
|
|
// 通用设置
|
|
m_vm.generalSettingsVM = ui->widGeneralSettings->viewModel();
|
|
|
|
// 日期设置,如果存在 {t} 变量
|
|
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;
|
|
}
|
|
|
|
// 计数器设置,如果存在 {c} 变量
|
|
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::restoreViewModel()
|
|
{
|
|
m_vm.generalSettingsVM = TextItemModel();
|
|
m_vm.contentPattern = "";
|
|
m_vm.counterViewModel = CounterViewModel();
|
|
m_vm.dateViewModel = DateItemModel::createDefaultReplaceModel();
|
|
m_vm.type = BARCODE_TYPE_BARCODE;
|
|
m_vm.format.setValue(DlgBarcodeFormatVM());
|
|
bindViewModel(m_vm);
|
|
}
|
|
|
|
/**
|
|
* @brief 逻辑基本类似 CounterVarSet::applyUIPara
|
|
*
|
|
*/
|
|
void BarcodeEditor::applyCounterConfigToSysPara()
|
|
{
|
|
if(!m_vm.contentPattern.contains("{c}"))
|
|
return;
|
|
|
|
if (!m_sysPara) {
|
|
qWarning() << "BarcodeEditor::applyCounterConfigToSysPara: m_sysPara is null, skipping";
|
|
return;
|
|
}
|
|
|
|
CounterEditorVM cnt = m_counterEditor->viewModel();
|
|
if(cnt.counterType == COUNTER_TYPE_1) {
|
|
m_sysPara->para.cnt1StartValue = cnt.counter1.startValue;
|
|
m_sysPara->para.cnt1EndValue = cnt.counter1.endValue;
|
|
m_sysPara->para.cnt1RepeateValue = cnt.counter1.repeatValue;
|
|
m_sysPara->para.cnt1StepValue = cnt.counter1.stepValue;
|
|
m_sysPara->para.cnt1CurrValue = cnt.counter1.currValue;
|
|
m_sysPara->status.cnt1CurrentValueInitDoneFlag = cnt.counter1.editCurrValue;
|
|
|
|
if(cnt.counter1.eleEyeIncEn)
|
|
m_sysPara->para.eleEyeClearCntInSynMode = (m_sysPara->para.eleEyeClearCntInSynMode | 0x10); // CNT1 +1
|
|
else
|
|
m_sysPara->para.eleEyeClearCntInSynMode = (m_sysPara->para.eleEyeClearCntInSynMode & 0xef); // CNT1 = current
|
|
|
|
}
|
|
else if(cnt.counterType == COUNTER_TYPE_2) {
|
|
m_sysPara->para.cnt2StartValue = cnt.counter2.startValue;
|
|
m_sysPara->para.cnt2EndValue = cnt.counter2.endValue;
|
|
m_sysPara->para.cnt2RepeateValue = cnt.counter2.repeatValue;
|
|
m_sysPara->para.cnt2StepValue = cnt.counter2.stepValue;
|
|
m_sysPara->para.cnt2CurrValue = cnt.counter2.currValue;
|
|
m_sysPara->status.cnt2CurrentValueInitDoneFlag = cnt.counter2.editCurrValue;
|
|
|
|
if(cnt.counter2.eleEyeIncEn)
|
|
m_sysPara->para.eleEyeClearCntInSynMode = (m_sysPara->para.eleEyeClearCntInSynMode | 0x20); // CNT2 +1
|
|
else
|
|
m_sysPara->para.eleEyeClearCntInSynMode = (m_sysPara->para.eleEyeClearCntInSynMode & 0xdf); // CNT2 = current
|
|
}
|
|
|
|
m_sysPara->devOp->writeFpgaCalandar(0);
|
|
}
|
|
|
|
void BarcodeEditor::onBtnFormatClicked()
|
|
{
|
|
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()
|
|
{
|
|
if(ui->lineEditContent->text().contains("{t}")) {
|
|
qInfo() << "Cannot add datetime format twice";
|
|
return;
|
|
}
|
|
|
|
ui->lineEditContent->insert("{t}");
|
|
ui->tabWidget->setCurrentIndex(1);
|
|
}
|
|
|
|
void BarcodeEditor::onBtnCounterClicked()
|
|
{
|
|
QString cntStr = "{c}";
|
|
if(ui->lineEditContent->text().contains(cntStr)) {
|
|
qInfo() << "Cannot add counter format twice";
|
|
return;
|
|
}
|
|
|
|
ui->lineEditContent->insert(cntStr);
|
|
}
|
|
|
|
void BarcodeEditor::onCheckBtnClicked()
|
|
{
|
|
m_vm = viewModel();
|
|
applyCounterConfigToSysPara();
|
|
emit accepted();
|
|
hide();
|
|
}
|
|
|
|
void BarcodeEditor::onCloseBtnClicked()
|
|
{
|
|
emit rejected();
|
|
hide();
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
void BarcodeEditor::onTypeChanged(int i)
|
|
{
|
|
if(m_vm.type == i)
|
|
return;
|
|
|
|
m_vm.type = (BarcodeType)(i);
|
|
if(m_vm.type == BARCODE_TYPE_BARCODE) {
|
|
m_vm.format.setValue(DlgBarcodeFormatVM());
|
|
}
|
|
else
|
|
m_vm.format.setValue(DlgQrcodeFormatVM());
|
|
}
|
|
|
|
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},直接删除
|
|
auto datePatternPos = text.indexOf("{t}");
|
|
auto counterPatternPos = text.indexOf("{c}");
|
|
if(datePatternPos >= 0 || counterPatternPos >= 0) {
|
|
if(datePatternPos < cursor && cursor <= datePatternPos + 3) {
|
|
ui->lineEditContent->setText(text.remove(datePatternPos, 3));
|
|
return true;
|
|
}
|
|
else if(counterPatternPos < cursor && cursor <= counterPatternPos + 3) {
|
|
ui->lineEditContent->setText(text.remove(counterPatternPos, 3));
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void BarcodeEditor::applyStyleSheet()
|
|
{
|
|
// QFile stylesFile(":/styles.qss");
|
|
// QTextStream ts(&stylesFile);
|
|
// setStyleSheet(ts.readAll());
|
|
}
|
|
|
|
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) {
|
|
ui->tabWidget->removeTab(index);
|
|
}
|
|
|
|
index = ui->tabWidget->indexOf(m_dateReplaceEditor);
|
|
if(index != -1) {
|
|
ui->tabWidget->removeTab(index);
|
|
}
|
|
}
|
|
else {
|
|
if(ui->tabWidget->indexOf(m_dateFormatEditor) == -1) {
|
|
ui->tabWidget->addTab(m_dateFormatEditor, tr(u8"日期/时间"));
|
|
}
|
|
m_dateFormatEditor->setFixedSize(ui->tabBarcode->size());
|
|
|
|
if(ui->tabWidget->indexOf(m_dateReplaceEditor) == -1) {
|
|
ui->tabWidget->addTab(m_dateReplaceEditor, tr(u8"代替"));
|
|
}
|
|
m_dateReplaceEditor->setFixedSize(ui->tabBarcode->size());
|
|
|
|
DateFormatEditorVM dateFormatVM;
|
|
if(dateVm.daysOffset > 0) {
|
|
dateFormatVM.expirationValue = dateVm.daysOffset;
|
|
dateFormatVM.expirationType = EXPIRATION_TYPE_DAY;
|
|
}
|
|
else if(dateVm.monthsOffset > 0) {
|
|
dateFormatVM.expirationValue = dateVm.monthsOffset;
|
|
dateFormatVM.expirationType = EXPIRATION_TYPE_MONTH;
|
|
}
|
|
|
|
dateFormatVM.pattern = dateVm.datetimePattern;
|
|
m_dateFormatEditor->setViewModel(dateFormatVM);
|
|
|
|
m_dateReplaceEditor->setDateModel(dateVm);
|
|
}
|
|
|
|
// 根据内容决定是否显示计数器选项卡
|
|
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;
|
|
}
|
|
|
|
void BarcodeViewModel::saveToXml(const BarcodeViewModel &vm, QXmlStreamAttributes &attrs)
|
|
{
|
|
attrs.append("barcodeContentPattern", vm.contentPattern);
|
|
attrs.append("barcodeType", QString::number(int(vm.type)));
|
|
|
|
if(vm.type == BARCODE_TYPE_BARCODE) {
|
|
DlgBarcodeFormatVM barcodeFormat = vm.format.value<DlgBarcodeFormatVM>();
|
|
attrs.append("barcodeFormat", barcodeFormat.type);
|
|
attrs.append("barcodeHeight", QString::number(barcodeFormat.height));
|
|
attrs.append("barcodeWidth", QString::number(barcodeFormat.width));
|
|
attrs.append("barcodeScale", QString::number(barcodeFormat.scale));
|
|
attrs.append("barcodeInkType", QString::number(int(barcodeFormat.inkType)));
|
|
attrs.append("barcodeTxtVisible", barcodeFormat.txtVisible ? "true" : "false");
|
|
}
|
|
else {
|
|
DlgQrcodeFormatVM qrcodeFormat = vm.format.value<DlgQrcodeFormatVM>();
|
|
attrs.append("qrcodeFormat", QString::number(qrcodeFormat.type));
|
|
attrs.append("qrcodeSize", QString::number(qrcodeFormat.size));
|
|
attrs.append("qrcodeLevel", QString::number(int(qrcodeFormat.level)));
|
|
attrs.append("qrcodeInkType", QString::number(int(qrcodeFormat.inkType)));
|
|
}
|
|
|
|
if(vm.contentPattern.contains("{t}")) {
|
|
DateItemModel::saveToXml(vm.dateViewModel, attrs);
|
|
}
|
|
|
|
if(vm.contentPattern.contains("{c}")) {
|
|
attrs.append("counterType", QString::number(vm.counterViewModel.counterType));
|
|
attrs.append("counterDigitalNum", QString::number(vm.counterViewModel.digitalNum));
|
|
}
|
|
}
|
|
|
|
BarcodeViewModel BarcodeViewModel::loadFromXml(const QXmlStreamAttributes &attrs)
|
|
{
|
|
BarcodeViewModel vm;
|
|
vm.contentPattern = attrs.value("barcodeContentPattern").toString();
|
|
vm.type = static_cast<BarcodeType>(attrs.value("barcodeType").toInt());
|
|
if(vm.type == BARCODE_TYPE_BARCODE) {
|
|
DlgBarcodeFormatVM barcodeFormat;
|
|
barcodeFormat.type = attrs.value("barcodeFormat").toString();
|
|
barcodeFormat.height = attrs.value("barcodeHeight").toInt();
|
|
barcodeFormat.width = attrs.value("barcodeWidth").toInt();
|
|
barcodeFormat.scale = attrs.value("barcodeScale").toInt();
|
|
barcodeFormat.inkType = static_cast<InkType>(attrs.value("barcodeInkType").toInt());
|
|
barcodeFormat.txtVisible = attrs.value("barcodeTxtVisible").toString() == "true";
|
|
vm.format.setValue(barcodeFormat);
|
|
}
|
|
else {
|
|
DlgQrcodeFormatVM qrcodeFormat;
|
|
qrcodeFormat.type = static_cast<QRCodeType>(attrs.value("qrcodeFormat").toInt());
|
|
qrcodeFormat.size = static_cast<QRCodeSize>(attrs.value("qrcodeSize").toInt());
|
|
qrcodeFormat.level = static_cast<QRCodeLevel>(attrs.value("qrcodeLevel").toInt());
|
|
qrcodeFormat.inkType = static_cast<InkType>(attrs.value("qrcodeInkType").toInt());
|
|
vm.format.setValue(qrcodeFormat);
|
|
}
|
|
|
|
if(vm.contentPattern.contains("{t}")) {
|
|
DateItemModel::loadFromXml(vm.dateViewModel, attrs);
|
|
}
|
|
|
|
if(vm.contentPattern.contains("{c}")) {
|
|
vm.counterViewModel.counterType = static_cast<COUNTER_TYPE>(attrs.value("counterType").toInt());
|
|
vm.counterViewModel.digitalNum = attrs.value("counterDigitalNum").toInt();
|
|
}
|
|
|
|
return vm;
|
|
}
|
|
|
|
|
|
QString BarcodeViewModel::toString(const BarcodeViewModel &vm)
|
|
{
|
|
QString str;
|
|
str += QString("type: %1\r\n").arg(int(vm.type));
|
|
str += QString("contentPattern: \"%1\"\r\n").arg(vm.contentPattern);
|
|
|
|
// counterViewModel
|
|
str += QString("counterViewModel: \r\n");
|
|
str += QString("\t counter type: %1\r\n").arg(vm.counterViewModel.counterType);
|
|
str += QString("\t digital number: %1\r\n").arg(vm.counterViewModel.digitalNum);
|
|
str += QString("\t letter space: %1\r\n").arg(vm.counterViewModel.letterSpace);
|
|
|
|
// dateViewModel
|
|
str += QString("dateViewModel: \r\n");
|
|
str += QString("\t pattern: \"%1\"\r\n").arg(vm.dateViewModel.datetimePattern);
|
|
|
|
int expirationValue = 0;
|
|
int expirationType = 0;
|
|
if(vm.dateViewModel.daysOffset > 0) {
|
|
expirationValue = vm.dateViewModel.daysOffset;
|
|
expirationType = EXPIRATION_TYPE_DAY;
|
|
}
|
|
else if(vm.dateViewModel.monthsOffset > 0) {
|
|
expirationValue = vm.dateViewModel.monthsOffset;
|
|
expirationType = EXPIRATION_TYPE_MONTH;
|
|
}
|
|
str += QString("\t expirationValue: %1\r\n").arg(expirationValue);
|
|
str += QString("\t expirationType: %1\r\n").arg(expirationType);
|
|
|
|
// format
|
|
str += QString("format: \n");
|
|
if(vm.type == BARCODE_TYPE_BARCODE) {
|
|
DlgBarcodeFormatVM barcodeFormat = vm.format.value<DlgBarcodeFormatVM>();
|
|
str += QString("\t type: \"%1\"\r\n").arg(barcodeFormat.type);
|
|
str += QString("\t height: %1\r\n").arg(barcodeFormat.height);
|
|
str += QString("\t width: %1\r\n").arg(barcodeFormat.width);
|
|
str += QString("\t scale: %1\r\n").arg(barcodeFormat.scale);
|
|
str += QString("\t inkType: %1\r\n").arg(int(barcodeFormat.inkType));
|
|
str += QString("\t txtVisible: %1\r\n").arg(barcodeFormat.txtVisible ? "true" : "false");
|
|
}
|
|
else {
|
|
DlgQrcodeFormatVM qrcodeFormat = vm.format.value<DlgQrcodeFormatVM>();
|
|
str += QString("\t type: %1\r\n").arg(int(qrcodeFormat.type));
|
|
str += QString("\t size: %1\r\n").arg(int(qrcodeFormat.size));
|
|
str += QString("\t level: %1\r\n").arg(int(qrcodeFormat.level));
|
|
str += QString("\t inkType: %1\r\n").arg(int(qrcodeFormat.inkType));
|
|
}
|
|
|
|
return str;
|
|
}
|