3717 lines
167 KiB
C++
3717 lines
167 KiB
C++
#include "mainwidget.h"
|
||
#include <QPushButton>
|
||
#include <QDebug>
|
||
#include <QCoreApplication>
|
||
|
||
#include "Public.h"
|
||
|
||
#include <QPainter>
|
||
#include <QImage>
|
||
#include <QRgb>
|
||
#include <QDebug>
|
||
#include <QScrollBar>
|
||
#include <QFontMetrics>
|
||
#include <QChar>
|
||
#include <stdlib.h>
|
||
#include <unistd.h>
|
||
#include <string>
|
||
#include "DevOp.h"
|
||
#include "Public.h"
|
||
#include "scene/picscene.h"
|
||
#include <QGraphicsItem>
|
||
#include "MyInputMethod.h"
|
||
#include <QTextBlockFormat>
|
||
#include <QTextCodec>
|
||
#include <QTextDocumentWriter>
|
||
#include <QProcess>
|
||
#include "VerBVersion.h"
|
||
#include <iostream>
|
||
#include <string>
|
||
#include "scene/PicDateItem.h"
|
||
#include "scene/PicScheduleShiftItem.h"
|
||
#include "scene/piccodeitem.h"
|
||
#include <QElapsedTimer>
|
||
#include <QScroller>
|
||
|
||
extern MyInputMethod *myInputMethod;
|
||
unsigned char test_flag,open_close;
|
||
#pragma execution_character_set("utf-8")
|
||
|
||
MainWidget::MainWidget(QWidget* parent)
|
||
: QWidget(parent)
|
||
{
|
||
// 加载UI文件
|
||
ui.setupUi(this);
|
||
|
||
// 关联成员变量到UI控件
|
||
m_EditBtn = ui.m_EditBtn;
|
||
m_AddBtn = ui.m_AddBtn;
|
||
m_MainBtn = ui.m_MainBtn;
|
||
m_ManageBtn = ui.m_ManageBtn;
|
||
m_MsgBtn = ui.m_MsgBtn;
|
||
// m_TextEdit = ui.m_TextEdit;
|
||
m_PrintDisplay = ui.widgetPrintTextDisplay;
|
||
m_CloseBtn = ui.m_CloseBtn;
|
||
m_StopBtn = ui.m_StopBtn;
|
||
m_StartBtn = ui.m_StartBtn;
|
||
// m_ToolBtn = ui.m_ToolBtn;
|
||
m_RightBtn = ui.m_RightBtn;
|
||
m_LeftBtn = ui.m_LeftBtn;
|
||
|
||
m_PrintDisplay->update();
|
||
|
||
pushButtonFlag = true;
|
||
m_2sFlag = false;
|
||
// 初始化信号槽连接
|
||
init();
|
||
|
||
m_fileManageWidget = new FileManageWidget();
|
||
|
||
// ui.labelRunStatus->setWordWrap(true);
|
||
|
||
// ui.sub3->installEventFilter(this);
|
||
// ui.fra_state->installEventFilter(this);
|
||
ui.labelTotalProductCnt->hide();
|
||
ui.lb_counter->hide();
|
||
|
||
changeHighLight(false);
|
||
enablePrintButton(false);
|
||
|
||
|
||
QWidget* viewport = ui.scrollArea->viewport();
|
||
|
||
// 捕获鼠标左键拖动手势(桌面端)
|
||
QScroller::grabGesture(viewport, QScroller::LeftMouseButtonGesture);
|
||
// 如需同时支持触摸屏,可加上触屏手势
|
||
QScroller::grabGesture(viewport, QScroller::TouchGesture);
|
||
|
||
QScroller* scroller = QScroller::scroller(viewport);
|
||
QScrollerProperties properties = scroller->scrollerProperties();
|
||
|
||
// 启用惯性滚动
|
||
properties.setScrollMetric(QScrollerProperties::DecelerationFactor, 0.7);
|
||
// 防止过小的移动被误判为拖拽
|
||
properties.setScrollMetric(QScrollerProperties::DragStartDistance, 0.002);
|
||
|
||
scroller->setScrollerProperties(properties);
|
||
scroller->grabGesture(ui.scrollArea->viewport(), QScroller::LeftMouseButtonGesture);
|
||
|
||
connect(ui.btn_newFile, &QPushButton::clicked, this, &MainWidget::newFileAcquired);
|
||
}
|
||
|
||
MainWidget::~MainWidget()
|
||
{
|
||
delete m_fileManageWidget;
|
||
}
|
||
|
||
void MainWidget::init()
|
||
{
|
||
airPushTimer = new QTimer(this);
|
||
connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess()));
|
||
|
||
timerPowerOff = new QTimer(this);
|
||
connect(timerPowerOff,SIGNAL(timeout()),this,SLOT(sendPowerOffCmd()));
|
||
|
||
// 信号槽连接
|
||
connect(m_EditBtn, &QPushButton::clicked, this, &MainWidget::buttonClickedSlot);
|
||
connect(m_AddBtn, &QPushButton::clicked, this, &MainWidget::buttonClickedSlot);
|
||
connect(m_CloseBtn, &QPushButton::clicked, this, &MainWidget::buttonClickedSlot);
|
||
connect(m_MainBtn,&QPushButton::clicked,this,&MainWidget::buttonClickedSlot);
|
||
connect(m_MsgBtn,&QPushButton::clicked,this,&MainWidget::buttonClickedSlot);
|
||
|
||
if (!m_setNumDlg){
|
||
m_setNumDlg = new SetNumDlg(this);
|
||
}
|
||
connect(m_setNumDlg, &SetNumDlg::sig_setNum, this, &MainWidget::slt_setNum);
|
||
connect(m_setNumDlg, &SetNumDlg::sig_clearCnt, this, &MainWidget::slt_clearCnt);
|
||
}
|
||
|
||
void MainWidget::buttonClickedSlot()
|
||
{
|
||
QPushButton* btn = qobject_cast<QPushButton*>(sender());
|
||
if (btn == m_EditBtn)
|
||
{
|
||
emit sendButtonClickedSignal(1);
|
||
}
|
||
else if (btn == m_AddBtn)
|
||
{
|
||
emit sendButtonClickedSignal(2);
|
||
}
|
||
else if (btn == m_CloseBtn)
|
||
{
|
||
// emit sendButtonClickedSignal(3);
|
||
_on_pushButtonPowerOff_pressed(true);
|
||
}
|
||
else if(btn == m_MainBtn){
|
||
emit sendButtonClickedSignal(4);
|
||
}
|
||
else if(btn == m_MsgBtn){
|
||
emit sendButtonClickedSignal(5);
|
||
}
|
||
}
|
||
|
||
QStringList stringListRecive;
|
||
|
||
void MySleep(unsigned int msec);
|
||
|
||
void MySleep(unsigned int msec)
|
||
{
|
||
|
||
QTime dieTime = QTime::currentTime().addMSecs(msec);
|
||
|
||
while( QTime::currentTime() < dieTime )
|
||
|
||
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
|
||
|
||
}
|
||
|
||
void MainWidget::bindTxTEdit(QTextEdit* textEdit){
|
||
m_textEdit = textEdit;
|
||
}
|
||
|
||
void MainWidget::bindPicScene(PicScene* pPicScene){
|
||
this->pPicScene = pPicScene;
|
||
}
|
||
|
||
void MainWidget::bindSysPara(SysPara *sysPara){
|
||
this->sysPara = sysPara;
|
||
// ui->textEditOption->bindSysPara(sysPara);
|
||
m_PrintDisplay->bindSysPara(sysPara);
|
||
#ifdef _2DCODE_
|
||
// barcode->bindSysPara(sysPara);
|
||
// dlgqrcode->setSysPara(sysPara);
|
||
// dlgqrcode->barCodeFlag = this->sysPara->para.qrOption.barCodeFlag;
|
||
// dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption);
|
||
#endif
|
||
#ifdef PICSCENE
|
||
// ui->senceEditOption->bindSysPara(sysPara);
|
||
#endif
|
||
}
|
||
|
||
void MainWidget::_on_pushButtonPowerOff_pressed(bool notice)
|
||
{
|
||
if(!sysPara)
|
||
return;
|
||
|
||
// 回收槽检查
|
||
if(sysPara->status.currReclaimTankPos != 0)
|
||
{
|
||
QMessageBox::StandardButton ret = QMessageBox::Ok;
|
||
if(notice) {
|
||
ret = QMessageBox::warning(this, tr("警告"), tr("回收槽未关,是否关闭回收槽后关机!"), QMessageBox::Ok | QMessageBox::Cancel);
|
||
}
|
||
|
||
if (!notice || ret == QMessageBox::Ok) {
|
||
system((char *)((QString("mkdir %1").arg(TESTDIR)).toLatin1().data()));
|
||
system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toLatin1().data())); //先备份UP*
|
||
sysPara->status.reclaimCloseCnt=10;
|
||
//on_pushButtonStopPrint_pressed();
|
||
on_m_StopBtn_clicked();
|
||
on_m_LeftBtn_clicked();
|
||
//on_pushButtonReclaimTankClose_pressed();
|
||
sysPara->status.powerOffAppending = true;
|
||
enableReclaimCtrlButton(false); //所有的按钮全部屏蔽
|
||
}
|
||
}
|
||
else {
|
||
QMessageBox::StandardButton ret = QMessageBox::Ok;
|
||
if(notice) {
|
||
ret = QMessageBox::warning(this, tr("警告"), tr("是否确认关机?"), QMessageBox::Ok | QMessageBox::Cancel);
|
||
}
|
||
|
||
if (!notice || ret == QMessageBox::Ok){
|
||
sysPara->status.powerOffAppending = true;
|
||
checkForPowerOff();
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/*
|
||
* 关机前务必保存参数
|
||
* */
|
||
void MainWidget::checkForPowerOff(){
|
||
if(sysPara->status.powerOffAppending){
|
||
if(!sysPara->status.selfCheckDone)
|
||
sysPara->status.selfCheckDone = true;
|
||
this->setDisabled(true);
|
||
emit setDisableAll();
|
||
////////关机时提高转速和回收泵压力,粘度泵和循环阀/////
|
||
quint16 gearPumpValue_backup = sysPara->para.gearPumpValue;
|
||
int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;;
|
||
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN))
|
||
{
|
||
if(!TEST_MODE && sysPara->para.flagOfReclaimPumEnable){
|
||
for(int i=25;i>21;i--)
|
||
{
|
||
if(i == 25){
|
||
sysPara->status.isPumpValveControledByHand = true; //停止自动
|
||
sysPara->devOp->controlInkValve(true);
|
||
sysPara->devOp->controlInkValvePWM(true);
|
||
sysPara->devOp->controlReclaimPump(true,true);
|
||
sysPara->devOp->controlViscosityPump(true);
|
||
sysPara->devOp->controlCycleValve(true);
|
||
sysPara->para.gearPumpValue = 0;
|
||
sysPara->devOp->WriteMoterPump();
|
||
}
|
||
if(i == 22){
|
||
sysPara->devOp->controlInkValve(false);
|
||
sysPara->devOp->controlInkValvePWM(false);
|
||
}
|
||
this->setRunStatus(tr("正在准备关机,请等待%1秒...").arg(i*2));
|
||
MySleep(2000);
|
||
}
|
||
}
|
||
sysPara->devOp->controlReclaimTankOpen(true);
|
||
sysPara->status.isPumpValveControledByHand = true; //停止自动
|
||
if(sysPara->para.gearPumpEnable ){
|
||
if(!sysPara->para.flagOfReclaimPumEnable){
|
||
sysPara->para.gearPumpValue = 360;
|
||
sysPara->devOp->WriteMoterPump();
|
||
}
|
||
else{
|
||
sysPara->devOp->controlReclaimPump(true,false);
|
||
sysPara->para.gearPumpValue = 0;
|
||
sysPara->devOp->WriteMoterPump();
|
||
}
|
||
}
|
||
else{
|
||
sysPara->para.reclaimPumpPWMWidth = 95;
|
||
sysPara->devOp->controlReclaimPump(true,true);
|
||
}
|
||
|
||
if(!sysPara->devOp->isViscosityPumpOpen())
|
||
sysPara->devOp->controlViscosityPump(true);
|
||
sysPara->devOp->controlCycleValve(true);
|
||
sysPara->devOp->controlInkValve(false); //关供墨
|
||
sysPara->devOp->controlInkValvePWM(false); //关供墨
|
||
|
||
if(!TEST_MODE){
|
||
for(int i=14;i>7;i--)
|
||
{
|
||
if(i==13)
|
||
sysPara->devOp->controlReclaimTankOpen(false);
|
||
this->setRunStatus(tr("正在准备关机,请等待%1秒...").arg(i*3));
|
||
MySleep(3000);
|
||
}
|
||
}
|
||
|
||
if(!sysPara->status.lostCommuFlag){
|
||
sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();
|
||
sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();
|
||
sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();
|
||
|
||
updateTotalCnt(0);
|
||
sysPara->saveParaToFile(); // 关机前将相关配置保存
|
||
}
|
||
sysPara->status.powerOffAppending = false;
|
||
if(!TEST_MODE){
|
||
for(int i=7;i>0;i--)
|
||
{
|
||
if(i == 3)
|
||
sysPara->devOp->controlReclaimTankClose(true);
|
||
if(i == 2){
|
||
sysPara->devOp->controlViscosityPump(false);
|
||
sysPara->devOp->controlCycleValve(false);
|
||
sysPara->devOp->controlReclaimPump(false,false);
|
||
sysPara->para.gearPumpValue = 0;
|
||
sysPara->devOp->WriteMoterPump();
|
||
}
|
||
this->setRunStatus(tr("正在准备关机,请等待%1秒...").arg(i*3));
|
||
MySleep(3000);
|
||
}
|
||
}
|
||
}
|
||
emit CloseJd();
|
||
sysPara->para.gearPumpValue=gearPumpValue_backup;
|
||
sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup;
|
||
sysPara->devOp->controlCompressPump(false);
|
||
setRunStatus(tr("准备关机..."));
|
||
|
||
sysPara->para.totalProductCnt +=sysPara->status.totalProductCnt;
|
||
sysPara->devOp->clearProductCnt(3 | 0x10);//总产器计数器立即清零
|
||
sysPara->para.ReadFileErrorCnt=0;
|
||
sysPara->para.PowerOnErrorCnt=0;
|
||
if(sysPara->para.isCntSaveStateValue)
|
||
{
|
||
sysPara->para.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();
|
||
sysPara->para.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();
|
||
sysPara->para.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();
|
||
}
|
||
updateTotalCnt(0);
|
||
sysPara->saveParaToFile(); // 关机前将相关配置保存
|
||
sysPara->saveRFIDPara();
|
||
system("sync");//缓存同步
|
||
|
||
timerPowerOff->start(1000);
|
||
}
|
||
}
|
||
|
||
static int numOfPowerOffCMD = 0;
|
||
void MainWidget::sendPowerOffCmd(){
|
||
if(++numOfPowerOffCMD == 6){
|
||
sysPara->devOp->color_flag = 2;
|
||
setRunStatus(tr("关机失败!!!"));
|
||
timerPowerOff->stop();
|
||
numOfPowerOffCMD = 0;
|
||
return;
|
||
}
|
||
sysPara->devOp->powerOff();
|
||
}
|
||
|
||
void MainWidget::powerOffConfirmed(){
|
||
timerPowerOff->stop();
|
||
QProcess process;
|
||
process.startDetached("poweroff");
|
||
qApp->exit(0);
|
||
}
|
||
|
||
void MainWidget::PreviewPressed(){
|
||
qDebug()<<"PreviewPressed";
|
||
// qDebug()<<m_textEdit->toHtml();
|
||
sysPara->para.EditMode = TXTFILE;
|
||
int coldot=0;
|
||
if(sysPara){
|
||
previewFlag=1;
|
||
sysPara->status.currPrintRow = 0;
|
||
sysPara->status.variNum = 0;
|
||
sysPara->status.QRvariNum = 0;
|
||
sysPara->status.ExpiryVarNum=0;
|
||
unsigned char *dat;
|
||
bool MaxCol4000;
|
||
if(sysPara->status.flagOfNo67FPGA)
|
||
MaxCol4000 = true;
|
||
else
|
||
MaxCol4000 = false;
|
||
if(MaxCol4000){
|
||
dat =sysPara->status.printDat_Normal;
|
||
memset(dat,0,sizeof(sysPara->status.printDat_Normal));
|
||
}else{
|
||
dat =sysPara->status.printDat;
|
||
memset(dat,0,sizeof(sysPara->status.printDat));
|
||
}
|
||
|
||
// qDebug()<<"Preview:";
|
||
//////////////////////////////////////////////////////在这里清变量参数
|
||
sysPara->status.ExpiryVarNum=0;
|
||
sysPara->status.CurrDateVariNum = 0;
|
||
sysPara->status.classVariNum = 0;
|
||
sysPara->print.ExpiryVar.startColPos = 0;
|
||
sysPara->print.ExpiryVar.endRowPos = 0;
|
||
sysPara->print.ExpiryVar.letterSpace =0;
|
||
sysPara->print.CurDateVar.startColPos = 0;
|
||
sysPara->print.CurDateVar.endRowPos = 0;
|
||
sysPara->print.CurDateVar.letterSpace = 0;
|
||
/////////////////////////////////////////////////////////////////
|
||
if(sysPara->para.EditMode==PICFILE)
|
||
{
|
||
|
||
// ui->PicWidgetDisp->getPrintDat (dat,0,sysPara);
|
||
// ui->PicWidgetDisp->readVar (sysPara,0);
|
||
|
||
// qDebug ()<<"v-n1:"<<sysPara->status.variNum<<"v-nLeter1:"<<sysPara->status.vars[0].letterSpace<<"v-nLeter2:"<<sysPara->status.vars[1].letterSpace<<"v-nLeter3:"<<sysPara->status.vars[2].letterSpace;
|
||
// sysPara->status.variNum=ui->PicWidgetDisp->getVarNum ();
|
||
// sysPara->status.currPrintCol=ui->PicWidgetDisp->getWidth ();
|
||
// sysPara->status.currPrintRow=ui->PicWidgetDisp->getPicRealHeight();
|
||
|
||
// ui->PicWidgetDisp->getCharRamData(sysPara);
|
||
|
||
//qDebug()<<"H0:"<<ui->PicWidgetDisp->getHeight()<<ui->PicWidgetDisp->getPicRealHeight();
|
||
|
||
}
|
||
// end of PICFILE
|
||
else if(sysPara->para.EditMode==TXTFILE)// TXTFLE
|
||
{
|
||
sysPara->status.addSpace = sysPara->para.checkSpace;
|
||
ontextEdittextChanged();
|
||
coldot = (int)m_textEdit->document()->size().width();
|
||
if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))
|
||
{
|
||
coldot = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide);
|
||
QMessageBox::warning(this, tr("警告"),
|
||
tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)));
|
||
}
|
||
int maxPicHeight = MAX_PRINT_ROW_NUM + 12;
|
||
QSize size(coldot,maxPicHeight);
|
||
|
||
sysPara->status.currPrintRow =0;
|
||
sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace
|
||
|
||
|
||
QImage image(size,QImage::Format_ARGB32);
|
||
image.fill(0x00ffffff);//填充白色
|
||
//image.fill(0x00f0f000);//填充白色
|
||
QPainter painter(&image);
|
||
//image.save("./printImage.jpg");
|
||
m_textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/
|
||
|
||
image.save("./printImage.bmp");
|
||
//ui->widgetPrintTextDisplay
|
||
int firstRow = maxPicHeight;
|
||
/*--------------------------------------------------------------------------*/
|
||
for(int j = 0; j < maxPicHeight; j++){ //计算首行位置
|
||
for(int i = 0; i < coldot; i++){
|
||
QRgb rgb = image.pixel(i,j);
|
||
if(rgb !=0x00ffffff )//& 0xff000000)
|
||
{
|
||
//qDebug()<<j<< QString().sprintf("%08X",rgb);
|
||
//if((rgb&0x00FFFFFF)==0)
|
||
{
|
||
firstRow = j;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if(firstRow != maxPicHeight)
|
||
break;
|
||
}
|
||
firstRow = 0;
|
||
//qDebug()<<"firstRow"<<firstRow<<maxPicHeight;
|
||
//firstRow = 0;
|
||
/*--------------------------------------------------------------------------*/
|
||
int lastRow = firstRow + MAX_PRINT_ROW_NUM;
|
||
int TempVarNum=0;
|
||
int varLastRow=0;
|
||
lastRow = (lastRow>maxPicHeight)?maxPicHeight:lastRow;
|
||
sysPara->status.ExpiryVarNum=0;
|
||
sysPara->status.CurrDateVariNum = 0;
|
||
sysPara->status.classVariNum = 0;
|
||
sysPara->print.ExpiryVar.startColPos = 0;
|
||
sysPara->print.ExpiryVar.endRowPos = 0;
|
||
sysPara->print.ExpiryVar.letterSpace =0;
|
||
sysPara->print.CurDateVar.startColPos = 0;
|
||
sysPara->print.CurDateVar.endRowPos = 0;
|
||
sysPara->print.CurDateVar.letterSpace = 0;
|
||
|
||
//接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行
|
||
for(int j = 0; j < lastRow - firstRow; j++){ // Y
|
||
for(int i = 0; i < coldot; i++){ //
|
||
QRgb rgb = image.pixel(i,j + firstRow);
|
||
if(rgb&0x80000000) { //判断alpha,rgb<0xFFE0E0E0->过滤偏白背景
|
||
//if((rgb & 0xffffff) == 0xff0000) {j=40; break;}
|
||
if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色
|
||
|
||
bool foundvar=0;
|
||
if(j>0){
|
||
QRgb r_rgb = image.pixel(i,j + firstRow+1);
|
||
if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;}
|
||
//QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0;
|
||
}
|
||
if(foundvar){
|
||
if(sysPara->status.variNum < MAX_VARI_NUM){
|
||
sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0);
|
||
sysPara->status.vars[sysPara->status.variNum].endRowPos = j;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.variNum ++;TempVarNum++;
|
||
i+=5;
|
||
//qDebug()<<"VARr:"<<TempVarNum<<i<<j;
|
||
}
|
||
else TempVarNum++;
|
||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||
}
|
||
}
|
||
else if( ((rgb & 0xfffff0) == 0x00ff10) || ((rgb & 0xfffff0) == 0x00ff20) ||((rgb & 0xfffff0) == 0x00ff30) ){
|
||
// 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR)
|
||
//qDebug()<<"FLAG:"<<i<<j+1<<QString().sprintf("%08X", rgb);
|
||
if(sysPara->status.QRvariNum>=4)continue;
|
||
if((rgb & 0x00ffff0) == 0x00ff10) { //MDT
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0);
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.QRvariNum++;
|
||
}
|
||
else if((rgb & 0x00ffff0) == 0x00ff20) { //QR
|
||
//qDebug()<<"FLAG:"<<i<<j+1<<QString().sprintf("0x%08X", rgb);
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=QR;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0);
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1;
|
||
//qDebug()<<"qr start row:"<<sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos;
|
||
//qDebug()<<"qr end row:"<<sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos;
|
||
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.QRvariNum++;
|
||
}
|
||
else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0);
|
||
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1;
|
||
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.QRvariNum++;
|
||
|
||
}
|
||
if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4;
|
||
|
||
}
|
||
//else if((rgb & 0xfffff0)==0xff00f0)
|
||
else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE)
|
||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||
bool foundExVar=0;
|
||
if(j>0){
|
||
QRgb r_rgb = image.pixel(i,j + firstRow+1);
|
||
if((r_rgb & 0x00ffffff) != EXPIRY_VARI_RECONISE ){foundExVar =1;}
|
||
}
|
||
if(foundExVar)
|
||
{
|
||
qDebug()<<"expiryVar:";
|
||
//if(sysPara->status.ExpiryVarNum <3)
|
||
{
|
||
sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0);
|
||
sysPara->print.ExpiryVar.endRowPos = j;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
if(sysPara->status.ExpiryVarNum == 0)
|
||
sysPara->status.ExpiryVarNum ++;
|
||
i+=10;
|
||
}
|
||
//else TempVarNum++;
|
||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||
}
|
||
}
|
||
else if((rgb & 0xfffff0)==0xff0cf0)
|
||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||
//qDebug()<<"before found CurDateVar:"<<rgb;
|
||
bool foundExVar=0;
|
||
if(j>0){
|
||
QRgb r_rgb = image.pixel(i,j + firstRow+1);
|
||
if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;}
|
||
}
|
||
if(foundExVar)
|
||
{
|
||
// qDebug()<<"found CurDateVar:";
|
||
//if(sysPara->status.ExpiryVarNum <2)
|
||
{
|
||
sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0);
|
||
sysPara->print.CurDateVar.endRowPos = j;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
if(sysPara->status.CurrDateVariNum == 0)
|
||
sysPara->status.CurrDateVariNum ++;
|
||
i+=10;
|
||
}
|
||
|
||
//else TempVarNum++;
|
||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||
}
|
||
}
|
||
//else if((rgb & 0xffffff)==0x0032c8)
|
||
else if((rgb & 0x0000ff)>0x0000c0 && (rgb & 0x00ff00)>0x002F00 && (rgb & 0x00ff0000)==0x00000000)
|
||
{
|
||
//qDebug()<<"before found class:"<<rgb;
|
||
//qDebug()<<" found class:"<<i<<j + firstRow;
|
||
{
|
||
qDebug()<<"found class:";
|
||
//if(sysPara->status.classVariNum <3)
|
||
{
|
||
EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ;
|
||
currCLass->startColPos = i+(sysPara->status.addSpace?i:0);
|
||
if (currCLass->startColPos>1)
|
||
currCLass->startColPos = currCLass->startColPos - 1;
|
||
currCLass->endRowPos = j;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
if(sysPara->status.classVariNum == 0)
|
||
sysPara->status.classVariNum ++;
|
||
i+=5;
|
||
}
|
||
}
|
||
}
|
||
else { //Y = 0.299*R' + 0.587*G' + 0.114*B
|
||
int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000;
|
||
if(y < 125 ) {
|
||
dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点
|
||
|
||
if((j+1) > sysPara->status.currPrintRow) {
|
||
sysPara->status.currPrintRow = j+1;
|
||
//qDebug()<<"dddd currPrintRow:"<< sysPara->status.currPrintRow;
|
||
}
|
||
|
||
}
|
||
}
|
||
}/*判断alpha end*/
|
||
}
|
||
}
|
||
|
||
// var
|
||
//qDebug() <<"VarNum"<<TempVarNum;
|
||
if(TempVarNum>8){
|
||
setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!"));
|
||
strTitle= tr("变量数大于8个,某些变量将不起作用!!!");
|
||
strTitle.append("\r\n");
|
||
strTitle.append(tr("请减少信息中的变量(或计数器)数量."));
|
||
QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok);
|
||
}
|
||
|
||
//qDebug()<<firstRow<<lastRow<< sysPara->status.vars[0].startRowPos<<sysPara->status.vars[0].endRowPos<< sysPara->status.currPrintRow;
|
||
// ==============查找QRV, DMTV,BARV 变量 MAX_QVARI_NUM
|
||
//qDebug()<<"qrvar"<<sysPara->status.QRvariNum;
|
||
searchQrVar();
|
||
//if(sysPara->status.ExpiryVarNum)
|
||
searchExpiryVar();
|
||
//ui->widgetPrintTextDisplay->update();
|
||
//===============
|
||
if(sysPara->status.variNum){
|
||
//
|
||
/*--------------------------------提取变量------------------------------------------*/
|
||
QString pattern = "<img src=\":/(\\d*)/(\\d*)/../image/digitalWidth(\\d*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||
|
||
QRegExp rx(pattern);
|
||
QString textHtml = m_textEdit->toHtml();
|
||
int from = 0;
|
||
int varNum = 0;
|
||
// 正常变量
|
||
while(from < textHtml.size() && from != -1) {
|
||
from = textHtml.indexOf(rx,from);//返回匹配到到起始地址
|
||
bool ok;
|
||
if(from != -1){//找到匹配的
|
||
from ++;
|
||
if(varNum < sysPara->status.variNum){
|
||
sysPara->status.vars[varNum].digitalNum = rx.cap(3).toInt(&ok);//第二个匹配,数字到个数
|
||
sysPara->status.vars[varNum].bold = (sysPara->status.vars[varNum].digitalNum%100) == 75;
|
||
if(sysPara->status.vars[varNum].bold)
|
||
sysPara->status.vars[varNum].digitalNum = sysPara->status.vars[varNum].digitalNum/100;
|
||
|
||
sysPara->status.vars[varNum].type = rx.cap(2).toInt(&ok);//第一个匹配
|
||
sysPara->status.vars[varNum].width = rx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1);
|
||
sysPara->status.vars[varNum].height = rx.cap(5).toInt(&ok);
|
||
|
||
//qDebug() <<varNum<< "startRowPos=:" << sysPara->status.vars[varNum].startRowPos
|
||
// << "endRowPos" << sysPara->status.vars[varNum].endRowPos
|
||
// <<"Height"<<sysPara->status.vars[varNum].height;
|
||
//sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].startRowPos + sysPara->status.vars[varNum].height-1;
|
||
sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+1;
|
||
if(sysPara->status.vars[varNum].startRowPos<0)sysPara->status.vars[varNum].startRowPos=0;
|
||
//sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+(sysPara->status.vars[varNum].height==15||sysPara->status.vars[varNum].height==16?0:1);
|
||
// qDebug()<<"Hei:"<<sysPara->status.vars[varNum].height;
|
||
/*-----------------------------------------------------------------------------------------*/
|
||
int t_x_start_pos = sysPara->status.vars[varNum].startColPos;
|
||
int t_x_end_pos = t_x_start_pos + sysPara->status.vars[varNum].width ;
|
||
if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))
|
||
t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide);
|
||
int t_y_start_pos = sysPara->status.vars[varNum].startRowPos;
|
||
int t_y_end_pos = sysPara->status.vars[varNum].endRowPos+1 ;
|
||
if(t_y_start_pos < 0)
|
||
t_y_start_pos = 0;
|
||
for(int i = t_x_start_pos; i < t_x_end_pos; i++){
|
||
for(int j = t_y_start_pos; j < t_y_end_pos; j++){
|
||
|
||
dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉
|
||
|
||
}
|
||
}
|
||
|
||
sysPara->status.vars[varNum].height = rx.cap(5).toInt(&ok)-1;
|
||
if(sysPara->status.vars[varNum].height>16 ){
|
||
if(sysPara->status.vars[varNum].height==24)
|
||
;
|
||
else {
|
||
if(sysPara->status.vars[varNum].startRowPos)
|
||
{
|
||
sysPara->status.vars[varNum].endRowPos--;
|
||
sysPara->status.vars[varNum].startRowPos--;
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
if(sysPara->status.vars[varNum].type == RANDOMNUM)
|
||
{
|
||
//qDebug()<<"RAND:"<<sysPara->status.vars[varNum].type<< sysPara->status.vars[varNum].digitalNum;
|
||
sysPara->status.RandomDigitNum = sysPara->status.vars[varNum].digitalNum;
|
||
|
||
|
||
}
|
||
|
||
if(sysPara->status.vars[varNum].type >59 && sysPara->status.vars[varNum].type<70)
|
||
{
|
||
sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].endRowPos-3;
|
||
sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].startRowPos-3;
|
||
}
|
||
/*-----------------------------------------------------------------------------------------*/
|
||
int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[varNum].height);
|
||
|
||
//qDebug()<<"MainWindows"<<sysPara->status.vars[varNum].height<<pixelSize;
|
||
|
||
sysPara->status.vars[varNum].letterSpace = 0;
|
||
if(sysPara->status.vars[varNum].digitalNum){ //算出letterspace
|
||
QFont font;
|
||
//font.setFamily(Public::getFontFamily(pixelSize));
|
||
font.setFamily(Public::getFontFamily(pixelSize,sysPara->status.vars[varNum].type )); // 20160812
|
||
//pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0));
|
||
font.setPixelSize(pixelSize);
|
||
font.setWeight(sysPara->status.vars[varNum].bold?QFont::Bold:QFont::Normal);
|
||
//font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace);
|
||
QFontMetrics fontMetrics(font);
|
||
int charWidth = (fontMetrics.width("0123456789"))/10 ;
|
||
sysPara->status.vars[varNum].letterSpace = sysPara->para.textEditCharSpace;
|
||
//sysPara->status.vars[varNum].width/sysPara->status.vars[varNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth;
|
||
}
|
||
|
||
if(varNum<7) varNum ++;
|
||
}
|
||
else
|
||
{
|
||
qDebug() << tr("warning,界面上有变量未显示完全");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//if(sysPara->status.variNum) qDebug()<< sysPara->status.vars[0].startColPos<<sysPara->status.vars[0].endRowPos ;
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
generateCharRamData();
|
||
|
||
/*---------------------------------------------------------------------------*/
|
||
//sysPara->status.currPrintRow ++;//总的行数,从1~n,而不是从0~n,
|
||
//if(sysPara->status.currPrintRow>39)sysPara->status.currPrintRow=39;
|
||
if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1) sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1;
|
||
bool found=0;
|
||
|
||
lastRow = sysPara->status.currPrintRow;
|
||
//qDebug()<<"lastRow:"<<lastRow;
|
||
for(int j = sysPara->status.currPrintRow; j >2 ; j--){ //计算首行位置
|
||
for(int i = 0; i < coldot; i++){
|
||
if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){
|
||
lastRow = j+1;
|
||
found=1;//qDebug()<<"fOUND:"<<i<<j<<dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8]<<sysPara->status.currPrintRow;
|
||
break;
|
||
}
|
||
}
|
||
if(found)
|
||
break;
|
||
}
|
||
if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow =MAX_PRINT_ROW_NUM-1;
|
||
if(lastRow<varLastRow)lastRow= varLastRow-1;
|
||
|
||
if(lastRow<1) lastRow =1;
|
||
//if(lastRow>20 &&lastRow<=25) lastRow =24;
|
||
|
||
sysPara->status.currPrintRow =lastRow;
|
||
//sysPara->status.currPrintRow = (lastRow > varLastRow) ? lastRow : varLastRow; //配合賴工省点打印少行問题
|
||
//qDebug()<<"lastRow:"<<lastRow;
|
||
//qDebug()<<"2"<<sysPara->status.currPrintRow;
|
||
if(sysPara->status.specialVarPrint.SpecialVarEnable)
|
||
{
|
||
sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&sysPara->status.specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 20240716
|
||
}
|
||
}
|
||
// end of TxtMode
|
||
|
||
//qDebug() << "varnum:"<<sysPara->status.variNum;
|
||
// 交替打印
|
||
// sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2;
|
||
|
||
|
||
#ifdef _2DCODE_
|
||
if(sysPara->status.QRvariNum) {
|
||
// onUpdateDispQRCode(1);
|
||
}
|
||
#endif
|
||
//if(sysPara->status.currPrintRow==11) sysPara->status.currPrintRow=12;
|
||
int wmax = sysPara->status.currPrintRow;
|
||
sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2;
|
||
if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0;
|
||
else {
|
||
if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1;
|
||
wmax = sysPara->status.currAlterPrintRow;
|
||
}
|
||
/*-------------------------------切换到显示窗口-----------------------------------*/
|
||
if(sysPara->status.addSpace)
|
||
m_PrintDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow);
|
||
else m_PrintDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow);
|
||
|
||
m_PrintDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow);
|
||
// ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay);
|
||
// ui->stackedWidgetOption->setCurrentWidget(ui->pageOption);
|
||
// ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol));
|
||
m_PrintDisplay->update();
|
||
|
||
//qDebug()<<"3"<<sysPara->status.currPrintRow;
|
||
}
|
||
previewFlag=0;
|
||
|
||
}
|
||
|
||
|
||
void MainWidget::ontextEdittextChanged()
|
||
{
|
||
// bool MaxCol4000;
|
||
// if(sysPara->status.flagOfNo67FPGA)
|
||
// MaxCol4000 = true;
|
||
// else
|
||
// MaxCol4000 = false;
|
||
// QSizeF size = ui->textEdit->document()->size();
|
||
// sysPara->status.textEditTotalCol = size.width();
|
||
// ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(size.height()).arg(size.width()));
|
||
// if(size.width() > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){
|
||
// myInputMethod->getInputMethod()->on_Key_Backspace_released();
|
||
// MySleep(300);
|
||
// }
|
||
// if(size.width() == 0)
|
||
// { //在通过关标选择文本然后删除的时候,不会调用cursorPosition事件
|
||
// onTextEditCursorPositionChanged();
|
||
// }
|
||
|
||
// if(0<size.width() && ++numOfTextChange > 10)
|
||
// {
|
||
// numOfTextChange = 0;
|
||
// emit autoUpdateFontWidthByMainWindow((const unsigned int)size.width());
|
||
// }
|
||
}
|
||
|
||
|
||
void MainWidget::setRunStatus(QString str){
|
||
|
||
ui.lb_nozzleState->setText(str);
|
||
}
|
||
|
||
int MainWidget::searchQrVar(){
|
||
int varNum = 0;
|
||
if( sysPara->status.QRvariNum){
|
||
QString pattern = "<img src=\":/(\\d*)/image/(\\w*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||
// 1 type ,2 name,3 width,4 height
|
||
//<img src=":/9/image/DMTV16.bmp" width="16" height="16" /></p><
|
||
//<img src=":/10/image/QRV21.bmp" width="25" height="21" />
|
||
QRegExp rx(pattern);
|
||
//QString textHtml = ui->textEdit->toHtml();
|
||
/////////////
|
||
QTextEdit textEdit ;
|
||
for(int i=0;i<sysPara->status.QRvariNum;i++)
|
||
{
|
||
|
||
if(sysPara->print.QRvars[i].type==0){
|
||
textEdit.insertHtml(QString("<img src=':/%1/image/DMTV%2.bmp' height='%2' width='%3' />")
|
||
.arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后
|
||
}
|
||
else if(sysPara->print.QRvars[i].type==1){
|
||
textEdit.insertHtml(QString("<img src=':/%1/image/QRV%2.bmp' height='%2' width='%3' />")
|
||
.arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后
|
||
}
|
||
else if(sysPara->print.QRvars[i].type==2){
|
||
textEdit.insertHtml(QString("<img src=':/%1/image/BARV%2.bmp' height='%2' width='%3' />")
|
||
.arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后
|
||
}
|
||
}
|
||
QString textHtml = textEdit.toHtml();
|
||
////////////
|
||
int from = 0;
|
||
// int xx =textHtml.size();
|
||
while(from < textHtml.size() && from != -1){
|
||
from = textHtml.indexOf(rx,from);
|
||
bool ok;
|
||
//qDebug()<<xx<<"from:"<<from;
|
||
if(from != -1){
|
||
from ++;
|
||
if(varNum < 4){
|
||
QString s = rx.cap(2);
|
||
int type = rx.cap(1).toInt(&ok);
|
||
// 填充信息
|
||
//qDebug()<<"QVARName:"<<type<<rx.cap(1)<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
|
||
if(type<20 && type>=9 && (sysPara->print.QRvars[varNum].type ==type-9))
|
||
{
|
||
//sysPara->print.QRvars[varNum].type = type-9;
|
||
sysPara->para.qrOption.type = type-9;
|
||
sysPara->para.qrOption.width=sysPara->print.QRvars[varNum].width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ;
|
||
sysPara->para.qrOption.height =sysPara->print.QRvars[varNum].height = rx.cap(4).toInt(&ok);
|
||
sysPara->print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height;
|
||
varNum++;
|
||
//break;
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return varNum;
|
||
}
|
||
|
||
int MainWidget::searchExpiryVar()
|
||
{
|
||
int varNum = 0;
|
||
if( sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum || sysPara->status.classVariNum)
|
||
{
|
||
QString pattern = "<img src=\":/(\\d*)/image/(\\w*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||
// 1 type ,2 name,3 width,4 height
|
||
//<img src=":/80/image/expiryDate8.bmp" width="16" height="16" /></p><
|
||
//<img src=":/81/image/curDate8.bmp" width="25" height="21" />
|
||
QRegExp rx(pattern);
|
||
QString textHtml = m_textEdit->toHtml();
|
||
int from = 0;
|
||
// int xx =textHtml.size();
|
||
sysPara->print.ExpiryVar.type = 0;
|
||
sysPara->print.CurDateVar.type = 0;
|
||
//sysPara->print.CurDateVar[1].type = 0;
|
||
sysPara->print.ClassVari.type = 0;
|
||
while(from < textHtml.size() && from != -1){
|
||
from = textHtml.indexOf(rx,from);
|
||
bool ok;
|
||
//qDebug()<<xx<<"from:"<<from;
|
||
if(from != -1)
|
||
{
|
||
from ++;
|
||
if(varNum < 3)
|
||
{
|
||
QString s = rx.cap(2);
|
||
int type = rx.cap(1).toInt(&ok);
|
||
// 填充信息
|
||
//qDebug()<<"QVARName:"<<type<<rx.cap(1)<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
|
||
if(type==EXPIRYDATE || type==EXPIRYDATE + 10 || type==EXPIRYDATE + 20 || type==EXPIRYDATE + 30)
|
||
{ //expiryDate
|
||
//qDebug()<<"ExpiryVar:"<<type<<rx.cap(1)<<rx.cap(2).left(10)<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
|
||
sysPara->print.ExpiryVar.type = type;
|
||
sysPara->print.ExpiryVar.width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ;
|
||
sysPara->print.ExpiryVar.height = rx.cap(4).toInt(&ok);
|
||
//sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-sysPara->print.ExpiryVar.height;
|
||
sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-(sysPara->print.ExpiryVar.height-1);
|
||
if(sysPara->print.ExpiryVar.startRowPos < 0)
|
||
{
|
||
sysPara->print.ExpiryVar.startRowPos = 0;
|
||
}
|
||
if(rx.cap(2).contains("75"))
|
||
{
|
||
sysPara->print.ExpiryVar.bold = 1;
|
||
}
|
||
else
|
||
{
|
||
sysPara->print.ExpiryVar.bold = 0;
|
||
}
|
||
// 直接更新有效期,并退出?
|
||
ExpiryDotUpdate(1);
|
||
varNum++;
|
||
}
|
||
else if(type == CURDATE || type==CURDATE + 10 || type==CURDATE + 20 || type==CURDATE + 30)
|
||
{
|
||
sysPara->print.CurDateVar.type = type;
|
||
sysPara->print.CurDateVar.width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ;
|
||
sysPara->print.CurDateVar.height = rx.cap(4).toInt(&ok);
|
||
sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1);
|
||
if(sysPara->print.CurDateVar.startRowPos < 0)
|
||
{
|
||
sysPara->print.CurDateVar.startRowPos = 0;
|
||
}
|
||
if(rx.cap(2).contains("875"))
|
||
{
|
||
//qDebug()<<"bold";
|
||
sysPara->print.CurDateVar.bold = 1;
|
||
}
|
||
else
|
||
{
|
||
//qDebug()<<"normal";
|
||
sysPara->print.CurDateVar.bold = 0;
|
||
}
|
||
//sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1);
|
||
//qDebug()<<"CurDateVar:startRowPos"<<sysPara->print.CurDateVar.startRowPos<<" height"<<sysPara->print.CurDateVar.height;
|
||
// 生产日期即当前日期
|
||
ExpiryDotUpdate(2);
|
||
varNum++;
|
||
}
|
||
else if(type == CURCLASS)
|
||
{
|
||
//qDebug()<<"CURCLASS:"<<type<<rx.cap(1)<<rx.cap(2).contains("875")<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
|
||
EXPIRYVAR_t *currClass = &sysPara->print.ClassVari ;
|
||
currClass->type = type;
|
||
currClass->width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ;
|
||
currClass->height = rx.cap(4).toInt(&ok);
|
||
currClass->startRowPos = currClass->endRowPos-currClass->height-1;
|
||
if(rx.cap(2).contains("875")) {
|
||
//qDebug()<<"bold";
|
||
currClass->bold = 1;
|
||
}
|
||
else {
|
||
//qDebug()<<"normal";
|
||
currClass->bold = 0;
|
||
}
|
||
|
||
//sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1);
|
||
//qDebug()<<"CurDateVar:startRowPos"<<sysPara->print.CurDateVar.startRowPos<<" height"<<sysPara->print.CurDateVar.height;
|
||
// 生产日期即当前日期
|
||
ExpiryDotUpdate(3);
|
||
varNum++;
|
||
}
|
||
}
|
||
else if(varNum>=3) break;
|
||
}
|
||
//break;
|
||
//if(varNum>sysPara->status.ExpiryVarNum)break;
|
||
}
|
||
}
|
||
return varNum;
|
||
}
|
||
|
||
/* 生成字模数据 */
|
||
void MainWidget::generateCharRamData()
|
||
{
|
||
if(!sysPara->status.variNum)
|
||
return;
|
||
|
||
QTextEdit textEdit;
|
||
textEdit.document()->setDocumentMargin(0);
|
||
textEdit.setLineWrapMode(QTextEdit::NoWrap);
|
||
int ramAddress = 0;
|
||
int i;
|
||
qDebug()<<"sysPara->status.variNum:"<<sysPara->status.variNum;
|
||
for( i = 0; i < sysPara->status.variNum; i++){
|
||
vars_t *p_var = &sysPara->status.vars[i];
|
||
p_var->bassAddr = -1;
|
||
if(p_var->original){ //清除原来的记录
|
||
if(p_var->dat){
|
||
free(p_var->dat);
|
||
}
|
||
p_var->original = false;
|
||
}
|
||
|
||
int j;
|
||
|
||
int width;
|
||
if(p_var->bassAddr == -1){
|
||
if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide)
|
||
width = (p_var->digitalNum)?(13*(p_var->width/p_var->digitalNum)):12;
|
||
else
|
||
width = (p_var->digitalNum)?(10*(p_var->width/p_var->digitalNum)):12;
|
||
int width2 = width;//+(sysPara->status.addSpace?width:0);
|
||
int height = p_var->height;
|
||
|
||
textEdit.clear();
|
||
int DPI = textEdit.logicalDpiX();
|
||
DPI = DPI?DPI:1; //Pixel = DPI * Point / 72
|
||
|
||
if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){
|
||
textEdit.insertHtml(QString("<span style=\" font-family:'%1'; font-size:%2pt; font-weight:%3;\">0123456789.m </span>")
|
||
.arg(Public::getFontFamily(height,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横
|
||
.arg(height*96/DPI).arg(p_var->bold?600:400)); //600表示加粗,400表示普通
|
||
}else{
|
||
textEdit.insertHtml(QString("<span style=\" font-family:'%1'; font-size:%2pt;\">0123456789</span>")
|
||
// .arg(p_var->bold?ui->textEditOption->getFamilyName(height):(Public::getFontFamily(height,p_var->type))) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横
|
||
.arg(Public::getFontFamily(height,p_var->type))
|
||
.arg(height*96/DPI));
|
||
}
|
||
|
||
QFont font = textEdit.font();
|
||
font.setLetterSpacing(QFont::AbsoluteSpacing,p_var->letterSpace);
|
||
textEdit.setFont(font);
|
||
|
||
qDebug() << "Generate char, letter space: " << p_var->letterSpace << "font height: " << height;
|
||
|
||
int imgHeight = height + 12;
|
||
QSize size(width,imgHeight);
|
||
QImage image(size,QImage::Format_ARGB32);
|
||
image.fill(0x00ffffff);
|
||
QPainter painter(&image);
|
||
textEdit.show(); //如果不显示,似乎不会绘制
|
||
|
||
textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/
|
||
|
||
QString fileName = "/home/plg/doc/002.html";
|
||
QTextDocumentWriter writer(fileName);
|
||
bool success = writer.write(textEdit.document());
|
||
|
||
textEdit.hide();
|
||
image.save(QString::number(i) + "varRam.png");
|
||
// 找到最下面的行
|
||
int lastValidRow = 0;
|
||
for(int k = imgHeight - 1; k >= 0 ; k--){
|
||
for(int j = 0; j < width; j ++){
|
||
QRgb rgb = image.pixel(j,k);
|
||
if(rgb&0xff000000){
|
||
lastValidRow = k + 1;
|
||
break;
|
||
}
|
||
}
|
||
if(lastValidRow != 0)
|
||
break;
|
||
}
|
||
|
||
qDebug()<<"lastValidRow"<<lastValidRow;
|
||
qDebug()<<"GetData"<<p_var->endRowPos<< p_var->startRowPos;
|
||
int rowDiff = p_var->endRowPos - p_var->startRowPos;
|
||
int firstValidRow = 0; // 变量的第一行所处的行地址
|
||
int firstValidRowDiff;// 看起来和上面的参数一样
|
||
qDebug()<<"rowDiff"<<rowDiff;
|
||
|
||
if(lastValidRow >= rowDiff){
|
||
firstValidRow = lastValidRow - rowDiff;
|
||
firstValidRowDiff = firstValidRow;
|
||
}
|
||
else {
|
||
firstValidRow = 0;
|
||
firstValidRowDiff = lastValidRow > rowDiff;
|
||
}
|
||
|
||
|
||
firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正
|
||
|
||
int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); // 一列占用字节数
|
||
unsigned char *dat = (unsigned char *)calloc(width2,rowByteNum);
|
||
for(int k = firstValidRow; k < lastValidRow; k++){
|
||
|
||
for(int j = 0; j < width; j ++){
|
||
QRgb rgb = image.pixel(j,k);
|
||
|
||
int currRow = k - firstValidRowDiff;
|
||
if(((rgb >> 24)&0xff) > 0x80){ // 判断是否有效的像素点
|
||
dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8));
|
||
}
|
||
else{
|
||
}
|
||
}
|
||
}
|
||
p_var->bassAddr = ramAddress;
|
||
p_var->datHeight = height;
|
||
|
||
p_var->datWidth = width2;
|
||
p_var->rowByteNum = rowByteNum;
|
||
p_var->dat = dat;
|
||
p_var->original = true;
|
||
p_var->currVal = -1; //相当于初始化
|
||
ramAddress += rowByteNum * width2;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
void MainWidget::ExpiryDotUpdate(char Mode)
|
||
{ //更新有效期
|
||
QTextEdit textEdit;
|
||
//textEdit.document()->setDocumentMargin(0);
|
||
textEdit.setLineWrapMode(QTextEdit::NoWrap);
|
||
int height,width;
|
||
//QDate curDate=QDate::currentDate();
|
||
EXPIRYVAR_t *p_var;//=(Mode==1)?&sysPara->print.ExpiryVar:&sysPara->print.CurDateVar;
|
||
|
||
if(sysPara->status.flagOfAdjustWidth_1){
|
||
sysPara->print.ExpiryVar.splitMode = sysPara->status.splitMode_Adjust_1;
|
||
sysPara->status.flagOfAdjustWidth_1 = false;
|
||
}
|
||
if(sysPara->status.flagOfAdjustWidth_2){
|
||
sysPara->print.CurDateVar.splitMode = sysPara->status.splitMode_Adjust_2;
|
||
sysPara->status.flagOfAdjustWidth_2 = false;
|
||
}
|
||
if(Mode==1)
|
||
{
|
||
qDebug()<<"Mode==1";
|
||
if(sysPara->status.ExpiryVarNum == 0) {
|
||
return;
|
||
}
|
||
p_var = &sysPara->print.ExpiryVar;
|
||
QDate expiryDate=QDate::currentDate().addDays(sysPara->para.ExpiryDay);
|
||
sysPara->print.ExpiryVar.year = expiryDate.year();
|
||
sysPara->print.ExpiryVar.month = expiryDate.month();
|
||
sysPara->print.ExpiryVar.day = expiryDate.day();
|
||
r_ExpiryDay = sysPara->para.ExpiryDay;
|
||
}
|
||
else if(Mode==2)
|
||
{
|
||
p_var = &sysPara->print.CurDateVar;
|
||
if(sysPara->status.CurrDateVariNum == 0) {
|
||
return;
|
||
}
|
||
}
|
||
else if(Mode==3)
|
||
{
|
||
p_var = &sysPara->print.ClassVari;
|
||
qDebug()<<"Mode==3";
|
||
if(sysPara->status.classVariNum == 0) {
|
||
return;
|
||
}
|
||
}
|
||
else
|
||
return;
|
||
{
|
||
textEdit.clear();
|
||
height = p_var->height;
|
||
width = p_var->width;
|
||
QString str;
|
||
QHash<int, QString> dateFormat;
|
||
dateFormat.insert(0,"yyyy-MM-dd");
|
||
dateFormat.insert(1,"yyyy/MM/dd");
|
||
dateFormat.insert(2,"yyyyMMdd");
|
||
dateFormat.insert(3,"yyyy年MM月dd日");
|
||
dateFormat.insert(4,"yyyy-MM-dd hh:mm");
|
||
dateFormat.insert(5,"yyyy/MM/dd hh:mm");
|
||
dateFormat.insert(6,"yyyyMMddhhmm");
|
||
dateFormat.insert(7,"yyyy年MM月dd日 hh:mm");
|
||
dateFormat.insert(8,"hh:mm");
|
||
dateFormat.insert(9,"ddhhmm");
|
||
dateFormat.insert(10,"dd MM yy");
|
||
dateFormat.insert(11,"dd/MM/yy");
|
||
dateFormat.insert(12,"dd/MM/yyyy");
|
||
dateFormat.insert(13,"dd-MM-yy");
|
||
dateFormat.insert(14,"dd-MM-yyyy");
|
||
|
||
/*****轮班变量功能 start******/
|
||
/*00:00-08:00
|
||
08:00-16:00
|
||
16:00-00:00
|
||
*/
|
||
QTime current_time =QTime::currentTime();
|
||
int hour = current_time.hour();
|
||
QString DateTime;
|
||
if(Mode==1) {
|
||
DateTime = QDateTime::currentDateTime().addDays(sysPara->para.ExpiryDay).toString(dateFormat.value(sysPara->print.ExpiryVar.splitMode));
|
||
}
|
||
else if(Mode==2 ) {
|
||
DateTime = QDateTime::currentDateTime().toString(dateFormat.value(p_var->splitMode));
|
||
}
|
||
else if (Mode == 3) {
|
||
if(hour >= 0 && hour <8)
|
||
{
|
||
dateFormat.insert(15,"A");
|
||
DateTime = "A";
|
||
}
|
||
else if(hour >= 8 && hour < 16)
|
||
{
|
||
dateFormat.insert(15,"B");
|
||
DateTime = "B";
|
||
}
|
||
else if(hour >= 16)
|
||
{
|
||
dateFormat.insert(15,"C");
|
||
DateTime = "C";
|
||
}
|
||
}
|
||
|
||
/*****轮班变量功能 end******/
|
||
int DPI = textEdit.logicalDpiX();
|
||
DPI = DPI?DPI:1; //Pixel = DPI * Point / 72
|
||
if(p_var->bold) {
|
||
textEdit.insertHtml(QString("<span style=\" font-family:'%1'; font-size:%2pt; font-weight:%3;\">%4</span>")
|
||
.arg(Public::getFontFamily(height-1,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横
|
||
.arg(height*72/DPI-1)
|
||
.arg(600)
|
||
.arg(DateTime)
|
||
); //600表示加粗,400表示普通
|
||
}
|
||
else {
|
||
textEdit.insertHtml(QString("<span style=\" font-family:'%1'; font-size:%2pt; font-weight:%3;\">%4</span>")
|
||
.arg(Public::getFontFamily(height,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横
|
||
.arg(height*72/DPI)
|
||
.arg(400)
|
||
.arg(DateTime)
|
||
// .arg("x")
|
||
); //600表示加粗,400表示普通
|
||
}
|
||
|
||
QFont font = textEdit.font();
|
||
font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace );
|
||
textEdit.setFont(font);
|
||
|
||
int imgHeight = height + 12;
|
||
bool MaxCol4000;
|
||
if(sysPara->status.flagOfNo67FPGA)
|
||
MaxCol4000 = true;
|
||
else
|
||
MaxCol4000 = false;
|
||
if(imgHeight> MAX_PRINT_ROW_NUM+12)
|
||
imgHeight = MAX_PRINT_ROW_NUM+12;
|
||
if(width> (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))
|
||
width = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide;
|
||
QSize size(width+2,imgHeight);
|
||
QImage image(size,QImage::Format_ARGB32);
|
||
image.fill(0x00ffffff);
|
||
QPainter painter(&image);
|
||
textEdit.show(); //如果不显示,似乎不会绘制
|
||
textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/
|
||
textEdit.hide();
|
||
image.save("./Expiry.bmp");
|
||
|
||
int lastValidRow = 0;
|
||
for(int k = imgHeight - 1; k >= 0 ; k--){
|
||
for(int j = 0; j < width+1; j ++){
|
||
QRgb rgb = image.pixel(j,k);
|
||
if(rgb&0xff000000){
|
||
lastValidRow = k + 1;
|
||
break;
|
||
}
|
||
}
|
||
if(lastValidRow != 0)
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
int rowDiff = p_var->endRowPos - p_var->startRowPos;
|
||
int firstValidRow=0;
|
||
int firstValidRowDiff;
|
||
if(lastValidRow >= rowDiff)
|
||
{
|
||
firstValidRow = lastValidRow - rowDiff;
|
||
firstValidRowDiff = firstValidRow;
|
||
}
|
||
else
|
||
{
|
||
firstValidRow = 0;
|
||
firstValidRowDiff = lastValidRow > rowDiff;
|
||
}
|
||
|
||
firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正
|
||
str="";//s2="";
|
||
int wStart=p_var->startColPos;
|
||
int hStart= p_var->startRowPos;
|
||
unsigned char *dat;
|
||
if(MaxCol4000){
|
||
dat =sysPara->status.printDat_Normal;
|
||
}else{
|
||
dat =sysPara->status.printDat;
|
||
}
|
||
for(int j = 2; j < width+1; j ++)
|
||
{
|
||
unsigned char c=0;
|
||
hStart= p_var->startRowPos;
|
||
c=dat[(wStart)*5+(hStart)/8];
|
||
for(int k = firstValidRow; k <= lastValidRow; k++)
|
||
{
|
||
QRgb rgb = image.pixel(j,k);
|
||
if(((rgb >> 24)&0xff) > 0x80)
|
||
{
|
||
c |= (1 << (hStart%8));
|
||
}
|
||
else
|
||
{
|
||
c &= ~(1 << (hStart%8));
|
||
}
|
||
if(hStart%8==7) {
|
||
dat[(wStart)*5+(hStart)/8]=c;
|
||
c=dat[(wStart)*5+(hStart+1)/8];
|
||
}
|
||
hStart++;
|
||
}
|
||
dat[(wStart)*5+(hStart)/8]=c;
|
||
wStart++;
|
||
}
|
||
}
|
||
}
|
||
|
||
bool MainWidget::dateTimeItemsDotUpdate()
|
||
{
|
||
if(!pPicScene) {
|
||
return false;
|
||
}
|
||
|
||
int totalOfProcessedDots = 0;
|
||
int totalOfDatetimeNumber = 0;
|
||
int nbInvaliedDatetimePreview = 0;
|
||
int nbClipDatetimePreview = 0;
|
||
bool isUpdate = false;
|
||
|
||
auto items = pPicScene->items();
|
||
for(auto i : items) {
|
||
PicTextItem* item = dynamic_cast<PicTextItem*>(i);
|
||
if(!item)
|
||
continue;
|
||
|
||
if(item->sourceType() != SourceType::DATETIME && item->sourceType() != SourceType::SCHEDULE_SHIFT && item->sourceType() != SourceType::CODE)
|
||
continue;
|
||
|
||
if(item->sourceType() == SourceType::DATETIME) {
|
||
auto dateTimeItem = dynamic_cast<PicDateItem*>(item);
|
||
if(!dateTimeItem)
|
||
continue;
|
||
|
||
auto b = dateTimeItem->updateDatetimeStr();
|
||
isUpdate |= b;
|
||
if(!b)
|
||
continue;
|
||
}
|
||
|
||
if(item->sourceType() == SourceType::SCHEDULE_SHIFT) {
|
||
auto scheduleShiftItem = dynamic_cast<PicScheduleShiftItem*>(item);
|
||
if(!scheduleShiftItem)
|
||
continue;
|
||
|
||
auto b = scheduleShiftItem->updateScheduleName();
|
||
isUpdate |= b;
|
||
if(!b)
|
||
continue;
|
||
}
|
||
|
||
if(item->sourceType() == SourceType::CODE) {
|
||
auto codeItem = dynamic_cast<PicCodeItem*>(item);
|
||
if(!codeItem)
|
||
continue;
|
||
|
||
QVector<int> counterValus{QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(),
|
||
QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt()};
|
||
auto b = codeItem->updateVariants(counterValus);
|
||
isUpdate |= b;
|
||
if(!b)
|
||
continue;
|
||
}
|
||
|
||
QImage img = item->preview();
|
||
if(img.isNull()) {
|
||
++nbInvaliedDatetimePreview;
|
||
continue;
|
||
}
|
||
|
||
auto sceneRect = pPicScene->sceneRect().toRect();
|
||
auto boundingRect = pPicScene->itemsBoundingRect().toRect();
|
||
QRect itemRect(item->pos().x() - boundingRect.x(), item->pos().y() - boundingRect.y(), img.width(), img.height());
|
||
totalOfDatetimeNumber++;
|
||
|
||
// 裁剪item位置, 确保item位于场景内
|
||
// 如果item超出了场景范围,则裁剪img并更新itemRect,只显示场景内的部分
|
||
QRect intersectRect = itemRect.intersected(sceneRect);
|
||
|
||
if(!intersectRect.isEmpty() && intersectRect != itemRect) {
|
||
// 计算裁剪区域在原图中的偏移
|
||
int cropX = qMax(0, (int)(intersectRect.left() - itemRect.left()));
|
||
int cropY = qMax(0, (int)(intersectRect.top() - itemRect.top()));
|
||
int cropWidth = (int)intersectRect.width();
|
||
int cropHeight = (int)intersectRect.height();
|
||
|
||
// 裁剪图像
|
||
img = img.copy(cropX, cropY, cropWidth, cropHeight);
|
||
|
||
// 更新itemRect为裁剪后的区域
|
||
itemRect = intersectRect;
|
||
|
||
++nbClipDatetimePreview;
|
||
}
|
||
|
||
totalOfProcessedDots += imageToPrintData(img, (int)itemRect.left(), (int)itemRect.top());
|
||
}
|
||
|
||
return isUpdate;
|
||
}
|
||
|
||
int MainWidget::imageToPrintData(QImage &image, int startX, int startY)
|
||
{
|
||
int totalOfProcessedDots = 0;
|
||
|
||
if(image.isNull())
|
||
return 0;
|
||
|
||
unsigned char *dat = sysPara->status.flagOfNo67FPGA ?
|
||
sysPara->status.printDat_Normal : sysPara->status.printDat;
|
||
|
||
int width = image.width();
|
||
int height = image.height();
|
||
int wStart = startX;
|
||
|
||
for(int j = 0; j < width; j++)
|
||
{
|
||
unsigned char c = 0;
|
||
int hStart = startY;
|
||
|
||
c = dat[(wStart)*5 + (hStart)/8];
|
||
|
||
for(int k = 0; k < height; k++)
|
||
{
|
||
QRgb rgb = image.pixel(j, k);
|
||
if(((rgb >> 24) & 0xff) > 0x80)
|
||
{
|
||
c |= (1 << (hStart % 8));
|
||
}
|
||
else
|
||
{
|
||
c &= ~(1 << (hStart % 8));
|
||
}
|
||
|
||
if(hStart % 8 == 7) {
|
||
dat[(wStart)*5 + (hStart)/8] = c;
|
||
c = dat[(wStart)*5 + (hStart + 1)/8];
|
||
++totalOfProcessedDots;
|
||
}
|
||
hStart++;
|
||
}
|
||
|
||
dat[(wStart)*5 + (hStart)/8] = c;
|
||
wStart++;
|
||
totalOfProcessedDots++;
|
||
}
|
||
|
||
return totalOfProcessedDots;
|
||
}
|
||
|
||
void MainWidget::enableReclaimCtrlButton(bool enable){
|
||
m_RightBtn->setEnabled(enable);
|
||
m_LeftBtn->setEnabled(enable);
|
||
}
|
||
|
||
void MainWidget::enablePrintButton(bool enable){
|
||
#ifdef QT_DEBUG
|
||
enable = true;
|
||
#endif
|
||
m_StartBtn->setEnabled(enable);
|
||
m_StopBtn->setEnabled(enable);
|
||
}
|
||
|
||
void MainWidget::updateTotalCnt(int en)
|
||
{
|
||
// No50 USEING
|
||
//sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt:
|
||
// (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0;
|
||
//if(en) sysPara->para.totalProductCnt=0;
|
||
|
||
//sysPara->para.totalProductCnt = sysPara->status.totalProductCnt; // No51版本改进
|
||
sysPara->status.lastProductCnt = sysPara->status.productCnt;
|
||
ui.labelProductCnt->setText(QString::number(sysPara->status.productCnt));
|
||
// ui.labelTotalProductCnt->setText(QString::number( sysPara->para.totalProductCnt+sysPara->status.totalProductCnt));
|
||
// 20260410 总数栏改为预设数值栏
|
||
if (m_setNumDlg->getIsSet() && m_setNumDlg->getNum() > 0 &&
|
||
sysPara->status.productCnt == m_setNumDlg->getNum()) {
|
||
LogInfo::setRunStatusText(QString("productCnt:%1 setNum:%2")
|
||
.arg(sysPara->status.productCnt).arg(m_setNumDlg->getNum()));
|
||
on_m_StopBtn_clicked();
|
||
}
|
||
}
|
||
|
||
void MainWidget::on_m_StartBtn_clicked()
|
||
{
|
||
if(sysPara->status.isPrinting){
|
||
qDebug("Mainwindow: Printing 开始打印");
|
||
}else{
|
||
qDebug("Mainwindow: Non printing 开始打印");
|
||
}
|
||
static int fileCount = 0;
|
||
fileCount++;
|
||
if(fileCount > 5)
|
||
{
|
||
fileCount = 1;
|
||
}
|
||
|
||
if(sysPara){
|
||
bool MaxCol4000;
|
||
if(sysPara->status.flagOfNo67FPGA)
|
||
MaxCol4000 = true;
|
||
else
|
||
MaxCol4000 = false;
|
||
test_flag = 0;
|
||
/******2020/2/29*****/
|
||
if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) //同步模式下,判断喷印间隔是否设置合理
|
||
{
|
||
QSizeF size = m_textEdit->document()->size();
|
||
float stroke,print_len_min;
|
||
stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm;
|
||
print_len_min = stroke * size.width();
|
||
if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable)
|
||
{
|
||
QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min));
|
||
return;
|
||
}
|
||
}
|
||
/******2020/2/29 end*****/
|
||
#ifndef QT_DEBUG
|
||
if(!SIMULATE_PRINTING_MODE){
|
||
if (!sysPara->status.reclainTankReachEnd) {
|
||
return;
|
||
}
|
||
if((sysPara->status.statWarn & WARN_STATUS_HDINT)){
|
||
QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!"));
|
||
return ;
|
||
}
|
||
if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){
|
||
QMessageBox::information(this,tr("错误"),tr("墨线未开,请先开墨线开关!"));
|
||
return ;
|
||
}
|
||
}
|
||
#endif
|
||
|
||
sysPara->devOp->highVoltageCtrl(1);
|
||
sysPara->devOp->setHighVoltageAmplitudetoSTM32();
|
||
sysPara->status.waitHightVolOff = 0;
|
||
// if(!printintFlag)setRunStatus(tr("正在加高压..."));
|
||
// 复位计数器
|
||
if(sysPara->status.FileChangeRestCntFlag){
|
||
if(sysPara->para.ResetAllProductCntEn)
|
||
{
|
||
sysPara->devOp->clearProductCnt(3 | 0x10); // [3]总产品计数器清零FPGA
|
||
sysPara->para.totalProductCnt=0;
|
||
}
|
||
else if(sysPara->para.ResetProductCntEn)
|
||
{
|
||
sysPara->devOp->clearProductCnt(3);
|
||
}
|
||
sysPara->status.FileChangeRestCntFlag=0;
|
||
sysPara->saveParaToFile();
|
||
}
|
||
if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE)
|
||
PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模
|
||
else if(sysPara->para.EditMode == SCENE)
|
||
onPreviewScene();
|
||
|
||
|
||
if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){
|
||
QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)));
|
||
return ;
|
||
}
|
||
if(!((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)
|
||
||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL
|
||
||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE)
|
||
&& sysPara->para.eleEyeTriggerSynPrintEn))
|
||
)
|
||
{
|
||
int dotNumPerCol = sysPara->status.currPrintRow*(1 + sysPara->para.printRowDelay) + sysPara->para.printColDelay;
|
||
long printTmUs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000000);
|
||
if((printTmUs/1000 + 3) > (sysPara->para.printDelayMs)
|
||
&& (sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD)
|
||
&& (sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME )
|
||
) // 在电眼方式下,是否需要判呢?
|
||
{
|
||
QMessageBox::critical(0,tr("错误"),tr("打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms").arg(printTmUs/1000).arg(sysPara->para.printDelayMs));
|
||
return ;
|
||
}
|
||
}
|
||
sysPara->status.isPrinting=false;
|
||
|
||
|
||
SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2,
|
||
|
||
/*-------------------------------------------------------------------*/
|
||
// ui->labelSynColDelay->setText("");
|
||
sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据
|
||
|
||
/*---------------------------------开关回收槽------------------------------*/
|
||
enableReclaimCtrlButton(false);
|
||
updatePrintDisplayLabel();
|
||
// 20170717 移动此,以观察条形码打印异常问题。
|
||
if(!startPrintingFlag)
|
||
{
|
||
sysPara->devOp->printCtrl(PRINT_CTRL_START);
|
||
printintFlag = true;
|
||
}
|
||
|
||
startPrintingFlag = true;
|
||
sysPara->status.isPrinting=true;
|
||
|
||
// 高亮切换
|
||
changeHighLight(true);
|
||
|
||
LogInfo::setRunStatusText("Start print...");
|
||
}
|
||
}
|
||
|
||
void MainWidget::on_m_StopBtn_clicked()
|
||
{
|
||
if(sysPara->status.isPrinting){
|
||
qDebug("Mainwindow: Printing 停止打印");
|
||
}else{
|
||
qDebug("Mainwindow: Non printing 停止打印");
|
||
}
|
||
|
||
if(sysPara){
|
||
if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) {
|
||
return;
|
||
}
|
||
// sysPara->status.flagOfAbnormalStatus = false;
|
||
sysPara->status.isPrinting=false;
|
||
sysPara->devOp->printCtrl2(1);
|
||
sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT
|
||
// LogInfo::setRunStatusText(tr("停止打印"));
|
||
|
||
enableReclaimCtrlButton(true);
|
||
printintFlag = false;
|
||
startPrintingFlag = false;
|
||
updatePrintDisplayLabel();
|
||
sysPara->status. waitHightVolOff = 1;
|
||
sysPara->saveParaToFile(); // 将相关配置保存
|
||
|
||
if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0))
|
||
{
|
||
QMessageBox::StandardButton ret;
|
||
ret = QMessageBox::warning(this, tr("提示"),
|
||
tr("随机码文本将展出到U盘,请插入U盘"),
|
||
QMessageBox::Ok | QMessageBox::Cancel);
|
||
if (ret == QMessageBox::Ok){
|
||
// LogInfo::setRunStatusText("正在导出随机码文件到U盘......");
|
||
sysPara->devOp->RandTxtBakup(0); //备份到U盘
|
||
// LogInfo::setRunStatusText("随机码文件导出完成.");
|
||
|
||
}
|
||
}
|
||
// 高亮切换
|
||
changeHighLight(false);
|
||
|
||
LogInfo::setRunStatusText("Stop print...");
|
||
}
|
||
}
|
||
|
||
unsigned char blankDat1[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]={0};
|
||
void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate)
|
||
{
|
||
if(!sysPara) return ;
|
||
// fileChange=false;
|
||
|
||
Q_UNUSED(alterEnable);
|
||
|
||
if(!isUpdate) {
|
||
sysPara->devOp->writeFpgaPrintPara(1);
|
||
sysPara->devOp->writeFpgaVariCtrl();
|
||
}
|
||
|
||
sysPara->devOp->fpgaWr(0,blankDat1,sizeof(blankDat1));//...所加的空白偏移地址
|
||
// 交替打印处理
|
||
unsigned char *dat;
|
||
size_t sizeofdat;
|
||
bool MaxCol4000;
|
||
if(sysPara->status.flagOfNo67FPGA)
|
||
MaxCol4000 = true;
|
||
else
|
||
MaxCol4000 = false;
|
||
if(MaxCol4000){
|
||
dat =sysPara->status.printDat_Normal;
|
||
sizeofdat = sizeof(sysPara->status.printDat_Normal);
|
||
}else{
|
||
dat =sysPara->status.printDat;
|
||
sizeofdat = sizeof(sysPara->status.printDat);
|
||
}
|
||
if(sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM <= 20000)
|
||
sysPara->devOp->fpgaWr(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM);
|
||
else
|
||
sysPara->devOp->fpgaWrD2(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM);
|
||
|
||
|
||
static QElapsedTimer bnsTimer;
|
||
static uint64_t nbRestartCount = 0;
|
||
++nbRestartCount;
|
||
if(nbRestartCount >= 10) {
|
||
auto elapsed = bnsTimer.restart();
|
||
qDebug() << (QString("SendPrintDataToFpga avg elapsed: %1 s").arg(elapsed / qreal(nbRestartCount) / 1000.0));
|
||
nbRestartCount = 0;
|
||
}
|
||
}
|
||
|
||
int MainWidget::getCurrPrintStatus()
|
||
{
|
||
int printStatus;
|
||
if (startPrintingFlag ) {
|
||
if(printintFlag) {
|
||
printStatus = 1; // 正在打印
|
||
}
|
||
else {
|
||
printStatus = 2; // 暂停喷印
|
||
}
|
||
}
|
||
else {
|
||
printStatus = 3; // 停止打印
|
||
}
|
||
return printStatus;
|
||
}
|
||
|
||
void MainWidget::setReclaimStatus(bool isOpen, int rate)
|
||
{
|
||
// if (!sysPara->devOp->isReclaimTankOpenEnable()) {
|
||
// QString str = isOpen? tr("停止开启") : tr("停止关闭");
|
||
// setRunStatus(str);
|
||
// return;
|
||
// };
|
||
|
||
if (isOpen) {
|
||
QString str = rate == 100? tr("喷嘴已开启"):tr("喷嘴开启中");
|
||
ui.lb_RightBtn->setText(str);
|
||
ui.lb_LeftBtn->setText(tr("喷嘴关闭"));
|
||
} else {
|
||
QString str = rate == 0? tr("喷嘴已关闭"):tr("喷嘴关闭中");
|
||
ui.lb_LeftBtn->setText(str);
|
||
ui.lb_RightBtn->setText(tr("喷嘴开启"));
|
||
}
|
||
}
|
||
|
||
static int mainInkPumpCtrlStatus = 0;
|
||
static int mainInkPumpCtrlCnt = 0;
|
||
//100ms 为单位
|
||
void MainWidget::airPushingProcess()
|
||
{
|
||
if(sysPara){
|
||
if (sysPara->status.airPushing) {
|
||
// 执行排气 7 秒
|
||
setRunStatus(tr("正在排气..."));
|
||
++sysPara->status.airPushingOnTime;
|
||
if(sysPara->status.airPushingOnTime >= 50) {
|
||
static int delayCount = 0;
|
||
++delayCount;
|
||
m_2sFlag = true;
|
||
//sysPara->devOp->controlInkValve(false); //关供墨阀
|
||
if(delayCount >= 40)
|
||
{
|
||
m_2sFlag = false;
|
||
}
|
||
|
||
if(delayCount >= 60)
|
||
{
|
||
delayCount = 0;
|
||
airPushTimer->stop();
|
||
sysPara->devOp->controlViscosityPump(false);
|
||
reclaimTanOpen();
|
||
//qDebug()<< "start stop";
|
||
sysPara->status.airPushingDone = 1;
|
||
sysPara->status.airPushing = 0;
|
||
sysPara->status.airPushingOnTime = 0;
|
||
}
|
||
return;
|
||
}
|
||
|
||
if (sysPara->status.airPushingOnTime%10 >= 5) {
|
||
sysPara->devOp->controlCycleValve(true);
|
||
}
|
||
else {
|
||
sysPara->devOp->controlCycleValve(false);
|
||
}
|
||
if (mainInkPumpCtrlStatus == 0) {
|
||
if(++mainInkPumpCtrlCnt > 15) { //100ms 为单位, 时间到关闭
|
||
sysPara->devOp->controlMainInkPump(false);
|
||
sysPara->devOp->mainInkCtrl();
|
||
mainInkPumpCtrlStatus = 1;
|
||
mainInkPumpCtrlCnt = 0;
|
||
}
|
||
}
|
||
else if (mainInkPumpCtrlStatus == 1) { //100ms 为单位, 时间到开启
|
||
sysPara->devOp->controlMainInkPump(true);
|
||
sysPara->devOp->mainInkCtrl();
|
||
mainInkPumpCtrlStatus = 2;
|
||
}
|
||
else if (mainInkPumpCtrlStatus == 2) {
|
||
if(++mainInkPumpCtrlCnt>7) {
|
||
sysPara->devOp->controlMainInkPump(false);
|
||
sysPara->devOp->mainInkCtrl();
|
||
mainInkPumpCtrlStatus = 3;
|
||
mainInkPumpCtrlCnt = 0;
|
||
}
|
||
}
|
||
else if (mainInkPumpCtrlStatus == 3) {
|
||
if(++mainInkPumpCtrlCnt>8) {
|
||
sysPara->devOp->controlMainInkPump(true);
|
||
sysPara->devOp->mainInkCtrl();
|
||
mainInkPumpCtrlStatus = 4;
|
||
mainInkPumpCtrlCnt = 0;
|
||
}
|
||
}
|
||
else if (mainInkPumpCtrlStatus == 4) {
|
||
if(++mainInkPumpCtrlCnt>8) {
|
||
sysPara->devOp->controlMainInkPump(false);
|
||
sysPara->devOp->mainInkCtrl();
|
||
mainInkPumpCtrlStatus = 3;
|
||
mainInkPumpCtrlCnt = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void MainWidget::reclaimTanOpen()
|
||
{
|
||
// 还原当前模式
|
||
if (sysPara->status.airPushing) {
|
||
sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore;
|
||
}
|
||
sysPara->status.isPumpValveControledByHand = false;
|
||
sysPara->devOp->mainInkCtrl();
|
||
sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止
|
||
MySleep(1000);
|
||
sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable());
|
||
sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/
|
||
// sysPara->status.reclaimTankstatus = 1;
|
||
// setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开"));
|
||
setReclaimStatus(true, 0);
|
||
if (!sysPara->para.reclaimTankTime) {
|
||
// LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!"));
|
||
} else {
|
||
|
||
}
|
||
|
||
sysPara->status.currReclaimOperationCnt = 0;
|
||
sysPara->status.reclainTankReachEnd = false;
|
||
sysPara->status.reclainOpenAppending = true;
|
||
sysPara->status.reclainCloseAppending = false;
|
||
sysPara->status.reclaimBlockedCnt = 0;
|
||
sysPara->status.canRunAirPushing = false;
|
||
|
||
if (sysPara->status.reclainTankReachEnd)
|
||
enablePrintButton(SIMULATE_PRINTING_MODE);
|
||
}
|
||
|
||
void MainWidget::initSheet()
|
||
{
|
||
// 仅当前按钮生效
|
||
QString startBtnSheet = R"(
|
||
QPushButton {
|
||
background-color: #1e8449;
|
||
color: black;
|
||
border-radius: 5px;
|
||
}
|
||
QPushButton:disabled {
|
||
background-color: #bdc3c7; /* 灰色背景 */
|
||
color: #7f8c8d; /* 灰色文字 */
|
||
border: 1px solid #95a5a6; /* 灰色边框 */
|
||
}
|
||
)";
|
||
|
||
ui.m_StartBtn->setStyleSheet(startBtnSheet);
|
||
|
||
QString stopBtnSheet = R"(
|
||
QPushButton {
|
||
background-color: #e74c3c;
|
||
color: black;
|
||
border-radius: 5px;
|
||
}
|
||
QPushButton:disabled {
|
||
background-color: #bdc3c7; /* 灰色背景 */
|
||
color: #7f8c8d; /* 灰色文字 */
|
||
border: 1px solid #95a5a6; /* 灰色边框 */
|
||
}
|
||
)";
|
||
|
||
ui.m_StopBtn->setStyleSheet(stopBtnSheet);
|
||
|
||
QString btnSheet = R"(
|
||
QPushButton:disabled {
|
||
background-color: #bdc3c7; /* 灰色背景 */
|
||
color: #7f8c8d; /* 灰色文字 */
|
||
border: 1px solid #95a5a6; /* 灰色边框 */
|
||
}
|
||
)";
|
||
ui.m_RightBtn->setStyleSheet(btnSheet);
|
||
ui.m_LeftBtn->setStyleSheet(btnSheet);
|
||
|
||
QString lbSheet = R"(
|
||
QLabel {
|
||
border: 1px solid #95a5a6; /* 灰色边框 */
|
||
}
|
||
)";
|
||
ui.lb_LeftBtn->setStyleSheet(lbSheet);
|
||
ui.lb_RightBtn->setStyleSheet(lbSheet);
|
||
|
||
}
|
||
|
||
void MainWidget::changeHighLight(bool isStart)
|
||
{
|
||
initSheet();
|
||
if (isStart) {
|
||
QString highlightStyle =
|
||
R"(
|
||
QPushButton {
|
||
background-color: #27ae60;
|
||
color: black;
|
||
border-radius: 5px;
|
||
border: 3px solid #f39c12;
|
||
box-shadow: 0 0 8px rgba(231, 76, 60, 0.6);
|
||
}
|
||
QPushButton:disabled {
|
||
background-color: #bdc3c7; /* 灰色背景 */
|
||
color: #7f8c8d; /* 灰色文字 */
|
||
border: 1px solid #95a5a6; /* 灰色边框 */
|
||
}
|
||
)";
|
||
m_StartBtn->setStyleSheet(highlightStyle);
|
||
|
||
|
||
} else {
|
||
QString highlightStyle =
|
||
R"(
|
||
QPushButton {
|
||
background-color: #f07167;
|
||
color: black;
|
||
border-radius: 5px;
|
||
border: 3px solid #f39c12;
|
||
box-shadow: 0 0 8px rgba(231, 76, 60, 0.6);
|
||
}
|
||
QPushButton:disabled {
|
||
background-color: #bdc3c7; /* 灰色背景 */
|
||
color: #7f8c8d; /* 灰色文字 */
|
||
border: 1px solid #95a5a6; /* 灰色边框 */
|
||
}
|
||
)";
|
||
m_StopBtn->setStyleSheet(highlightStyle);
|
||
}
|
||
}
|
||
|
||
void MainWidget::on_m_RightBtn_clicked()
|
||
{
|
||
if(sysPara){
|
||
if (!sysPara->status.reclaimTankBlockedAppending) {
|
||
if (sysPara->status.canRunAirPushing && (sysPara->status.currReclaimTankPos == 0)) { //2019/10/24 当回收槽未在顶的位置,不需要排气
|
||
// Pos == 0 回收槽关闭的情况下才可以执行排气; 先执行排气后开回收槽
|
||
if (!sysPara->status.airPushing) {
|
||
//排气:打印、暂停打印置灰
|
||
enablePrintButton(false);
|
||
|
||
sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand;
|
||
sysPara->status.isPumpValveControledByHand = true;
|
||
sysPara->devOp->mainInkCtrl();
|
||
sysPara->devOp->controlCycleValve(true);
|
||
sysPara->devOp->controlViscosityPump(false);//关粘度泵
|
||
sysPara->devOp->controlMainInkPump(true);//主墨泵敞开
|
||
sysPara->devOp->mainInkCtrl();
|
||
sysPara->devOp->controlReclaimPump(true, false); // 回收泵开
|
||
sysPara->devOp->controlInkValve(true); //墨水阀
|
||
sysPara->devOp->controlInkValvePWM(true); //墨水阀
|
||
//qDebug()<< "start airpushings";
|
||
|
||
sysPara->status.airPushing = 1;
|
||
sysPara->status.airPushingDone = 0;
|
||
sysPara->status.airPushingOnTime = 0;
|
||
|
||
airPushTimer->start(100); // 100ms
|
||
}
|
||
}
|
||
else
|
||
reclaimTanOpen();
|
||
}
|
||
else if(sysPara->status.reclaimTankBlockedAppending) {
|
||
sysPara->status.reclaimTankBlockedAppending = false;
|
||
QMessageBox::StandardButton ret;
|
||
ret = QMessageBox::warning(this, tr("警告"),
|
||
tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"),
|
||
QMessageBox::Ok | QMessageBox::Cancel);
|
||
if (ret == QMessageBox::Ok){
|
||
sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10;
|
||
// onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void MainWidget::on_m_LeftBtn_clicked()
|
||
{
|
||
if(sysPara){
|
||
if(sysPara->status.reclaimTankBlockedAppending){
|
||
sysPara->status.reclaimTankBlockedAppending = false;
|
||
QMessageBox::StandardButton ret;
|
||
ret = QMessageBox::warning(this, tr("警告"),
|
||
tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"),
|
||
QMessageBox::Ok | QMessageBox::Cancel);
|
||
if (ret == QMessageBox::Ok){
|
||
sysPara->status.currReclaimTankPos = 0;
|
||
// onReclainTankPositionChanged(0);
|
||
}
|
||
}
|
||
|
||
sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable());
|
||
enablePrintButton(SIMULATE_PRINTING_MODE);
|
||
sysPara->devOp->highVoltageCtrl(0);
|
||
// sysPara->status.reclaimTankstatus = 2;
|
||
// setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭"));
|
||
setReclaimStatus(false, 100);
|
||
if(!sysPara->para.reclaimTankTime){
|
||
// LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!"));
|
||
}
|
||
sysPara->status.currReclaimOperationCnt = 0;
|
||
sysPara->status.reclainTankReachEnd = false;
|
||
sysPara->status.reclainOpenAppending = false;
|
||
sysPara->status.reclainCloseAppending = true;
|
||
sysPara->status.reclaimBlockedCnt = 0;
|
||
|
||
enablePrintButton(false);
|
||
}
|
||
}
|
||
|
||
void MainWidget::on_m_ManageBtn_clicked()
|
||
{
|
||
#if defined(ARCH_X86)
|
||
m_fileManageWidget->show();
|
||
#else
|
||
m_fileManageWidget->showFullScreen();
|
||
#endif
|
||
}
|
||
|
||
void MainWidget::slt_setNum()
|
||
{
|
||
// 预设值
|
||
if(m_setNumDlg->getIsSet()) {
|
||
unsigned int num = m_setNumDlg->getNum();
|
||
ui.labelTotalProductCnt->setText(QString::number(num));
|
||
ui.labelTotalProductCnt->show();
|
||
ui.lb_counter->show();
|
||
} else {
|
||
ui.labelTotalProductCnt->hide();
|
||
ui.lb_counter->hide();
|
||
}
|
||
}
|
||
|
||
void MainWidget::slt_clearCnt()
|
||
{
|
||
if (sysPara) {
|
||
sysPara->devOp->clearProductCnt(1);//当前产品计数器立即清零
|
||
}
|
||
}
|
||
|
||
static int oldSizeFpga = -1;
|
||
static int oldsizeSTM32 = -1;
|
||
static int reclaimTankDelay = 0;
|
||
void MainWidget::updateSysStatusToUI(){ //100ms
|
||
if(sysPara){
|
||
RefreshStatusLight();
|
||
if(sysPara->status.lastProductCnt != sysPara->status.productCnt){ //产品计数
|
||
updateTotalCnt(0);
|
||
}
|
||
|
||
if(sysPara->status.ExpiryDispUpdate >0 )
|
||
{
|
||
sysPara->status.ExpiryDispUpdate--;
|
||
m_PrintDisplay->update();// 2018.5.25
|
||
}
|
||
/*--------------------------------------------------------------------------*/
|
||
//if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && printintFlag){ //同步器速度
|
||
if((
|
||
(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)
|
||
||(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL)
|
||
||(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE)
|
||
)&& sysPara->para.eleEyeTriggerSynPrintEn)
|
||
)
|
||
)//&&printintFlag
|
||
{
|
||
if(sysPara->para.synPulseNumPerMm) {
|
||
|
||
unsigned int tmp = ((unsigned int) sysPara->status.synPulseCntPer1s ) & 0xffffff;
|
||
unsigned int mm = tmp /sysPara->para.synPulseNumPerMm * 60; // 1min总脉冲/毫米脉冲数 = 1min走过的距离mm数
|
||
int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000)
|
||
int colNum = sysPara->para.dotNumPerCol?dotNum/sysPara-> para.dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数
|
||
int pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值
|
||
|
||
int maxMM = 0;
|
||
if(!sysPara->para.charWidthSetEnable)
|
||
{
|
||
if( (sysPara->status.currPrintRow != 0)
|
||
&& (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)
|
||
/*&& (sysPara->para.currPrintMode == FAST_PRINT || sysPara->para.currPrintMode == STANDARD_PRINT) */){
|
||
maxMM = calculateMaxSpeed(pulseNum);
|
||
maxMM = maxMM *60;
|
||
if(sysPara->para.alterPrint.enable)
|
||
{
|
||
maxMM = maxMM * 2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
maxMM = (pulseNum/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距
|
||
// qDebug()<< "[Info] OLD COUNT mm" << maxMM;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
int pulsePS = getMaxSpeedCalcPara();//No67
|
||
maxMM = (pulsePS/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距
|
||
}
|
||
// ui->labelSynRate->setText(tr("%1.%2[%3.%4]米/分").arg(mm/1000).arg(mm%1000,3,10,QLatin1Char('0'))
|
||
// .arg(maxMM/1000).arg(maxMM%1000,3,10,QLatin1Char('0')));
|
||
// 20260414
|
||
ui.lb_curSpeed->setText(tr("%1.%2").arg(mm/1000).arg(mm%1000,3,10,QLatin1Char('0')));
|
||
ui.lb_maxSpeed->setText(tr("%1.%2").arg(maxMM/1000).arg(maxMM%1000,3,10,QLatin1Char('0')));
|
||
}
|
||
else {
|
||
ui.lb_curSpeed->setText("0");
|
||
ui.lb_maxSpeed->setText("0");
|
||
}
|
||
// else
|
||
// ui->labelSynRate->setText("");
|
||
sysPara->status.lastSynPulseCntPer1s = sysPara->status.synPulseCntPer1s;
|
||
}
|
||
else {
|
||
ui.lb_curSpeed->setText("0");
|
||
ui.lb_maxSpeed->setText("0");
|
||
}
|
||
// else
|
||
// ui->labelSynRate->setText("");
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
if(sysPara->status.lastSynColDelay != sysPara->status.synColDelay){
|
||
// if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)
|
||
if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)
|
||
||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL
|
||
||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE)
|
||
&& sysPara->para.eleEyeTriggerSynPrintEn))
|
||
// ui->labelSynColDelay->setText(tr("列延时:%1点").arg(sysPara->status.synColDelay));
|
||
sysPara->status.lastSynColDelay = sysPara->status.synColDelay;
|
||
}
|
||
/*--------------------------------------------------------------------------*/
|
||
static int i=0;
|
||
i++;
|
||
if(sysPara->status.stm32Verion == 0){
|
||
if(i % 10 == 0){
|
||
sysPara->devOp->readSTM32Version();
|
||
}
|
||
}
|
||
if(sysPara->status.stm32Time == 0){
|
||
if(i % 10 == 0){
|
||
sysPara->devOp->readSTM32Time();
|
||
}
|
||
}
|
||
if(sysPara->status.fpgaVersionNum == 0){ //因为进入系统就会进主界面,马上就会将版本号读出
|
||
if(i % 10 == 0){
|
||
sysPara->devOp->readFpgaVersionNum();
|
||
sysPara->devOp->readbuilDat();
|
||
}
|
||
// ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(SOFTWARE_VER_NUM).arg(0).arg(0).arg(0) );
|
||
}
|
||
else{
|
||
static bool logflag5 = true;
|
||
unsigned int num = sysPara->status.fpgaVersionNum & 0xf000;
|
||
if(num != 0x1000 && num != 0x6000 && num != 0x2000 && num != 0x8000 && logflag5){ //未读取到版本号
|
||
sysPara->status.fpgaVersionNum = 0;
|
||
}
|
||
else if(logflag5){
|
||
// emit readFPGAVersionReady();
|
||
logflag5 = false;
|
||
sysPara->devOp->writeFpgaPrintPara(true);
|
||
QString ARM_Version;
|
||
ARM_Version.sprintf("%d.%d.%02d%s%s", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
|
||
// ui->labelFpgaVersionNum->setText(QString("A%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12)
|
||
// .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff) );
|
||
|
||
QString versionStr = QString("A%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12)
|
||
.arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff);
|
||
emit showVserionInfo(versionStr);
|
||
}
|
||
}
|
||
static bool logflag6 = false;
|
||
if(!logflag6){
|
||
if(sysPara->status.fpgaVersionNum !=0 && sysPara->status.stm32Verion != 0){
|
||
UpdateUIVersion();
|
||
logflag6 = true;
|
||
}
|
||
}
|
||
|
||
bool found_CNT1 = false;
|
||
bool found_CNT2 = false;
|
||
bool found_CNT3 = false;
|
||
bool found_CNT4 = false;
|
||
/*--------------------------------------------------------------------------*/
|
||
// if(sysPara->status.variNum && (ui->stackedWidgetText->currentWidget() == ui->pagePrintTextDisplay)){
|
||
if(sysPara->status.variNum){
|
||
bool updatePrintTextDisplayFlag = false;
|
||
|
||
for(int i = 0; i < sysPara->status.variNum; i++){
|
||
int val = 0;
|
||
switch( Public::getType(sysPara->status.vars[i].type))
|
||
{
|
||
case CALANDAR_YEAR:val = sysPara->status.calandar_and_dat.year;break;
|
||
case CALANDAR_MONTH:val = sysPara->status.calandar_and_dat.month;break;
|
||
case CALANDAR_DAY:val = sysPara->status.calandar_and_dat.day;break;
|
||
case CALANDAR_WEEK:val = sysPara->status.calandar_and_dat.week;break;
|
||
case CALANDAR_HOUR:val = sysPara->status.calandar_and_dat.hour;break;
|
||
case CALANDAR_MINUTE:val = sysPara->status.calandar_and_dat.minute;break;
|
||
case CALANDAR_SECOND:val = sysPara->status.calandar_and_dat.second;break;
|
||
case CALANDAR_CNT1:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();found_CNT1=true;break;
|
||
case CALANDAR_CNT2:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();found_CNT2=true;break;
|
||
case CALANDAR_CNT3:val = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();found_CNT3=true;break;
|
||
case CALANDAR_CNT4:val = QString::number(sysPara->para.cnt4CurrValue,10).toInt();found_CNT4=true;break;
|
||
case RANDOMNUM : val = QString::number( sysPara->status.calandar_and_dat.RandomValue1, 16).toInt(); break;
|
||
case CALANDAR_XDAY:val = sysPara->status.XXXDay;break;
|
||
case EXPIRYDATE: break;
|
||
default:qDebug() << "error,unknown variable type:" << sysPara->status.vars[i].type;
|
||
}
|
||
|
||
if(sysPara->status.vars[i].currVal != val)
|
||
//{
|
||
updatePrintTextDisplayFlag = true;
|
||
sysPara->status.vars[i].currVal = val;
|
||
//}
|
||
|
||
}
|
||
if(updatePrintTextDisplayFlag) //减少不必要的刷新动作
|
||
{
|
||
m_PrintDisplay->updateSysStatusToUI();
|
||
}
|
||
}
|
||
// emit setCNT1Select(found_CNT1);
|
||
// emit setCNT2Select(found_CNT2);
|
||
// emit setCNT3Select(found_CNT3);
|
||
if(sysPara->para.isEnableGetDataButton)
|
||
{
|
||
// ui->pushButtonGetData->setEnabled(true);
|
||
}
|
||
else
|
||
{
|
||
// ui->pushButtonGetData->setEnabled(false);
|
||
}
|
||
if(TEST_MODE)
|
||
enablePrintButton(true);
|
||
// ui->label_size->setText(tr("%1/%2/%3").arg(sysPara->status.sizeFPGA).arg(sysPara->status.sizequeueFPGA).arg(sysPara->status.sizeSTM32));
|
||
if(oldSizeFpga != sysPara->status.sizeFPGA){
|
||
oldSizeFpga = sysPara->status.sizeFPGA;
|
||
}
|
||
if(oldsizeSTM32 != sysPara->status.sizeSTM32){
|
||
oldsizeSTM32 = sysPara->status.sizeSTM32;
|
||
}
|
||
|
||
/*if(sysPara->status.reclaimTankstatus == 6){
|
||
sysPara->status.flagOfRebootEnable = true;
|
||
reclaimTankDelay = 0;
|
||
}
|
||
|
||
if(sysPara->status.flagOfRebootEnable && sysPara->status.reclaimTankstatus != 0
|
||
&& sysPara->status.reclaimTankstatus != 6 && sysPara->status.reclaimTankstatus != 3){
|
||
sysPara->status.flagOfRebootEnable = false;
|
||
}*/
|
||
|
||
if(sysPara->status.currReclaimTankPos <= 5)
|
||
sysPara->status.flagOfRebootEnable = true;
|
||
else
|
||
sysPara->status.flagOfRebootEnable = false;
|
||
if(sysPara->status.flagOfRebootEnable || TEST_MODE){
|
||
// ui->pushButton_Reboot->setEnabled(true);
|
||
}else{
|
||
// ui->pushButton_Reboot->setEnabled(false);
|
||
}
|
||
|
||
// if(sysPara->RFIDPara.inkCardTimeOut || sysPara->RFIDPara.solventCardTimeOut || sysPara->RFIDPara.needMaintenance)
|
||
// m_RightBtn->setEnabled(false); todo
|
||
// else if(sysPara->status.selfCheckDone == 1)
|
||
// {
|
||
// m_RightBtn->setEnabled(true);
|
||
// }
|
||
}
|
||
|
||
}
|
||
|
||
bool MainWidget::checkRed(AlarmStatus &status)
|
||
{
|
||
if (status.highVoltageFault == DEV_STATUS_RED) {
|
||
m_stateStr = tr("高压故障");
|
||
return true;
|
||
}
|
||
if (status.chargeFault == DEV_STATUS_RED) {
|
||
m_stateStr = tr("相位故障");
|
||
return true;
|
||
}
|
||
if (status.viscosityWarn == DEV_STATUS_RED) {
|
||
m_stateStr = tr("粘度故障");
|
||
return true;
|
||
}
|
||
if (status.recycleWarn == DEV_STATUS_RED) {
|
||
m_stateStr = tr("回收故障");
|
||
return true;
|
||
}
|
||
if (status.solveLevelWarn == DEV_STATUS_RED) {
|
||
m_stateStr = tr("溶液液位");
|
||
return true;
|
||
}
|
||
if (status.inkWaterLevel == DEV_STATUS_RED) {
|
||
m_stateStr = tr("墨水液位");
|
||
return true;
|
||
}
|
||
if (status.inkLeak == DEV_STATUS_RED) {
|
||
m_stateStr = tr("墨水缸满");
|
||
return true;
|
||
}
|
||
if (status.inkSwint == DEV_STATUS_RED) {
|
||
m_stateStr = tr("墨线开关");
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
bool MainWidget::checkYellow(AlarmStatus &status)
|
||
{
|
||
if (status.highVoltageFault == DEV_STATUS_YELLOW) {
|
||
m_stateStr = tr("高压故障");
|
||
return true;
|
||
}
|
||
if (status.chargeFault == DEV_STATUS_YELLOW) {
|
||
m_stateStr = tr("相位故障");
|
||
return true;
|
||
}
|
||
if (status.viscosityWarn == DEV_STATUS_YELLOW) {
|
||
m_stateStr = tr("粘度故障");
|
||
return true;
|
||
}
|
||
if (status.recycleWarn == DEV_STATUS_YELLOW) {
|
||
m_stateStr = tr("回收故障");
|
||
return true;
|
||
}
|
||
if (status.solveLevelWarn == DEV_STATUS_YELLOW) {
|
||
m_stateStr = tr("溶液液位");
|
||
return true;
|
||
}
|
||
if (status.inkWaterLevel == DEV_STATUS_YELLOW) {
|
||
m_stateStr = tr("墨水液位");
|
||
return true;
|
||
}
|
||
if (status.inkLeak == DEV_STATUS_YELLOW) {
|
||
m_stateStr = tr("墨水缸满");
|
||
return true;
|
||
}
|
||
if (status.inkSwint == DEV_STATUS_YELLOW) {
|
||
m_stateStr = tr("墨线开关");
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
void MainWidget::updateGeneralState(AlarmStatus status)
|
||
{
|
||
// 有红则红,全绿则绿,红>黄>绿
|
||
// 检查从后往前判断,因为取最后一个状态QString
|
||
bool isRed = checkRed(status);
|
||
if (isRed) {
|
||
m_stateColor = DEV_STATUS_RED;
|
||
} else {
|
||
bool isYellow = checkYellow(status);
|
||
if (isYellow) {
|
||
m_stateColor = DEV_STATUS_YELLOW;
|
||
} else {
|
||
m_stateColor = DEV_STATUS_GREEN;
|
||
m_stateStr= tr("正常");
|
||
}
|
||
}
|
||
|
||
if (m_stateColor == DEV_STATUS_GREEN) {
|
||
ui.fra_state->setStyleSheet("background-color: #ccffcc;");
|
||
} else if (m_stateColor == DEV_STATUS_RED) {
|
||
ui.fra_state->setStyleSheet("background-color: #ff6b6b;");
|
||
} else {
|
||
ui.fra_state->setStyleSheet("background-color: #ffd93c;");
|
||
}
|
||
ui.lb_generalState->setText(m_stateStr);
|
||
}
|
||
|
||
|
||
int MainWidget::calculateMaxSpeed(int backup)
|
||
{
|
||
float stroke;
|
||
int valid_array;
|
||
int rongdian = 0;
|
||
int mm;
|
||
int oscfreq = 0;
|
||
|
||
// QSizeF size = ui->textEdit->document()->size();
|
||
|
||
switch (sysPara->para.oscillatoFreq) {
|
||
case CRYS_64K:
|
||
oscfreq = 64000;
|
||
break;
|
||
case CRYS_76K:
|
||
oscfreq = 76000;
|
||
break;
|
||
case CRYS_96K:
|
||
oscfreq = 96000;
|
||
break;
|
||
case CRYS_128K:
|
||
oscfreq = 128000;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm;
|
||
|
||
rongdian = sysPara->status.currPrintRow * (float)sysPara->para.reducedPixelNumRatio/100;
|
||
valid_array = sysPara->status.currPrintRow - rongdian;
|
||
|
||
switch (sysPara->para.currPrintMode) {
|
||
case FAST_PRINT:
|
||
mm = (float)(stroke * oscfreq /(sysPara->status.currPrintRow +1));
|
||
break;
|
||
case STANDARD_PRINT:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 2));
|
||
break;
|
||
case SLOW_PRINT_ONE:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 3));
|
||
break;
|
||
case SLOW_PRINT_TWO:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 4));
|
||
break;
|
||
case SLOW_PRINT_THR:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 5));
|
||
break;
|
||
case SLOW_PRINT_FOR:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 6));
|
||
break;
|
||
case SLOW_PRINT_FIV:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 7));
|
||
break;
|
||
case SLOW_PRINT_SIX:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 8));
|
||
break;
|
||
case SLOW_PRINT_SEV:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 9));
|
||
break;
|
||
case SLOW_PRINT_EIG:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 10));
|
||
break;
|
||
case SLOW_PRINT_NIE:
|
||
mm = (float)( (stroke * oscfreq) / (valid_array * 11));
|
||
break;
|
||
default:
|
||
mm = backup/sysPara->para.synPulseNumPerMm;
|
||
break;
|
||
}
|
||
|
||
return mm;
|
||
|
||
}
|
||
|
||
int MainWidget::getMaxSpeedCalcPara(){
|
||
sysPara->para.printRowDelay = sysPara->para.currPrintMode;
|
||
if(sysPara->status.isPrinting == false)
|
||
sysPara->status.pixNumPerCol = sysPara->status.currPrintRow;
|
||
else
|
||
sysPara->status.currPrintRow = sysPara->status.pixNumPerCol;
|
||
sysPara->para.pixNumPerCol = sysPara->status.pixNumPerCol;
|
||
|
||
sysPara->para.reducedPixelNum = sysPara->para.reducedPixelNumRatio*sysPara->para.pixNumPerCol/100;
|
||
int dotNumPerCol = (sysPara->para.pixNumPerCol- sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.printRowDelay + 1)
|
||
+ (sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.lineEndAdjustPointDelay + 1);
|
||
dotNumPerCol = sysPara->para.pixNumPerCol?
|
||
((dotNumPerCol*(sysPara->para.pixNumPerCol - sysPara->para.reducedPixelNum))/sysPara->para.pixNumPerCol):1;
|
||
// sysPara->para.dotNumPerCol += sysPara->para.printColDelay;
|
||
dotNumPerCol =( sysPara->para.alterPrint.enable)? dotNumPerCol/2:dotNumPerCol;
|
||
|
||
int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000)
|
||
int colNum = dotNumPerCol?dotNum/dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数
|
||
int pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值
|
||
|
||
return pulseNum;
|
||
}
|
||
|
||
void MainWidget::onPreviewScene()
|
||
{
|
||
sysPara->para.EditMode = SCENE;
|
||
pPicScene->clearSelection();
|
||
QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height());
|
||
|
||
if(size.isEmpty()) {
|
||
//场景为空时,渲染空场景并刷新界面
|
||
handleEmptySize();
|
||
return;
|
||
}
|
||
QImage image(size,QImage::Format_ARGB32);
|
||
image.fill(0x00ffffff);//填充白色
|
||
//image.save("./printScene.jpg");//图片
|
||
QPainter painter(&image);
|
||
pPicScene->render(&painter,QRectF(),pPicScene->itemsBoundingRect());
|
||
|
||
int coldot=0;
|
||
if(sysPara){
|
||
bool MaxCol4000;
|
||
if(sysPara->status.flagOfNo67FPGA)
|
||
MaxCol4000 = true;
|
||
else
|
||
MaxCol4000 = false;
|
||
previewFlag=1;
|
||
sysPara->status.currPrintRow = 0;
|
||
sysPara->status.variNum = 0;
|
||
sysPara->status.QRvariNum = 0;
|
||
unsigned char *dat;
|
||
if(MaxCol4000){
|
||
dat =sysPara->status.printDat_Normal;
|
||
memset(dat,0,sizeof(sysPara->status.printDat_Normal));
|
||
}else{
|
||
dat =sysPara->status.printDat;
|
||
memset(dat,0,sizeof(sysPara->status.printDat));
|
||
}
|
||
//qDebug()<<"Preview:";
|
||
|
||
{
|
||
sysPara->status.addSpace = sysPara->para.checkSpace;
|
||
|
||
coldot = (int)m_textEdit->document()->size().width();
|
||
coldot = pPicScene->itemsBoundingRect().width();
|
||
if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))
|
||
coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide;
|
||
int maxPicHeight = MAX_PRINT_ROW_NUM + 12;
|
||
QSize size(coldot,maxPicHeight);
|
||
|
||
sysPara->status.currPrintRow =0;
|
||
sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace
|
||
|
||
QImage image(size,QImage::Format_ARGB32);
|
||
image.fill(0x00ffffff);//填充白色
|
||
QPainter painter(&image);
|
||
QRectF validRectF(pPicScene->itemsBoundingRect().x(),pPicScene->itemsBoundingRect().y(),coldot,maxPicHeight);
|
||
pPicScene->render(&painter,QRectF(),validRectF);
|
||
int firstRow = 0;
|
||
int lastRow = firstRow + MAX_PRINT_ROW_NUM;
|
||
int TempVarNum=0;
|
||
int varLastRow=0;
|
||
lastRow = (lastRow>maxPicHeight)?maxPicHeight:lastRow;
|
||
|
||
//接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行
|
||
for(int j = 0; j < lastRow - firstRow; j++){ // Y
|
||
for(int i = 0; i < coldot; i++){ //
|
||
QRgb rgb = image.pixel(i,j + firstRow);
|
||
if(rgb&0x80000000){ //判断alpha
|
||
if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色
|
||
|
||
bool foundvar=0;
|
||
if(j>0){
|
||
QRgb r_rgb = image.pixel(i,j + firstRow+1);
|
||
if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;}
|
||
//QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0;
|
||
}
|
||
if(foundvar){
|
||
if(sysPara->status.variNum < MAX_VARI_NUM){
|
||
sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0);
|
||
sysPara->status.vars[sysPara->status.variNum].endRowPos = j;
|
||
//if(varLastRow<j+1) varLastRow=j+1;
|
||
//sysPara->status.variNum ++;TempVarNum++;
|
||
//i+=5;//scene 每一行可能都包含变量
|
||
//qDebug()<<"VARr:"<<TempVarNum<<i<<j;
|
||
}
|
||
else TempVarNum++;
|
||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||
}
|
||
}
|
||
|
||
else if( ((rgb & 0xfffff0) == 0x00ff10) || ((rgb & 0xfffff0) == 0x00ff20) ||((rgb & 0xfffff0) == 0x00ff30) ){
|
||
// 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR)
|
||
//qDebug()<<"FLAG:"<<i<<j+1<<QString().sprintf("%08X", rgb);
|
||
if(sysPara->status.QRvariNum>=4)continue;
|
||
if((rgb & 0x00ffff0) == 0x00ff10) { //MDT
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0);
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.QRvariNum++;
|
||
}
|
||
else if((rgb & 0x00ffff0) == 0x00ff20) { //QR
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=QR;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0);
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.QRvariNum++;
|
||
}
|
||
else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0);
|
||
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1;
|
||
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.QRvariNum++;
|
||
|
||
}
|
||
if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4;
|
||
|
||
}
|
||
else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE)
|
||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||
bool foundExVar=0;
|
||
if(j>0){
|
||
QRgb r_rgb = image.pixel(i,j + firstRow+1);
|
||
if((r_rgb & 0x00ffffff) != EXPIRY_VARI_RECONISE ){foundExVar =1;}
|
||
}
|
||
if(foundExVar)
|
||
{
|
||
if(sysPara->status.ExpiryVarNum <2)
|
||
{
|
||
sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0);
|
||
sysPara->print.ExpiryVar.endRowPos = j;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.ExpiryVarNum ++;
|
||
i+=5;
|
||
}
|
||
//else TempVarNum++;
|
||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||
}
|
||
}
|
||
else if((rgb & 0xfffff0)==0xff0cf0)
|
||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||
bool foundExVar=0;
|
||
if(j>0){
|
||
QRgb r_rgb = image.pixel(i,j + firstRow+1);
|
||
if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;}
|
||
}
|
||
if(foundExVar)
|
||
{
|
||
if(sysPara->status.ExpiryVarNum <2)
|
||
{
|
||
sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0);
|
||
sysPara->print.CurDateVar.endRowPos = j;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.CurrDateVariNum ++;
|
||
i+=5;
|
||
}
|
||
//else TempVarNum++;
|
||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||
}
|
||
}
|
||
else if((rgb & 0xffffff)==0xff00ff)
|
||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||
{
|
||
if(sysPara->status.classVariNum <3) {
|
||
EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ;
|
||
currCLass->day = QDateTime::currentDateTime().date().day();
|
||
currCLass->startColPos = i+(sysPara->status.addSpace?i:0);
|
||
currCLass->endRowPos = j;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.classVariNum ++;
|
||
i+=5;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{ //Y = 0.299*R' + 0.587*G' + 0.114*B //非变量
|
||
int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000;
|
||
//qDebug()<<"y:"<<y;
|
||
if(y < 125 ){
|
||
dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点
|
||
if((j+1) > sysPara->status.currPrintRow) {
|
||
sysPara->status.currPrintRow = j+1;
|
||
//qDebug()<<"dddd currPrintRow:"<< sysPara->status.currPrintRow;
|
||
}
|
||
}
|
||
}
|
||
|
||
}/*判断alpha end*/
|
||
}
|
||
}
|
||
|
||
if(TempVarNum>MAX_VARI_NUM){
|
||
setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!"));
|
||
strTitle= tr("变量数大于8个,某些变量将不起作用!!!");
|
||
strTitle.append("\r\n");
|
||
strTitle.append(tr("请减少信息中的变量(或计数器)数量."));
|
||
QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok);
|
||
}
|
||
searchQrVar();
|
||
sysPara->status.variNum = 0;
|
||
sysPara->status.ExpiryVarNum = 0;
|
||
sysPara->print.ExpiryVar.startColPos = 0;
|
||
sysPara->print.ExpiryVar.endRowPos = 0;
|
||
sysPara->print.ExpiryVar.letterSpace =0;
|
||
sysPara->print.CurDateVar.startColPos = 0;
|
||
sysPara->print.CurDateVar.endRowPos = 0;
|
||
sysPara->print.CurDateVar.letterSpace = 0;
|
||
sysPara->status.CurrDateVariNum = 0;
|
||
sysPara->status.QRvariNum=0;//lch add
|
||
int myvariNum=0;
|
||
int expiryVarNum = 0;
|
||
|
||
QList<QGraphicsItem *> items = pPicScene->items();
|
||
foreach (QGraphicsItem *item, items) {
|
||
PicTextItem *picText = qgraphicsitem_cast<PicTextItem*>(item);
|
||
bool ok;
|
||
int textvariNum=0;
|
||
|
||
int textColdot=0;
|
||
textColdot = picText->boundingRect().width();
|
||
if(textColdot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))
|
||
textColdot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide;
|
||
int maxTextHeight = MAX_PRINT_ROW_NUM + 12;
|
||
QSize textSize(textColdot, maxTextHeight);
|
||
QImage textImage(textSize,QImage::Format_ARGB32);
|
||
textImage.fill(0x00ffffff);//填充白色
|
||
//image.fill(0x00f0f000);//填充白色
|
||
QPainter textPainter(&textImage);
|
||
//textImage.save("./textImage.jpg");
|
||
|
||
//QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,maxTextHeight);
|
||
QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,picText->document()->size().height());
|
||
pPicScene->render(&textPainter,QRectF(),validtextRectF);
|
||
//qDebug()<<"validtextRectF:"<<validtextRectF;
|
||
//textImage.save("./textImage.bmp");
|
||
int textFirstRow = maxTextHeight;
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
for(int j = 0; j < maxTextHeight; j++){ //计算首行位置
|
||
for(int i = 0; i < textColdot; i++){
|
||
QRgb rgb = textImage.pixel(i,j);
|
||
if(rgb !=0x00ffffff )//& 0xff000000)
|
||
{
|
||
//qDebug()<<j<< QString().sprintf("%08X",rgb);
|
||
//if((rgb&0x00FFFFFF)==0)
|
||
{
|
||
textFirstRow = j;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if(textFirstRow != maxTextHeight)
|
||
break;
|
||
}
|
||
textFirstRow = 0;//变量显示底部会多一条横线
|
||
//qDebug()<<"textFirstRow:"<<textFirstRow;
|
||
int textLastRow = textFirstRow + MAX_PRINT_ROW_NUM;
|
||
int textItemPosX;
|
||
int textItemPosY;
|
||
textItemPosX = picText->pos().x() - pPicScene->itemsBoundingRect().x();
|
||
textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y();
|
||
|
||
//接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行
|
||
for(int j = 0; j < textLastRow - textFirstRow; j++){ // Y
|
||
for(int i = 0; i < textColdot; i++){ //
|
||
QRgb rgb = textImage.pixel(i,j + textFirstRow);
|
||
if((rgb&0x80000000)){ //判断alpha
|
||
if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色
|
||
|
||
bool textfoundvar = 0;
|
||
if(j>0){
|
||
QRgb r_rgb = textImage.pixel(i,j + textFirstRow+1);
|
||
if((r_rgb & 0xf0f0ff) != 0xf0f000 )
|
||
{
|
||
textfoundvar =1;
|
||
}
|
||
|
||
}
|
||
if(textfoundvar){
|
||
//qDebug()<<"general variable";
|
||
if(sysPara->status.variNum < MAX_VARI_NUM){
|
||
sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||
sysPara->status.vars[sysPara->status.variNum].endRowPos = j+textItemPosY;
|
||
//qDebug()<<"sysPara->status.variNum:"<<sysPara->status.variNum;
|
||
//qDebug()<<"startColPos:"<<sysPara->status.vars[sysPara->status.variNum].startColPos;
|
||
//qDebug()<<"endRowPos:"<<sysPara->status.vars[sysPara->status.variNum].endRowPos;
|
||
if(varLastRow<j+1)
|
||
varLastRow=j+1;
|
||
sysPara->status.variNum ++;
|
||
textvariNum++;
|
||
i+=5;//scene 每一行可能都包含变量
|
||
//qDebug()<<"VARr:"<<TempVarNum<<i<<j;
|
||
//gItem = pPicScene->itemAt(i,j+firstRow);
|
||
//picText_var[i]= (PicTextItem*) gItem;
|
||
//picText_var_hash.insert(picText_var[i],i);
|
||
}
|
||
else
|
||
{
|
||
textvariNum++;
|
||
}
|
||
}
|
||
}
|
||
else if( ((rgb & 0xfffff0) == 0x00ff10) || ((rgb & 0xfffff0) == 0x00ff20) ||((rgb & 0xfffff0) == 0x00ff30) ){
|
||
// 0xff00ff01(DMT) 0xff00ff02(QR) 0xff00ff03(BAR)
|
||
//qDebug()<<"FLAG:"<<i<<j+1<<QString().sprintf("%08X", rgb);
|
||
if(sysPara->status.QRvariNum>=4)continue;
|
||
if((rgb & 0x00ffff0) == 0x00ff10) { //MDT
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=MDT;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.QRvariNum++;
|
||
}
|
||
else if((rgb & 0x00ffff0) == 0x00ff20) { //QR
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=QR;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.QRvariNum++;
|
||
}
|
||
else if((rgb & 0x00fffff0) == 0x00ff30) { //BAR
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].type=BAR;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].countEn=1;
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].Counter=sysPara->status.productCnt;
|
||
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].startColPos=i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||
|
||
sysPara->print.QRvars[sysPara->status.QRvariNum].endRowPos=j+1+textItemPosY;
|
||
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.QRvariNum++;
|
||
|
||
}
|
||
if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4;
|
||
|
||
}
|
||
//else if((rgb & 0xfffff0)==0xff00f0)
|
||
else if((rgb & 0x0000ffff)==EXPIRY_VARI_RECONISE)
|
||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||
//qDebug()<<"found EXPIRY_VARI_RECONISE";
|
||
bool foundExVar=0;
|
||
if(j>0){
|
||
QRgb r_rgb = textImage.pixel(i,j + firstRow+1);
|
||
if(((r_rgb & 0x0000ffff) != EXPIRY_VARI_RECONISE )){foundExVar =1;}
|
||
}
|
||
if(foundExVar)
|
||
{
|
||
//if(sysPara->status.ExpiryVarNum <2)
|
||
{
|
||
//if(sysPara->print.ExpiryVar.endRowPos==0)
|
||
if(sysPara->status.ExpiryVarNum == 0)
|
||
{
|
||
sysPara->status.ExpiryVarNum ++;
|
||
}
|
||
sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||
sysPara->print.ExpiryVar.endRowPos = j+textItemPosY;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
|
||
i+=10;
|
||
//qDebug()<<"ExpiryVar ixj:"<<i<<"x"<<j + firstRow;
|
||
//qDebug()<<"qqqq textItemPosY:"<<textItemPosY;
|
||
//qDebug()<<"qqqq sysPara->print.ExpiryVar.endRowPos:"<<sysPara->print.ExpiryVar.endRowPos;
|
||
}
|
||
//else TempVarNum++;
|
||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||
}
|
||
}
|
||
else if((rgb & 0xfffff0)==0xff0cf0)
|
||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||
|
||
bool foundExVar=0;
|
||
if(j>0){
|
||
QRgb r_rgb = textImage.pixel(i,j + firstRow+1);
|
||
if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;}
|
||
}
|
||
if(foundExVar)
|
||
{
|
||
//qDebug()<<"found CurDateVar";
|
||
//if(sysPara->status.ExpiryVarNum <2)
|
||
{
|
||
//if(sysPara->print.CurDateVar.endRowPos==0)
|
||
if(sysPara->status.CurrDateVariNum == 0)
|
||
{
|
||
sysPara->status.CurrDateVariNum ++;
|
||
//setRunStatus(QString("CurrDateVariNum(%1)").arg(sysPara->status.CurrDateVariNum));
|
||
}
|
||
sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0)+textItemPosX;
|
||
sysPara->print.CurDateVar.endRowPos = j + textItemPosY;
|
||
//qDebug()<<"CurDateVar ixj:"<<i<<"x"<<j + firstRow;
|
||
//qDebug()<<"sysPara->print.CurDateVar.endRowPos:"<<sysPara->print.CurDateVar.endRowPos;
|
||
if(varLastRow<j+1) varLastRow=j+1;
|
||
|
||
i+=10;
|
||
//j++;
|
||
}
|
||
//else TempVarNum++;
|
||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||
}
|
||
}
|
||
if(j > sysPara->status.currPrintRow) {
|
||
sysPara->status.currPrintRow = j+textItemPosY;
|
||
// qDebug()<<"sysPara->status.currPrintRow:"<<sysPara->status.currPrintRow;
|
||
}
|
||
}/*判断alpha end*/
|
||
}
|
||
}
|
||
//qDebug()<<"ExpiryVarNum:"<<sysPara->status.ExpiryVarNum;
|
||
//===================一般变量=====================
|
||
//myvariNum = 0;
|
||
QString textVariPattern = "<img src=\":/(\\d*)/(\\d*)/../image/digitalWidth(\\d*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||
QRegExp textrx(textVariPattern);
|
||
QString textHtml = picText->toHtml();
|
||
int from = 0;
|
||
//int myvariNum=0;
|
||
while(from < textHtml.size() && from != -1){
|
||
from = textHtml.indexOf(textrx,from);
|
||
|
||
if(from != -1){//找到匹配的
|
||
//qDebug()<<"found variable";
|
||
from ++;
|
||
//if(myvariNum < textvariNum)
|
||
if(myvariNum < sysPara->status.variNum)
|
||
{
|
||
sysPara->status.vars[myvariNum].digitalNum = textrx.cap(3).toInt(&ok);//第二个匹配,数字到个数
|
||
sysPara->status.vars[myvariNum].bold = (sysPara->status.vars[myvariNum].digitalNum%100) == 75;
|
||
if(sysPara->status.vars[myvariNum].bold)
|
||
sysPara->status.vars[myvariNum].digitalNum = sysPara->status.vars[myvariNum].digitalNum/100;
|
||
|
||
sysPara->status.vars[myvariNum].type = textrx.cap(2).toInt(&ok);//第一个匹配
|
||
|
||
sysPara->status.vars[myvariNum].width = textrx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1);
|
||
sysPara->status.vars[myvariNum].height = textrx.cap(5).toInt(&ok);
|
||
//qDebug()<<"myvariNum endRowPos:"<<sysPara->status.vars[myvariNum].endRowPos;
|
||
//qDebug()<<"myvariNum height:"<<sysPara->status.vars[myvariNum].height;
|
||
sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height+1;
|
||
//sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height;
|
||
//qDebug()<<"start row:"<<sysPara->status.vars[myvariNum].startRowPos;
|
||
if(sysPara->status.vars[myvariNum].startRowPos<0)
|
||
sysPara->status.vars[myvariNum].startRowPos=0;
|
||
|
||
int item_x_start_pos = sysPara->status.vars[myvariNum].startColPos;
|
||
int item_x_end_pos = item_x_start_pos + sysPara->status.vars[myvariNum].width ;
|
||
if(item_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))
|
||
item_x_end_pos = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide;
|
||
int item_y_start_pos = sysPara->status.vars[myvariNum].startRowPos;
|
||
int item_y_end_pos = sysPara->status.vars[myvariNum].endRowPos+1 ;
|
||
if(item_y_start_pos < 0)
|
||
item_y_start_pos = 0;
|
||
for(int i = item_x_start_pos; i < item_x_end_pos; i++){
|
||
for(int j = item_y_start_pos; j < item_y_end_pos; j++){
|
||
dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉
|
||
}
|
||
}
|
||
sysPara->status.vars[myvariNum].height = textrx.cap(5).toInt(&ok)-1;
|
||
if(sysPara->status.vars[myvariNum].height>16 ){
|
||
if(sysPara->status.vars[myvariNum].height==24)
|
||
;
|
||
else {
|
||
if(sysPara->status.vars[myvariNum].startRowPos)
|
||
{
|
||
sysPara->status.vars[myvariNum].endRowPos--;
|
||
sysPara->status.vars[myvariNum].startRowPos--;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
if(sysPara->status.vars[myvariNum].type == RANDOMNUM)
|
||
{
|
||
//qDebug()<<"RAND:"<<sysPara->status.vars[myvariNum].type<< sysPara->status.vars[myvariNum].digitalNum;
|
||
sysPara->status.RandomDigitNum = sysPara->status.vars[myvariNum].digitalNum;
|
||
}
|
||
int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[myvariNum].height);
|
||
|
||
//qDebug()<<"MainWindows"<<sysPara->status.vars[myvariNum].height<<pixelSize;
|
||
|
||
sysPara->status.vars[myvariNum].letterSpace = 0;
|
||
if(sysPara->status.vars[myvariNum].digitalNum){ //算出letterspace
|
||
QFont font;
|
||
//font.setFamily(Public::getFontFamily(pixelSize));
|
||
font.setFamily(Public::getFontFamily(pixelSize,sysPara->status.vars[myvariNum].type )); // 20160812
|
||
//pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0));
|
||
font.setPixelSize(pixelSize);
|
||
font.setWeight(sysPara->status.vars[myvariNum].bold?QFont::Bold:QFont::Normal);
|
||
//font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace);
|
||
QFontMetrics fontMetrics(font);
|
||
int charWidth = (fontMetrics.width("0123456789"))/10 ;
|
||
// sysPara->status.vars[myvariNum].letterSpace = sysPara->para.textEditCharSpace;
|
||
sysPara->status.vars[myvariNum].letterSpace = picText->letterSpace();
|
||
//sysPara->status.vars[myvariNum].letterSpace =
|
||
//sysPara->status.vars[myvariNum].width/sysPara->status.vars[myvariNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth;
|
||
}
|
||
myvariNum++;
|
||
}
|
||
}
|
||
}
|
||
//==========================一般变量结束=======================
|
||
|
||
//=========================有效期/生产日期变量 开始==================
|
||
//qDebug()<<"sysPara->status.ExpiryVarNum";
|
||
if(sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum)
|
||
{
|
||
QString expiryPattern = "<img src=\":/(\\d*)/image/(\\w*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||
// 1 type ,2 name,3 width,4 height
|
||
//<img src=":/80/image/expiryDate8.bmp" width="149" height="10" /></p>
|
||
QRegExp expiryRx(expiryPattern);
|
||
QString expiryHtml = picText->toHtml();
|
||
int from = 0;
|
||
|
||
while(from < expiryHtml.size() && from != -1){
|
||
from = expiryHtml.indexOf(expiryRx,from);
|
||
bool ok;
|
||
//qDebug()<<xx<<"from:"<<from;
|
||
if(from != -1)
|
||
{
|
||
from ++;
|
||
if(expiryVarNum < 3)
|
||
{
|
||
QString s = expiryRx.cap(2);
|
||
int type = expiryRx.cap(1).toInt(&ok);
|
||
// 填充信息
|
||
//qDebug()<<"QVARName:"<<type<<expiryRx.cap(1)<<expiryRx.cap(2)<<expiryRx.cap(3)<<expiryRx.cap(4);
|
||
if(type==EXPIRYDATE || type==EXPIRYDATE + 10 || type==EXPIRYDATE + 20)
|
||
{ //expiryDate
|
||
qDebug()<<"expiryHtml:"<<expiryHtml;
|
||
//qDebug()<<"ExpiryVar:"<<type<<expiryRx.cap(1)<<expiryRx.cap(2).left(10)<<expiryRx.cap(2)<<expiryRx.cap(3)<<expiryRx.cap(4);
|
||
qDebug()<<"ddd sysPara->print.ExpiryVar.endRowPos:"<<sysPara->print.ExpiryVar.endRowPos;
|
||
sysPara->print.ExpiryVar.type = type;
|
||
sysPara->print.ExpiryVar.width = expiryRx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ;
|
||
sysPara->print.ExpiryVar.height = expiryRx.cap(4).toInt(&ok);
|
||
//sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-sysPara->print.ExpiryVar.height;
|
||
sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-(sysPara->print.ExpiryVar.height-1);
|
||
qDebug()<<"endRow:"<<sysPara->print.ExpiryVar.endRowPos;
|
||
qDebug()<<"startRow:"<<sysPara->print.ExpiryVar.startRowPos;
|
||
qDebug()<<"height:"<<sysPara->print.ExpiryVar.height;
|
||
if(expiryRx.cap(2).contains("875"))
|
||
{
|
||
//qDebug()<<"ExpiryVar:Bold";
|
||
sysPara->print.ExpiryVar.bold = 1;
|
||
}
|
||
else
|
||
{
|
||
//qDebug()<<"ExpiryVar:normal";
|
||
sysPara->print.ExpiryVar.bold = 0;
|
||
}
|
||
// 直接更新有效期,并退出?
|
||
ExpiryDotUpdate(1);
|
||
expiryVarNum++;
|
||
}
|
||
else if(type==CURDATE || type==CURDATE + 10 || type==CURDATE + 20)
|
||
{ //currDate
|
||
//qDebug()<<"CurDateVar:"<<type<<expiryRx.cap(1)<<expiryRx.cap(2).left(10)<<expiryRx.cap(2)<<expiryRx.cap(3)<<expiryRx.cap(4);
|
||
sysPara->print.CurDateVar.type = type;
|
||
sysPara->print.CurDateVar.width = expiryRx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ;
|
||
sysPara->print.CurDateVar.height = expiryRx.cap(4).toInt(&ok);
|
||
//sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-sysPara->print.CurDateVar.height;
|
||
sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1);
|
||
//qDebug()<<"CurDateVar:startRowPos"<<sysPara->print.CurDateVar.startRowPos<<" height"<<sysPara->print.CurDateVar.height;
|
||
// 生产日期即当前日期
|
||
if(expiryRx.cap(2).contains("875"))
|
||
{
|
||
//qDebug()<<"CurDateVar:Bold";
|
||
sysPara->print.CurDateVar.bold = 1;
|
||
}
|
||
else
|
||
{
|
||
//qDebug()<<"CurDateVar:normal";
|
||
sysPara->print.CurDateVar.bold = 0;
|
||
}
|
||
ExpiryDotUpdate(2);
|
||
expiryVarNum++;
|
||
}
|
||
|
||
}
|
||
else break;
|
||
}
|
||
}
|
||
}
|
||
//=========================有效期/生产日期变量 结束==================
|
||
|
||
}
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
generateCharRamData();
|
||
if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1)sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1;
|
||
bool found=0;
|
||
|
||
lastRow = sysPara->status.currPrintRow;
|
||
//qDebug()<<"lastRow:"<<lastRow;
|
||
for(int j = sysPara->status.currPrintRow; j >2 ; j--){ //计算首行位置
|
||
for(int i = 0; i < coldot; i++){
|
||
if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){
|
||
lastRow = j+1;
|
||
found=1;//qDebug()<<"fOUND:"<<i<<j<<dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8]<<sysPara->status.currPrintRow;
|
||
break;
|
||
}
|
||
}
|
||
if(found)
|
||
break;
|
||
}
|
||
if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow = MAX_PRINT_ROW_NUM-1;
|
||
if(lastRow<varLastRow)lastRow= varLastRow-1;//在场景模式下,变量的最低一行并不一定是打印的最后一行
|
||
|
||
if(lastRow<1) lastRow =1;
|
||
sysPara->status.currPrintRow =lastRow;
|
||
|
||
}
|
||
|
||
if(sysPara->status.QRvariNum) {
|
||
// onUpdateDispQRCode(1);
|
||
}
|
||
int wmax = sysPara->status.currPrintRow;
|
||
sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2;
|
||
if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0;
|
||
else {
|
||
if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1;
|
||
wmax = sysPara->status.currAlterPrintRow;
|
||
}
|
||
/*-------------------------------切换到显示窗口-----------------------------------*/
|
||
|
||
qDebug() << "currPrintCol: " << sysPara->status.currPrintCol;
|
||
LogInfo::setRunStatusText("currPrintCol: " + QString::number(sysPara->status.currPrintCol));
|
||
LogInfo::setRunStatusText("currPrintRow: " + QString::number(sysPara->status.currPrintRow));
|
||
LogInfo::setRunStatusText(QString("Items bounding rect: {%1, %2}").arg(pPicScene->itemsBoundingRect().width()).arg(pPicScene->itemsBoundingRect().height()));
|
||
|
||
sysPara->status.currPrintRow = pPicScene->itemsBoundingRect().height();
|
||
sysPara->status.currPrintCol = pPicScene->itemsBoundingRect().width();
|
||
|
||
auto rows = sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow;
|
||
rows = std::max(rows, (m_PrintDisplay->parentWidget()->height() / m_PrintDisplay->currScaleRatio()));
|
||
auto cols = sysPara->status.currPrintCol;
|
||
cols = std::max(cols, (m_PrintDisplay->parentWidget()->width() / m_PrintDisplay->currScaleRatio()));
|
||
m_PrintDisplay->setDisplaySize(cols, rows);
|
||
// ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay);
|
||
// ui->stackedWidgetOption->setCurrentWidget(ui->pageOption);
|
||
// ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol));
|
||
m_PrintDisplay->update();
|
||
}
|
||
previewFlag=0;
|
||
}
|
||
|
||
void MainWidget::handleEmptySize()
|
||
{
|
||
// 初始化空场景的尺寸(默认适配打印最大尺寸,避免界面空白)
|
||
bool MaxCol4000 = sysPara->status.flagOfNo67FPGA ? true : false;
|
||
QSize emptySize(MaxCol4000 ? MAX_PRINT_COL_NUM_Normal : MAX_PRINT_COL_NUM_Wide, MAX_PRINT_ROW_NUM);
|
||
QImage emptyImage(emptySize, QImage::Format_ARGB32);
|
||
emptyImage.fill(0x00ffffff); // 填充白色背景,与正常场景渲染一致
|
||
QPainter emptyPainter(&emptyImage);
|
||
pPicScene->render(&emptyPainter, QRectF(), QRectF(0, 0, emptySize.width(), emptySize.height()));
|
||
|
||
// 初始化打印参数,避免空场景导致的参数异常
|
||
previewFlag = 1;
|
||
sysPara->status.currPrintRow = 0;
|
||
sysPara->status.currPrintCol = emptySize.width();
|
||
sysPara->status.variNum = 0;
|
||
sysPara->status.QRvariNum = 0;
|
||
sysPara->status.ExpiryVarNum = 0;
|
||
sysPara->status.CurrDateVariNum = 0;
|
||
sysPara->status.classVariNum = 0;
|
||
|
||
// 清空打印数据缓冲区
|
||
unsigned char *dat = MaxCol4000 ? sysPara->status.printDat_Normal : sysPara->status.printDat;
|
||
memset(dat, 0, MaxCol4000 ? sizeof(sysPara->status.printDat_Normal) : sizeof(sysPara->status.printDat));
|
||
|
||
// 刷新预览显示,显示空场景(白色背景)
|
||
auto rows = sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow;
|
||
rows = std::max(rows, (m_PrintDisplay->parentWidget()->height() / m_PrintDisplay->currScaleRatio()));
|
||
m_PrintDisplay->setDisplaySize(m_PrintDisplay->parentWidget()->width() / m_PrintDisplay->currScaleRatio(), rows);
|
||
m_PrintDisplay->update();
|
||
previewFlag = 0;
|
||
return;
|
||
}
|
||
|
||
void MainWidget::updatePrintDisplayLabel()
|
||
{
|
||
m_PrintDisplay->update();
|
||
}
|
||
|
||
void MainWidget::RefreshStatusLight(){//100ms
|
||
if(sysPara){
|
||
static int hdint = 0;
|
||
static int reclainTankReachEnd = 0;
|
||
if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关
|
||
// 检查回收槽是否到底,到底才能打印
|
||
if (sysPara->status.reclainTankReachEnd) {
|
||
sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
|
||
enablePrintButton(true);
|
||
} else {
|
||
enablePrintButton(false);
|
||
}
|
||
}
|
||
hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT);
|
||
|
||
if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底
|
||
if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态
|
||
sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
|
||
}
|
||
}
|
||
reclainTankReachEnd = sysPara->status.reclainTankReachEnd;
|
||
|
||
if(sysPara->status.lastStatWarn != sysPara->status.statWarn || flagOfClearHighVltageWarnning){
|
||
if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关
|
||
// ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
alarmStatus.inkSwint = DEV_STATUS_GREEN;
|
||
}
|
||
else {
|
||
// ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||
alarmStatus.inkSwint = DEV_STATUS_RED;
|
||
}
|
||
|
||
|
||
if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告
|
||
// ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
alarmStatus.inkLeak = DEV_STATUS_GREEN;
|
||
}
|
||
else {
|
||
// ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||
alarmStatus.inkLeak = DEV_STATUS_RED;
|
||
strTitle = tr("墨水缸满报警");
|
||
if(sysPara->devOp->isMixValveOpen()) {
|
||
sysPara->devOp->controlMixValve(false); //关掉混合阀
|
||
}
|
||
}
|
||
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){
|
||
// ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
alarmStatus.inkWaterLevel = DEV_STATUS_GREEN;
|
||
}
|
||
else {
|
||
// ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||
alarmStatus.inkWaterLevel = DEV_STATUS_RED;
|
||
strTitle = tr("墨水液位报警");
|
||
|
||
|
||
}
|
||
if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){
|
||
// ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
alarmStatus.solveLevelWarn = DEV_STATUS_GREEN;
|
||
}
|
||
else {
|
||
// ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||
alarmStatus.solveLevelWarn = DEV_STATUS_RED;
|
||
strTitle = tr("溶剂液位报警");
|
||
|
||
}
|
||
|
||
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){
|
||
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
alarmStatus.recycleWarn = DEV_STATUS_GREEN;
|
||
|
||
}
|
||
else {
|
||
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||
alarmStatus.recycleWarn = DEV_STATUS_RED;
|
||
}
|
||
|
||
//static int HVfaultCnt=0;
|
||
if(!(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){
|
||
if(!sysPara->status.lastHighVoltageFault)
|
||
{
|
||
flagOfClearHighVltageWarnning = false;
|
||
// ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
alarmStatus.highVoltageFault = DEV_STATUS_GREEN;
|
||
}
|
||
// HVfaultCnt=0;
|
||
//sysPara->status.HVFaultCloseEn=0;
|
||
}
|
||
else {
|
||
// ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||
alarmStatus.highVoltageFault = DEV_STATUS_RED;
|
||
if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电
|
||
// on_pushButtonPausePrint_pressed();
|
||
on_m_StopBtn_clicked();
|
||
LogInfo::setRunStatusText(tr("高压故障,暂停打印"));
|
||
setRunStatus(tr("高压故障,暂停打印"));
|
||
|
||
strTitle = tr("高压故障,暂停打印.");
|
||
|
||
sysPara->status.lastHighVoltageFault = true;
|
||
}
|
||
|
||
if((sysPara->status.currReclaimTankPos != 0) && sysPara->para.HVFaultCloseEn )
|
||
{
|
||
//HVfaultCnt++;
|
||
// 高压故障关回收槽
|
||
if(sysPara->status.HVFaultCloseEn==0){
|
||
sysPara->status.reclaimTankBlockedAppending=0;
|
||
sysPara->status.reclaimCloseCnt=100;
|
||
// on_pushButtonReclaimTankClose_pressed();
|
||
on_m_LeftBtn_clicked();
|
||
sysPara->status.reclaimTankBlockedAppending=1;
|
||
LogInfo::setRunStatusText(tr("高压故障,关回收槽"));
|
||
setRunStatus(tr("高压故障,关回收槽和墨线"));
|
||
}
|
||
sysPara->status.HVFaultCloseEn=1;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------------*/
|
||
sysPara->status.lastStatWarn = sysPara->status.statWarn;
|
||
if(sysPara->status.lastViscosityFault != sysPara->status.viscosityFault){
|
||
if(sysPara->status.viscosityFault==0){
|
||
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
alarmStatus.viscosityWarn = DEV_STATUS_GREEN;
|
||
}
|
||
else {
|
||
if(sysPara->status.viscosityFault==1){
|
||
|
||
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||
alarmStatus.viscosityWarn = DEV_STATUS_RED;
|
||
}
|
||
else if(sysPara->status.viscosityFault==2) {
|
||
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG")));
|
||
alarmStatus.viscosityWarn = DEV_STATUS_YELLOW;
|
||
}
|
||
}
|
||
}
|
||
sysPara->status.lastViscosityFault = sysPara->status.viscosityFault;
|
||
/*-----------------------------------------------------------------------------------*/
|
||
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie
|
||
if(sysPara->status.RecycleWarnCnt)
|
||
alarmStatus.recycleWarn = DEV_STATUS_GREEN;
|
||
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
sysPara->status.RecycleWarnCnt = 0;
|
||
sysPara->status.lastRecycleWarn = 0;
|
||
}
|
||
else {
|
||
if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone)
|
||
{
|
||
if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY)
|
||
{
|
||
sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;//5s
|
||
alarmStatus.recycleWarn = DEV_STATUS_RED;
|
||
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||
sysPara->status.reclaimCloseCnt=100;
|
||
if(sysPara->para.RecycleWarnAction)
|
||
{
|
||
if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){
|
||
// on_pushButtonStopPrint_pressed();
|
||
on_m_StopBtn_clicked();
|
||
// on_pushButtonReclaimTankClose_pressed();
|
||
on_m_LeftBtn_clicked();
|
||
LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线"));
|
||
setRunStatus(tr("回收故障,关闭回收槽,关墨线"));
|
||
}
|
||
}
|
||
else setRunStatus(tr("回收故障."));
|
||
|
||
}
|
||
else
|
||
{
|
||
sysPara->status.RecycleWarnCnt ++ ;
|
||
alarmStatus.recycleWarn = DEV_STATUS_YELLOW;
|
||
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG")));
|
||
if(sysPara->status.RecycleWarnCnt%10==9)
|
||
LogInfo::setRunStatusText(tr("回收异常,墨线可能偏离.(%1)").arg(sysPara->status.RecycleWarnCnt));
|
||
}
|
||
}
|
||
else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--;
|
||
}
|
||
|
||
// if(startPrintingFlag ){
|
||
// if(printintFlag)
|
||
// setRunStatus(tr("正在喷印..."));
|
||
// else
|
||
// setRunStatus(tr("暂停喷印..."));
|
||
// }
|
||
|
||
if(sysPara->status.isPrinting && sysPara->status.selfCheckDone){
|
||
setRunStatus(tr("正在喷印......."));
|
||
}
|
||
|
||
// 20160620 新增主界面显示:压力,粘度,隔膜位置,晶振电压数,相位
|
||
|
||
alarmStatus.pressValue = QString("%1/%2").arg(sysPara->status.PRESSURE).arg(sysPara->para.pressure);
|
||
alarmStatus.visoValue = QString("%1/%2").arg(sysPara->status.viscosity).arg(sysPara->para.viscosity);
|
||
if(sysPara->para.gearPumpEnable)
|
||
{
|
||
alarmStatus.gearPumpRunSpeed = QString("%1").arg(sysPara->status.gearPumpRunSpeed);
|
||
}
|
||
|
||
alarmStatus.highVol = QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC);
|
||
alarmStatus.dataSize = QString("%1/%2/%3").arg(sysPara->status.sizeFPGA).arg(sysPara->status.sizequeueFPGA).arg(sysPara->status.sizeSTM32);
|
||
|
||
}
|
||
}
|
||
|
||
|
||
bool MainWidget::updatePhaseIndicatorLight(){
|
||
if(sysPara==0) return 0;
|
||
|
||
/*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/
|
||
if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || (sysPara->status.statWarn & WARN_STATUS_HDINT) || !sysPara->status.reclainTankReachEnd){
|
||
//故障后必须等手动按故障恢复才会继续
|
||
if(!sysPara->para.suspendAfterPhaseFault && !sysPara->para.powerOffAfterPhaseFault){
|
||
if(sysPara->status.lastPhaseFault){
|
||
sysPara->status.lastPhaseFault = 0;
|
||
// ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
alarmStatus.chargeFault = DEV_STATUS_GREEN;
|
||
}
|
||
}
|
||
sysPara->status.phaseErrorCnt = 0;
|
||
}
|
||
else {
|
||
if(sysPara->status.phaseErrorCnt < 10)
|
||
sysPara->status.phaseErrorCnt ++ ;
|
||
else {
|
||
if(!sysPara->status.lastPhaseFault){
|
||
alarmStatus.chargeFault = DEV_STATUS_RED;
|
||
sysPara->status.lastPhaseFault = 1;
|
||
if(sysPara->status.flight_tm_error)
|
||
{
|
||
LogInfo::setRunStatusText(tr("相位故障:飞行时间错误!"));
|
||
}
|
||
if(sysPara->status.detect_phase_error)
|
||
{
|
||
LogInfo::setRunStatusText(tr("相位故障:相位检测错误!"));
|
||
}
|
||
|
||
}
|
||
if(sysPara->para.powerOffAfterPhaseFault ){
|
||
if(!sysPara->status.powerOffAfterPhaseFaultAppending){
|
||
sysPara->status.powerOffAfterPhaseFaultAppending = 1;
|
||
_on_pushButtonPowerOff_pressed(false);
|
||
LogInfo::setRunStatusText(tr("相位故障,准备关机"));
|
||
setRunStatus(tr("相位故障,准备关机"));
|
||
strTitle = tr("相位故障,准备关机");
|
||
|
||
|
||
}
|
||
}
|
||
else if(sysPara->para.suspendAfterPhaseFault){
|
||
if(sysPara->para.stopCounterMeterAfterFault){
|
||
if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印
|
||
// on_pushButtonPausePrint_pressed();
|
||
on_m_StopBtn_clicked();
|
||
LogInfo::setRunStatusText(tr("相位故障,暂停打印"));
|
||
setRunStatus(tr("相位故障,暂停打印"));
|
||
strTitle = tr("相位故障,暂停打印");
|
||
|
||
}
|
||
}
|
||
else if(!sysPara->status.DACDisable){
|
||
sysPara->devOp->printCtrl(PRINT_CTRL_DAC_DISABLE);
|
||
sysPara->status.DACDisable = true;
|
||
LogInfo::setRunStatusText(tr("相位故障,屏蔽DAC输出"));
|
||
setRunStatus(tr("相位故障,屏蔽充电"));
|
||
strTitle = tr("相位故障,屏蔽充电");
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
return sysPara->status.lastPhaseFault;
|
||
}
|
||
|
||
|
||
//void MainWidget::mouseDoubleClickEvent(QMouseEvent *event)
|
||
//{
|
||
// if (event->button() != Qt::LeftButton) {
|
||
// QWidget::mouseDoubleClickEvent(event);
|
||
// return;
|
||
// }
|
||
|
||
// QPoint globalPos = event->globalPos();
|
||
// const int expandSize = 50; // 扩大到50像素
|
||
|
||
// // 检测函数
|
||
// auto isInExpandedRect = [&](QWidget* widget) -> bool {
|
||
// if (!widget) return false;
|
||
// QRect rect = widget->geometry();
|
||
// rect.translate(widget->parentWidget()->mapToGlobal(QPoint(0, 0)));
|
||
// rect.adjust(-expandSize, -expandSize, expandSize, expandSize);
|
||
// return rect.contains(globalPos);
|
||
// };
|
||
|
||
// if (isInExpandedRect(ui.sub3)) {
|
||
// if (m_setNumDlg) {
|
||
// m_setNumDlg->show();
|
||
// event->accept();
|
||
// return;
|
||
// }
|
||
// }
|
||
|
||
// if (isInExpandedRect(ui.fra_state)) {
|
||
// LogInfoCtrl::instance()->emitSigShow();
|
||
// event->accept();
|
||
// return;
|
||
// }
|
||
|
||
// QWidget::mouseDoubleClickEvent(event);
|
||
//}
|
||
|
||
void MainWidget::mousePressEvent(QMouseEvent *event)
|
||
{
|
||
if (event->button() != Qt::LeftButton) {
|
||
QWidget::mousePressEvent(event);
|
||
return;
|
||
}
|
||
|
||
QPoint currentPos = event->globalPos();
|
||
qint64 currentTime = QDateTime::currentMSecsSinceEpoch();
|
||
|
||
// 计算时间和距离
|
||
qint64 timeDiff = currentTime - m_lastClickTime;
|
||
int distance = QLineF(m_lastClickPos, currentPos).length();
|
||
|
||
// 判断是否为双击(使用自定义阈值)
|
||
if (timeDiff <= m_doubleClickInterval && distance <= m_doubleClickDistance) {
|
||
// 触发双击逻辑
|
||
handleDoubleClick(event);
|
||
m_lastClickTime = 0; // 重置,防止三连击触发多次
|
||
m_lastClickPos = QPoint();
|
||
event->accept();
|
||
return;
|
||
}
|
||
|
||
// 更新最后一次点击信息
|
||
m_lastClickPos = currentPos;
|
||
m_lastClickTime = currentTime;
|
||
|
||
QWidget::mousePressEvent(event);
|
||
}
|
||
|
||
void MainWidget::handleDoubleClick(QMouseEvent *event)
|
||
{
|
||
QPoint globalPos = event->globalPos();
|
||
|
||
// 检查目标区域
|
||
if (isInExpandedRect(ui.sub3, globalPos, m_doubleClickDistance)) {
|
||
if (m_setNumDlg) {
|
||
m_setNumDlg->show();
|
||
}
|
||
return;
|
||
}
|
||
|
||
if (isInExpandedRect(ui.fra_state, globalPos, m_doubleClickDistance)) {
|
||
LogInfoCtrl::instance()->emitSigShow();
|
||
return;
|
||
}
|
||
}
|
||
|
||
bool MainWidget::isInExpandedRect(QWidget* widget, const QPoint& globalPos, int expandSize)
|
||
{
|
||
if (!widget || !widget->isVisible()) return false;
|
||
QRect rect = widget->geometry();
|
||
rect.translate(widget->parentWidget()->mapToGlobal(QPoint(0, 0)));
|
||
rect.adjust(-expandSize, -expandSize, expandSize, expandSize);
|
||
return rect.contains(globalPos);
|
||
}
|
||
|
||
|
||
void MainWidget::onLabelFaultRusumePressed(){
|
||
if(sysPara){
|
||
sysPara->status.flagOfSpeedAlarm = false;
|
||
sysPara->status.mainInkPumpError = false;
|
||
sysPara->status.mainInkPumpRunTmCnt = 0;
|
||
sysPara->status.compressPumpError = false;
|
||
sysPara->status.compressPumpRunTmCnt = 0;
|
||
sysPara->devOp->resumeFault();
|
||
ui.lb_nozzleState->clear();
|
||
sysPara->status.beeperOnFlag = false;
|
||
sysPara->devOp->controlBeeper(false);
|
||
sysPara->status.heaterONTimeCnt = 0; //加热块计数清零
|
||
// ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||
alarmStatus.chargeFault = DEV_STATUS_GREEN;
|
||
|
||
sysPara->status.DACDisable = false;
|
||
sysPara->status.lastPhaseFault = 0;
|
||
sysPara->status.phaseErrorCnt = 0;
|
||
if(sysPara->status.lastHighVoltageFault && !(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){
|
||
sysPara->status.lastHighVoltageFault = false;
|
||
flagOfClearHighVltageWarnning = true;
|
||
}
|
||
|
||
if(sysPara->status.gearPumpRunStopFlag && pushButtonFlag)
|
||
{
|
||
emit repeatInitedPid();
|
||
sysPara->status.gearPumpRunStopFlag = false;//齿轮泵报警恢复
|
||
}
|
||
if((sysPara->devOp->color_flag == 2) ||(sysPara->devOp->color_flag == 1))
|
||
{
|
||
sysPara->devOp->color_flag = 3;
|
||
sysPara->devOp->controlYellowLight(false);
|
||
sysPara->devOp->controlRedLight(false);
|
||
}
|
||
sysPara->status.visocityValueOverflowNum = 0;
|
||
|
||
if(sysPara->status.visocityValueOverflowNum>=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM) //
|
||
sysPara->status.viscosityFault = 0;
|
||
|
||
sysPara->status.powerOffAfterPhaseFaultAppending = 0;
|
||
sysPara->status.lastwarmInkPump = 0;
|
||
sysPara->status.RecycleWarnCnt =0;
|
||
sysPara->status.lastRecycleWarn =0 ;
|
||
sysPara->status.powerOffAfterInkOrSOLVEmptyAppending=0;
|
||
//sysPara->status.lastStatWarn=0; // 机器报故障后,点击故障恢复按钮,再点击打印按钮,“正在喷印中…”字符未立即显示出来,需等待大约10秒才会出现。
|
||
//LogInfo::setRunStatusText(tr("故障恢复"));
|
||
sysPara->status.RecycleWarnCnt=0;
|
||
sysPara->status.HVFaultCloseEn=0;
|
||
if(sysPara->status.flagOfPressureFault){
|
||
sysPara->status.flagOfPressureFault = false;
|
||
sysPara->status.isPumpValveControledByHand = false;
|
||
sysPara->devOp->mainInkCtrl();
|
||
emit clearPressureFault();
|
||
}
|
||
if(printintFlag) {
|
||
sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
|
||
}
|
||
}
|
||
}
|
||
|
||
extern int baudRateValue;
|
||
void MainWidget::UpdateUIVersion(){
|
||
int fpgaType = sysPara->status.fpgaVersionNum>>12;
|
||
QString fpgaVersion;
|
||
if(sysPara->status.build_dat.builTime != 0) {
|
||
fpgaVersion = QString::number(sysPara->status.build_dat.builTime);
|
||
}
|
||
else if(fpgaType == 6 || fpgaType == 8){
|
||
fpgaVersion = "72";
|
||
}else if(fpgaType == 1 || fpgaType == 2){
|
||
fpgaVersion = "67";
|
||
}
|
||
|
||
fpgaVersion = fpgaVersion + QString("_F%1.%2.%3").arg(sysPara->status.fpgaVersionNum >> 12)
|
||
.arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff);
|
||
|
||
QString STM32Ver = QString("S:%1.%2.%3_B%4").arg((sysPara->status.stm32Verion>>16)&0x7F)
|
||
.arg((sysPara->status.stm32Verion>>8) & 0xFF).arg(sysPara->status.stm32Verion&0xFF).arg(baudRateValue);
|
||
|
||
QString VernonBach;
|
||
VernonBach.sprintf("A%d.%d.%02d%s%s", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
|
||
|
||
QString Mac = QString::number(sysPara->status.machineMac);
|
||
LogInfo::setRunStatusText(QString("Mac:%1").arg(Mac));
|
||
LogInfo::showVerionInformation(Mac,VernonBach,fpgaVersion,STM32Ver);
|
||
}
|