Files

5300 lines
243 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
*
*
*2013-9-15高压报警停止充电
*/
/*
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("警告"),
tr("是否初始化产品计数?"),
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
updateTotalCnt(0);
sysPara->devOp->clearProductCnt(1);
sysPara->saveParaToFile();
}
*/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "InputMethod.h"
#include <QVBoxLayout>
#include <InputMethod.h>
#include <QKeyEvent>
#include <QTextCodec>
#include <QTextEdit>
#include <QFont>
#include <TextEditOption.h>
#include <QDesktopWidget>
#ifndef Q_OS_WIN
#include <sys/reboot.h>
#else
#define reboot(a,...) (0 == 0)
#endif
#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 "LogInfo.h"
#include "myinclude.h"
#include "QBarCode.h"
#include "scene/picscene.h"
#include <QGraphicsItem>
#include "MyInputMethod.h"
#include <QTextBlockFormat>
#include "VerBVersion.h"
//#define SAVEWHENPREVIEW // 预览时先保存
#define MDTFLAG 0xff00FF10
#define QRFLAG 0xff00FF20
#define BARFLAG 0xff00FF30
#define MMVAR 1
#define MAX_ALLOW_VISICOSITY_OVERFLOW_NUM 120 //连续超那么多次,会被认为粘度故障
#define EXPIRY_VARI_RECONISE 0x0000FF
#define RECICLARNUMBER 21
unsigned char test_flag,open_close;
extern QFile PrintDatafile;
MainWindow::MainWindow(QWidget *parent) :
QWidget(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); //不使用布局
//ui->textEdit->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 40px; }");
QFont font = ui->textEdit->font();
font.setPixelSize(12);
ui->textEdit->setFont(font);
previewFlag =0;
ui->textEditOption->bindText(ui->textEdit);
ui->textEditOption->bindPicWidget(ui->PicWidgetDisp);
ui->textEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText);
//ui->textEditOption->setl
#ifdef _2DCODE_
dlgqrcode = new dlgQrCode();//ui->textEditOption->dlgQrcode ;//
//barcode = ui->textEditOption->barcode;//new QBarCode();
barcode = new QBarCode();
#endif
//ui->pushButtonEditBarCode->hide();
connect(ui->labelFaultResume,SIGNAL(pressed()),this,SLOT(onLabelFaultRusumePressed()));
connect(ui->labelStatusHighVoltageFault,SIGNAL(pressed()),this,SLOT(onStatusHighVoltageFault()));
connect(ui->labelStatusInkLeak,SIGNAL(pressed()),this,SLOT(onStatusInkLeak()));
connect(ui->labelStatusInkSwint,SIGNAL(pressed()),this,SLOT(onStatusInkSwint()));
connect(ui->labelStatusInkWaterLevel,SIGNAL(pressed()),this,SLOT(onStatusInkWaterLevel()));
connect(ui->labelStatusRecycleWarn,SIGNAL(pressed()),this,SLOT(onStatusRecycleWarn()));
connect(ui->labelStatusSolvLevelWarn,SIGNAL(pressed()),this,SLOT(onStatusSolvLevelWarn()));
connect(ui->labelStatusViscosityWarn,SIGNAL(pressed()),this,SLOT(onStatusViscosityWarn()));
connect(ui->labelStatusChargefault,SIGNAL(pressed()),this,SLOT(onStatusChargefault()));
//connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); labelStatusChargefault
//connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on()));
connect(ui->textEdit,SIGNAL(textChanged ()),this,SLOT(ontextEdittextChanged()));
connect(ui->textEdit,SIGNAL(cursorPositionChanged()),this,SLOT(onTextEditCursorPositionChanged()));
connect(ui->textEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)), ui->textEditOption, SLOT(currentCharFormatChanged(QTextCharFormat)));
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(displayTime()));
timer->start(1000);
airPushTimer = new QTimer(this);
connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess()));
timerShowItem = new QTimer(this);
connect(timerShowItem, SIGNAL(timeout()), this, SLOT(onShowAndHideItem()));
// if(sysPara->para.EditMode==SCENE)
// {
// timerShowItem->start(10);
// }
printintFlag = false;
startPrintingFlag = false;
connect(ui->labelProductCnt,SIGNAL(pressed()),this,SLOT(onLabelProductCntPressed()));
connect(ui->labelTotalProductCnt,SIGNAL(pressed()),this,SLOT(onLabelTotalProductCntPressed()));
connect(ui->textEditOption->getPushButtonPreview(),SIGNAL(pressed()),this,SLOT(onPushButtonPreviewPressed()));
connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString)));
connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString)));
connect(ui->textEditOption,SIGNAL(PicfileNameOpen(QString,bool)),this,SLOT(openPicFIleOpen(QString,bool))); // 由TEXTOPTION界面按键触发
connect(ui->pushButtonTXTOpen,SIGNAL(clicked()),ui->textEditOption,SLOT( showDlg()));
connect(ui->pushButtonCNTResetNow,SIGNAL(pressed()),this,SLOT(onPushButtonCNTResetNowPressed()));
#ifdef _2DCODE_
connect(ui->pushButtonEditBarCode,SIGNAL(pressed()),this,SLOT(onEditBarCode()));
connect(ui->pushButtonQREnCode,SIGNAL(pressed()),this,SLOT(onEditQRCode()));
connect(ui->textEditOption, SIGNAL(fontSizeChange(int)), barcode, SLOT(setFontSize(int)));
connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose()));
connect(dlgqrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose()));
#endif
connect(this,SIGNAL(ShowWarnningText(QString,QString)),this,SLOT(ShowWarnningText1(QString,QString)));
msgtest = new QMessageBox(this);
connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int)));
//QFile file(SYS_ROOT_DIR"UseEn");
if( Public::ReadLanguageName()!="Chinese")
{
ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png"));
//ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png"));
ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png"));
if(Public::ReadLanguageName()=="Thai"){
ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint3.png"));
ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint3.png"));
}
}
// 立即清零
#ifdef ENGLISH
ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png"));
ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png"));
ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png"));
#endif
#ifndef CLEARCNTNOW
ui->pushButtonCNTResetNow->hide();
#endif
fileChange=true;
pushButtonFlag = true;
if(sysPara)
{
sysPara->status.FileChangeRestCntFlag=0;
}
Public::derivePixelSizeFromHeight(12);
#if 1
pPicScene = new PicScene(this);
pPicScene->setSceneRect(QRectF(0, 0, 3200, MAX_PRINT_ROW_NUM));
//ui->fileSceneViewer->pView->setScene((QGraphicsScene *)pPicScene);
ui->graphicsView->setScene(pPicScene);
ui->graphicsView->centerOn(0,0);
ui->senceEditOption->bindScene(pPicScene, ui->graphicsView, ui->textEdit);
ui->senceEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText);
//connect(ui->senceEditOption,SIGNAL(addPicTextItem()),this,SLOT(onAddPicTextItem()));
//connect(ui->senceEditOption,SIGNAL(importFile(QString)),this,SLOT(onSceneImport(QString)));
//connect(ui->senceEditOption,SIGNAL(delItem()),this,SLOT(onDeleteItem()));
//connect(ui->senceEditOption,SIGNAL(saveScene(QString)),this,SLOT(onSaveScene(QString)));
//connect(ui->senceEditOption,SIGNAL(openSceneFile(QString)),this,SLOT(onOpenSceneFile(QString)));
connect(ui->senceEditOption,SIGNAL(generateQRCode(QString)),this,SLOT(onGenerateQRCode(QString)));
connect(ui->senceEditOption,SIGNAL(previewScene()),this,SLOT(onPreviewScene()));
//connect(ui->senceEditOption,SIGNAL(editItem()),this,SLOT(onEditItem()));
//connect(ui->textEditOption,SIGNAL(scenefileOpen(QString)),this,SLOT(onOpenSceneFile(QString)));
connect(ui->textEditOption,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool)));
connect(this,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool)));
connect(ui->senceEditOption,SIGNAL(editItemMode()),ui->textEditOption,SLOT(onEditItemMode()));
//connect(ui->textEditOption,SIGNAL(editItemDone()),this,SLOT(onEditItemDone()));
connect(ui->textEditOption,SIGNAL(editItemDone()),ui->senceEditOption,SLOT(onEditItemDone()));
connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString)));
connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString)));
// connect(ui->scrollArea->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(update_scroll()));
//qDebug()<<"viewer size"<<ui->graphicsView->size();
//ui->graphicsView->setSizePolicy(QSizePolicy::Fixed);
#endif
// ui->textEditOption->modbus_insert_pic("/home/plg/doc/QR_aa.bmp");
#if 0
qDebug()<<"edit size heigh:"<<ui->stackedWidgetText->size().height()<<"edit size width:"<<ui->stackedWidgetText->size().width();
qDebug()<<"edit geometry bottomLeft:"<<ui->stackedWidgetText->geometry().bottomLeft();
qDebug()<<"edit geometry height:"<<ui->stackedWidgetText->geometry().height();
qDebug()<<"edit geometry x:"<<ui->stackedWidgetText->geometry().x();
qDebug()<<"edit geometry y:"<<ui->stackedWidgetText->mapToGlobal(ui->stackedWidgetText->pos());
#endif
m_2sFlag = false;
moveToThread(&ShowThead);
//connect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem()),Qt::QueuedConnection);
//ShowThead.start();
ui->pushButtonStart->setHidden(true);//屏蔽紧急停机按钮
// if(PrintDatafile.exists()) PrintDatafile.remove();
// if(!PrintDatafile.open(QIODevice::WriteOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看
// //QMessageBox::warning(0,"警告",QString("无法打开文件:mac.bin") );
// }
}
MainWindow::~MainWindow()
{
disconnect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem()));
if (ShowThead.isRunning()) {
ShowThead.quit();
ShowThead.wait();
}
delete ui;
delete timer;
delete pPicScene;
}
/*显示当前系统时间 */
void MainWindow::displayTime()
{
if(sysPara){
// sysPara->status.productCnt = 123;
// sysPara->status.lastProductCnt = sysPara->status.productCnt ; //这会让产品计数显示出来
// qDebug()<<"sysPara->status.productCnt="<<sysPara->status.productCnt;
#ifdef BOART_TEMP_DEVICE
if(1)
{
if(sysPara->devOp->GetTemp(BOART_TEMP_DEVICE, (quint8 *)&sysPara->status.boardTemp) !=-1)
{
ui->labelCurrentTime->setText(tr("机箱:")+QString().sprintf("%d ",sysPara->status.boardTemp)+"°C"); // 主板温度
}
}
else
#endif
{
ui->labelCurrentTime->setText(tr("机箱:")+QString().sprintf("%d ",sysPara->status.AD_FIXED/4)+"°C"); // 机箱温度
}
ui->labDate->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
//UpdateDateTimeQRCode(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
// ui->pushButtonCNTResetNow->setEnabled( sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME );
static bool CleanUPEn=1,preCleanUP=0;
if(!sysPara->para.isCheckMagnet)
{
CleanUPEn = (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT);
}
else
{
CleanUPEn = (sysPara->status.currReclaimTankPos<70) ;
}
if(CleanUPEn != preCleanUP){
ui->pushButtonCleanUP->setEnabled(CleanUPEn);
}
preCleanUP=CleanUPEn;
//static int delayCount2 = 0;
if(m_2sFlag)
{
//++delayCount2;
//if(delayCount2 %10 ==5)
{
sysPara->devOp->controlInkValve(!sysPara->devOp->isInkValveOpen()); //控制供墨阀开关
//setRunStatus(tr("我已关闭供墨阀"));
}
}
#ifdef __ADC_INPUT__
if(sysPara->status.boardTemp >= sysPara->para.FanTemperature)
{
//sysPara->devOp->controlFan1(1);
//sysPara->devOp->controlFan2(1);
}
else
{
//sysPara->devOp->controlFan1(0);
//sysPara->devOp->controlFan2(0);
}
#endif
///////自动设置喷头温度
// if(sysPara->status.boardTemp <= 20)
// {
// sysPara->para.temperature = 38;
// }
// else if(sysPara->status.boardTemp > 20 && sysPara->status.boardTemp <26 )
// {
// sysPara->para.temperature = 35;
// }
// else if(sysPara->status.boardTemp >= 26 && sysPara->status.boardTemp < 30 )
// {
// sysPara->para.temperature = 32;
// }
// else if(sysPara->status.boardTemp >= 30 )
// {
// sysPara->para.temperature = 20;
// }
QFile file("/dev/input/event1");
if(!file.exists())
{
QWSServer::setCursorVisible(false);
}
else
{
QWSServer::setCursorVisible(true);
}
}
}
void MainWindow::bindSysPara(SysPara *sysPara){
this->sysPara = sysPara;
ui->textEditOption->bindSysPara(sysPara);
ui->widgetPrintTextDisplay->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 MainWindow::updateSysParaToUI(){
if(sysPara){
//nothing here
ui->textEditOption->updateSysParaToUI();
}
}
void MainWindow::applyUIPara(){
if(sysPara){
}
}
void MainWindow::CheckStatus(int Flag){
if(sysPara){
static unsigned int lastProductCnt=0;
int AutoCount=0;
int bcAutoCount=0;
static int lastMinutes = 0;
//QDate curDate=QDate::currentDate();
int currMinutes = QDateTime::currentDateTime().time().minute();
int usbDate = sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum ||sysPara->status.classVariNum;
if(usbDate)
{
//qDebug()<<"CheckStatus";
bool needSendPrintData=false;
//if(sysPara->print.CurDateVar.endRowPos && (sysPara->print.CurDateVar.day != curDate.day()))
if (sysPara->status.ExpiryVarNum && (lastMinutes != currMinutes))
{
ExpiryDotUpdate(1);
needSendPrintData = true;
}
//if(sysPara->print.ExpiryVar.endRowPos && (sysPara->para.ExpiryDay != r_ExpiryDay))
if(sysPara->status.CurrDateVariNum && (lastMinutes != currMinutes))
{
ExpiryDotUpdate(2);
needSendPrintData = true;
}
if(sysPara->status.classVariNum && (lastMinutes != currMinutes))
{
ExpiryDotUpdate(3);
needSendPrintData = true;
}
lastMinutes = currMinutes;
//sysPara->print.CurDateVar.day = curDate.day();
if(needSendPrintData)
{
sysPara->status.ExpiryDispUpdate=10;
SendPrintDataToFpga(0);
}
//if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay)
// ui->widgetPrintTextDisplay->update();
//sysPara->status.ExpiryDispUpdate=1;
}
if(sysPara->status.productCnt != lastProductCnt)
//if( sysPara->para.calandar_and_dat.cnt1CurrValue != sysPara->para.qrOption.counter )
{
lastProductCnt = sysPara->status.productCnt;
//sysPara->para.qrOption.counter = sysPara->status.productCnt ;
//sysPara->para.qrOption.counter ++;//= sysPara->para.calandar_and_dat.cnt1CurrValue;
sysPara->para.qrOption.counter +=sysPara->para.qrOption.CntInc;
//if(sysPara->para.qrOption.counter% 60) sysPara->para.qrOption.counter+=40;
AutoCount = (sysPara->status.QRvariNum?1:0);
//bcAutoCount = (sysPara->status.BCvariNum?1:0);
#ifdef MYARMTEST
qDebug()<<"CheckStatus:"<<sysPara->para.qrOption.counter<<AutoCount;
#endif
//qDebug()<<"CheckStatus :"<<sysPara->status.productCnt<<sysPara->para.qrOption.counter <<sysPara->status.QRvariNum;
}
//else qDebug()<<"P:"<<lastProductCnt<<sysPara->status.productCnt;
if( sysPara->para.qrOption.RecFromHost || AutoCount )
{
sysPara->para.qrOption.RecFromHost=0;
sysPara->para.qrOption.type = sysPara->print.QRvars[0].type;
sysPara->para.qrOption.height = sysPara->print.QRvars[0].height;
sysPara->para.qrOption.width = sysPara->print.QRvars[0].width;
if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay)
{
onUpdateDispQRCode(1); // 更新二维码显示
//qDebug()<<"PN:"<<lastProductCnt;
}
else { onUpdateDispQRCode(0);
//qDebug()<<"P0:"<<lastProductCnt;
}
if(AutoCount)
{
SendPrintDataToFpga(0);
}
AutoCount =0;
}
if(Flag){//pulse_300ms
sysPara->status.LightUpCnt ++ ;
if((sysPara->status.LightUpCnt%3) == 0){
if(printintFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag){
//if(printintFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag){ //打印状态指示灯
sysPara->status.GreenLightOnFlag = true;
}
else{
sysPara->status.GreenLightOnFlag = false;
sysPara->devOp->controlGreenLight(false);
//sysPara->devOp->controlGreenLight(true);
}
if(sysPara->status.GreenLightOnFlag){ //报警会时有时无
if(!sysPara->para.isCheckPrintLight)
{
sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable());
}
else
{
sysPara->devOp->controlGreenLight(true);
}
}
}
if(sysPara->status.circleProductCnt && (sysPara->status.productCnt >= sysPara->para.cnt1EndValue))
{
if(sysPara)
{
sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA
sysPara->para.totalProductCnt = 0;
}
}
}
}
}
void MainWindow::RefreshStatusLight(){
if(sysPara){
#ifdef DEBUG1
sysPara->status.statWarn =0| WARN_STATUS_HDINT;//sysPara->status.statWarn;
enablePrintButton(true);
#endif
#ifndef SYS_LINUX
sysPara->status.statWarn =0;//sysPara->status.statWarn;
enablePrintButton(true);
#endif
//ui->pushButtonCleanUP->setEnabled( (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT)); // sysPara->status.currReclaimTankPos
#ifdef __HV_FOR_WANG_DEBUG__ /* 盖上喷头盖,启动高压 */
static int hdint = 0;
static int reclainTankReachEnd = 0;
//int curr_swit = !(sysPara->status.statWarn & WARN_STATUS_INK_SWINT);// curr_swit墨线开关 1->开, 0->关
if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关
if (sysPara->status.reclainTankReachEnd) {
#if 0
int actHvAmp = sysPara->para.HighVoltageAmplitude;
float tempHvAmp;// = sysPara->para.HighVoltageAmplitude * 1.73;
if(sysPara->para.HighVoltageAmplitude == 0) {
tempHvAmp = 0;
}
else if(sysPara->para.HighVoltageAmplitude == 1) {
tempHvAmp = 63.5;
}
else {
tempHvAmp = 63.5 + (sysPara->para.HighVoltageAmplitude - 1) * 0.51;
}
sysPara->para.HighVoltageAmplitude = (unsigned char)tempHvAmp;
#endif
sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
#if 0
sysPara->para.HighVoltageAmplitude = actHvAmp;
#endif
}
}
hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT);
if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底
if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态
#if 0
int actHvAmp = sysPara->para.HighVoltageAmplitude;
float tempHvAmp;// = sysPara->para.HighVoltageAmplitude * 1.73;
if(sysPara->para.HighVoltageAmplitude == 0) {
tempHvAmp = 0;
}
else if(sysPara->para.HighVoltageAmplitude == 1) {
tempHvAmp = 63.5;
}
else {
tempHvAmp = 63.5 + (sysPara->para.HighVoltageAmplitude - 1) * 0.51;
}
sysPara->para.HighVoltageAmplitude = (unsigned char)tempHvAmp;
#endif
sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
#if 0
sysPara->para.HighVoltageAmplitude = actHvAmp;
#endif
}
}
reclainTankReachEnd = sysPara->status.reclainTankReachEnd;
#endif
if(sysPara->status.lastStatWarn != sysPara->status.statWarn){
if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关
ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
}
else {
ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
}
if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){//喷头盖
ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
if(printintFlag && startPrintingFlag)
setRunStatus(tr("正在喷印..............."));
}
else {
ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
if(printintFlag && startPrintingFlag)
setRunStatus(tr("喷头盖开, 喷印无法正常进行!!!"));
}
if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告
ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
}
else {
ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
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")));
}
else {
ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
strTitle = tr("墨水液位报警");
}
if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){
ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
}
else {
ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
strTitle = tr("溶剂液位报警");
}
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){
ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
}
else {
ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
}
//static int HVfaultCnt=0;
if(!(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){
if(!sysPara->status.lastHighVoltageFault)
{
ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
}
// HVfaultCnt=0;
//sysPara->status.HVFaultCloseEn=0;
}
else {
ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
#ifndef DEBUG1
if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电
on_pushButtonPausePrint_pressed();
LogInfo::setRunStatusText(tr("高压故障,暂停打印"));
setRunStatus(tr("高压故障,暂停打印"));
strTitle = tr("高压故障,暂停打印.");
sysPara->status.lastHighVoltageFault = true;
}
#endif
//if(HVfaultCnt<9)HVfaultCnt++;
//else{
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();
sysPara->status.reclaimTankBlockedAppending=1;
LogInfo::setRunStatusText(tr("高压故障,关回收槽"));
setRunStatus(tr("高压故障,关回收槽和墨线"));
}
sysPara->status.HVFaultCloseEn=1;
}
//}
}
}
//if(sysPara->status.viscosityDelayCnt)
//ui->label_3->setText( QString::number(sysPara->status.viscosityDelayCnt/100,10) );//labViscoCnt
/*-----------------------------------------------------------------------------------*/
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")));
}
else {
if(sysPara->status.viscosityFault==1){
ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
}
else if(sysPara->status.viscosityFault==2) {
ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG")));
}
}
}
sysPara->status.lastViscosityFault = sysPara->status.viscosityFault;
/*-----------------------------------------------------------------------------------*/
//updatePhaseIndicatorLight(); //此部分工作交给InkJetPrinter的来做了
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie
if(sysPara->status.RecycleWarnCnt)
ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
sysPara->status.RecycleWarnCnt = 0;
sysPara->status.lastRecycleWarn = 0;
}
#ifdef RETANKACK
else {
if(sysPara->status.RecycleWarnCnt==0) ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
if(( sysPara->status.currReclaimTankPos/10 < sysPara->para.reclaimTankTime*0.85 ) | (sysPara->status.statWarn & WARN_STATUS_HDINT) )
sysPara->status.RecycleWarnCnt=0;
if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone){
if(sysPara->para.RecycleWarnAction && startPrintingFlag && printintFlag )
on_pushButtonStopPrint_pressed();
if(sysPara->status.RecycleWarnCnt > 10)
ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY){
ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
if(sysPara->para.RecycleWarnAction){
sysPara->status.lastRecycleWarn = 1;
if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){
on_pushButtonReclaimTankClose_pressed();
LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线"));
setRunStatus(tr("回收故障,关闭回收槽,关墨线"));
//ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
}
}
}
else{
sysPara->status.RecycleWarnCnt ++ ;
}
//
}
else {
//sysPara->status.RecycleWarnCnt=0;
}
}
#else
else {
if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone)
{
if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY)
{
sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;
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_pushButtonReclaimTankClose_pressed();
LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线"));
setRunStatus(tr("回收故障,关闭回收槽,关墨线"));
//ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
}
}
else setRunStatus(tr("回收故障."));
}
else
{
sysPara->status.RecycleWarnCnt ++ ;
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--;
}
#endif
#ifdef MIMA
if(sysPara->status.WorkTimeOut) {
if( printintFlag) on_pushButtonStopPrint_pressed();
else sysPara->devOp->printCtrl( PRINT_CTRL_STOP);
setRunStatus(tr("维护时间已到,喷码机停止工作!"));
}
#endif
//ui->labelCurrentTime->setText( QString().sprintf("c:%d,s:%d",sysPara->status.RecycleWarnCnt,sysPara->status.reclaimTankstatus) );
/*-----------------------------------------------------------------------------------*/
// sysPara->status.LightUpCnt ++ ;
// if((sysPara->status.LightUpCnt%3) == 0){
// if(printintFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag){ //打印状态指示灯
// sysPara->status.GreenLightOnFlag = true;
// }
// else{
// sysPara->status.GreenLightOnFlag = false;
// sysPara->devOp->controlGreenLight(false);
// }
// if(sysPara->status.GreenLightOnFlag){ //报警会时有时无
// sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable());
// }
// }
if(ui->labelRunStatus->text().length()<4){
if(startPrintingFlag ){
if(printintFlag)
setRunStatus(tr("正在喷印..............."));
else
setRunStatus(tr("暂停喷印..............."));
}
}
// 20160620 新增主界面显示:压力,粘度,隔膜位置,晶振电压数,相位
//ui->labPress->setText(QString("%1").arg(sysPara->status.PRESSURE));
//ui->labViso->setText(QString("%1").arg(sysPara->status.viscosity) );
//ui->labPosition->setText(QString("%1").arg(sysPara->status.SEPTAL_POSITION));
//ui->labOscVol->setText(QString("%1").arg(sysPara->para.oscillatorVoltage) );
ui->labPress->setText(QString("%1/%2").arg(sysPara->status.PRESSURE).arg(sysPara->para.pressure));
ui->labViso->setText(QString("%1/%2").arg(sysPara->status.viscosity).arg(sysPara->para.viscosity) );
if(sysPara->para.gearPumpEnable)
{
ui->labPosition->setText(QString("%1").arg(sysPara->status.gearPumpRunSpeed));
}
else
{
ui->labPosition->setText(QString("%1/%2").arg(sysPara->status.SEPTAL_POSITION).arg(sysPara->para.septalPostion) );
}
//ui->labOscVol->setText(QString("%1").arg(sysPara->para.oscillatorVoltage) );
ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC));
//ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + "600");
}
}
bool MainWindow::updatePhaseIndicatorLight(){
if(sysPara<0) return 0;
if(dlgMyWarringShowDlyCnt)dlgMyWarringShowDlyCnt--;
if(dlgMyWarringShowDlyCnt==1) dlgMyWarring.hide();
/*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/
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")));
}
}
sysPara->status.phaseErrorCnt = 0;
}
else {
if(sysPara->status.phaseErrorCnt < 10)
sysPara->status.phaseErrorCnt ++ ;
else {
if(!sysPara->status.lastPhaseFault){
ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
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();
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 MainWindow::updateSysStatusToUI(){
if(sysPara){
if(sysPara->para.gearPumpEnable)
{
ui->label_11->setText(tr("齿轮泵转速"));
}
else
{
ui->label_11->setText(tr("隔膜位置"));
}
RefreshStatusLight();
if(sysPara->status.lastProductCnt != sysPara->status.productCnt){ //产品计数
ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt));
updateTotalCnt(0);
/* qDebug()<<"total_syn_pulse_num" //<<QString::number(sysPara->status.productCnt)
<< QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16)
<< (unsigned int)(sysPara->status.total_syn_pulse_num)
<< (unsigned int)(sysPara->status.volGap_pulse_num); */
}
if(sysPara->status.ExpiryDispUpdate >0 )
{
sysPara->status.ExpiryDispUpdate--;
ui->widgetPrintTextDisplay->update();// 2018.5.25
}
if(sysPara->para.alterPrint.enable==1) ui->labelXFileName->setText (tr("交替打印"));
else if(sysPara->para.alterPrint.enable==2) ui->labelXFileName->setText (tr("电眼交替"));
else ui->labelXFileName->setText ("");
/*--------------------------------------------------------------------------*/
//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
{
maxMM = (pulseNum/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距
}
#ifdef DEBUG2
qDebug()<<"mm"<<"dotNum"<<"colNum"<<"pulseNum"<<"maxMM"<<"synNPCol"<<"divFre";
qDebug()<<mm<<dotNum<<colNum<<pulseNum<<maxMM<<sysPara->para.synNumPerCol<<sysPara->para.divideRatio<<sysPara->para.dotNumPerCol;
#endif
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')));
}
else
ui->labelSynRate->setText("");
sysPara->status.lastSynPulseCntPer1s = sysPara->status.synPulseCntPer1s;
}
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;
}
/*--------------------------------------------------------------------------*/
if(!sysPara->status.fpgaVersionNum && !sysPara->status.lostCommuFlag){ //因为进入系统就会进主界面,马上就会将版本号读出
sysPara->devOp->readFpgaVersionNum();
if(sysPara->status.fpgaVersionNum){
sysPara->devOp->writeFpgaPrintPara(true);
}
ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(SOFTWARE_VER_NUM).arg(0).arg(0).arg(0) );
}
else{
QString ARM_Version;
ARM_Version.sprintf("%d.%d.%02dS", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER);
ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12)
.arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff) );
}
bool found_CNT1 = false;
bool found_CNT2 = false;
bool found_CNT3 = false;
/*--------------------------------------------------------------------------*/
if(sysPara->status.variNum && (ui->stackedWidgetText->currentWidget() == ui->pagePrintTextDisplay)){
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_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;
#ifdef DEBUG_CNT
case CALANDAR_CNT1:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,10).toInt();break;
case CALANDAR_CNT2:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,10).toInt();break;
#else
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;
#endif
case CALANDAR_CNT3:val = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();found_CNT3=true;break;
case RANDOMNUM : val = QString::number( sysPara->status.calandar_and_dat.RandomValue1, 16).toInt(); break;
//val = QString::number( sysPara->status.calandar_and_dat.RandomValue2 ,16).toInt();
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) //减少不必要的刷新动作
{
ui->widgetPrintTextDisplay->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(SIMULATE_PRINTING_MODE)
enablePrintButton(true);
ui->label->setText(QString::number(sysPara->para.printTotalColNum));
}
}
void MainWindow::showPrintBitImage(){
if(sysPara){
// unsigned char *dat = sysPara->status.printDat;
unsigned char *dat;
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
if(MaxCol4000){
dat =sysPara->status.printDat_Normal;
}else{
dat =sysPara->status.printDat;
}
for(int j = sysPara->status.currPrintCol - 1; j >= 0 ; j --){
for(int i = 0; i < sysPara->status.currPrintRow; i++){
if(dat[j*MAX_PRINT_ROW_BYTE_NUM + i/8] & (1<<(i%8)))
printf("1");
else
printf(" ");
}
printf("\n");
}
}
}
//void MainWindow::on_pushButtonTXTOpen_pressed(){
//}
void MainWindow::openPicFIleOpen(QString filePath,bool insertFlag) {
fileChange=true;
#ifdef TXTEDIT
ui->textEditOption->onFileOpenN(filePath,insertFlag);
emit setMainTabNow(0);
#else
Q_UNUSED(insertFlag);
if(sysPara) {
if(//filePath.endsWith(".gif") || filePath.endsWith(".jpeg") ||
//filePath.endsWith(".jpg") ||
// ||filePath.endsWith(".bmp")
filePath.endsWith(".png"))
{
QFile file(filePath);
if(!file.open(QIODevice::ReadOnly)){
QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath);
return ;
}
else {
QByteArray data = file.readAll();
QTextCodec *codec = Qt::codecForHtml(data);
QString str = codec->toUnicode(data);
if(filePath.startsWith(UDISK_DOC_ROOT_DIR))
str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理
file.close ();
ui->PicWidgetDisp->loadImage (filePath,false);
ui->labelOpenedFileName->setText (QFileInfo(filePath).fileName());
LogInfo::setRunStatusText(tr("打开文件:")+(QString)(QFileInfo(filePath).fileName()));
if(sysPara){
//QString str1 =QFileInfo( filePath).fileName ();
sysPara->sysFile= PARA_ROOT_DIR+QFileInfo( filePath).baseName()+".dpn";
sysPara->loadParaFromFile ();// 从磁盘读取参数文件
emit openFileChange();
// emit openFileChange();
snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toAscii().constData());
}
/* other action */
PreviewPressed();
if(sysPara->status.addSpace)
ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow);
else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow);
ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay);
ui->widgetPrintTextDisplay->setScaleRatio(3);
//ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol));
}
}
}
#endif
}
void MainWindow::on_pushButtonGetData_pressed()
{
emit getJSONData();
}
void MainWindow::onPushButtonPreviewPressed(){
if(sysPara)
{
sysPara->para.EditMode = TXTFILE;
if(previewFlag==0) {
#ifdef SAVEWHENPREVIEW
if(ui->textEditOption->fileName.isEmpty()){
QMessageBox::StandardButton ret = QMessageBox::Ok;
ret = QMessageBox::warning(this, tr("提示"),
tr("文件未保存,是否先保存文件!"),
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok)
{
ui->textEditOption->on_bottonSave_clicked();
}
}
else
ui->textEditOption->on_bottonSave_clicked();
#else
#endif
PreviewPressed();
}
}
}
int MainWindow::getVarStarRow(int x,int y,int h,int w,char *dat)
{
int t_x_start_pos = x;
int t_x_end_pos = t_x_start_pos + w;
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
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 = y - h/2;
//int t_y_end_pos = y ;
if(t_y_start_pos < 0)
t_y_start_pos = 0;
for(int j=y - h/2;j>0;j--)
{
char startRowFound=0;
for(int i = t_x_start_pos; i < t_x_end_pos; i++)
{
if( (dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))))
{
startRowFound=1;
dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] &=~ (1 << (j%8));//将画点取消掉
}
}
if(startRowFound)continue;
t_y_start_pos=j+1;
// qDebug()<<"F:"<<t_y_start_pos;
break;
}
return t_y_start_pos;
}
void MainWindow::PreviewPressed(){
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 = sysPara->status.printDat;
// memset(dat,0,sizeof(sysPara->status.printDat));
unsigned char *dat;
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
LogInfo::setRunStatusText(tr("MaxCol4000: %1").arg(MaxCol4000));
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)ui->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;
// qDebug()<<"currPrintCol="<<sysPara->status.currPrintCol<<" coldot="<<coldot<<" addSpace="<<sysPara->status.addSpace;
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");
ui->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 = ui->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;
}
// 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)
ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow);
else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow);
ui->widgetPrintTextDisplay->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));
ui->widgetPrintTextDisplay->update();
//qDebug()<<"3"<<sysPara->status.currPrintRow;
}
previewFlag=0;
}
void MainWindow::showDat(unsigned char * Dat)
{
#ifdef DEBUG1
int i,j,x=MAX_PRINT_ROW_BYTE_NUM*sysPara->status.currPrintCol;
for(j=0;j<2;j++){
for(i=0;i<x;i+=5)
printf("%02X ",Dat[i+j]);
printf("\n");
}
#else
Q_UNUSED(Dat);
#endif
}
void MainWindow::alterDataPrint(unsigned char m)
{
if(sysPara)
{
ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow);
//sysPara->devOp->writeFpgaPrintPara(); /*务必放在最后一步*/
//sysPara->devOp->writeFpgaVariCtrl();
//SendPrintDataToFpga (m);
emit ui->widgetPrintTextDisplay->update();
}
}
/*
000 000 000 0000 0 000000 000 0000000 000 000
0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 000 0 000 0 000 0 0
0 0 0 0 000 0 0 00 0 00 0 0 0 0 0 00
0 0 0 0 0 0 0 0 0 0 0 0 0 000 0
0 0 0 0 0 00000000 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000 00000 0000000 0000 0 0000 000 0 000 0000
*/
//#define DEBUG4
void MainWindow::generateCharRamData(){/* 生成字模数据 */
if(sysPara->status.variNum){
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;
#if 0 //同一个点陣的变量有BUG
qDebug()<<"p_var->height:"<<p_var->height;
if(p_var->height>6)
{
for( j = 0; j < i; j ++){ //重复检测是否有重复大小的字存在
if(p_var->height == sysPara->status.vars[j].height){
p_var->bassAddr = sysPara->status.vars[j].bassAddr;
p_var->datHeight = sysPara->status.vars[j].datHeight;
p_var->datWidth = sysPara->status.vars[j].datWidth;
p_var->rowByteNum = sysPara->status.vars[j].rowByteNum;
p_var->dat = sysPara->status.vars[j].dat;
break;
}
}
}
#endif
if(p_var->bassAddr == -1){
int width = (p_var->digitalNum)?(10*p_var->width/p_var->digitalNum):12;
int width2 = width;//+(sysPara->status.addSpace?width:0);
int height = Public::derivePixelSizeFromHeight(p_var->height);
textEdit.clear();
int DPI = textEdit.logicalDpiX();
DPI = DPI?DPI:1; //Pixel = DPI * Point / 72
textEdit.insertHtml(QString("<span style=\" font-family:'%1'; font-size:%2pt; font-weight:%3;\">0123456789</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(p_var->bold?600:400)); //600表示加粗,400表示普通
QFont font = textEdit.font();
font.setLetterSpacing(QFont::AbsoluteSpacing,p_var->letterSpace);
textEdit.setFont(font);
// qDebug() << "height:" << height << "fontFamily:" << Public::getFontFamily(height);
// qDebug() << "width2:" << width2 << "fontFamily:" << Public::getFontFamily(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*/
textEdit.hide();
image.save(QString::number(i) + "varRam.png");
#ifdef DEBUG4
//image.save("./var.png");
#endif
// 找到最下面的行
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;
#ifdef DEBUG4
QString str="",s2="";
str.sprintf ("firstValidRow:%d,lastValidRow:%d,rowDiff:%d\n\r",firstValidRow,lastValidRow,rowDiff) ;
qDebug()<<str;
#endif
/*
firstValidRow = -1;
for(int k = 0; k <imgHeight; k++){
for(int j = 0; j < width; j ++){
QRgb rgb = image.pixel(j,k);
if(rgb&0xff000000){
firstValidRow=k;
break;
}
}
if(firstValidRow >=0)
break;
}
rowDiff = lastValidRow-firstValidRow;
firstValidRowDiff = firstValidRow/2;
*/
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);
#ifdef DEBUG4
s2.sprintf ("firstValidRow:%d,lastValidRow:%d,rowByteNum:%d,width:%d ,rowDiff:%d\n\r",firstValidRow,lastValidRow,rowByteNum,width,rowDiff) ;
qDebug()<<s2;
str="";s2="";
#endif
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));
#ifdef DEBUG4
s2.sprintf("%02X",rowByteNum*j + currRow/8);
str+=s2;
#endif
}
else{
#ifdef DEBUG4
s2.sprintf(" -");
str+=s2;
#endif
}
}
#ifdef DEBUG4
qDebug()<<str; str="";s2="";// printf("\n");
#endif
}
/*
startRowPos: 15 endRowPos 27 12
"firstValidRow:0,lastValidRow:12,rowDiff:12"
"firstValidRow:3,lastValidRow:12,rowByteNum:2,width:60 ,rowDiff:9
*/
//str.sprintf("startRow:%d,endRow:%d,Height:%d",p_var->startRowPos,p_var->endRowPos,p_var->height);
//qDebug()<<str;
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 MainWindow::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));
}
void MainWindow::on_pushButtonStartPrint_pressed()
{
if(sysPara->status.isPrinting){
qDebug("Mainwindow: Printing 开始打印");
}else{
qDebug("Mainwindow: Non printing 开始打印");
}
static int fileCount = 0;
fileCount++;
if(fileCount > 5)
{
fileCount = 1;
}
// QString fileName = "/home/plg/doc/SavePrintFile";
// fileName += QString::number(fileCount) + ".html";
// QTextDocumentWriter writer(fileName);
// writer.write(ui->textEditOption->textEdit->document());
if(sysPara){
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
#ifdef X86TEST
//sysPara->status.statWarn |=WARN_STATUS_HDINT;
#endif
#ifndef SYS_LINUX
sysPara->status.statWarn =0;
#endif
#ifdef MYTEST
#else
#ifdef AM335TEST
#else
#ifdef MIMA
static int xxxm=0;
if(xxxm==0){
QFile file("/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtssl.o");
if(!file.exists())
{
LogInfo::setRunStatusText(QString("missing libQtssl.o"));
return;
}
}
xxxm=1;
if(sysPara->status.WorkTimeOut) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP);
return;
}
#endif
#endif
#endif
/******2020/2/29*****/
// qDebug()<<"sysPara->para.printTriggerMode "<< sysPara->para.printTriggerMode;
if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) //同步模式下,判断喷印间隔是否设置合理
{
QSizeF size = ui->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*****/
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 ;
}
}
//if(printintFlag && !sysPara->status.FileChangeRestCntFlag) return;
// 发送数据到 外接屏 2017-07-25
sysPara->devOp->DatToDisp(sysPara->para.lastOpenedFileName,0);
#ifdef __HV_FOR_WANG_DEBUG__ /* 盖上喷头盖,启动高压 */
//sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
#else
sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
#endif
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 ;
}
// LogInfo::setRunStatusText(tr("有效打印区域 %1行 x %2 列").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol));
//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))
)
{
int dotNumPerCol = sysPara->status.currPrintRow*(1 + sysPara->para.printRowDelay) + sysPara->para.printColDelay;
//long long int printClkNum = dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio);
//long printTmUs = printClkNum/(FPGA_SYS_HZ/1000000);
long printTmUs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000000);
// LogInfo::setRunStatusText(tr("打印耗时 %1.%2 毫秒 /次").arg(printTmUs/1000).arg(printTmUs%1000,3,10,QLatin1Char('0')));
//qDebug()<<"mainWIN:"<<((printTmUs/1000 + 3) > (sysPara->para.printDelayMs) )<< (sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD);
//qDebug()<<"PDL:"<<dotNumPerCol<<(( long )printTmUs/1000 + 3) <<sysPara->para.printDelayMs;
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 ;
}
}
else{
LogInfo::setRunStatusText(tr("同步目标每列有%1.%2个同步脉冲").arg(sysPara->para.synNumPerCol/(1<<8)).arg((sysPara->para.synNumPerCol%(1<<8))*1000/(1<<8),3,10,QLatin1Char('0')));
}
sysPara->status.isPrinting=true;
//if(!printintFlag) sleep(1);
setRunStatus(tr("开始打印"));
SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2,
if(sysPara->para.isCheckInsertTime)
{
if(!startPrintingFlag)
{
LogInfo::setRunStatusText(tr("开始打印"));
}
}
else
{
LogInfo::setRunStatusText(tr("开始打印"));
}
/*-------------------------------------------------------------------*/
ui->labelSynColDelay->setText("");
sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据
/*--------------------------------暂停按钮------------------------------*/
ui->pushButtonPausePrint->setEnabled(true);
// ui->pushButtonPausePrint->setText(tr("暂停打印"));
/*---------------------------------开关回收槽------------------------------*/
enableReclaimCtrlButton(false);
updatePrintDisplayLabel();
// 20170717 移动此,以观察条形码打印异常问题。
if(!startPrintingFlag)
{
sysPara->devOp->printCtrl(PRINT_CTRL_START);
printintFlag = true;
}
else
{
//如果已经在打印,则不要在发送start命令,只要更新相应的数据即可
if(!printintFlag) //如果在暂停,重复取消暂停
on_pushButtonPausePrint_pressed();
}
startPrintingFlag = true;
}
}
void MainWindow::SendPrintDataToFpga(unsigned char alterEnable)
{
if(!sysPara) return ;
fileChange=false;
sysPara->devOp->writeFpgaPrintPara(1); /*务必放在最后一步*/
sysPara->devOp->writeFpgaVariCtrl();
unsigned char blankDat[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM];
memset(blankDat,0,sizeof(blankDat));
sysPara->devOp->fpgaWr(0,blankDat,sizeof(blankDat));//...所加的空白偏移地址
// 交替打印处理
#ifdef FXCHG
unsigned char *dat;
size_t sizeofdat;
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
if(MaxCol4000){
dat =sysPara->status.printDat_Normal;
sizeofdat = sizeof(sysPara->status.printDat_Normal);
}else{
dat =sysPara->status.printDat;
sizeofdat = sizeof(sysPara->status.printDat);
}
sysPara->devOp->fpgaWr(sizeof(blankDat),dat,sizeofdat-sizeof(blankDat));
/*
if(sysPara->para.printOnce)
{
if(sysPara->status.oneCodePrintOnce)
{
sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM);
}
sysPara->status.oneCodePrintOnce = false;
}
else
{
//sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM);
sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat,sizeof(sysPara->status.printDat)-sizeof(blankDat));
}
*/
#else
if(sysPara->para.alterPrint.enable)
{
int len=MAX_PRINT_ROW_BYTE_NUM*(sysPara->status.currPrintCol);
if(alterEnable==1) sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printAlterDat1,len ); // alter1
else if(alterEnable==2) sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printAlterDat2, len); // alter2
else sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printAlterDat1, sizeof(sysPara->status.printAlterDat1)-sizeof(blankDat)); // alter2
}
else
sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat,sizeof(sysPara->status.printDat)-sizeof(blankDat)); //将要打印的数据发送到fpga
#endif
#if 0
int printDataIndex=0;
char xor_value;
QFile xor_record_file("xor_record.txt");
for (int i = 0; i< sizeof(blankDat);) {
xor_value = 0;
xor_value ^= blankDat[i];
xor_value ^= blankDat[i+1];
xor_value ^= blankDat[i+2];
xor_value ^= blankDat[i+3];
xor_value ^= blankDat[i+4];
sysPara->devOp->fpgaWr(i,blankDat + i,5);
//sysPara->devOp->readPrintDataXor();
sysPara->devOp->readbuilDat();
if (((sysPara->status.build_dat.builTime & 0xFF00)>>8) != xor_value) {
//out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
qDebug()<<"sequence "<<i<<"error!";
if (xor_record_file.open(QFile::WriteOnly|QFile::Append)) {
QTextStream out(&xor_record_file);
// out<<QDateTime::currentDateTime().toString()<<"\n";
// out<<"sequence "<<i<<"error!"<<"\n";
// out<<"builTime "<<((sysPara->status.build_dat.builTime & 0xFF00)>>8)<<"xor_value "<<xor_value<<"\n";
xor_record_file.close();
}
//LogInfo::setRunStatusText(QString("sequence %1 error!").arg(i));
//LogInfo::setRunStatusText(tr("警告:‘-’和空格的宽度不一样"));
//LogInfo::setRunStatusText(QString("builTime %1 xor_value %2").arg(sysPara->status.build_dat.builTime).arg(xor_value));
}
i = i+5;
printDataIndex = i;
}
for (int i = 0; i< sizeof(sysPara->status.printDat) - sizeof(blankDat);) {
xor_value = 0;
xor_value ^= sysPara->status.printDat[i];
xor_value ^= sysPara->status.printDat[i+1];
xor_value ^= sysPara->status.printDat[i+2];
xor_value ^= sysPara->status.printDat[i+3];
xor_value ^= sysPara->status.printDat[i+4];
sysPara->devOp->fpgaWr(printDataIndex + i, (unsigned char*)sysPara->status.printDat + i, 5);
//sysPara->devOp->readPrintDataXor();
sysPara->devOp->readbuilDat();
if (((sysPara->status.build_dat.builTime & 0xFF00)>>8) != xor_value) {
qDebug()<<"sequence "<<printDataIndex+i<<"error!";
if (xor_record_file.open(QFile::WriteOnly|QFile::Append)) {
QTextStream out(&xor_record_file);
// out<<QDateTime::currentDateTime().toString()<<"\n";
// out<<"sequence "<<printDataIndex+i<<"error!"<<"\n";
// out<<"builTime "<<((sysPara->status.build_dat.builTime & 0xFF00)>>8)<<"xor_value "<<xor_value<<"\n";
xor_record_file.close();
}
}
i = i+5;
}
#endif
}
int MainWindow::getCurrPrintStatus()
{
int printStatus;
if (startPrintingFlag ) {
if(printintFlag) {
printStatus = 1; // 正在打印
}
else {
printStatus = 2; // 暂停喷印
}
}
else {
printStatus = 3; // 停止打印
}
return printStatus;
}
void MainWindow::updatePrintDisplayLabel(){
if(sysPara && !sysPara->status.reclainTankReachEnd){
setRunStatus(tr("回收槽未到底!!!!!!"));
}
else if(startPrintingFlag ){
if(printintFlag)
setRunStatus(tr("正在喷印..............."));
else
setRunStatus(tr("暂停喷印..............."));
}
else
setRunStatus("");
}
void MainWindow::on_pushButtonStopPrint_pressed()
{
if(sysPara->status.isPrinting){
qDebug("Mainwindow: Printing 停止打印");
}else{
qDebug("Mainwindow: Non printing 停止打印");
}
if(sysPara){
if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) {
return;
}
sysPara->status.isPrinting=false;
sysPara->devOp->printCtrl2(1);
sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT
LogInfo::setRunStatusText(tr("停止打印"));
ui->pushButtonStartPrint->setEnabled(true);
ui->pushButtonPausePrint->setEnabled(false);
// ui->pushButtonPausePrint->setText(tr("暂停打印"));
enableReclaimCtrlButton(true);
printintFlag = false;
startPrintingFlag = false;
updatePrintDisplayLabel();
sysPara->status. waitHightVolOff = 1;
#ifndef __HV_FOR_WANG_DEBUG__
sysPara->status.waitHightVolOff = 3;
#endif
sysPara->saveParaToFile(); // 将相关配置保存
#ifdef RANDDEBUG
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("随机码文件导出完成.");
}
}
#endif
}
}
void MainWindow::on_pushButtonPausePrint_pressed()
{
if(sysPara){
#ifdef MIMA
if(sysPara->status.WorkTimeOut && !SIMULATE_PRINTING_MODE) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP);
return;
}
#endif
if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) {
return;
}
sysPara->devOp->printCtrl(PRINT_CTRL_PAUSE);
LogInfo::setRunStatusText(printintFlag?tr("暂停打印"):tr("继续打印"));
ui->pushButtonStartPrint->setEnabled(true);
//if(printintFlag){ sysPara->status.waitHightVolOff=2; }
printintFlag = !printintFlag;
//ui->pushButtonPausePrint->setText(printintFlag?tr("暂停打印"):tr("继续打印"));
//ui->pushButtonPausePrint->setText(printintFlag?tr("暂停打印\n保持高压"):tr("暂停打印\n停止高压"));
if(printintFlag)
{
ui->pushButtonPausePrint->setText(tr("继续打印\n保持高压"));
ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(0, 255, 0)}");
sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
}
else
{
ui->pushButtonPausePrint->setText(tr("暂停打印\n停止高压"));
ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(255, 0, 0)}");
//sysPara->devOp->highVoltageCtrl(0);
}
updatePrintDisplayLabel();
sysPara->saveParaToFile(); // 将相关配置保存
#ifdef RANDDEBUG
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("随机码文件导出完成.");
}
}
#endif
}
}
void MainWindow::resetReclaimCtrlButtonText(){
ui->pushButtonReclaimTanOpen->setText(tr("开"));
ui->pushButtonReclaimTankClose->setText(tr("关"));
}
void MainWindow::enableReclaimCtrlButton(bool enable){
ui->pushButtonReclaimTanOpen->setEnabled(enable);
ui->pushButtonReclaimTankClose->setEnabled(enable);
}
void MainWindow::enablePushButtonStart(bool enable)
{
ui->pushButtonStart->setEnabled(enable);
}
void MainWindow::enablePrintButton(bool enable){
ui->pushButtonPausePrint->setEnabled(false);
ui->pushButtonStartPrint->setEnabled(enable);
ui->pushButtonStopPrint->setEnabled(enable);
}
static int mainInkPumpCtrlStatus = 0;
static int mainInkPumpCtrlCnt = 0;
//100ms 为单位
void MainWindow::airPushingProcess()
{
if(sysPara){
if (sysPara->status.airPushing) {
//qDebug()<< "start airPushingProcess "<<sysPara->status.airPushingOnTime;
// 执行排气 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.SEPTAL_POSITION > sysPara->para.septalPostion + 50) {
// sysPara->devOp->controlCycleValve(true);
// }
// else if (sysPara->status.SEPTAL_POSITION < sysPara->para.septalPostion - 50) {
// sysPara->devOp->controlCycleValve(false);
// }
// 以500ms 间隔开关循环阀
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 MainWindow::reclaimTanOpen()
{
// 还原当前模式
if (sysPara->status.airPushing) {
sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore;
}
sysPara->status.isPumpValveControledByHand = false;
sysPara->status.canRunAirPushing = 0;
sysPara->devOp->mainInkCtrl();
sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止
MySleep(1000);
sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable());
ui->pushButtonReclaimTanOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("停止"):tr("开"));
ui->pushButtonReclaimTankClose->setText(tr("关"));
enablePrintButton(SIMULATE_PRINTING_MODE);
sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/
//LogInfo::setRunStatusText(sysPara->devOp->isReclaimTankOpenEnable()?tr("打开回收槽"):tr("停止打开"));
setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开"));
if (!sysPara->para.reclaimTankTime) {
LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!"));
}
sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclainOpenAppending = true;
sysPara->status.reclainCloseAppending = false;
sysPara->status.reclaimBlockedCnt = 0;
}
void MainWindow::on_pushButtonReclaimTanOpen_pressed()
{
if(sysPara){
if (!sysPara->status.reclaimTankBlockedAppending) {
if (sysPara->status.canRunAirPushing && (sysPara->status.currReclaimTankPos == 0)) { // 回收槽关闭的情况下才可以执行排气;//2019/10/24 当回收槽未在顶的位置,不需要排气
if (!sysPara->status.airPushing) { // 先执行排气后开回收槽
sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand;
sysPara->status.isPumpValveControledByHand = true;
sysPara->devOp->mainInkCtrl();
sysPara->devOp->controlCycleValve(true);
#ifdef __AIR_RELEASE_OLD__
// 粘度泵跟随循环阀动作
sysPara->devOp->controlViscosityPump(true);
#else
sysPara->devOp->controlViscosityPump(false);//关粘度泵
#endif
sysPara->devOp->controlMainInkPump(true);//主墨泵敞开
sysPara->devOp->mainInkCtrl();
sysPara->devOp->controlReclaimPump(true, false); // 回收泵开
sysPara->devOp->controlInkValve(true); //墨水阀
//qDebug()<< "start airpushings";
sysPara->status.airPushing = 1;
sysPara->status.airPushingDone = 0;
sysPara->status.airPushingOnTime = 0;
airPushTimer->start(100); // 100ms
}
}
else
reclaimTanOpen();
}
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 MainWindow::on_pushButtonReclaimTankClose_pressed()
{
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());
ui->pushButtonReclaimTanOpen->setText(tr("开"));
ui->pushButtonReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("停止"):tr("关"));
enablePrintButton(SIMULATE_PRINTING_MODE);
sysPara->devOp->highVoltageCtrl(0);
//LogInfo::setRunStatusText(sysPara->devOp->isReclaimTankCloseEnable()?tr("关闭回收槽"):tr("停止关闭"));
setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭"));
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;
}
}
void MySleep(unsigned int msec);
/*
* 关机前务必保存参数
* */
void MainWindow::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->controlReclaimPump(true,false);
sysPara->devOp->controlViscosityPump(true);
sysPara->devOp->controlCycleValve(true);
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
}
if(i == 22){
sysPara->devOp->controlInkValve(false);
}
this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*2));
MySleep(2000);
}
}
// sysPara->status.flagOfPowerOff = true;
sysPara->devOp->fpgaWrD(0xA442,0,1);//打开回收槽
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); //关供墨
if(!TEST_MODE){
for(int i=14;i>7;i--)
{
if(i==13)
sysPara->devOp->fpgaWrD(0xA442,1,1);//停止回收槽
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;
sysPara->devOp->controlViscosityPump(false);
sysPara->devOp->controlCycleValve(false);
if(!TEST_MODE){
for(int i=7;i>0;i--)
{
if(i == 7)
sysPara->devOp->fpgaWrD(0xA442,2,1);//关闭回收槽
this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*3));
MySleep(3000);
}
}
}
system("touch /home/plg/runFlag"); //表示是正常关机
emit CloseJd();
sysPara->para.gearPumpValue=gearPumpValue_backup;
sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup;
sysPara->devOp->controlCompressPump(false);
setRunStatus(tr("准备关机......"));
qDebug()<<"准备关机";
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(); // 关机前将相关配置保存
#ifdef SYS_LINUX
#ifdef __STC_POWER__
sysPara->devOp->Heartbeat(0); //发送关机命令
MySleep(200);
//QProcess process;
//process.startDetached("poweroff");
//qApp->exit(0);
#endif
system("sync");//缓存同步
sleep(5);
sysPara->devOp->powerOff();
QProcess process;
process.startDetached("shutdown -h now");
//qDebug()<<"run shutdown -h now";
qApp->exit(0);
//qDebug()<<"qApp->exit(0)";
#endif
}
}
void MainWindow::on_pushButtonStart_pressed()
{
//QFont font;
//font.setPointSize(30);
// ui->pushButtonStart->setFont(font);
pushButtonFlag = !pushButtonFlag;
if(pushButtonFlag)
{
ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(0, 255, 0)}");
ui->pushButtonStart->setText(tr("泵启动"));
}
else
{
ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(255, 0, 0)}");
ui->pushButtonStart->setText(tr("泵停止"));
}
//ui->pushButtonStart->setEnabled(false);
emit pushButtonStartPressed(pushButtonFlag);
}
void MainWindow::_on_pushButtonPowerOff_pressed(bool notice){
if(sysPara){
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)).toAscii().data()));
system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toAscii().data())); //先备份UP*
sysPara->status.reclaimCloseCnt=10;
on_pushButtonStopPrint_pressed();
on_pushButtonReclaimTankClose_pressed();
MySleep(1000);
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;
//system((char *)((QString("mkdir %1").arg(TESTDIR)).toAscii().data()));
//system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toAscii().data())); //先备份UP*
checkForPowerOff();
}
}
}
}
void MainWindow::on_pushButtonPowerOff_pressed()
{
//if(!sysPara->status.lostCommuFlag)
_on_pushButtonPowerOff_pressed(true);
}
void MySleep(unsigned int msec)
{
QTime dieTime = QTime::currentTime().addMSecs(msec);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
extern MyInputMethod *myInputMethod;
void MainWindow::ontextEdittextChanged()
{
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
QSizeF size = ui->textEdit->document()->size();
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);
//QMessageBox::warning(this, tr("警告"),
// tr("最多支持的列数目为:%1请减小信息长度.").arg(MAX_PRINT_COL_NUM));
}
if(size.width() == 0)
{ //在通过关标选择文本然后删除的时候,不会调用cursorPosition事件
onTextEditCursorPositionChanged();
}
}
void MainWindow::onTextEditCursorPositionChanged(){
for(int i = 0; i < 2; i++){
QTextCharFormat fmt = ui->textEdit->currentCharFormat ();
QString s = ui->textEdit->document()->toPlainText();
QFont font = fmt.font();
QLabel *labelFontSize = ui->textEditOption->getLabelFontSize();
QLabel *labelFontFamily = ui->textEditOption->getLabelFontFamily();
QCheckBox *checkBoxBold = ui->textEditOption->getCheckBoxBold();
bool ok;
//qDebug()<<"onTextEditCursorPositionChanged"<< font.family()<<labelFontSize->text().toInt(&ok,10)<<s.length()<<s;
if(labelFontSize && checkBoxBold){
int DPI = labelFontSize->logicalDpiX();
DPI = DPI?DPI:1;
int pixeSize = font.pointSizeF()*DPI/72;
if(pixeSize >= Public::getMinFontPixelSize()){
labelFontSize->setText(QString::number(Public::getAdjustedPixelSize(pixeSize)));
checkBoxBold->setChecked(font.weight() == QFont::Bold);
labelFontFamily->setText(font.family());
barcode->setFontSize(Public::getAdjustedPixelSize(pixeSize));
break;
}
else {
if(s.length()<=1) {
ui->textEdit->selectAll();
font.setFamily(Public::getFontFamily(labelFontSize->text().toInt(&ok,10) ));
ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体
ui->textEdit->moveCursor(QTextCursor::End);
} else
ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体
}
}
}
}
void MainWindow::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->labelRunStatus->clear();
sysPara->status.beeperOnFlag = false;
sysPara->devOp->controlBeeper(false);
sysPara->status.heaterONTimeCnt = 0; //加热块计数清零
ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
sysPara->status.DACDisable = false;
sysPara->status.lastPhaseFault = 0;
sysPara->status.phaseErrorCnt = 0;
sysPara->status.lastHighVoltageFault = false;
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 == 4))
{
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);
}
}
void MainWindow::onEnableReclaimCtrlButton(bool flag)
{
enableReclaimCtrlButton(flag);
}
void MainWindow::onLabelProductCntPressed(){
if(sysPara){
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("警告"),
tr("是否初始化产品计数?"),
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
updateTotalCnt(0);
sysPara->devOp->clearProductCnt(1);
sysPara->saveParaToFile();
}
}
}
void MainWindow::onLabelTotalProductCntPressed(){
if(sysPara){
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("警告"),
tr("是否清除总产品计数?"),
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
sysPara->devOp->clearProductCnt(1 | 0x10 );// [3]总产品计数器清零FPGA
sysPara->para.totalProductCnt = 0;
}
}
}
void MainWindow::onPushButtonCNTResetNowPressed(){
if(sysPara){
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("警告"),
tr("是否立即重新计米?"),
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA
sysPara->para.totalProductCnt = 0;
}
}
}
void MainWindow::on_bottonEditText_pressed()
{
//qDebug()<<"EditMode"<<sysPara->para.EditMode;
if(sysPara->para.EditMode==TXTFILE){
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit);
ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption);
ontextEdittextChanged(); //显示大小
int coldot = (int)ui->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)));
}
}
else if(sysPara->para.EditMode==PICFILE){
emit openCurrFile(sysPara->para.lastOpenedFileName);
}
else if(sysPara->para.EditMode==SCENE){
//qDebug()<<"SCENE";
//emit openCurrFile(sysPara->para.lastOpenedFileName);
ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer);
ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption);
}
}
void MainWindow::on_pushButtonReduceTextDisplay_pressed()
{
ui->widgetPrintTextDisplay->reduceDisplay();
}
void MainWindow::on_pushButtonEnlargeTextDisplay_pressed()
{
ui->widgetPrintTextDisplay->enlargeDisplay();
//update();
}
/*
* value以100ms为单位
* */
void MainWindow::onReclainTankPositionChanged(int value){
static bool init = false;
static int totalCharNum = 0;
if(!init){
int w = ui->labelReclaimStatus->geometry().width() - 1; //预留几个像素
QFontMetrics fontMetrics = QApplication::fontMetrics();
w -= fontMetrics.width(QString(" |>|"));
int t = fontMetrics.width(QChar('-'));
if(fontMetrics.width(QChar('-')) != fontMetrics.width(QChar(' '))){
LogInfo::setRunStatusText(tr("警告:‘-’和空格的宽度不一样")); //可能有的字体两者宽度不同
}
totalCharNum = t?w/t:w; //t永远都不应该为零,保险起见
init = true;
}
if(sysPara){
int reclaimTime = sysPara->para.reclaimTankTime?sysPara->para.reclaimTankTime:15;
int charNum = value*totalCharNum/(reclaimTime*10);
charNum = (charNum > totalCharNum)?totalCharNum:charNum;
QString str = " |";
for(int i = 0; i <= totalCharNum; i++){ //多加”>|“
if(i < charNum)
str.append(QChar('-'));
else if(i == charNum)
str.append(QChar('>'));
else
str.append(QChar(' '));
}
str.append(QChar('|'));
ui->labelReclaimStatus->setText(str);
}
}
void MainWindow::setRunStatus(QString str){
// QFont ft;
// ft.setPointSize(16);
// ft.setBold(true);
// ft.setFamily("Microsoft YaHei");
// ui->labelRunStatus->setFont(ft);P>p>
switch(sysPara->devOp->color_flag){
case 1:
ui->labelRunStatus->setStyleSheet("color:yellow");
break;
case 2:
ui->labelRunStatus->setStyleSheet("color:red");
break;
default:
ui->labelRunStatus->setStyleSheet("color:black");
break;
}
ui->labelRunStatus->setText(str);
}
void MainWindow::changeTxtMode(QString str){
if(sysPara){
fileChange=true;
sysPara->status.FileChangeRestCntFlag = true;
emit openFileChange();
unsigned char SpecialVarEnable = 0;
sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1);
}
}
void MainWindow::update_scroll()
{
ui->widgetPrintTextDisplay->scroll_update();
}
void MainWindow::changeEditMode(int editMode)
{
if(sysPara){
//qDebug()<<"changeEditMode"<<sysPara->para.EditMode;
if(sysPara->para.EditMode==PICFILE){
ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay);
ui->stackedWidgetOption->setCurrentWidget(ui->pageOption);
ui->widgetPrintTextDisplay->update();
ui->pushButtonTXTOpen->show();
ui->textEditOption->editMode=sysPara->para.EditMode;
}
else if(sysPara->para.EditMode==TXTFILE)
{
// ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit);
// ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption);
sysPara->para.EditMode=TXTFILE;
ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit);
ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption);
ui->widgetPrintTextDisplay->update();
ui->pushButtonTXTOpen->hide();
ui->textEditOption->editMode=sysPara->para.EditMode;
ui->textEditOption->editItemModeDone();
}
else if(sysPara->para.EditMode==SCENE)
{
//qDebug()<<"CCCCCENE";
sysPara->para.EditMode=SCENE;
ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer);
ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption);
ui->widgetPrintTextDisplay->update();
ui->pushButtonTXTOpen->hide();
ui->textEditOption->editMode=sysPara->para.EditMode;
}
//ontextEdittextChanged(); //显示大小 20140831
if(sysPara->para.EditMode==SCENE)
{
onSwitchTimerShowItem(true);
}
else
{
onSwitchTimerShowItem(false);
}
}
}
TextEditOption* MainWindow::getTexteditOption()
{
return ui->textEditOption;
}
void MainWindow::SetEditMode(int mode)
{
ui->textEditOption->editMode = sysPara->para.EditMode;
// if(sysPara->para.EditMode==SCENE)
// {
// timerShowItem->start(10);
// }
}
void MainWindow::setRunStatus(QPixmap pixMap){
ui->labelRunStatus->setPixmap(pixMap);
}
void MainWindow::SetMainTabEdit(int n){
}
void MainWindow::testPrint(){
//on_pushButtonStartPrint_pressed();
}
void MainWindow::onEditBarCode(){
#ifdef _2DCODE_
if(sysPara) {
dlgqrcode->move( 0,10);
barcode->setWindowTitle(tr("条形码信息编辑"));
//qDebug()<<"bcOption->height"<<sysPara->para.bcOption.height;
barcode->SetOption((bcOption_t*)&sysPara->para.bcOption);
barcode->show();
//barcode->GetOption((bcOption_t*)&sysPara->para.bcOption);
}
#endif
}
void MainWindow::onBarCodeClose(){
#ifdef _2DCODE_
barcode->GetOption((bcOption_t*)&sysPara->para.bcOption);
// unsigned char *dat = sysPara->status.printDat;
unsigned char *dat;
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
if(MaxCol4000){
dat =sysPara->status.printDat_Normal;
}else{
dat =sysPara->status.printDat;
}
if(barcode->flagCount)
{
barcode->getDat(dat,0);
barcode->flagCount=0;
ui->widgetPrintTextDisplay->update();
}
if(barcode->flagInsert )
{
barcode->flagInsert=0;
if(sysPara->para.EditMode==PICFILE)
{
}
else
{
//ui->textEditOption->InsertBarCodeToEdit(barcode->pictureName,barcode->imgBar.width(),barcode->imgBar.height());
QString html = "<img src='" + barcode->pictureName + "'/>";
QTextCharFormat fmt = ui->textEditOption->textEdit->currentCharFormat ();
ui->textEditOption->textEdit->insertHtml (html);
ui->textEditOption->textEdit->mergeCurrentCharFormat(fmt);
ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit);
ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption);
}
}
sysPara->saveParaToFile();
#endif
}
void MainWindow::onEditQRCode(){
#ifdef _2DCODE_
if(sysPara) {
dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption);
dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10);
dlgqrcode->setWindowTitle(tr("二维码信息编辑"));
dlgqrcode->setCntCheckBoxHide(1);
dlgqrcode->show();
}
#endif
}
void MainWindow::onInitQRCode(){
#ifdef _2DCODE_
if(sysPara) {
dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption);
dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10);
dlgqrcode->setWindowTitle(tr("二维码信息编辑"));
//dlgqrcode->show();
}
#endif
}
void MainWindow::onQRCodeClose(){
#ifdef _2DCODE_
dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption);
if(dlgqrcode->flagInsert ) {
//dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption);
dlgqrcode->flagInsert=0;
if(sysPara->para.EditMode==PICFILE){
}
else {
// qDebug()<<"flagInsert2"<<dlgqrcode->flagInsert<<dlgqrcode->bcWidth<<dlgqrcode->bcHeight;
ui->textEditOption->InsertBarCodeToEdit(dlgqrcode->pictureName,dlgqrcode->bcWidth,dlgqrcode->bcHeight);
ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit);
ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption);
}
}
if( sysPara->para.qrOption.barCodeFlag != dlgqrcode->barCodeFlag)
{
sysPara->para.qrOption.barCodeFlag = dlgqrcode->barCodeFlag;
ui->textEditOption->textEdit->setHtml(QApplication::translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt;\"><br /></p></body></html>", 0, QApplication::UnicodeUTF8));
}
sysPara->saveParaToFile();
#endif
}
void MainWindow::onGenerateQRCode(QString strData)
{
dlgqrcode->extSetText(strData);
dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption);
}
void MainWindow::onShowAndHideItem()
{
/////////特殊条件
//while(1)
{
static bool startFlag= false, lastStarFlag = false;
QList<QGraphicsItem *> items = pPicScene->items();
foreach (QGraphicsItem *item, items)
{
PicTextItem *picText = qgraphicsitem_cast<PicTextItem*>(item);
if(picText->SpecialConditions)
{
//setRunStatus(tr("六个内容(%1,%2)").arg(picText->CatchCnt1CurrValue).arg(QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt()));
if(picText->CatchCnt1StartValue <= QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() &&
QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() <= picText->CatchCnt1CurrValue)
{
picText->show();
startFlag = true;
}
else
{
picText->hide();
startFlag = false;
}
if(startFlag != lastStarFlag)
{
lastStarFlag = startFlag;
//on_pushButtonStartPrint_pressed();
if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE)
PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模
else if(sysPara->para.EditMode == SCENE)
onPreviewScene();
// unsigned char blankDat[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM];
// memset(blankDat,0,sizeof(blankDat));
// sysPara->devOp->fpgaWr(0,blankDat,sizeof(blankDat));//...所加的空白偏移地址
// sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat,sizeof(sysPara->status.printDat)-sizeof(blankDat));
}
}
}
//QApplication::processEvents();
}
//////////////
}
void MainWindow::onSwitchTimerShowItem(bool flag)
{
if(flag)
{
// timerShowItem->start(10);
}
else
{
timerShowItem->stop();
unsigned char SpecialVarEnable = 0;
sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1);
}
}
void MainWindow::JSON_UpdateDATA(){
QLabel *labelFontSize = ui->textEditOption->getLabelFontSize();
bool ok;
int font_size = labelFontSize->text().toInt(&ok,10);
QString font_family = Public::getFontFamily(font_size);
static int save_uniCode = 33; //数据码固定33位
ui->textEditOption->textEdit->clear();
QString strContentPrint(sysPara->Get_JSON_DATA.PrintingContent);
strContentPrint.replace(' ',"&nbsp;");
QString strContent = sysPara->Get_JSON_DATA.QRCodeContent;
int left_int = strContent.indexOf("https://dwz.cn/");
if(left_int == 0)
{
strContent = strContent.mid(8, strContent.size());
strContent = "www." + strContent;
}
if(sysPara->para.isRemoveCode)
{
QSize size(2,5);
QImage image(size,QImage::Format_ARGB32);
image.fill(0x00ffffff);//填充白色
//image.fill(0x00f0f000);//填充白色
// QPainter painter(&image);
// //image.save("./printImage.jpg");
// ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/
image.save("/home/plg/doc/modbusQR.bmp");
}
else
{
if(dlgqrcode->barCodeFlag == 1)
{
barcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str()));
barcode->GetOption((bcOption_t*)&sysPara->para.bcOption);
}
else
{
dlgqrcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str()), true);
dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption);
}
}
QString save_text = ui->textEditOption->textEdit->toHtml();
if(save_text.contains("<img src=\"/home/plg/doc/modbusQR.bmp\" />", Qt::CaseSensitive)){
int left_int = save_text.indexOf("<img src=\"/home/plg/doc/modbusQR.bmp\" />");
QString str_html = save_text.left(left_int); //get the QRcode pic left html
QString right_str_html = save_text.mid(left_int, save_text.size());
// qDebug()<<"right_str_html="<<right_str_html;
//插入打印内容
#if 0
left_int = str_html.lastIndexOf("<span style=\" font-family:");
str_html = str_html.left(left_int);
str_html += QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\">").arg(font_family).arg(font_size)
.arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400);
//str_html += QString::fromUtf8(sysPara->Get_JSON_DATA.PrintingContent);
str_html += strContentPrint.toUtf8();
str_html += "</span>";
#endif
if(!sysPara->para.isRemoveDigitCode)
{
str_html += "<img src=\"/home/plg/doc/modbusQR.bmp\" />";
// qDebug()<<"str_html="<<str_html;
/*
*example"
<span style=" font-family:'wenquanyi'; font-size:12pt;">
201289985295612398451182413082479asd</span>
<span style=" font-family:'wenquanyi'; font-size:12pt;">
asdasdasdasd</span></p></td></tr></table></body></html>
*/
left_int = right_str_html.indexOf(";\">") + 1;
int index_size = QString(";\">").size();
QString right_html = right_str_html.mid(left_int+index_size+save_uniCode, right_str_html.size());
save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size();
// qDebug()<<"right_html="<<right_html;
QString txt_fomart = QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\">&nbsp;").arg(font_family)
.arg(font_size).arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400);
txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode);
if(!right_html.startsWith("<")){ //situation: "$ProductUniqueCodexxxx</span>"
QString crash_word = right_html.left(right_html.indexOf("<"));
txt_fomart += crash_word;
// qDebug()<<"crash_word="<<crash_word;
}
txt_fomart += "</span>";
str_html += txt_fomart;
left_int = right_html.indexOf("</span>");
index_size = QString("</span>").size();
QString final_str = right_html.mid(left_int +index_size, right_html.size());
str_html += final_str;
}
else
{
str_html += right_str_html;
}
// QMessageBox::StandardButton ret;
// ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel);
// if (ret == QMessageBox::Ok)
{
ui->textEditOption->textEdit->setHtml(str_html);
ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine);
}
}
else{
QString txt_fomart = "";
#if 1
txt_fomart += QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\">").arg(font_family).arg(font_size)
.arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400);
txt_fomart += strContentPrint.toUtf8();
txt_fomart += "</span>";
#endif
//ui->textEditOption->textEdit->insertHtml(txt_fomart);
//ui->textEditOption->modbus_insert_pic("/home/plg/doc/modbusQR.bmp");
//QString html = "<img src='" + filePath + "'/>";
txt_fomart += "<img src=\"/home/plg/doc/modbusQR.bmp\" />";
txt_fomart += QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\">&nbsp;</span>").arg(font_family).arg(font_size);
if(!sysPara->para.isRemoveDigitCode)
{
txt_fomart += QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\">&nbsp;").arg(font_family).arg(font_size)
.arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400);
txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode);
save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size();
txt_fomart += "&nbsp;&nbsp;&nbsp;</span>";
}
else
{
txt_fomart += QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\">&nbsp;</span>").arg(font_family).arg(font_size);
}
// QMessageBox::StandardButton ret;
// ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel);
// if (ret == QMessageBox::Ok)
{
ui->textEditOption->textEdit->insertHtml(txt_fomart);
}
// QString refresh_text = ui->textEditOption->textEdit->toHtml();
// ui->textEditOption->textEdit->setHtml(refresh_text);
// ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine);
}
if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE)
PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模
else if(sysPara->para.EditMode == SCENE)
onPreviewScene();
//on_pushButtonStartPrint_pressed();
ui->label_24->setFocus(); //prevent keyboard pop up
}
QStringList stringListRecive;
// mdOpenFile(QString("/home/plg/doc/%1").arg(fileName));
void MainWindow::modbusUpdateQRCode(){
// QString temp = QString();
sysPara->modbusStatus.printFinishFlag = 0;//置打印标志
sysPara->status.printDoneFlag = false;
static QString lastReceiveContent = "";
char temp[120] = {0};
int i,j = 0;
for(i=0; i<110; i+=2)
{
//if(sysPara->modbusParas.QRcode_buf[i] == 0) break;
temp[j] = sysPara->modbusParas.QRcode_buf[i];
j++;
}
if(strlen(&temp[1]) == 0)
{
LogInfo::setRunStatusText(tr("获取DM码内容为空!"));
return;
}
if(sysPara->para.EditMode == TXTFILE)
{
QString receiveContent = QString::fromUtf8(&temp[1]);
dlgqrcode->extSetText(receiveContent);
LogInfo::setRunStatusText(tr("获取DM码内容:"));
LogInfo::setRunStatusText(receiveContent);
// dlgqrcode->extSetText("asbasb");
dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption);
// ui->textEditOption->modbus_insert_pic("/home/plg/doc/QR_aa.bmp");
ui->textEditOption->textEdit->clear();//插入之前先清空
//ui->textEditOption->modbus_insert_pic("/home/plg/doc/modbusQR.bmp");
QString html = "<img src=\"/home/plg/doc/modbusQR.bmp\" />";
ui->textEditOption->textEdit->setHtml(html);
ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine);
//sysPara->modbusStatus.printFinishFlag = 0;//置打印标志
if(receiveContent == lastReceiveContent)
{
LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同"));
//sysPara->modbusStatus.printFinishFlag = 1;//置打印标志
MySleep(200);
sysPara->status.printDoneFlag = true;
return;
}
lastReceiveContent = receiveContent;
sysPara->status.oneCodePrintOnce = true;
on_pushButtonStartPrint_pressed();//开始打印
}
else if(sysPara->para.EditMode == SCENE)
{
QString receiveContent = QString::fromUtf8(&temp[1]);
LogInfo::setRunStatusText(tr("获取DM码内容:"));
LogInfo::setRunStatusText(receiveContent);
if(receiveContent == lastReceiveContent)
{
LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同"));
//sysPara->modbusStatus.printFinishFlag = 1;//置打印标志
MySleep(200);
sysPara->status.printDoneFlag = true;
return;
}
lastReceiveContent = receiveContent;
stringListRecive = receiveContent.split(";");
QString lastopenedFileName = sysPara->para.lastOpenedFileName;
lastopenedFileName = QFileInfo(lastopenedFileName).baseName();
//LogInfo::setRunStatusText(tr("@文件名:"));
//LogInfo::setRunStatusText(lastopenedFileName);
int left_int = lastopenedFileName.indexOf('@');
if(left_int == 0)
{
//LogInfo::setRunStatusText(tr("文件名:1"));
sysPara->status.forTemplateUse = true;
emit scenefileOpen(sysPara->para.lastOpenedFileName,false);//sceneeditoption 接收这个信号然后打开文件
//emit fileNameChanged(QFileInfo(filePath).fileName());
sysPara->status.forTemplateUse = false;
sysPara->status.oneCodePrintOnce = true;
on_pushButtonStartPrint_pressed();//开始打印
}
}
}
void MainWindow::onUpdateDispQRCode(int type){
#ifdef _2DCODE_
int varNum;
qDebug()<<"onUpdateDispQRCode";
//QRcode string test
// static int cc = 0;
for(varNum=0;varNum<sysPara->status.QRvariNum;varNum++){
if(sysPara->print.QRvars[varNum].type<2)
{
sysPara->print.QRvars[varNum].Counter = sysPara->para.qrOption.counter;
sysPara->print.QRvars[varNum].cntNum = sysPara->para.qrOption.cntNum;
//QRcode string test
// qDebug()<<"QRcode string test";
// ++cc;
// QString text = "12345679801234567980123456798012345679801234567980";
// text+=QString::number(cc%100);
// dlgqrcode->extSetText(text);
// dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption);
dlgqrcode->TextToQRImg((qrOption_t *)&sysPara->para.qrOption); //
dlgqrcode->getDat(sysPara,varNum);
}else if(sysPara->print.QRvars[varNum].type==2)
{
QString txt,txt2,txt3,txt4,txtVar1,txtVar2;
//char fmt[]="%08d%04d";
txt2=sysPara->para.bcOption.TxtModule;
txt3=sysPara->para.bcOption.TxtLine;
txt4=sysPara->para.bcOption.TxtLine1;
sysPara->para.bcOption.var1Type =1;
sysPara->para.bcOption.var2Type =2;
txtVar1=barcode->getVarTxt(sysPara->para.bcOption.var1En,sysPara->para.bcOption.var1Type);
txtVar2=barcode->getVarTxt(sysPara->para.bcOption.var2En,sysPara->para.bcOption.var2Type);
//txt.sprintf(fmt,sysPara->status.calandar_and_dat.cnt1CurrValue,sysPara->status.calandar_and_dat.cnt2CurrValue);
txt = txt2.trimmed()+txtVar1+txt3.trimmed()+txtVar2+txt4.trimmed();
barcode->TextToBCImg((bcOption_t *)&sysPara->para.bcOption,txt); //
barcode->getDat2(sysPara,varNum);
//qDebug()<<"update BAR"<<sysPara->status.calandar_and_dat.cnt1CurrValue<<sysPara->status.calandar_and_dat.cnt2CurrValue;
//qDebug()<<txt;
}
sysPara->print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height;
if(sysPara->status.currPrintCol < (sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)) {
sysPara->status.currPrintCol = sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width;
}
if (sysPara->status.currPrintRow<sysPara->print.QRvars[varNum].endRowPos) {
sysPara->status.currPrintRow = sysPara->print.QRvars[varNum].endRowPos;
}
//sysPara->status.currPrintCol = (sysPara->status.currPrintCol<sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)?
// sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width:sysPara->status.currPrintCol;
//sysPara->status.currPrintRow = (sysPara->status.currPrintRow<sysPara->print.QRvars[varNum].endRowPos)?sysPara->print.QRvars[varNum].endRowPos:sysPara->status.currPrintRow;
// qDebug()<<"onUpdate:"<< sysPara->print.QRvars[varNum].startColPos
// <<sysPara->print.QRvars[varNum].endRowPos <<sysPara->print.QRvars[varNum].width
// <<sysPara->print.QRvars[varNum].height <<sysPara->print.QRvars[varNum].type;
}
if(type)
{
sysPara->para.qrOption.DisplayUpdate=1;
// ui->widgetPrintTextDisplay->updateSysStatusToUI();
if(sysPara->status.addSpace)
ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow);
else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow);
ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay);
ui->stackedWidgetOption->setCurrentWidget(ui->pageOption);
ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow ).arg(sysPara->status.currPrintCol));
ui->widgetPrintTextDisplay->update();
//qDebug()<<"update BAR ??";
}
#endif
}
int MainWindow::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 = ui->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)
{ //currDate
//qDebug()<<"CurDateVar:"<<type<<rx.cap(1)<<rx.cap(2).contains("875")<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
#if 0
qDebug()<<"CurDateVar:"<<type<<rx.cap(1)<<rx.cap(2).contains("875")<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
EXPIRYVAR_t *currDate ;
int searchIndex = 2;
if (sysPara->print.CurDateVar[0].type == 0) {
qDebug()<<"1st CurDateVar:";
currDate = &sysPara->print.CurDateVar[0];
searchIndex = 2;
}
else {
qDebug()<<"2nd CurDateVar:";
currDate = &sysPara->print.CurDateVar[1];
searchIndex = 3;
}
currDate->type = type;
currDate->width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ;
currDate->height = rx.cap(4).toInt(&ok);
currDate->startRowPos = currDate->endRowPos-currDate->height;
if(rx.cap(2).contains("875")) {
//qDebug()<<"bold";
currDate->bold = 1;
}
else {
//qDebug()<<"normal";
currDate->bold = 0;
}
#else
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;
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;
}
#endif
//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 MainWindow::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;
qDebug()<<"Mode==2";
if(sysPara->status.CurrDateVariNum == 0) {
return;
}
#if 1
// EXPIRYVAR_t *currDateVar;
// for (int i = 0; i <2; ++i) {
// if (sysPara->print.CurDateVar[i].type) {
// currDateVar = &sysPara->print.CurDateVar[i];
// currDateVar->year = curDate.year();
// currDateVar->month = curDate.month();
// currDateVar->day = curDate.day();
// }
// }
#else
sysPara->print.CurDateVar.year = curDate.year();
sysPara->print.CurDateVar.month = curDate.month();
sysPara->print.CurDateVar.day = curDate.day();
#endif
}
else if(Mode==3)
{
p_var = &sysPara->print.ClassVari;
qDebug()<<"Mode==3";
if(sysPara->status.classVariNum == 0) {
return;
}
#if 1
// EXPIRYVAR_t *currDateVar;
// for (int i = 0; i <2; ++i) {
// if (sysPara->print.CurDateVar[i].type) {
// currDateVar = &sysPara->print.CurDateVar[i];
// currDateVar->year = curDate.year();
// currDateVar->month = curDate.month();
// currDateVar->day = curDate.day();
// }
// }
#else
sysPara->print.CurDateVar.year = curDate.year();
sysPara->print.CurDateVar.month = curDate.month();
sysPara->print.CurDateVar.day = curDate.day();
#endif
}
else return;
//qDebug()<<"sysPara->status.ExpiryVarNum:"<<sysPara->status.ExpiryVarNum;
//if(sysPara->status.ExpiryVarNum)
{
textEdit.clear();
height = p_var->height;
width = p_var->width;
//qDebug()<<"height"<<height;
//qDebug()<<"width"<<width;
QString str;
// switch(sysPara->para.ExpirySplitMode)
// {
// case 0: str.sprintf("%04d-%02d-%02d",curDate.year(),curDate.month(),curDate.day());break;
// case 1: str.sprintf("%04d/%02d/%02d",curDate.year(),curDate.month(),curDate.day());break;
// case 2: str.sprintf("%04d%02d%02d",curDate.year(),curDate.month(),curDate.day());break;
// case 3: str.sprintf("%04d年%02d月%02d日",curDate.year(),curDate.month(),curDate.day());break;
// default:str.sprintf("%04d-%02d-%02d",curDate.year(),curDate.month(),curDate.day());break;
// }
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");
//dateFormat.insert(10,"x");
/*****轮班变量功能 start******/
/*00:00-08:00
08:00-16:00
16:00-00:00
*/
QTime current_time =QTime::currentTime();
int hour = current_time.hour();
//qDebug()<<"current_hour="<<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******/
//qDebug()<<"splitMode:"<<p_var->splitMode;
//qDebug()<<"update DateTime:"<<DateTime;
int DPI = textEdit.logicalDpiX();
DPI = DPI?DPI:1; //Pixel = DPI * Point / 72
//height = Public::derivePixelSizeFromHeight(p_var->height);
//qDebug()<<"height"<<height;
//qDebug()<<"textEdit.logicalDpiX()"<<DPI;
//qDebug()<<"p_var->bold:"<<p_var->bold;
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-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(400)
.arg(DateTime)
// .arg("x")
); //600表示加粗,400表示普通
}
//qDebug()<<textEdit.toHtml();
QFont font = textEdit.font();
//int pixelSize = Public::derivePixelSizeFromHeight(height);
//font.setWeight(p_var->bold?QFont::Bold:QFont::Normal);
//QFontMetrics fontMetrics(font);
//int charWidth = (fontMetrics.width("0123456789"))/10 ;
//p_var->letterSpace = p_var->width/10/(sysPara->status.addSpace?2:1) - charWidth;
//font.setLetterSpacing(QFont::AbsoluteSpacing,p_var->letterSpace);
font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace );
textEdit.setFont(font);
//textEdit.document()->setDocumentMargin(0);
//qDebug()<<textEdit.document()<<str;
//qDebug() << "height:" << height << "fontFamily:" << Public::getFontFamily(height)<<sysPara->para.ExpirySplitMode;
int imgHeight = height + 12;
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
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();
//qDebug()<<"/Expiry.bmp";
image.save("./Expiry.bmp");
#ifdef DEBUG4
image.save("./Expiry.bmp");
#endif
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)
{
//qDebug()<<"lastValidRow"<<lastValidRow;
break;
}
}
//qDebug()<<"sysPara->status.ExpiryVarNum:"<<sysPara->status.ExpiryVarNum;
//qDebug()<<"GetData row:"<<p_var->endRowPos<<" start:"<< p_var->startRowPos;
//qDebug()<<"GetData col:"<<p_var->startColPos<<" start:"<< p_var->width;
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; //纠正
//firstValidRow = 0;
//int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0);
//unsigned char *dat = (unsigned char *)calloc(width,rowByteNum);
#ifdef DEBUG4
QString s2;
s2.sprintf ("firstValidRow:%d,lastValidRow:%d,rowByteNum:%d,width:%d ,rowDiff:%d\n\r",firstValidRow,lastValidRow,rowByteNum,width,rowDiff) ;
qDebug()<<s2;
str="";s2="";
#endif
str="";//s2="";
int wStart=p_var->startColPos;
int hStart= p_var->startRowPos;
//int i = 0 ;
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);
//int currRow = k - firstValidRowDiff;
if(((rgb >> 24)&0xff) > 0x80)
{
c |= (1 << (hStart%8));
//dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8));
//str+="#";
}
else
{
//str+="-";
c &= ~(1 << (hStart%8));
}
if(hStart%8==7) {
dat[(wStart)*5+(hStart)/8]=c;
c=dat[(wStart)*5+(hStart+1)/8];
}
hStart++;
}
//str+="\n";
dat[(wStart)*5+(hStart)/8]=c;
wStart++;
//if(sysPara->status.addSpace ) wStart++; //&& sysPara->print.QRvars[varNum].type==0
}
//qDebug()<<str;
}
//qDebug()<<"expiry end";
}
int MainWindow::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;
//qDebug()<<"type:"<<varNum<<sysPara->print.QRvars[varNum].type<<sysPara->status.QRvariNum
// <<sysPara->print.QRvars[varNum].startColPos<<sysPara->print.QRvars[varNum].startRowPos<<sysPara->print.QRvars[varNum].endRowPos
// <<sysPara->print.QRvars[varNum].width<<sysPara->print.QRvars[varNum].height
// <<rx.cap(1)<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
//type: 0 1 1 0 0 21 25 21 "10" "QRV21" "25" "21"
//type: 0 2 1 0 0 12 325 12 "11" "BARV12" "325" "12"
varNum++;
//break;
}
}
}
}
}
return varNum;
}
PicScene* MainWindow::getPicScene()
{
return pPicScene;
}
void MainWindow::on_pushButtonCleanUP_pressed(){
emit InkjetCleanUP();
}
void MainWindow::ShowWarnningText1(QString strTitle,QString strWarring){
dlgMyWarring.SetTitleText(strTitle);
dlgMyWarring.SetWarringText(strWarring);
dlgMyWarring.show();
dlgMyWarringShowDlyCnt =20;
}
void MainWindow::onStatusHighVoltageFault(){
#ifdef X86TEST
#else
if(!(sysPara->status.statWarn & WARN_STATUS_POWER_MON)) return;
#endif
strTitle = tr("高压故障,暂停打印.");
strWarring = tr("高压故障:两高压偏转板间的电压检测异常");strWarring.append("\r\n");
strWarring.append(tr("1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座;"));strWarring.append("\r\n");
strWarring.append( tr("2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n");
//strWarring.append( tr("字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n");
strWarring.append( tr("3.高压线路漏电,请更换高压线路;"));strWarring.append("\r\n");
strWarring.append( tr("4.高压底座漏电,请更换高压底座。"));strWarring.append("\r\n");
emit ShowWarnningText(strTitle,strWarring);
}
void MainWindow::onStatusInkLeak(){
#ifdef X86TEST
#else
if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)) return;
#endif
strTitle = tr("墨水缸满报警");
strWarring = tr("墨水过多:墨水溢出");strWarring.append("\r\n");
strWarring.append(tr("1. 请停止添加墨水;"));strWarring.append("\r\n");
strWarring.append(tr("2. 请排出多余墨水。"));strWarring.append("\r\n");
emit ShowWarnningText(strTitle,strWarring);
}
void MainWindow::onStatusInkSwint(){
if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)) return;
}
void MainWindow::onStatusInkWaterLevel(){
#ifdef X86TEST
#else
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) return;
#endif
strTitle = tr("墨水液位报警");
strWarring = tr("墨水液位:墨水即将耗尽");strWarring.append("\r\n");
strWarring.append(tr("1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。"));strWarring.append("\r\n");
emit ShowWarnningText(strTitle,strWarring);
}
void MainWindow::onStatusRecycleWarn(){
#ifdef X86TEST
#else
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)) return;
#endif
strTitle = tr("回收故障,关闭回收槽,关墨线");
strWarring = tr("回收故障:未检测到有墨水回收");strWarring.append("\r\n");
strWarring.append( tr("1. 墨水未射入回收管,请修正墨线方向;"));strWarring.append("\r\n");
strWarring.append( tr("2. 墨水粘度太低,请更换新墨水;"));strWarring.append("\r\n");
strWarring.append( tr("3. 回收管堵塞,请清通或者更换回收管;"));strWarring.append("\r\n");
strWarring.append(tr("4. 回收泵故障,请清洗或者更换回收泵;"));strWarring.append("\r\n");
strWarring.append( tr("5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n");
//strWarring.append( tr(" 退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n");
emit ShowWarnningText(strTitle,strWarring);
}
void MainWindow::onStatusSolvLevelWarn(){
#ifdef X86TEST
#else
if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) return;
#endif
strTitle = tr("溶剂液位报警");
strWarring = tr("溶剂液位:溶剂即将耗尽");strWarring.append("\r\n");
strWarring .append(tr("1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。"));strWarring.append("\r\n");
emit ShowWarnningText(strTitle,strWarring);
}
void MainWindow::onStatusViscosityWarn(){
#ifdef X86TEST
#else
if(sysPara->status.viscosityFault==1)
#endif
{
strTitle = tr("粘度故障报警");
strWarring = tr("粘度故障:墨水粘度无法自动调整");strWarring.append("\r\n");
strWarring.append( tr("1. 混合阀失灵,请冲洗或者更换混合阀;"));strWarring.append("\r\n");
strWarring.append( tr("2. 墨水罐内的墨水异常,请更换新墨水;"));strWarring.append("\r\n");
emit ShowWarnningText(strTitle,strWarring);
#ifdef X86TEST
#else
}
else if(sysPara->status.viscosityFault==2)
{
#endif
strTitle = tr("粘度故障报警");
strWarring= tr("粘度计异常:");strWarring.append("\r\n");
strWarring.append(tr("1. 泵前过滤网堵塞,请更换泵前滤网;"));strWarring.append("\r\n");
strWarring.append( tr("2. 粘度泵异常,请清洗或更换粘度泵;"));strWarring.append("\r\n");
strWarring.append(tr("3. 粘度传感器异常,请检查传感器线路或者更换传感器."));strWarring.append("\r\n");
emit ShowWarnningText(strTitle,strWarring);
}
}
void MainWindow::onStatusChargefault(){
#ifdef X86TEST
#else
if(sysPara->status.lastPhaseFault)
#endif
{
strTitle = tr("相位故障报警");
strWarring = tr("相位故障:相位信号检测异常");strWarring.append("\r\n");
strWarring.append(tr("1. 墨水分裂不正常,请调整墨水分裂;"));strWarring.append("\r\n");
strWarring.append(tr("2. 充电槽或者相检头脏污,请清洗充电槽和相检头;"));strWarring.append("\r\n");
strWarring.append(tr("3. 放大板功能性异常,请更换放大板;"));strWarring.append("\r\n");
strWarring.append( tr("4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离;"));strWarring.append("\r\n");
strWarring.append( tr("5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰;"));strWarring.append("\r\n");
strWarring.append( tr("6. 墨水质量异常,请更换新墨水。"));strWarring.append("\r\n");
emit ShowWarnningText(strTitle,strWarring);
}
}
void MainWindow::OnFinished(int event){
//msgtest->setText("孔一:60分钟灌浆结束条件!请点击\"结束\"按钮!");
//msgtest->show();
msgtest->hide();
}
void MainWindow::onPreviewScene()
{
#if 1
pPicScene->clearSelection();
QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height());
QImage image(size,QImage::Format_ARGB32);
image.fill(0x00ffffff);//填充白色
//image.save("./printScene.jpg");//图片
QPainter painter(&image);
pPicScene->render(&painter,QRectF(),pPicScene->itemsBoundingRect());
//qDebug()<<"scene rect:"<<pPicScene->itemsBoundingRect();
//image.save("./printSceneDone.jpg");//图片
#endif
int coldot=0;
if(sysPara){
bool MaxCol4000;
if(!sysPara->status.flagOfNo67FPGA && sysPara->status.FPGAVersionType == 0 && sysPara->status.FPGAChipType != 1)
MaxCol4000 = false;
else
MaxCol4000 = true;
previewFlag=1;
sysPara->status.currPrintRow = 0;
sysPara->status.variNum = 0;
sysPara->status.QRvariNum = 0;
// unsigned char *dat = sysPara->status.printDat;
// memset(dat,0,sizeof(sysPara->status.printDat));
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)ui->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;
#ifdef SPACEFLAG
sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace
#else
sysPara->status.currPrintCol = coldot;
#endif
#ifdef VARCOLOR
#else
#if 0
QImage image(size,QImage::Format_ARGB32);
image.fill(0x00ffffff);//填充白色
//image.fill(0x00f0f000);//填充白色
QPainter painter(&image);
image.save("./printImage.jpg");
ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/
#else
//QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height());
QImage image(size,QImage::Format_ARGB32);
image.fill(0x00ffffff);//填充白色
//image.save("./printScene.jpg");//图片
QPainter painter(&image);
QRectF validRectF(pPicScene->itemsBoundingRect().x(),pPicScene->itemsBoundingRect().y(),coldot,maxPicHeight);
pPicScene->render(&painter,QRectF(),validRectF);
//qDebug()<<"items bound:"<<pPicScene->itemsBoundingRect();
#endif
#ifndef DEBUG1
//image.save("/opt/printImage.jpg");
#endif
//image.save("./printImageScene.bmp");//图片
//image.save("./printImagenn.jpg");//图片
//ui->widgetPrintTextDisplay
// int firstRow = maxPicHeight;
int firstRow = 0;
/*--------------------------------------------------------------------------*/
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;
}
#if 1
qDebug()<<"firstRow"<<firstRow<<maxPicHeight;
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 & 0xffffff) == 0xff0000) {j=40; break;}
#ifdef MMVAR
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 & 0xffffff) == 0xff0000){ //处理变量
int leftPointValue = (i > 0)?(dat[MAX_PRINT_ROW_BYTE_NUM*(i - 1) + j/8] & (1 << (j%8))):0;
int downPointValue = (j < (lastRow - firstRow - 1))?(image.pixel(i,j + firstRow + 1) != 0x00ffffff):0;
if(!leftPointValue && !downPointValue){ //找左下脚的位置
if(sysPara->status.variNum < MAX_VARI_NUM){
sysPara->status.vars[sysPara->status.variNum].startColPos = i;
sysPara->status.vars[sysPara->status.variNum].endRowPos = j;
sysPara->status.variNum ++;TempVarNum++;
}
else TempVarNum++;
}
dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
}
#endif
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 & 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)
{
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 ){
#ifdef SPACEFLAG
dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点
#else
dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
#endif
// if(j > sysPara->status.currPrintRow)
// sysPara->status.currPrintRow = j;
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>MAX_VARI_NUM){
setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!"));
strTitle= tr("变量数大于8个,某些变量将不起作用!!!");
strTitle.append("\r\n");
strTitle.append(tr("请减少信息中的变量(或计数器)数量."));
QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok);
}
#endif
//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 1
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);
//qDebug()<<"item position: "<< picText->pos();
//qDebug()<<"item bound: "<< picText->boundingRect();
//int varNum = 0;
bool ok;
int textvariNum=0;
int textColdot=0;
//textColdot = (int)picText->document()->size().width();
textColdot = picText->boundingRect().width();
//qDebug()<<"textColdot:"<<textColdot;
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;
//int maxTextHeight = picText->document()->size().height();
if(maxTextHeight > MAX_PRINT_ROW_NUM + 12)
{
//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();
//qDebug()<<"textItemPosX:"<<textItemPosX;
//qDebug()<<"textItemPosY:"<<textItemPosY;
if(picText->SpecialConditions)
{
//SpecialVarPrint specialVarPrint;
sysPara->status.specialVarPrint.SpecialVarEnable = picText->SpecialConditions;
sysPara->status.specialVarPrint.SpecialVarCountStart = picText->CatchCnt1StartValue ;
sysPara->status.specialVarPrint.SpecialVarCountEnd = picText->CatchCnt1CurrValue;
sysPara->status.specialVarPrint.SpecialVarColStart = 3 + picText->pos().x() - pPicScene->itemsBoundingRect().x();
sysPara->status.specialVarPrint.SpecialVarColEnd = 3 + picText->pos().x() - pPicScene->itemsBoundingRect().x()+ picText->boundingRect().width();
sysPara->status.specialVarPrint.SpecialVarRowStart = picText->pos().y() - pPicScene->itemsBoundingRect().y();
sysPara->status.specialVarPrint.SpecialVarRowEnd = picText->pos().y() - pPicScene->itemsBoundingRect().y()+ picText->boundingRect().height();
sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&sysPara->status.specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 2022-8-6
// LogInfo::setRunStatusText(tr("发送特殊变量内容:"));
// LogInfo::setRunStatusText(tr("SpecialVarEnable:%1").arg(QString().sprintf("%02X",sysPara->status.specialVarPrint.SpecialVarEnable)));
// LogInfo::setRunStatusText(tr("SpecialVarCountStart:%1").arg(QString().sprintf("%02X",sysPara->status.specialVarPrint.SpecialVarCountStart)));
// LogInfo::setRunStatusText(tr("SpecialVarCountEnd:%1").arg(QString().sprintf("%02X",sysPara->status.specialVarPrint.SpecialVarCountEnd)));
// LogInfo::setRunStatusText(tr("SpecialVarColStart:%1").arg(QString().sprintf("%02X",sysPara->status.specialVarPrint.SpecialVarColStart)));
// LogInfo::setRunStatusText(tr("SpecialVarColEnd:%1").arg(QString().sprintf("%02X",sysPara->status.specialVarPrint.SpecialVarColEnd)));
// LogInfo::setRunStatusText(tr("SpecialVarRowStart:%1").arg(QString().sprintf("%02X",sysPara->status.specialVarPrint.SpecialVarRowStart)));
// LogInfo::setRunStatusText(tr("SpecialVarRowEnd:%1").arg(QString().sprintf("%02X",sysPara->status.specialVarPrint.SpecialVarRowEnd)));
// int BoundingRectY = pPicScene->itemsBoundingRect().y();
// int BoundingRectX = pPicScene->itemsBoundingRect().x();
// LogInfo::setRunStatusText(tr("itemsBoundingRect().y():%1").arg(QString().sprintf("%02X",BoundingRectY)));
// LogInfo::setRunStatusText(tr("itemsBoundingRect().x():%1").arg(QString().sprintf("%02X",BoundingRectX)));
}
//接下来就是要把打印到数据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
#ifdef MMVAR
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++;
}
}
}
#endif
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); //画黑点
}
}
else
{
#if 0
//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 ){
#ifdef SPACEFLAG
dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点
#else
dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
#endif
}
#endif
}
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 =
//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;
}
}
}
//=========================有效期/生产日期变量 结束==================
}
#endif
//if(sysPara->status.variNum) qDebug()<< sysPara->status.vars[0].startColPos<<sysPara->status.vars[0].endRowPos ;
/*--------------------------------------------------------------------------*/
generateCharRamData();
//qDebug()<<"1"<<sysPara->status.currPrintRow;
/*---------------------------------------------------------------------------*/
//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 == 16) 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;
#endif
}
#ifdef SPACEFLAG
//sysPara->status.currPrintCol
#else
#endif
#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)
ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow);
else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow);
ui->widgetPrintTextDisplay->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));
ui->widgetPrintTextDisplay->update();
//qDebug()<<"3"<<sysPara->status.currPrintRow;
}
previewFlag=0;
}
int MainWindow::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_83K:
// oscfreq = 83000;
// break;
case CRYS_96K:
oscfreq = 96000;
break;
case CRYS_128K:
oscfreq = 128000;
break;
default:
break;
}
stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm;
// stroke = stroke * 0.001; //unit is m
// qDebug()<< "[Info] stroke" << stroke;
// qDebug()<< "[Info] oscfreq" << oscfreq;
// qDebug()<< "[Info] sysPara->status.currPrintRow" << sysPara->status.currPrintRow;
// qDebug()<< "[Info] reducedPixelNumRatio" << sysPara->para.reducedPixelNumRatio;
// if(sysPara->para.currPrintMode == FAST_PRINT && (sysPara->status.currPrintRow < 10) && (sysPara->para.reducedPixelNumRatio == 0) ){
// mm = (float)(stroke * oscfreq /(sysPara->status.currPrintRow +1));
//// qDebug()<< "[Info] FAST_PRINT mm" << mm;
// return mm;
// }else if(sysPara->para.currPrintMode == STANDARD_PRINT){
// valid_array = sysPara->status.currPrintRow * (1- (float)sysPara->para.reducedPixelNumRatio/100);
//// qDebug()<< "[Info] sysPara->para.reducedPixelNumRatio" << sysPara->para.reducedPixelNumRatio;
//// qDebug()<< "[Info] valid_array " << valid_array;
// mm = (float)( (stroke * oscfreq) / (valid_array * 2));
//// qDebug()<< "[Info] STANDARD_PRINT mm" << mm;
// return mm;
// }else
// {
// mm = backup/sysPara->para.synPulseNumPerMm;
//// qDebug()<< "[Info]calculateMaxSpeed OLD COUNT mm" << mm;
// return mm; // 列的最大间距
// }
rongdian = sysPara->status.currPrintRow * (float)sysPara->para.reducedPixelNumRatio/100;
//rongdian = sysPara->status.currPrintRow * 0.3; //冗点30%计算
valid_array = sysPara->status.currPrintRow - rongdian;
// valid_array = sysPara->status.currPrintRow * (1- (float)sysPara->para.reducedPixelNumRatio/100);
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;
}
void MainWindow::Test_Start_Stop()
{
if(test_flag <=0) return;
if(test_flag >= RECICLARNUMBER){
LogInfo::setRunStatusText(tr("回收槽开关检测完成!"));
test_flag = 0;
return;
}
if((test_flag%2) == 1){
if(!open_close){
on_pushButtonReclaimTanOpen_pressed();
open_close = 1;
}
}
else if(test_flag%2 == 0){
if(open_close){
on_pushButtonReclaimTankClose_pressed();
open_close = 0;
}
}
}
void MainWindow::UpdateDateTimeQRCode(QString strContent)
{
if(!printintFlag || !sysPara->para.isCheckInsertTime)
//if(!sysPara->para.isCheckInsertTime)
{
return ;
}
QLabel *labelFontSize = ui->textEditOption->getLabelFontSize();
bool ok;
int font_size = labelFontSize->text().toInt(&ok,10);
QString font_family = Public::getFontFamily(font_size);
if(sysPara->para.EditMode == TXTFILE)
{
QFile file("/home/plg/doc/modbusQR.bmp");
if(file.exists())
{
file.remove();
}
if(dlgqrcode->barCodeFlag == 1)
{
//barcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str()));
barcode->extSetText("");
barcode->GetOption((bcOption_t*)&sysPara->para.bcOption);
}
else
{
QString receiveContent = QString::fromUtf8(strContent.toStdString().c_str());
dlgqrcode->extSetText(receiveContent,sysPara->para.qrOption.type);
// dlgqrcode->extSetText("asbasb");
dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption);
}
QString txt_fomart = "";
txt_fomart = QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\">").arg(font_family).arg(font_size)
.arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400);
txt_fomart += barcode->getLabe_TxtString().toUtf8();
txt_fomart += "&nbsp;</span>";
// ui->textEditOption->modbus_insert_pic("/home/plg/doc/QR_aa.bmp");
//ui->textEditOption->textEdit->clear();//插入之前先清空
//ui->textEditOption->modbus_insert_pic("/home/plg/doc/modbusQR.bmp");
txt_fomart += "<img src=\"/home/plg/doc/modbusQR.bmp\" />";
ui->textEditOption->textEdit->setHtml(txt_fomart);
ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine);
//sysPara->status.oneCodePrintOnce = true;
on_pushButtonStartPrint_pressed();//开始打印
}
}