Files
gcs-nf/App/StatusUI/StatusUI.cpp
T
2022-08-30 16:33:30 +08:00

420 lines
16 KiB
C++

#include "StatusUI.h"
#include "ui_StatusUI.h"
StatusUI::StatusUI(QWidget *parent) :
QWidget(parent),
ui(new Ui::StatusUI)
{
ui->setupUi(this);
//load qss
QFile file(":/qss/StatusUI.qss");
file.open(QFile::ReadOnly);
QTextStream filetext(&file);
QString stylesheet = filetext.readAll();
this->setStyleSheet(stylesheet);
file.close();
int id_count = 0;
StateGroup *base = new StateGroup(id_count++,this);
StateGroup *actuator = new StateGroup(id_count++,this);
StateGroup *state = new StateGroup(id_count++,this);
//install(mode,0,"飞行模式",0,QMap<QVariant, StateWidget::state>{{"待机",StateWidget::state::gray},{"手动",StateWidget::state::orange},{"自主",StateWidget::state::green}});
install(base,0,"攻角[°]",0,QMap<QVariant, StateWidget::state>{{-20,StateWidget::state::red},{20,StateWidget::state::green}});
install(base,0,"侧滑角[°]",0,QMap<QVariant, StateWidget::state>{{-20,StateWidget::state::red},{20,StateWidget::state::green}});
install(base,0,"滚转角[°]",0,QMap<QVariant, StateWidget::state>{{-45,StateWidget::state::red},{45,StateWidget::state::green}});
install(base,0,"俯仰角[°]",0,QMap<QVariant, StateWidget::state>{{-20,StateWidget::state::red},{20,StateWidget::state::green}});
install(base,0,"航迹角[°]",0,QMap<QVariant, StateWidget::state>{{-1.0,StateWidget::state::red},{361,StateWidget::state::green}});
install(base,0,"海拔[m]",0,QMap<QVariant, StateWidget::state>{{1500,StateWidget::state::red},{999000,StateWidget::state::green}});
install(base,0,"表速[m/s]",0,QMap<QVariant, StateWidget::state>{{100,StateWidget::state::red},{700,StateWidget::state::green}});
install(base,0,"真空速[m/s]",0,QMap<QVariant, StateWidget::state>{{100,StateWidget::state::red},{700,StateWidget::state::green}});
install(base,0,"地速[m/s]",0,QMap<QVariant, StateWidget::state>{{100,StateWidget::state::red},{700,StateWidget::state::green}});
install(base,0,"马赫数[Ma]",0,QMap<QVariant, StateWidget::state>{{0.3,StateWidget::state::red},{0.8,StateWidget::state::green},{2,StateWidget::state::orange}});
//install(base,0,"爬升率[m/s]",0,QMap<QVariant, StateWidget::state>{{-80,StateWidget::state::red},{100,StateWidget::state::green},{500,StateWidget::state::orange}});
install(base,0,"导航模式",0,
QMap<QVariant, StateWidget::state>{{"未初始化",StateWidget::state::gray},
{"INS/大气",StateWidget::state::orange},
{"INS/DGPS",StateWidget::state::green},
{"INS/GNSS",StateWidget::state::green},
{"GNSS",StateWidget::state::orange},
{"未知参数",StateWidget::state::red}});
install(base,0,"双天线定向",0);
install(actuator,0,"左副翼[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"右副翼[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"左升降[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"右升降[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"左方向[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"右方向[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"左扰流[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"右扰流[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"左变体[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"右变体[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
install(actuator,0,"转向[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
//左副翼,右副翼,左升降,右升降,左方向,右方向,左扰流,右扰流,左变体,右变体
//install(e_fly,0,"位置状态",0,QMap<QVariant, StateWidget::state>{{"无效",StateWidget::state::red},{"有效",StateWidget::state::green}});
//install(e_fly,0,"高度状态",0);
//install(e_fly,0,"加速度状态",0);
//install(e_fly,0,"姿态状态",0,QMap<QVariant, StateWidget::state>{{"无效",StateWidget::state::red},{"有效",StateWidget::state::green}});
//install(e_fly,0,"角速度状态",0);
//install(e_fly,0,"时间状态",0);
//install(e_fly,0,"航迹角",0);
//install(e_fly,0,"天向加速度",0);
//install(e_fly,0,"偏航加速度",0);
/*install(e_fly,0,"工作状态",0,
QMap<QVariant, StateWidget::state>{{"准备",StateWidget::state::gray},
{"对准中",StateWidget::state::orange},
{"导航",StateWidget::state::green},
{"对准失败",StateWidget::state::red},
{"未知参数",StateWidget::state::red}});
*/
//install(e_fly,0,"主惯导",0);
//install(e_fly,0,"IMU状态",0);
//install(e_fly,0,"DGPS状态",0);
install(state,0,"油门[%]",0,
QMap<QVariant, StateWidget::state>{{0,StateWidget::state::red},
{5,StateWidget::state::orange},
{200,StateWidget::state::green}});
install(state,2,"转速[r/min]",0,
QMap<QVariant, StateWidget::state>{{18000,StateWidget::state::red},
{20000,StateWidget::state::orange},
{50000,StateWidget::state::green}});
install(state,2,"进气总温[℃]",0,
QMap<QVariant, StateWidget::state>{{-60,StateWidget::state::orange},
{90,StateWidget::state::green}});
install(state,2,"P2[MPa]",0,
QMap<QVariant, StateWidget::state>{{0,StateWidget::state::red},
{0.1,StateWidget::state::orange},
{6,StateWidget::state::green}});
install(state,2,"伺服电流[mA]",0,
QMap<QVariant, StateWidget::state>{{0,StateWidget::state::red},
{10,StateWidget::state::orange},
{150,StateWidget::state::green}});
//install(state,2,"发动机状态",0);
//install(state,2,"发动机作动",0);
install(state,0,"涡轮后温度[℃]",0,
QMap<QVariant, StateWidget::state>{{100,StateWidget::state::gray},
{400,StateWidget::state::orange},
{800,StateWidget::state::green},
{850,StateWidget::state::orange},
{10000,StateWidget::state::red}});
install(state,0,"滑油压力[kPa]",0,
QMap<QVariant, StateWidget::state>{{100,StateWidget::state::red},
{100,StateWidget::state::orange},
{10000,StateWidget::state::green}});
install(state,0,"燃油流量[kg/m]",0,
QMap<QVariant, StateWidget::state>{{0.2,StateWidget::state::red},
{0.4,StateWidget::state::orange},
{100,StateWidget::state::green}});
install(state,0,"剩余油量[kg]",0,
QMap<QVariant, StateWidget::state>{{20,StateWidget::state::red},
{40,StateWidget::state::orange},
{800,StateWidget::state::green}});
/*
install(state,2,"投放状态",0,
QMap<QVariant, StateWidget::state>{{"锁定|锁定",StateWidget::state::green},
{"锁定|投放",StateWidget::state::orange},
{"投放|锁定",StateWidget::state::orange},
{"投放|投放",StateWidget::state::red}});
//install(state,0,"脱离状态2",0);
install(state,2,"火箭状态",0,
QMap<QVariant, StateWidget::state>{{"保险|工作",StateWidget::state::orange},
{"保险|上锁",StateWidget::state::green},
{"解除|工作",StateWidget::state::red},
{"解除|上锁",StateWidget::state::orange}});
install(state,0,"加速度采集",0);
install(state,0,"点火状态",0,
QMap<QVariant, StateWidget::state>{{"未点火",StateWidget::state::gray},
{"点火成功",StateWidget::state::green}});
*/
/*
install(battery,0,"飞控电压[V]",0,
QMap<QVariant, StateWidget::state>{{23,StateWidget::state::red},
{24,StateWidget::state::orange},
{50,StateWidget::state::green}});
install(battery,0,"舵机电压[V]",0,
QMap<QVariant, StateWidget::state>{{46,StateWidget::state::red},
{48,StateWidget::state::orange},
{80,StateWidget::state::green}});
install(communication,0,"信号[%]",0,
QMap<QVariant, StateWidget::state>{{50,StateWidget::state::red},
{80,StateWidget::state::orange},
{100,StateWidget::state::green}});
install(communication,0,"接收[B/s]",0,
QMap<QVariant, StateWidget::state>{{500,StateWidget::state::red},
{800,StateWidget::state::orange},
{3000,StateWidget::state::green}});
install(communication,0,"发送[B/s]",0,
QMap<QVariant, StateWidget::state>{{5,StateWidget::state::red},
{100,StateWidget::state::orange},
{3000,StateWidget::state::green}});
*/
//GroupList.insert(mode->ID(),mode);
GroupList.insert(base->ID(),base);
GroupList.insert(actuator->ID(),actuator);
//GroupList.insert(e_fly->ID(),e_fly);
GroupList.insert(state->ID(),state);
//GroupList.insert(battery->ID(),battery);
//GroupList.insert(communication->ID(),communication);
if(GroupList.size() > 0)
{
for( QMap<int,StateGroup *>::iterator i = GroupList.begin();i != GroupList.end();i++)
{
StateGroup *g = i.value();
ui->gridLayout->addWidget(g,g->ID(),0,1,1);
}
QVBoxLayout * vb = new QVBoxLayout;
vb->addStretch();
ui->gridLayout->addLayout(vb,GroupList.size(),0,1,1);
}
else
{
this->setFixedWidth(0);
}
basewidth = this->width();
}
StatusUI::~StatusUI()
{
delete ui;
}
void StatusUI::resizeEvent(QResizeEvent *event)
{
//qDebug() << event;
//计算一个使用多少长度
/*
if(GroupList.size() > 0)
{
int row = 0;
int column = 0;
int current_height = 0;
this->resize(basewidth,this->height());
for( QMap<int,StateGroup *>::iterator i = GroupList.begin();i != GroupList.end();i++)
{
StateGroup *g = i.value();
//
qDebug() << g->size() << g->lenght();
if((current_height + g->lenght()) < this->height())
{
ui->gridLayout->addWidget(g,row,column,1,1);
row++;
current_height += g->lenght();
}
else
{
current_height = 0;
column ++;
row = 0;
this->resize(this->width() * (column+1),this->height());
}
}
}
*/
}
void StatusUI::setColor(int group,int index,StateWidget::state s)
{
if(GroupList.contains(group))
{
StateGroup *g = GroupList.value(group);
if(g)
{
g->setColor(index,s);
}
}
}
void StatusUI::setValue(int group, int index, QString s)
{
if(GroupList.contains(group))
{
StateGroup *g = GroupList.value(group);
if(g)
{
g->setValue(index,s);
}
}
}
bool StatusUI::addGroup(int index)
{
bool flag = false;
StateGroup *group = GroupList.value(index);
if(GroupList.contains(index))
{
group = GroupList.value(index);
}
else
{
group = new StateGroup(GroupList.size(),this);
GroupList.insert(index,group);
flag = true;
}
return flag;
}
StateWidget * StatusUI::install(StateGroup *group,int flag, QString name, QVariant value,QMap<QVariant,StateWidget::state> stats)
{
StateWidget *w = new StateWidget(flag,name,value,StateWidget::state::gray,group->count());
w->setStats(stats);
group->addItem(w);
return w;
}
StateWidget *StatusUI::install(StateGroup *group,int flag, QString name, QVariant value)
{
StateWidget *w = new StateWidget(flag,name,value,StateWidget::state::gray,group->count());
group->addItem(w);
return w;
}
StateWidget * StatusUI::install(int index,int flag, QString name, QVariant value)
{
StateGroup *group = GroupList.value(index);
if(GroupList.contains(index))
{
group = GroupList.value(index);
}
else
{
group = new StateGroup(GroupList.size(),this);
GroupList.insert(GroupList.size(),group);
}
StateWidget *w = new StateWidget(flag,name,value,StateWidget::state::gray,group->count());
group->addItem(w);
return w;
}
void StatusUI::setInital(void)
{
foreach (StateGroup *group, GroupList) {
QMap<int,StateWidget *> list = group->Items();
foreach (StateWidget *w, list) {
if(w)
{
w->setColor(StateWidget::gray);
}
}
}
}
void StatusUI::setFailure(void)
{
foreach (StateGroup *group, GroupList) {
QMap<int,StateWidget *> list = group->Items();
foreach (StateWidget *w, list) {
if(w)
{
w->setColor(StateWidget::red);
}
}
}
}
void StatusUI::setSuccess(void)
{
foreach (StateGroup *group, GroupList) {
QMap<int,StateWidget *> list = group->Items();
foreach (StateWidget *w, list) {
if(w)
{
w->setColor(StateWidget::green);
}
}
}
}
void StatusUI::setWarning(void)
{
foreach (StateGroup *group, GroupList) {
QMap<int,StateWidget *> list = group->Items();
foreach (StateWidget *w, list) {
if(w)
{
w->setColor(StateWidget::orange);
}
}
}
}