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.
wheeldetect/src/tpMain/timemgrui.cpp

273 lines
9.7 KiB
C++

#include "timemgrui.h"
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QTableView>
#include <QStandardItemModel>
#include "InfoFile.h"
#include "timemgrctrl.h"
#include "qaddtimedlg.h"
#include <QMessageBox>
#include "IWheelCtrl.h"
#include <qdialog.h>
#include <QDesktopWidget>
#pragma execution_character_set("utf-8")
struct CmpByValueTime {
bool operator()(const TimeStruct & lhs, const TimeStruct & rhs)
{
return lhs.m_startTime < rhs.m_startTime;
}
};
TimeMgrUi::TimeMgrUi(const QString strUiName, IWheelCtrl *p) :m_pCtrl(p), m_strUiName(strUiName)
{
tablemodel = new QStandardItemModel();
QStringList stringList;
stringList << tr("班次") << tr("起始时间") << tr("结束时间");
tablemodel->setHorizontalHeaderLabels(stringList);
//tablemodel->setHorizontalHeaderItem(0, new QStandardItem(tr("班次")));
//tablemodel->setHorizontalHeaderItem(1, new QStandardItem(tr("起始时间")));
//tablemodel->setHorizontalHeaderItem(2, new QStandardItem(tr("结束时间")));
m_pTimeMgr = m_pCtrl->getTimeMgr();
}
TimeMgrUi::~TimeMgrUi()
{
if (tablemodel){
while (tablemodel->rowCount())
{
QList<QStandardItem*> lptr = tablemodel->takeRow(0);
for (int n = 0; n < lptr.size(); n++)
{
delete lptr.at(n);
}
}
tablemodel->clear();
delete tablemodel;
tablemodel = NULL;
}
}
bool TimeMgrUi::onPolished(QWidget* p)
{
QString str = p->objectName();
if (str == "TimeMgr_tableView") {
tableView = qobject_cast<QTableView*>(p);
connect(tableView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(SlotcellClicked(const QModelIndex &)));
}
else if (str == "TimeMgr_ADD_Button") {
connect(p, SIGNAL(clicked()), this, SLOT(SlotButtonClick()));
}
else if (str == "TimeMgr_Del_Button") {
connect(p, SIGNAL(clicked()), this, SLOT(SlotButtonClick()));
}
else if (str == "TimeMgr_Mod_Button") {
connect(p, SIGNAL(clicked()), this, SLOT(SlotButtonClick()));
}
else if (str == "TimeMgr_OK_Button") {
connect(p, SIGNAL(clicked()), this, SLOT(SlotButtonClick()));
}
else if (str == "TimeMgr_label"){
m_label = qobject_cast<QLabel*>(p);
}
else if (m_strUiName == str) {
m_pDlgMain = (QDialog*)p;
m_pDlgMain->setWindowTitle(tr("班次时间管理"));
m_pDlgMain->setWindowIcon(QIcon(":/image/leaper"));
}
else {
return false;
}
return true;
}
Q_SLOT void TimeMgrUi::SlotButtonClick()
{
QObject *obj = sender();
QString str_name = obj->objectName();
if (str_name == "TimeMgr_ADD_Button"){
QAddTimeDlg dlg;
dlg.setWindowTitle(tr("设置参数"));
dlg.setWindowIcon(QIcon(":/image/leaper"));
dlg.setFocus();
if (dlg.exec() == QDialog::Accepted)
{
TimeStruct m_Timestruct;
dlg.GetInfo(m_Timestruct);
if (m_MapTime.contains(m_Timestruct.m_name))
{
return;
}
int nIndex = tablemodel->rowCount();
tablemodel->setItem(nIndex, 0, new QStandardItem(m_Timestruct.m_name));
QString strStart = QString("%1 %2").arg(m_Timestruct.time_start==AM?tr("当天"):tr("隔天")).arg(m_Timestruct.m_startTime.toString("hh:mm"));
QString strEnd = QString("%1 %2").arg(m_Timestruct.time_end == AM ? tr("当天") : tr("隔天")).arg(m_Timestruct.m_endTime.toString("hh:mm"));
tablemodel->setItem(nIndex, 1, new QStandardItem(strStart));
tablemodel->setItem(nIndex, 2, new QStandardItem(strEnd));
m_Timestruct.m_Index = nIndex;
m_MapTime.insert(m_Timestruct.m_name, m_Timestruct);
m_pTimeMgr->AddNewTime(m_Timestruct);
m_label->setText("");
}
}
else if (str_name == "TimeMgr_Del_Button"){
QString str_name = m_label->text();
if (str_name.isEmpty() || str_name == tr("未选中"))
{
//QMessageBox::information(NULL, QString("提示"), QString("未选择班次,请选择进行修改。"), QMessageBox::Ok);
QMessageBox infobox(QMessageBox::Information, tr("提示"), tr("未选择班次,请选择进行修改。"), QMessageBox::Yes, NULL);
infobox.setWindowIcon(QIcon(":/image/leaper"));
infobox.setButtonText(QMessageBox::Yes, tr("确认"));
infobox.exec();
return;
}
QString str = tr("您确定要删除 %1 班次?").arg(str_name);
if (str_name.isEmpty())
return;
QMessageBox infobox(QMessageBox::Information, tr("提示"), str, QMessageBox::Ok | QMessageBox::Cancel, NULL);
infobox.setWindowIcon(QIcon(":/image/leaper"));
infobox.setButtonText(QMessageBox::Ok, tr("确认"));
infobox.setButtonText(QMessageBox::Cancel, tr("取消"));
if (infobox.exec() == QMessageBox::Ok)
{
if (str_name.isEmpty())
return;
QModelIndex nIndex = tableView->currentIndex();
int row = nIndex.row();
if (tablemodel->removeRow(nIndex.row()))
int a = 0;
else
int b = 0;
TimeStruct m_TimeStruct;
m_TimeStruct.m_name = str_name;
m_MapTime.remove(str_name);
m_pTimeMgr->DelOldTime(m_TimeStruct);
m_label->setText("");
}
}
else if (str_name == "TimeMgr_Mod_Button"){
QString str_name = m_label->text();
if (str_name.isEmpty()||str_name==tr("未选中"))
{
//QMessageBox::information(NULL, QString("提示"), QString("未选择班次,请选择进行修改。"), QMessageBox::Ok);
QMessageBox infobox(QMessageBox::Information, tr("提示"), tr("未选择班次,请选择进行修改。"), QMessageBox::Yes, NULL);
infobox.setWindowIcon(QIcon(":/image/leaper"));
infobox.setButtonText(QMessageBox::Yes, tr("确认"));
infobox.exec();
return;
}
QAddTimeDlg dlg;
dlg.SetInfo(m_MapTime.value(str_name));
if (dlg.exec() == QDialog::Accepted)
{
TimeStruct m_tempTime,m_newTime;
m_tempTime.m_name = str_name;
m_MapTime.remove(str_name);
dlg.GetInfo(m_newTime);
m_pTimeMgr->ModTime(m_tempTime, m_newTime);
m_MapTime.insert(m_newTime.m_name, m_newTime);
int nIndex = 0;
std::vector<TimeStruct> vec(m_MapTime.begin(), m_MapTime.end());
std::sort(vec.begin(), vec.end(), CmpByValueTime());
for (int n = 0; n < vec.size(); n++)
{
TimeStruct tiItem = vec.at(n);
tablemodel->setItem(nIndex, 0, new QStandardItem(tiItem.m_name));
QString strStart = QString("%1 %2").arg(tiItem.time_start == AM ? tr("当天") : tr("隔天")).arg(tiItem.m_startTime.toString("hh:mm"));
QString strEnd = QString("%1 %2").arg(tiItem.time_end == AM ? tr("当天") : tr("隔天")).arg(tiItem.m_endTime.toString("hh:mm"));
tablemodel->setItem(nIndex, 1, new QStandardItem(strStart));
tablemodel->setItem(nIndex, 2, new QStandardItem(strEnd));
nIndex++;
}
// for (QMap<QString, TimeStruct>::iterator its = m_MapTime.begin(); its != m_MapTime.end(); ++its)
// {
// tablemodel->setItem(nIndex, 0, new QStandardItem(its->m_name));
// QString strStart = QString("%1 %2").arg(its->time_start == AM ? tr("当天") : tr("隔天")).arg(its->m_startTime.toString("hh:mm"));
// QString strEnd = QString("%1 %2").arg(its->time_end == AM ? tr("当天") : tr("隔天")).arg(its->m_endTime.toString("hh:mm"));
// tablemodel->setItem(nIndex, 1, new QStandardItem(strStart));
// tablemodel->setItem(nIndex, 2, new QStandardItem(strEnd));
//
// // tablemodel->setItem(nIndex, 1, new QStandardItem(its->m_startTime.toString("hh:mm")));
// // tablemodel->setItem(nIndex, 2, new QStandardItem(its->m_endTime.toString("hh:mm")));
// nIndex++;
// }
m_label->setText("");
}
}
else if (str_name == "TimeMgr_OK_Button"){
//QDialog::accept();
}
}
Q_SLOT void TimeMgrUi::SlotcellClicked(const QModelIndex & index)
{
if (m_MapTime.size() > 0)
{
QModelIndex nindex = tablemodel->index(index.row(), 0);
QString str = nindex.data().toString();
m_label->setText(str);
}
}
void TimeMgrUi::SetTimeLable()
{
this->m_MapTime = m_pTimeMgr->getAllTime();
tableView->setModel(tablemodel);
tableView->setColumnWidth(0, 100);
tableView->setColumnWidth(1, 100);
tableView->setColumnWidth(2, 100);
//默认显示行头,如果你觉得不美观的话,我们可以将隐藏
//m_tableView->verticalHeader()->hide();
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
//tableView->resizeColumnsToContents();
//如果你用在QTableView中使用右键菜单需启用该属性
//tableView->setContextMenuPolicy(Qt::CustomContextMenu);
tableView->setWordWrap(false);
//tableView->setShowGrid(false);//显示表格线
tableView->setAlternatingRowColors(true);
int nIndex = 0;
if (m_MapTime.size() <= 0)
return;
// for (QMap<QString, TimeStruct>::iterator its = m_MapTime.begin(); its != m_MapTime.end(); ++its)
// {
// tablemodel->setItem(nIndex, 0, new QStandardItem(its->m_name));
// QString strStart = QString("%1 %2").arg(its->time_start == AM ? tr("当天") : tr("隔天")).arg(its->m_startTime.toString("hh:mm"));
// QString strEnd = QString("%1 %2").arg(its->time_end == AM ? tr("当天") : tr("隔天")).arg(its->m_endTime.toString("hh:mm"));
// tablemodel->setItem(nIndex, 1, new QStandardItem(strStart));
// tablemodel->setItem(nIndex, 2, new QStandardItem(strEnd));
// nIndex++;
// }
std::vector<TimeStruct> vec(m_MapTime.begin(), m_MapTime.end());
std::sort(vec.begin(), vec.end(), CmpByValueTime());
for (int n= 0; n < vec.size(); n++)
{
TimeStruct tiItem = vec.at(n);
tablemodel->setItem(nIndex, 0, new QStandardItem(tiItem.m_name));
QString strStart = QString("%1 %2").arg(tiItem.time_start == AM ? tr("当天") : tr("隔天")).arg(tiItem.m_startTime.toString("hh:mm"));
QString strEnd = QString("%1 %2").arg(tiItem.time_end == AM ? tr("当天") : tr("隔天")).arg(tiItem.m_endTime.toString("hh:mm"));
tablemodel->setItem(nIndex, 1, new QStandardItem(strStart));
tablemodel->setItem(nIndex, 2, new QStandardItem(strEnd));
nIndex++;
}
}
bool TimeMgrUi::onExec()
{
SetTimeLable();
if (m_pDlgMain) {
QDesktopWidget* desktop = QApplication::desktop();//
m_pDlgMain->move((desktop->width() - m_pDlgMain->width()) / 2, (desktop->height() - m_pDlgMain->height()) / 2);
m_pDlgMain->exec();
}
return true;
}