You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
newValue/tpvs17/lpMain/QModelMangerUI.cpp

322 lines
10 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "QModelMangerUI.h"
#include <QSharedPointer>
#include <QTableView>
#include <QMessageBox>
#include <QTimer>
#include "QPLCIndexUI.h"
#include "QAddModeUI.h"
#include "IStation.h"
#include "IWfCtrl.h"
#include "lpGlobalConfig.h"
#define LP_WF_PLC_MAX_INDEX 1000
#pragma execution_character_set("utf-8")
QModelMangerUI::QModelMangerUI(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
m_srcImgView = replaceWidget<lpImgViewer>(ui.widget);
//connect(m_srcImgView, SIGNAL(filterroiChanged(const AwesomeRoiInfo&, QString)), this, SLOT(onROIChange(const AwesomeRoiInfo&, QString)));
//connect(m_srcImgView, SIGNAL(pixelClicked(QPoint)), this, SLOT(onPixelClicked(QPoint)));
//connect(m_srcImgView, SIGNAL(roiLockIng(QString)), this, SLOT(onRoiLockIng(QString)));
//connect(m_srcImgView, SIGNAL(sgImageScale(qreal)), this, SLOT(onImageScale(qreal)));
ui.wf_model_mod_button->setVisible(false);
connect(ui.wf_model_select_button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
connect(ui.wf_model_add_button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
connect(ui.wf_model_mod_button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
connect(ui.wf_model_delete_button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
connect(ui.wf_chkbox_read_mode_from_plc, SIGNAL(stateChanged(int)), this, SLOT(onCheckBoxChange(int)));
}
QModelMangerUI::~QModelMangerUI()
{
if (m_srcImgView) {
delete m_srcImgView;
m_srcImgView = nullptr;
}
}
template<typename _Widget>
_Widget* QModelMangerUI::replaceWidget(QWidget* pSrcWidget)
{
if (!pSrcWidget) {
return nullptr;
}
QWidget* pParent = qobject_cast<QWidget*>(pSrcWidget->parent());
if (!pParent) {
return nullptr;
}
_Widget* pDstWidget = new _Widget;
auto *pFrom = pParent->layout()->replaceWidget(pSrcWidget, pDstWidget);
delete pFrom;
delete pSrcWidget;
return pDstWidget;
}
Q_SLOT void QModelMangerUI::onButtonClicked()
{
QString strObj = sender()->objectName();
if ("wf_model_select_button" == strObj) {
if (!lpGlobalConfig::instance()->m_bOnlineMode) {
QString nStaionID = currentTab();
IStation *pStation = m_pCtrl->IGetStationByKey(nStaionID);
if (pStation) {
QString strModel = pStation->currentSelectModel();
if (!strModel.isEmpty()) {
m_pCtrl->ISelModel(currentTab(), strModel);
ui.mLblModelState->setText(tr("current %1 OK!").arg(strModel));
if (nStaionID == lpGlobalConfig::instance()->m_StationSolution_1)
{
lpGlobalConfig::instance()->m_StationRunModel_1 = strModel;
}
else if (nStaionID == lpGlobalConfig::instance()->m_StationSolution_2)
{
lpGlobalConfig::instance()->m_StationRunModel_2 = strModel;
}
lpGlobalConfig::instance()->writeConfig();
}
}
}
}
else if ("wf_model_add_button" == strObj) {
QAddModeUI adddlg(this);
adddlg.setWindowIcon(QIcon(":/leaper/Resource/app.png"));
adddlg.setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
if (adddlg.exec() == QDialog::Accepted)
{
QString strName = adddlg.getInputName();
if (strName.isEmpty())
{
QMessageBox msgWarning(QMessageBox::Warning, QObject::tr("错误警告"), strName + QObject::tr("型号名不能为空"), QMessageBox::Yes);
msgWarning.setWindowIcon(QIcon(":/leaper/Resource/app.png"));
msgWarning.setButtonText(QMessageBox::Yes, QObject::tr("确认"));
msgWarning.exec();
return;
}
QString nStaionID = currentTab();
bool bFlag = m_pCtrl->IAddModel(nStaionID, strName);
if (bFlag) {
ui.mLblModelState->setText(tr("add %1 successful!").arg(strName));
if (m_pCtrl)
m_pCtrl->ISaveModel(nStaionID, strName);
}
else {
QMessageBox msgWarning(QMessageBox::Warning, QObject::tr("错误警告"), strName + QObject::tr(" 添加失败,可能名字重复"), QMessageBox::Yes);
msgWarning.setWindowIcon(QIcon(":/leaper/Resource/app.png"));
msgWarning.setButtonText(QMessageBox::Yes, QObject::tr("确认"));
msgWarning.exec();
}
QTimer::singleShot(1000, [&]() {
ui.mLblModelState->setText("");
});
}
}
else if ("wf_model_mod_button" == strObj) {
}
else if ("wf_model_delete_button" == strObj) {
QString nStaionID = currentTab();
IStation *pStation = m_pCtrl->IGetStationByKey(nStaionID);
if (pStation) {
QString strModel = pStation->currentSelectModel();
if (!strModel.isEmpty()) {
QString strName = m_pCtrl->IGetCurrentRuningModel(currentTab());
if (strModel == strName)
{
QMessageBox msgWarning(QMessageBox::Warning, QObject::tr("错误警告"), strModel + QObject::tr(" 正在使用,不能被删除"), QMessageBox::Yes);
msgWarning.setWindowIcon(QIcon(":/leaper/Resource/app.png"));
msgWarning.setButtonText(QMessageBox::Yes, QObject::tr("确认"));
msgWarning.exec();
return ;
}
QMessageBox msgBox(QMessageBox::Warning, QObject::tr("型号删除"), QObject::tr("删除") + strModel + "?", QMessageBox::Yes | QMessageBox::No);
msgBox.setWindowIcon(QIcon(":/leaper/Resource/app.png"));
if (QMessageBox::Yes == msgBox.exec()) {
bool b = m_pCtrl->IDeleteModel(currentTab(), strModel);
if (!b) {
ui.mLblModelState->setText(QObject::tr("delete %1 failed!").arg(strModel));
}
else {
ui.mLblModelState->setText(QObject::tr("delete %1 successful!").arg(strModel));
}
}
}
}
}
}
int QModelMangerUI::lastNum(QString str)
{
return str.right(1).toInt();
}
Q_SLOT bool QModelMangerUI::OnCellClicked(const QModelIndex &index)
{
QString strListName = sender()->objectName();
QString key = m_tabViewKeys.value(strListName);
int stationID = lastNum(strListName);
IStation *pStation = m_pCtrl->IGetStationByKey(key);
if (pStation) {
QString strModel = pStation->model(index.row());
QString strName = QObject::tr("模型号:") + strModel;
int plcIndex = m_pCtrl->IGetPLCIndex(key, strModel);
ui.label_Name->setText(strModel);
QImage img = m_pCtrl->IGetStandardImg(key, strModel);
if (img.isNull())
{
//img.load(":/Resource/no-img.png");
m_srcImgView->clear();
m_srcImgView->setImg(img);
}
else {
int widgetWidth = m_srcImgView->width();
int imgWidth = img.width();
float scalew = (widgetWidth*1.0) / (imgWidth*1.0);
int widgetHeight = m_srcImgView->height();
int imgHeight = img.height();
float scaleh = (widgetHeight*1.0) / (imgHeight*1.0);
float minScale = scalew < scaleh ? scalew : scaleh;
m_srcImgView->setInitScale(minScale - 0.01);
m_srcImgView->clear();
m_srcImgView->setImg(img);
}
}
return true;
}
Q_SLOT bool QModelMangerUI::OnCellDoubleClicked(const QModelIndex &index)
{
QString strListName = sender()->objectName();
if (1 != index.column()) {
return false;
}
QString key = m_tabViewKeys.value(strListName);
int stationID = lastNum(strListName);
IStation *pStation = m_pCtrl->IGetStationByKey(key);
if (pStation) {
QString strModel = pStation->model(index.row());
QString strName = QObject::tr("模型号:") + strModel;
int plcIndex = m_pCtrl->IGetPLCIndex(key, strModel);
QPLCIndexUI dlg(this);
dlg.setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
dlg.setModelName(strName);
dlg.setModelIndex(plcIndex);
if (dlg.exec() == QDialog::Accepted)
{
int nIndex = dlg.getModelIndex();
QStringList strList = pStation->modelList();
bool bExist = false;
QString strExistModel;
foreach(QString var, strList) {
if (var == strModel)
continue;
if (nIndex != LP_WF_PLC_MAX_INDEX && nIndex == m_pCtrl->IGetPLCIndex(key, var)) {
bExist = true;
strExistModel = var;
break;
}
}
if (bExist == true)
{
QMessageBox msgWarning(QMessageBox::Warning, QObject::tr("警告"), strName + QObject::tr("索引修改失败,与%1索引值冲突").arg(strExistModel), QMessageBox::Yes);
msgWarning.setWindowIcon(QIcon(":/leaper/Resource/app.png"));
msgWarning.setButtonText(QMessageBox::Yes, QObject::tr("确认"));
msgWarning.exec();
ui.mLblModelState->setText(QObject::tr(" %1 的 PLC索引值修改失败").arg(strModel));
return false;
}
m_pCtrl->ISetPLCIndex(key, strModel, nIndex);
if (m_pCtrl)
m_pCtrl->ISaveModel(key, strModel);
ui.mLblModelState->setText(QObject::tr(" %1 的 PLC索引值修改成功").arg(strModel));
}
}
return true;
}
Q_SLOT void QModelMangerUI::onCheckBoxChange(int state)
{
if (state > 0)
{
ui.wf_model_select_button->setDisabled(true);
lpGlobalConfig::instance()->m_bOnlineMode = true;
lpGlobalConfig::instance()->writeConfig();
}
else {
ui.wf_model_select_button->setDisabled(false);
lpGlobalConfig::instance()->m_bOnlineMode = false;
lpGlobalConfig::instance()->writeConfig();
}
}
void QModelMangerUI::showEvent(QShowEvent *event)
{
if (m_pCtrl) {
if (lpGlobalConfig::instance()->m_bOnlineMode == true)
{
ui.wf_chkbox_read_mode_from_plc->setChecked(true);
}
else {
ui.wf_chkbox_read_mode_from_plc->setChecked(false);
}
}
}
void QModelMangerUI::closeEvent(QCloseEvent *event)
{
}
void QModelMangerUI::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange)
{
ui.retranslateUi(this);
}
}
void QModelMangerUI::onInitModelList(IWfCtrl *pCtrl)
{
m_pCtrl = pCtrl;
ui.tabWidgetStation->clear();
QStringList lst = pCtrl->IGetStationKeys();
int nIndex = 0;
for each (QString var in lst) {
QFont font;
font.setPixelSize(18);
QTableView *pW = new QTableView(ui.tabWidgetStation);
pW->setFont(font);
pW->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
pW->setEditTriggers(QAbstractItemView::NoEditTriggers);
pW->setSelectionBehavior(QAbstractItemView::SelectRows);
IStation *pStation = pCtrl->IGetStationByKey(var);
QString strObjName = "wf_cam_listwidget_" + QString::number(nIndex);
m_tabViewKeys.insert(strObjName, var);
pW->setObjectName(strObjName);
ui.tabWidgetStation->addTab((QWidget*)pW, var);
pStation->setView(pW);
connect(pW, SIGNAL(clicked(const QModelIndex &)), this, SLOT(OnCellClicked(const QModelIndex &)));
connect(pW, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(OnCellDoubleClicked(const QModelIndex &)));
nIndex++;
}
}
QString QModelMangerUI::currentTab()
{
QWidget *pWidget = ui.tabWidgetStation->currentWidget();
if (pWidget) {
QString s = pWidget->objectName();
QString key = m_tabViewKeys.value(s);
return key;
}
return QString();
}