#include "piccodeitem.h" #include "ItemCommon.h" #include PicCodeItem::PicCodeItem(QGraphicsItem *parent, QGraphicsScene *scene, const SourceType type) :PicTextItem(parent, scene, type), m_currCounterValues({0, 0}) { setFlag(QGraphicsItem::ItemIsMovable); setFlag(QGraphicsItem::ItemIsSelectable); setFlag(QGraphicsItem::ItemIsFocusable); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); connect(&m_dateVarTimer, &QTimer::timeout, this, [this](){ updateVariants(); }); // m_dateVarTimer.start(50); } PicCodeItem::~PicCodeItem() { m_dateVarTimer.stop(); } QVariant PicCodeItem::source() { return m_currCodeTxt; } void PicCodeItem::setSource(QVariant var) { applyModify(); } void PicCodeItem::setBarcodeViewModel(const BarcodeViewModel &vm) { m_vm = vm; m_currCodeTxt = ""; setTextItemModel(m_vm.generalSettingsVM); updateVariants(); qInfo() << "Barcode model: \r\n" << qPrintable(BarcodeViewModel::toString(vm)); } BarcodeViewModel PicCodeItem::barcodeViewModel() { m_vm.generalSettingsVM = textItemModel(); return m_vm; } bool PicCodeItem::updateVariants(const QVector counters) { if (counters.size() < 2) { qWarning() << "PicCodeItem::updateVariants: counters size insufficient:" << counters.size() << ", expected >= 2"; return false; } m_currCounterValues = counters; return updateVariants(); } QImage PicCodeItem::itemImage() { return m_codeImage; } void PicCodeItem::setCustomAttrs(const QXmlStreamAttributes &attrs) { auto vm = BarcodeViewModel::loadFromXml(attrs); setBarcodeViewModel(vm); } void PicCodeItem::saveCustomAttrs(QXmlStreamAttributes &attrs) { BarcodeViewModel::saveToXml(m_vm, attrs); } bool PicCodeItem::updateVariants() { if (m_currCounterValues.size() < 2) { qWarning() << "PicCodeItem::updateVariants: m_currCounterValues size < 2, cannot generate barcode text"; return false; } auto txt = ItemUtils::generateTxtFromBarcodeViewModel(m_vm, {m_currCounterValues[0], m_currCounterValues[1]}, QDateTime::currentDateTime()); if(txt != m_currCodeTxt || m_currCodeTxt.isEmpty()) { m_currCodeTxt = txt; m_codeImage = ItemUtils::generateBarcodeImage(txt, m_vm.type, m_vm.format); applyModify(); return true; } return false; }