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.

338 lines
8.4 KiB
C++

#include "saveroutedialog.h"
#include "qdebug.h"
#include "ui_saveroutedialog.h"
#include <QMessageBox>
#include <QLineEdit>
#include "routeglobalvariant.h"
saveRouteDialog::saveRouteDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::saveRouteDialog)
{
ui->setupUi(this);
this->setWindowTitle(u8"选择航路特征和航线号");
this->resize(500,300);
this->setWindowFlags(Qt::WindowCloseButtonHint); //关闭右上角帮助(?)按钮。
// auto lineEdit = ui->currentSpinBox->findChild<QLineEdit*>();
// ui->currentSpinBox;
// ui->currentSpinBox->findChild<QPushButton*>()
// QPushButton *button = ui->currentSpinBox->findChild<QPushButton *>("up-button");
// QList<QAbstractButton *> allPButtons = ui->currentSpinBox->findChildren<QAbstractButton *>();
// allPButtons[1]->setEnabled(false);
ui->importState->setText(u8"未导入");
ui->currentSpinBox->setMinimum(1);
// ui->currentSpinBox->setMaximum(1);
// ui->currentSpinBox->setStyleSheet("QSpinBox#up-button{color: red}");
ui->routeNumber->setMinimum(1);
ui->routeNumber->setMaximum(9999);
ui->routeHeight->setMinimum(0);
ui->routeHeight->setMaximum(9999.99);
// ui->routeHeightText->setText("500");
// ui->routeNumber->setText("1");
addRouteTypeItem();
lastRoute = ui->currentSpinBox->value();
int currentRoute = ui->currentSpinBox->value();
routeClosedState.insert(currentRoute,ui->isCloseRouteCheckBox->isChecked());
routeHeight.insert(currentRoute,ui->routeHeight->value());
routeNumber.insert(currentRoute,ui->routeNumber->value());
routeType.insert(currentRoute,ui->routeType->currentIndex()+1);
}
saveRouteDialog::~saveRouteDialog()
{
delete ui;
}
bool saveRouteDialog::isCloseRoute()
{
return ui->isCloseRouteCheckBox->isChecked();
}
QMap<int,double> saveRouteDialog::getRouteHeight()
{
return routeHeight;
}
QMap<int,int> saveRouteDialog::getRouteNumber()
{
return routeNumber;
}
QMap<int,int> saveRouteDialog::getRouteType()
{
return routeType;
// if(ui->routeType->currentText()=="飞行航线")
// {
// return 1;
// }
// if(ui->routeType->currentText()=="应急航线")
// {
// return 2;
// }
// if(ui->routeType->currentText()=="回收航线")
// {
// return 3;
// }
// if(ui->routeType->currentText()=="围栏航线")
// {
// return 4;
// }
// if(ui->routeType->currentText()=="跑道航线")
// {
// return 5;
// }
}
QMap<int, int> saveRouteDialog::getRouteClosedState()
{
return routeClosedState;
}
QString saveRouteDialog::getRouteText()
{
return ui->routeType->currentText();
}
void saveRouteDialog::setMaxValue(int max)
{
ui->currentSpinBox->setMaximum(max);
}
void saveRouteDialog::setDrawMode(int i)
{
this->drawMode = i;// 1表示开启
}
void saveRouteDialog::setMapType(int i)
{
this->mapType = i;
}
//设置高度控件不可见
void saveRouteDialog::setHeightVisible(bool b)
{
if(b==false)
{
ui->routeHeight->setVisible(false);
ui->label->setVisible(false);
}
}
void saveRouteDialog::closeEvent(QCloseEvent *event)
{
this->isClickedCloseBtn = true;
}
//QAbstractSpinBox::StepEnabled saveRouteDialog::stepEnabled(int value)
//{
// if(value == ui->currentSpinBox->maximum())
// {
// return (QAbstractSpinBox::StepDownEnabled);
// }
// else if(value == ui->currentSpinBox->minimum())
// {
// return (QAbstractSpinBox::StepUpEnabled);
// }
// else
// {
// return (QAbstractSpinBox::StepUpEnabled|QAbstractSpinBox::StepDownEnabled);
// }
//}
void saveRouteDialog::addRouteTypeItem()
{
RouteGlobalVariant routeGVar;
QMap<int,QString> routeTypeText = routeGVar.getRouteType();
for(int i = 1; i <= routeTypeText.count();i++)
{
ui->routeType->addItem(routeTypeText[i]);
}
// ui->routeType->addItem(u8"飞行航线");
// ui->routeType->addItem(u8"应急航线");
// ui->routeType->addItem(u8"回收航线");
// ui->routeType->addItem(u8"围栏航线");
// ui->routeType->addItem(u8"通场航线");
// ui->routeType->addItem(u8"跑道航线");
}
void saveRouteDialog::resetState()
{
//状态重置
ui->routeHeight->setValue(0);
ui->routeType->setCurrentIndex(0);
ui->routeNumber->setValue(1);
ui->isCloseRouteCheckBox->setChecked(false);
ui->importState->setText(u8"未导入");
}
void saveRouteDialog::historyState(int arg1)
{
//载入历史状态
ui->routeHeight->setValue(routeHeight[arg1]);
ui->routeType->setCurrentIndex(routeType[arg1]-1);
ui->routeNumber->setValue(routeNumber[arg1]);
ui->isCloseRouteCheckBox->setChecked(routeClosedState[arg1]);
ui->importState->setText(u8"已导入");
}
void saveRouteDialog::on_cancelRoute_clicked()
{
if(drawMode)
{
this->reject();
return;
}
this->close();
}
void saveRouteDialog::on_isCloseRouteCheckBox_stateChanged(int arg1)
{
if(arg1)
{
ui->isCloseRouteCheckBox->setChecked(true);
}
else
{
ui->isCloseRouteCheckBox->setChecked(false);
}
}
void saveRouteDialog::on_importBtn_clicked()
{
int currentRouteID = ui->currentSpinBox->value();
int type = ui->routeType->currentIndex()+1;
double height = ui->routeHeight->value();
int number = ui->routeNumber->value();
int closedState = ui->isCloseRouteCheckBox->isChecked();
if(drawMode)
{//仅用于兼容二维航线绘制模式
routeClosedState.insert(currentRouteID,closedState);
routeHeight.insert(currentRouteID,height);
routeNumber.insert(currentRouteID,number);
routeType.insert(currentRouteID,type);
this->accept();
return;
}
/*以下用于导入外部航线文件*/
// 发送信号添加当前航线
emit importRoute(currentRouteID,type,number,height,closedState);
// 接收航线添加成功的值,并修改当前航线导入状态
if(addRouteState)
{
//保存当前航线信息,用于历史回溯
routeClosedState.insert(currentRouteID,closedState);
routeHeight.insert(currentRouteID,height);
routeNumber.insert(currentRouteID,number);
routeType.insert(currentRouteID,type);
routeSaveState.insert(currentRouteID,1);
saveRouteID.insert(ui->currentSpinBox->value());
ui->importState->setText(u8"已导入");
if(currentRouteID==ui->currentSpinBox->maximum())
{
this->accept();
}
else
{
lastRoute = ui->currentSpinBox->value();
//发出信号高亮下一条几何对象
emit highLightGeometry(lastRoute+1,lastRoute);
ui->currentSpinBox->stepBy(1);
}
}
else
{
QMessageBox::warning(this, "Warning",u8"航线导入失败!");
}
}
void saveRouteDialog::on_currentSpinBox_valueChanged(int arg1)
{
if(arg1==lastRoute) return;
/*判断当前航线是否已导入*/
if(!saveRouteID.contains(lastRoute))
{
int ret = QMessageBox::warning(this, u8"提示",
(u8"当前航线未导入!\n"
u8"是否继续?"),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::No);
if(ret==QMessageBox::No)
{
ui->currentSpinBox->setValue(lastRoute);
}
else
{
/*当前航线已导入,判断下一航线是否是已导入航线*/
//发出信号高亮几何对象
emit highLightGeometry(arg1,lastRoute);
if(saveRouteID.contains(arg1))
{
//载入历史状态
historyState(arg1);
}
else
{
//状态重置
resetState();
}
//更新历史记录值
lastRoute = ui->currentSpinBox->value();
}
}
else
{
//发出信号高亮几何对象
emit highLightGeometry(arg1,lastRoute);
if(saveRouteID.contains(arg1))
{
//载入历史状态
historyState(arg1);
}
else
{
//状态重置
resetState();
}
//更新历史记录值
lastRoute = ui->currentSpinBox->value();
}
}
void saveRouteDialog::getAddRouteState(int addState)
{
this->addRouteState = addState;
}