2025-04-07 09:00:36 +08:00

240 lines
9.3 KiB
C++
Raw 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.

#include "ShowBeginExam.h"
#include "MainWindow.h"
ShowBeginExam::ShowBeginExam(MainWindow* mWindow)
{
m_mWindow = mWindow;
m_replay = mWindow->getReplay();
m_ui = mWindow->getUI();
kit::setStyleComboBox(m_ui->stuBeg, 30, 240);
m_items = {m_ui->item00,m_ui->item01,m_ui->item02,m_ui->item03,m_ui->item04,m_ui->item05,
m_ui->item06,m_ui->item07,m_ui->item08,m_ui->item09,m_ui->item10,m_ui->item11,
m_ui->item12,m_ui->item13,m_ui->item14,m_ui->item15,m_ui->item16,m_ui->item17,
m_ui->item18,m_ui->item19,m_ui->item20,m_ui->item21,m_ui->item22,m_ui->item23};
}
ShowBeginExam::~ShowBeginExam()
{
m_mWindow = nullptr;
m_replay = nullptr;
m_ui = nullptr;
}
void ShowBeginExam::updateBeginExam(const QString& info)
{
const TStuInfo& value = m_replay->replayStuInfo();
ShowExamEvent* examEvent = m_mWindow->getExamEvent();
logdebug("xm=%s, sfzmhm=%s", value.xm.c_str(), value.sfzmhm.c_str());
m_ui->stuBeg->clear();
TASSERT(m_ui->stuBeg->count() == 0, "");
QString ksxm = kit::toString(XParser::toAny(value.ksxm));
QString ykxm = kit::toString(XParser::toAny(value.ykxm));
QString kfxm = kit::toString(XParser::toAny(value.kfxm));
QString sczbkf = kit::toString(XParser::toAny(value.sczbkf));
m_ui->stuBeg->addItem(CL8("考试模式:") + kit::toString(value.exam)+(value.exam == examModeExam ? CL8("(考试)") : CL8("(训练)")));
m_ui->stuBeg->addItem(CL8("考官ID") + value.kgid.c_str());
m_ui->stuBeg->addItem(CL8("考官姓名:") + value.kgxm.c_str());
//m_ui->stuBeg->addItem(CL8("考试模式:") + (value.exam == examModeExam ? CL8("考试") : CL8("训练")));
m_ui->stuBeg->addItem(CL8("是否回放:") + kit::toString(value.replay)+(value.replay == 0 ? CL8("(否)") : CL8("(是)")));
m_ui->stuBeg->addItem(CL8("轨迹文件:") + value.track.c_str());
m_ui->stuBeg->addItem(CL8("合格分数:") + kit::toString(value.passing));
m_ui->stuBeg->addItem(CL8("姓名:") + value.xm.c_str());
m_ui->stuBeg->addItem(CL8("姓别:") + kit::toString(value.sex)+(value.sex == 0 ? CL8("(女)") : CL8("(男)")));
m_ui->stuBeg->addItem(CL8("流水号:") + value.kslsh.c_str() );
m_ui->stuBeg->addItem(CL8("身份证号:") + value.sfzmhm.c_str());
m_ui->stuBeg->addItem(CL8("考试原因:") + value.ksyy.c_str());
m_ui->stuBeg->addItem(CL8("可考次数:") + kit::toString(value.kkcs));
m_ui->stuBeg->addItem(CL8("是否夜考:") + kit::toString(value.sfyk) + (value.sfyk == 0 ? CL8("(否)") : CL8("(是)")));
m_ui->stuBeg->addItem(CL8("夜考可考次数:") + kit::toString(value.ykkkcs));
m_ui->stuBeg->addItem(CL8("考试线路:") + kit::toString(value.wayno));
m_ui->stuBeg->addItem(CL8("操作类型:") + kit::toString(value.czlx));
m_ui->stuBeg->addItem(CL8("考试开始时间:") + Tools::toTimeString(value.kskssj/SECOND).c_str());
m_ui->stuBeg->addItem(CL8("考试项目:") + ksxm, JUDGE_STR(ksxm));
m_ui->stuBeg->addItem(CL8("已考项目:") + ykxm, JUDGE_STR(ykxm));
m_ui->stuBeg->addItem(CL8("断点续考:") + kit::toString(value.ddxk) + (value.ddxk == 0 ? CL8("(否)") : CL8("(是)")));
m_ui->stuBeg->addItem(CL8("断点考试时间:") + Tools::toTimeString(value.ddkssj/SECOND).c_str());
m_ui->stuBeg->addItem(CL8("扣分项目:") + kfxm, JUDGE_STR(kfxm));
m_ui->stuBeg->addItem(CL8("已考里程:") + kit::toString(value.yklc));
m_ui->stuBeg->addItem(CL8("考前绕车一周:") + kit::toString(value.sczb)+(value.sczb == 0 ? CL8("(否)") : CL8("(是)")));
m_ui->stuBeg->addItem(CL8("考前绕车一周扣分:") + sczbkf, sczbkf);
m_ui->stuBeg->addItem(CL8("大车考模拟灯光标志:") + kit::toString(value.dmndg)+(value.dmndg ? CL8("(需要)") : CL8("(不需要)")));
//m_ui->stuBeg->addItem(CL8("上车准备(监管)免考:") + (value. nitem1 ? CL8("免考") : CL8("不免考")));
//m_ui->stuBeg->addItem(CL8("模拟灯光(监管)免考:") + (value. nitem41 ? CL8("免考") : CL8("不免考")));
m_ui->stuBeg->addItem(CL8("满分学习模式标志:") + kit::toString(value.mfxx)+(value.mfxx ? CL8("(是") : CL8("(否)")));
//m_ui->stuBeg->addItem(CL8("满分学习不扣分标志:") + kit::toString(value.mfxxn)+(value.mfxxn ? CL8("(不扣分") : CL8("(扣分)")));
m_ui->stuBeg->addItem(CL8("增驾模式标志:") + kit::toString(value.zeng)+(value.zeng ? CL8("(增驾") : CL8("(非增驾)")));
//ksxm ykxm kfxm
for(int i = 0; i < m_items.size(); i++)
{
m_items[i]->setText("");
}
examEvent->updateCarzt(moveUnknown);
//m_ui->examEventInfo->clear();
m_ui->pe_hint->clear();
setItemProperty(0, Sub2ItemType20Comm);
//ExamItemCodes codes = FactoryExamService->getExamCar()->getExamItemCodes();
//for(size_t i = 0; i < codes.size(); i++)
//{
// setItemProperty(i+1, codes[i]);
//}
for(size_t i = 0; i < value.ksxm.size(); i++)
{
const TItemExam& item = value.ksxm[i];
setItemProperty(i+1, item.xmdm);
}
QString time = kit::toEasyTime(value.kskssj);
for(size_t i = 0; i < value.ykxm.size(); i++)
{
int itemNo = value.ykxm[i];
updateItemProperty(itemNo, KIT_RGB_GREEN);
QString event = time + CL8("[已考或免考项目]");
QString text = event + kit::getItemText(itemNo);
examEvent->updateExamEvent(text, KIT_RGB_GREEN);
}
if(value.ddxk)
{
for(size_t i = 0; i < value.kfxm.size(); i++)
{
const TKfXm& kfxm = value.kfxm[i];
updateItemProperty(kfxm.xmdm, KIT_RGB_RED);
QString time = kit::toEasyTime(value.kskssj);
QString event = time + CL8("[断点续考扣分]");
examEvent->updateExamEvent(event + getMarkItemText(findMarkItemText(kfxm)), KIT_RGB_RED);
m_replay->replayItemMarkPush(kfxm.xmdm, kfxm); //???通用项目扣分怎么知道是哪个项目扣分的?
}
}
else
{
TASSERT(value.ddkssj == 0 && value.yklc == 0 && value.kfxm.empty(), "");
}
if(value.sczb)
{
for(size_t i = 0; i < value.sczbkf.size(); i++)
{
const TKfXm& kfxm = value.sczbkf[i];
updateItemProperty(kfxm.xmdm, KIT_RGB_RED);
QString time = kit::toEasyTime(value.kskssj);
QString event = time + CL8("[考前绕车一周扣分]");
examEvent->updateExamEvent(event + getMarkItemText(findMarkItemText(kfxm)), KIT_RGB_RED);
m_replay->replayItemMarkPush(kfxm.xmdm, kfxm); //???通用项目扣分怎么知道是哪个项目扣分的?
}
}
else
{
TASSERT(value.sczbkf.empty(), "");
}
}
void ShowBeginExam::stuBeg_activated(int index, ShowDetail* m_detail)
{
if(index < 0) { return ;};
QString m = m_ui->stuBeg->currentText();
QString s = m_ui->stuBeg->currentData().toString();
QPoint pos = m_ui->stuBeg->pos();
int w = m_ui->stuBeg->width();
int h = m_ui->stuBeg->height();
pos = m_mWindow->mapToParent(QPoint(pos.x()+w, pos.y()+h*2));
//const TStuInfo& value = m_replay->replayStuInfo();
if(s == JUDGE_STR(ksxm))
{
m_detail->showContent(pos, s, m);
}
else if(s == JUDGE_STR(ykxm))
{
m_detail->showContent(pos, s, m);
}
else if(s == JUDGE_STR(kfxm))
{
m_detail->showContent(pos, s, m);
}
else
{
m_detail->closeShow();
}
}
void ShowBeginExam::updateItemProperty(ExamItemCode itemNo, const QColor& color)
{
QTextEdit* item = findItemProperty(itemNo);
if(item)
{
item->setTextColor(color);
item->setText(item->toPlainText());
}
}
void ShowBeginExam::setItemProperty(int index, ExamItemCode itemNo)
{
TASSERT(index >= 0 && index < m_items.size(), "too few!");
QTextEdit* item = m_items[index];
TASSERT_VOID(item != nullptr, "");
if(item)
{
item->setTextColor(KIT_RGB_BLUE);
//item->setFont(QFont(CL8("宋体"), 13)); //设置字体和字体大小
item->setFontWeight(QFont::Weight::Black);
item->setAlignment(Qt::AlignCenter);
item->setText(kit::itemNoToName(itemNo));
}
}
QTextEdit* ShowBeginExam::findItemProperty(ExamItemCode itemNo)
{
for(int i = 0; i < m_items.size(); i++)
{
QTextEdit* item = m_items[i];
if(nullptr == item)
{
break;
}
if(item->toPlainText() == kit::itemNoToName(itemNo))
{
return item;
}
}
return nullptr;
}
QString ShowBeginExam::getMarkItemText(const TMarkRule& mark)
{
std::string itemname = TableSysParm->findItemName(mark.itemno);
QString text = CL8("扣分项目:%1-%2扣分代码:%3扣分值:%4标准编码:%5扣分描述:%6")
.arg(mark.itemno)
.arg(CU8(itemname.c_str()))
.arg(CU8(mark.markserial.c_str()))
.arg(mark.markreal)
.arg(CU8(mark.markcatalog.c_str()))
.arg(CU8(mark.markshow.c_str()))
;
return text;
}
TMarkRule ShowBeginExam::findMarkItemText(const TKfXm& item)
{
const TInitInfo& value = m_replay->replayCarInitInfo();
for(size_t i = 0; i < value.mark.size(); i++)
{
const TMarkRule& rule = value.mark[i];
if(rule.itemno == item.xmdm && rule.markserial == item.kfdm)
{
return rule;
}
}
return TMarkRule();
}