Files
2026-09-10 09:20:45 +08:00

92 lines
2.3 KiB
C++

#include "piccodeitem.h"
#include "ItemCommon.h"
#include <QDebug>
#include "LogInfo.h"
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();
}
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<int> counters)
{
if (counters.size() < 2) {
qWarning() << "PicCodeItem::updateVariants: counters size insufficient:" << counters.size() << ", expected >= 2";
return false;
}
m_currCounterValues = counters;
auto b = updateVariants();
return b;
}
int PicCodeItem::getHeight()
{
return m_codeImage.height();
}
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;
}