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

318 lines
9.8 KiB
C++

#include "QModelMangerUI.h"
4 years ago
#include <QSharedPointer>
#include <QTableView>
#include <QMessageBox>
#include <QTimer>
#include "QPLCIndexUI.h"
#include "QAddModeUI.h"
#include "IStation.h"
#include "IWfCtrl.h"
#include "lpGlobalConfig.h"
4 years ago
#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);
4 years ago
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;
4 years ago
}
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();
}
}
}
4 years ago
}
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();
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);
4 years ago
msgWarning.setWindowIcon(QIcon(":/leaper/Resource/app.png"));
msgWarning.setButtonText(QMessageBox::Yes, QObject::tr("确认"));
4 years ago
msgWarning.exec();
}
}
QTimer::singleShot(5000, [&]() {
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);
4 years ago
msgWarning.setWindowIcon(QIcon(":/leaper/Resource/app.png"));
msgWarning.setButtonText(QMessageBox::Yes, QObject::tr("确认"));
4 years ago
msgWarning.exec();
return ;
}
QMessageBox msgBox(QMessageBox::Warning, QObject::tr("型号删除"), QObject::tr("删除") + strModel + "?", QMessageBox::Yes | QMessageBox::No);
4 years ago
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();
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);
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;
}
4 years ago
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;
4 years ago
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);
4 years ago
msgWarning.setWindowIcon(QIcon(":/leaper/Resource/app.png"));
msgWarning.setButtonText(QMessageBox::Yes, QObject::tr("确认"));
4 years ago
msgWarning.exec();
ui.mLblModelState->setText(QObject::tr(" %1 的 PLC索引值修改失败").arg(strModel));
4 years ago
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));
4 years ago
}
}
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();
}
4 years ago
}
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);
}
}
4 years ago
}
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);
4 years ago
QTableView *pW = new QTableView(ui.tabWidgetStation);
pW->setFont(font);
4 years ago
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 &)));
4 years ago
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();
}