#include "widget.h" #include "ui_widget.h" #include #include Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ownTS = QPointF(0,0); reper = QPointF(0,0); curCentr = reper; openWidget = 0; openWidgetType = 0; openAirTicket = 0; curAirTicketNum = 0; currentNum = 0; sendCCR = false; vklCCR = false; ui->setupUi(this); str2Z.clear(); QByteArray b; currentTaskNum = 0; QFile file(":/new/table2z/text.txt"); QString st; if (file.open(QFile::ReadOnly)) { for (int i=0; i<100; i++) { b = file.readLine() ; b.truncate(b.size()-2); st = QString::fromLocal8Bit(b); str2Z << st; } } file.close(); for (int i=0;i<9;i++) grScales[i] = ui->comboBox_2->itemText(i).toInt(); groundObj *go; KO tKO; cmdKO.clear(); for (int i=0;i<15;i++) { go = new groundObj(); go->exist=(i<5); go->n_Ab = i; grObj<setBoegotov(true); grObj[1]->setPos(QPointF(0, 150)); grObj[1]->setType(1); grObj[1]->setBoegotov(false); grObj[2]->setPos(QPointF(150, 0)); grObj[2]->setType(1); grObj[2]->setBoegotov(false); grObj[3]->setPos(QPointF(0, -100)); grObj[3]->setType(1); // grObj[3]->setSektor(30,170); grObj[3]->setBoegotov(false); grObj[4]->setPos(QPointF(-150, 0)); grObj[4]->setType(1); grObj[4]->setBoegotov(false); airObj *tar; for (int i=0; i<100; i++) { tar = new airObj(); tar->exist=false; tar->numer= 0; tar->uid = -1; targets<setPriznak(3); QFont f = ui->label->font(); f.setPointSizeF(10); ui->label->setFont(f); f.setBold(true); ui->label_2->setFont(f); ui->textEdit->setReadOnly(true); addLogText(QString::fromLocal8Bit("АРМ 1 - исправно")); ////////////////////// createActions1(); createMenu1(); createActions2(); createMenu2(); ///////////////////// renewArmWin(); tmr = new QTimer(this); connect(tmr, SIGNAL(timeout()), this, SLOT(renewArmWin())); connect(tmr, SIGNAL(timeout()), this, SLOT(checkTargetsAndKRU())); tmr->start(1000); tmrCheckTaskStop = new QTimer(this); connect(tmrCheckTaskStop, SIGNAL(timeout()), this, SLOT(stopTask())); ////////////////////////////////// initGraph(); ////////////////////////////////// ui->comboBox_2->setCurrentIndex(4); QTimer::singleShot(100,this, SLOT(magicTemp())); /////////////////////////////////// initNetwork(); initUprav(); ///////////////////////////////////// tmrUpr = new QTimer(this); connect(tmrUpr, SIGNAL(timeout()), SLOT(refreshUprTab())); tmrUpr->start(1000); readGroundOpt(); } Widget::~Widget() { delete ui; } void Widget::readGroundOpt() { QFile f("ground.ini"); qreal a1,a2, hmin, hmax; int alt; bool pr; if (f.open(QIODevice::ReadOnly )) { QDataStream out(&f); for (int i=1; i<6; i++) { out >> pr >> a1 >> a2 >> alt >> hmin >> hmax; grObj[i]->setSektor(a1, a2); grObj[i]->setOgrH(alt, hmin, hmax); grObj[i]->setPriznakSektor(pr); } f.close(); } else { qDebug("File 'ground.ini' not found"); } } void Widget::writeGroundOpt() { QFile f("ground.ini"); groundObj *g ; if (f.open(QIODevice::WriteOnly )) { QDataStream out(&f); for (int i = 1; i<6; i++) { g = grObj[i]; out << g->priznakSektor << g->angle1 << g->angle2 << g->alt_n << g->hMin << g->hMax; } } f.close(); } void Widget::checkTargetsAndKRU() { QTime time = QTime::currentTime(); for (int i=0; iexist) { if (targets[i]->lastTime.secsTo(time)>3) { hashIdToNum.remove(targets[i]->uid); targets[i]->deleteTarget(); } } } if ((time.second()%10) ==0) { for (int i=1; i<6; i++) { if (grObj[i]->priznakSektor) { sendKRU(i, 1); } else { sendKRU(i, 0); } } } } void Widget::stopTask() { if (tmrCheckTaskStop->isActive()) tmrCheckTaskStop->stop(); if (tmrUpr->isActive()) tmrUpr->stop(); currentTaskNum = 0; for (int i=0; i<7; i++) { if (grObj[i]->type==2) grObj[i]->activeR=1; else grObj[i]->activeR=4; grObj[i]->hasCU.clear(); for (int i=0; iactiveR; i++) grObj[i]->hasCU<<-1; } for (int i=0; i<100; i++) { if (uLines[i]!=0) { delete uLines[i]; uLines[i]=0; } targets[i]->deleteTarget(); } hashIdToNum.clear(); gsc->update(); tmrUpr->start(1000); // if (! nTmr->isActive()) nTmr->start(500); } int Widget::findTargetFromId(int id) { if (hashIdToNum.contains(id)) return hashIdToNum[id]; return -1; // int ret=-1; // for (int i=0; iuid==id) {ret = i; break;} // } // return ret; } int Widget::findNextNum(int n) { int i; for (i=n; iexist == false) { currentNum=i; return i; }; for (i=0; iexist == false) { currentNum=i; return i; }; // экстр. случай: нет свободных номеров, подаем на перезапись самую старую цель i=currentNum; currentNum = (i+1) % (targets.count()); return i; } void Widget::addTarget(int id, int aType, int gType, qreal cX, qreal cY, qreal cH, qreal vX, qreal vY) { qreal dist; QLineF lf; QString st; int num = findTargetFromId(id); if (num<0) { num=findNextNum(currentNum); targets[num]->uid=id; hashIdToNum[id]=num; targets[num]->exist=true; targets[num]->numer=num; targets[num]->setGType(gType); targets[num]->setAType(aType); targets[num]->setSpeed(vX, vY); targets[num]->setCoord(cX, cY, cH); currentNum++; } else { targets[num]->setGType(gType); targets[num]->setAType(aType); targets[num]->setSpeed(vX, vY); targets[num]->setCoord(cX, cY, cH); } // qDebug(QString::fromLocal8Bit("id = %1 num = %2").arg(id).arg(num).toAscii()); targets[num]->lastTime = QTime::currentTime(); if (vklCCR) if (!targets[num]->haveCU()) { for (int i=1; i<6;i++) { if (grObj[i]->exist) { lf = QLineF(grObj[i]->getPos(), targets[num]->getPos()); dist = lf.length(); if (dist<100) { if ((targets[num]->gType==0)||(targets[num]->gType==1)) { targets[num]->setCU(i, 21); break; } else { targets[num]->setCU(i, 22); break; } } } } } } void Widget::initNetwork() { currentTaskNum = 0; readyForTask = 0; udpSend = new QUdpSocket(this); nTmr = new QTimer(this); connect(nTmr, SIGNAL(timeout()), this, SLOT(synhrTimeout())); nTmr->start(500); udpNewTask = new QUdpSocket(this); udpNewTask->bind(6691); connect(udpNewTask, SIGNAL(readyRead()), this, SLOT(newTaskRead())); } void Widget::newTaskRead() { int len, cnt, mesType; int nAb, code2Z, tarNum; qint8 tByte; qint16 tWord; qint32 tLong; static int counterForTargets=0; int tarMesType; float fx,fy,fh, tFloat; float vx, vy, vh; fx=fy=fh=vx=vy=vh=0; int gosPr=0; QString st; QByteArray buf; buf.clear(); int ret; int uid; // для уида считываемого объекта // addLogText("newTaskRead"); groundObj *gro; QByteArray datagram; QDataStream d(&datagram, QIODevice::ReadOnly); d.setByteOrder(QDataStream::LittleEndian); while (udpNewTask->hasPendingDatagrams()) { datagram.clear(); len = udpNewTask->pendingDatagramSize(); datagram.resize(len); udpNewTask->readDatagram(datagram.data(), datagram.size()); d.setFloatingPointPrecision(QDataStream::SinglePrecision); d>>tWord; // addLogText(QString(" init1 = %1").arg(tWord)); d>>tWord; currentTaskNum = tWord; // addLogText(QString(" init2 = %1").arg(tWord)); d>>tWord; // addLogText(QString(" init3 = %1").arg(tWord)); mesType = tWord; switch (mesType) { case 2: // инициация d>>tWord>>tLong; d>>tWord; ownId = tWord; // addLogText(QString(" ownID = %1").arg(ownId)); break; case 3: // цели // if (nTmr->isActive()) nTmr->stop(); counterForTargets += 1; counterForTargets = counterForTargets % 18; if (tmrCheckTaskStop->isActive()) tmrCheckTaskStop->stop(); tmrCheckTaskStop->start(3500); d>>tWord; cnt = tWord; d>>tLong; qint16 lId; for (int i=0;i>lId; d>>tWord; tarMesType = tWord; d>>tWord; d>>tByte>>tByte; d>>fx>>fy>>fh; d>>tFloat>>tFloat>>tFloat; d>>vx>>vy>>vh; d>>tLong; d>>tByte; d>>tByte; int CDType= tByte; d>>tByte; // addLogText(tr(" size = %1").arg(tByte)); buf.resize(tByte); for (int j=0;j>tByte; buf[j] = tByte; } gosPr = 0; if (buf.size()==1) {if (int(buf[0])==0) gosPr = 2; else gosPr = 1;} // addLogText(QString(" air target = %2 %1 %3 ").arg(tarMesType).arg(lId).arg(gosPr)); if (CDType==1) { if (counterForTargets == 1 && lId /*&& tarMesType!=13 && tarMesType!=14*/) { if (tarMesType==0) { if (hashIdToNum.contains(lId)) { ret = hashIdToNum[lId]; if (targets[ret]->exist) { targets[ret]->deleteTarget(); hashIdToNum.remove(lId); } } } else { addTarget(lId, 1, gosPr, fx/100, -fy/100, fh/100, vx/10, -vy/10); } } } } break; case 6: // наземные цели gro = 0; d>>tWord>>tLong>>tWord; uid = tWord; // addLogText(QString(" gr %1").arg(uid)); gro = grObj.at(uid); gro->exist = true; d>>tWord; gro->setType(tWord); d>>fx>>fy>>fh; gro->setPos(qreal(fx/100),(qreal)-fy/100); d>>tByte; gro->setBoegotov(tByte); d>>tWord; gro->setRockets(tWord); break; case 9: d>>tWord>>tLong>>tWord; nAb = tWord; d>>tWord; tarNum = tWord; d >> fx >> fy; d >> tByte; code2Z = tByte; if (tarNum == 0) // ДКО { st=QString::fromLocal8Bit("ДКО < %1 ZZ %2%3 '%4'").arg(nAb).arg((code2Z<10)?"0":"").arg(code2Z).arg(str2Z[code2Z]); // st.append(QString::number(nAb)); // st.append(" ZZ "); // if (code2Z<10) st.append("0"); // st.append(QString::number(code2Z)); // st.append(" '"); // st.append(str2Z[code2Z]); // st.append("'"); } else { tarNum = findTargetFromId(tarNum); if (tarNum!=-1) { st = QString::fromLocal8Bit("ДКЦ < %1 по %2 ZZ %5 %3 '%4'").arg(nAb).arg(tarNum+1).arg(code2Z).arg(str2Z[code2Z]).arg((code2Z<10)?"0":""); } else { st = QString::fromLocal8Bit("ДКО < %1 ZZ %4 %2 '%3'").arg(nAb).arg(code2Z).arg(str2Z[code2Z]).arg((code2Z<10)?"0":""); } } addLogText(st); break; default: break; } } } void Widget::processSendingDatagrams(QByteArray buf, int port) { udpSend->writeDatagram(buf.data(), buf.size(), QHostAddress("192.168.1.255"), port); } void Widget::sendCU(int nAb, int ZZ, int uid, qreal x, qreal y) { QByteArray buf; QDataStream d(&buf, QIODevice::WriteOnly); d.setByteOrder(QDataStream::LittleEndian); d.setFloatingPointPrecision(QDataStream::SinglePrecision); d <<(qint16)25 << (qint16) currentTaskNum << (qint16)7 << (qint16)1; d <<(qint32)0 << (qint16) nAb; if (uid<0) uid=0; // перестраховка d << (qint16) uid; d << (float) x << (float)y; // отправлюятся перевернутые из ПВО в графические координаты d << (qint8)ZZ; if (nAb!=0) processSendingDatagrams(buf); QString st; if (uid && hashIdToNum.contains(uid)) { st = QString::fromLocal8Bit("КЦ > %1 по %2 ZZ %3%4 '%5'").arg(nAb).arg(hashIdToNum[uid]+1).arg((ZZ<10)?"0":"").arg(ZZ).arg(str2Z[ZZ]); addLogText(st); st = QString::fromLocal8Bit("uid = %1").arg(uid); addLogText(st); } else { if ((nAb>0)&&(nAb<=15)) { cmdKO[nAb].x = y/100; cmdKO[nAb].y = -x/100; cmdKO[nAb].ZZ = ZZ; st = QString::fromLocal8Bit("КО > %1 ZZ %2%3 '%4'").arg(nAb).arg((ZZ<10)?"0":"").arg(ZZ).arg(str2Z[ZZ]); if ((ZZ==77)||(ZZ==66)) { cmdKO[nAb].ZZ=99; } else addLogText(st); } else { if (nAb==0) { for (int ii=1;ii %1 ZZ %2%3 '%4'").arg(ii).arg((ZZ<10)?"0":"").arg(ZZ).arg(str2Z[ZZ]); if (grObj[ii]->exist) { addLogText(st); buf[12]=ii; processSendingDatagrams(buf); } } } } } } void Widget::sendKRU(int nAb, int zoneType) { QByteArray buf; QDataStream d(&buf, QIODevice::WriteOnly); d.setByteOrder(QDataStream::LittleEndian); d.setFloatingPointPrecision(QDataStream::SinglePrecision); d<< (qint16)63 << (qint16) currentTaskNum << (qint16)8 << (qint16)1; d<<(qint32)0 << (qint16) nAb; groundObj *gr; qreal an=-1, an_2=-1; if ((nAb>0)&&(nAb<7)) { gr = grObj[nAb]; d<<(qint8)zoneType; an_2 = (gr->angle2-gr->angle1)/2; an = gr->angle1+an_2; an_2=an_2*2; if (an_2<0) an_2+=180; if (an<0) an+=360; if (an>=360) an-=360; d << (float)an << (float)an_2; // addLogText(tr("angle [%1 %2]").arg(an).arg(an_2)); for (int i =0; i <10; i++) d<< (float)0; } else { d<<(qint8)0; for (int i=0;i<12;i++) d << (float)0; } // QString s = QString("bis = "); // s.append( QString::number(an, 'f',0)); // s.append( " len/2 = "); // s.append(QString::number(an_2, 'f',0)); // addLogText(s); processSendingDatagrams(buf); } void Widget::synhrTimeout() { // addLogText("synhrTime"); QByteArray buf; QDataStream d(&buf, QIODevice::WriteOnly); d.setByteOrder(QDataStream::LittleEndian); d<< (qint16)20; if (currentTaskNum==0) // еще не получили код задачи и постоянно шлём запросы { d << (qint16)0; } else { d<<(qint16)currentTaskNum; } d << (qint16)1 << (qint16)1; QTime time = QTime::currentTime(); d << (qint8)time.hour()<<(qint8)time.minute()<<(qint8)time.second()<<((quint8) (time.msec()/10)); // мсек измеряются до 999 - не лезет в 1 байт d << (qint16)10 << (qint16)currentTaskNum << (qint16)1 << (qint16)0 ; processSendingDatagrams(buf, 6690); } void Widget::initUprav() { gsc1 = new QGraphicsScene(this); gsc1->setSceneRect(0,0,360,460); gscUprav = new QGraphicsScene(this); gscUprav->setSceneRect(0,0,360,4600); gvUprav = ui->graphicsView_3; gvUprav->setScene(gsc1); gvUprav->centerOn(0,0); gvUprav->setLinks(&grObj, &targets); ui->graphicsView_4->setScene(gscUprav); ui->graphicsView_4->centerOn(0,0); QGraphicsLineItem *li; for (int i=69; iwidth(); i+=45) { li = new QGraphicsLineItem(); li->setPen(QPen(Qt::lightGray)); li->setLine(i, 0, i, gscUprav->height()); gscUprav->addItem(li); } for (int i=60; iheight(); i+=45) { li = new QGraphicsLineItem(); li->setPen(QPen(Qt::lightGray)); li->setLine(0, i, gscUprav->width(), i); gscUprav->addItem(li); } tmr = new QTimer(this); connect(tmr, SIGNAL(timeout()), this, SLOT(refreshUprTab())); tmr->start(1000); } void Widget::magicTemp() { ui->comboBox_4->setCurrentIndex(3); } void Widget::initGraph() { gsc = new QGraphicsScene(this); gsc->setSceneRect(-11310,-11310,22610, 22610); // в гектаметрах yellowBrick = gsc->addRect(0,0,1,1,QPen(QColor(Qt::yellow))); gv1 = ui->graphicsView; gv2 = ui->graphicsView_2; gv1->uid = 0x1; gv2->uid = 0x2; setReper(QPointF(0,0)); setOwnTS(QPointF(0,0)); curCentr = ownTS; gv1->setScene(gsc); gv1->centerOn(curCentr); gv1->setDrawCoords(); gv2->setScene(gsc); gv2->centerOn(reper); gv2->setDrawCoords(false); // gArc = new graphicsArcItem(); // gArc->setPos(ownTS); // gArc->setColor(Qt::cyan); // gArc->setAngles(15, 45); // gArc->setRadius(400); // gsc->addItem(gArc); grObj[0]->setPos(ownTS); grObj[0]->setType(0); for (int i=0; iaddItem(grObj[i]); } for (int i=0; iaddItem(targets[i]); } gv1->setLinks(&grObj, &targets); gv2->setLinks(&grObj, &targets); } void Widget::setCentr(QPointF p) { curCentr = p; int d=grScales[ui->comboBox_2->currentIndex()]*10, d2=d*2; gv1->fitInView(curCentr.x()-d,curCentr.y()-d,d2,d2, Qt::KeepAspectRatioByExpanding); gv1->setSceneRect(curCentr.x()-d,curCentr.y()-d,d2,d2); QRectF r = gv1->sceneRect(); QString s = QString("%1x%2").arg(r.width()/10).arg(r.height()/10); ui->pushButton_41->setText(s); r.setTopLeft(r.topLeft()-QPointF(5,5)); r.setBottomRight(r.bottomRight()+QPointF(5, 5)); yellowBrick->setRect(r); } void Widget::setOwnTS(QPointF p) { ownTS = p; } void Widget::setReper(QPointF p) { reper = p; gv1->reper = p; gv2->reper = p; } void Widget::renewArmWin() { QDateTime curTime = QDateTime::currentDateTime(); QString s; s = curTime.toString("dd-MM-yyyy"); ui->labelDate->setText(s); s = curTime.toString("hh:mm:ss"); ui->labelTime->setText(s); ui->pbARM1->setStyleSheet("background-color: rgb(0, 220, 100)"); ui->pbRLS->setStyleSheet("background-color: rgb(0, 220, 100)"); // ui->pbARM2->setStyleSheet("background-color: rgb(0, 220, 100)"); // ui->pbV1->setStyleSheet("background-color: rgb(0, 220, 100)"); } void Widget::addLogText(QString s) { QDateTime t = QDateTime::currentDateTime(); s.prepend(t.toString("hh:mm:ss ")); ui->textEdit->append(s); } void Widget::centerOnReper() { setCentr(reper); } void Widget::centerOnTS() { setCentr(ownTS); } void Widget::createMenu1() { QFont font(ui->label_2->font()); font.setPointSizeF(8); ui->label_2->setFont(font); QList la; menu1 = new QMenuBar(ui->Menu1); menu1->setGeometry(5,25,280,28); QFont lf = menu1->font(); lf.setPointSizeF(8); menu1->setFont(lf); mSelect = menu1->addMenu(QString::fromLocal8Bit("Селекция")); m1Sel = mSelect->addMenu(QString::fromLocal8Bit("Селекция целей")); la.clear(); la<addActions(la); mSelect->addAction(m1SelVO); m1SelNO = mSelect->addMenu(QString::fromLocal8Bit("Селекция по виду НО")); la.clear(); la<addActions(la); m1Soderzh = mSelect->addMenu(QString::fromLocal8Bit("Выбор содержимого окна")); la.clear(); la<addActions(la); la.clear(); la<addActions(la); m1Coord = mSelect->addMenu(QString::fromLocal8Bit("Координаты курсора")); la.clear(); la<addActions(la); la.clear(); la<addActions(la); mParam = menu1->addMenu(QString::fromLocal8Bit("Параметры")); m2Centr = mParam->addMenu(QString::fromLocal8Bit("Центр высветки")); la.clear(); la<addActions(la); la.clear(); la<addActions(la); m2Font = mParam->addMenu(QString::fromLocal8Bit("Шрифт")); la.clear(); la<addActions(la); mParam->addAction(m2Select); mParam->addSeparator(); mParam->addAction(m2Save); mMap = menu1->addMenu(QString::fromLocal8Bit("Карта")); la.clear(); la<addActions(la); la.clear(); } void Widget::createActions1() { m1Sel_a1 = new QAction(QString::fromLocal8Bit("для окна общей ВО..."), this); m1Sel_a2 = new QAction(QString::fromLocal8Bit("для лупы..."), this); m1SelVO = new QAction(QString::fromLocal8Bit("Селекция по виду ВО"), this); m1SelNO_a1 = new QAction(QString::fromLocal8Bit("общей ВО..."), this); m1SelNO_a2 = new QAction(QString::fromLocal8Bit("лупы..."), this); m1Soderzh_a1 = new QAction(QString::fromLocal8Bit("общей ВО..."), this); m1Soderzh_a2 = new QAction(QString::fromLocal8Bit("лупы..."), this); m1CharRLS = new QAction(QString::fromLocal8Bit("Характеристики РЛС"), this); m1CharTarg = new QAction(QString::fromLocal8Bit("Характеристики целей"), this); m1CharPeleng = new QAction(QString::fromLocal8Bit("Характеристики пеленгов"), this); m1Table = new QAction(QString::fromLocal8Bit("Таблица команд"), this); m1Coord_a1 = new QAction(QString::fromLocal8Bit("Прямоугольные (ГК)"), this); m1Coord_a2 = new QAction(QString::fromLocal8Bit("Прямоугольные (местные)"), this); m1MessRLS = new QAction(QString::fromLocal8Bit("Сообщения 1Л122-1"), this); m1Trace = new QAction(QString::fromLocal8Bit("След трассы..."), this); m2Centr_a1 = new QAction(QString::fromLocal8Bit("Репер..."), this); connect(m2Centr_a1, SIGNAL(triggered()), this, SLOT(centerOnReper())); m2Centr_a2 = new QAction(QString::fromLocal8Bit("Своя ТС"), this); connect(m2Centr_a2, SIGNAL(triggered()), this, SLOT(centerOnTS())); m2Temp = new QAction(QString::fromLocal8Bit("Темп обновления..."), this); m2Draw = new QAction(QString::fromLocal8Bit("Рисование..."), this); m2Font_a1 = new QAction(QString::fromLocal8Bit("Диалоговых окон"), this); m2Font_a2 = new QAction(QString::fromLocal8Bit("Лупы..."), this); m2Select = new QAction(QString::fromLocal8Bit("Выделение цели..."), this); m2Save = new QAction(QString::fromLocal8Bit("Сохранить"), this); m3Open = new QAction(QString::fromLocal8Bit("Открыть..."), this); m3Bright = new QAction(QString::fromLocal8Bit("Яркость..."), this); m3Layers = new QAction(QString::fromLocal8Bit("Слои..."), this); } void Widget::createMenu2() { QList la; menu2 = new QMenuBar(ui->Menu2); menu2->setGeometry(0,0,680,25); QFont lf = menu2->font(); lf.setPointSizeF(8); menu2->setFont(lf); mPrep = menu2->addMenu(QString::fromLocal8Bit("Подготовка")); mDev = menu2->addMenu(QString::fromLocal8Bit("Устройства")); mSopr = menu2->addMenu(QString::fromLocal8Bit("Сопров.")); mObob = menu2->addMenu(QString::fromLocal8Bit("ОбобщениеВО")); mUprav = menu2->addMenu(QString::fromLocal8Bit("Управление")); mReg = menu2->addMenu(QString::fromLocal8Bit("Регистрация")); mTren = menu2->addMenu(QString::fromLocal8Bit("Тренаж")); mFK = menu2->addMenu(QString::fromLocal8Bit("ФК")); mExit = menu2->addMenu(QString::fromLocal8Bit("Выход")); la.clear(); la<addActions(la); m4PerC = mPrep->addMenu(QString::fromLocal8Bit("Пересчет координат")); la.clear(); la<addActions(la); mPrep->addAction(m4Table); mPrep->addAction(m4Resend); mPrep->addSeparator(); mPrep->addAction(m4Save); mPrep->addAction(m4Load); la.clear(); la<addActions(la); la.clear(); la<addActions(la); la.clear(); la<addActions(la); m7Ukr = mObob->addMenu(QString::fromLocal8Bit("Укрупнение")); la.clear(); for (int i=0; i<8; i++) la<addActions(la); la.clear(); for (int i=0; i<6; i++) la<addActions(la); la.clear(); for (int i=0; i<5; i++) la<addActions(la); la.clear(); for (int i=0; i<7; i++) la<addActions(la); m10ImitVKP = mTren->addMenu(QString::fromLocal8Bit("Имитация ВКП")); m10ImitVKP->addAction(m10ImitVKP_a1); m10ImitVKP->addAction(m10ImitVKP_a2); mTren->addAction(m10Tren[7]); la.clear(); for (int i=0; i<7; i++) la<addActions(la); mExit->addAction(m12Restart); mExit->addAction(m12Exit); connect(ui->pb_f1, SIGNAL(clicked()), this, SLOT(msAirTicket())); connect(ui->pb_f2, SIGNAL(clicked()), this, SLOT(msAbnTicket())); connect(ui->pb_f4, SIGNAL(clicked()), this, SLOT(msResetTarget())); connect(ui->pb_f5, SIGNAL(clicked()), this, SLOT(msKillTarget())); connect(ui->pb_f6, SIGNAL(clicked()), this, SLOT(msResetCmd())); connect(ui->pb_f7, SIGNAL(clicked()), this, SLOT(msKzsTarget())); connect(ui->pb_f8, SIGNAL(clicked()), this, SLOT(msVvod2Z())); } void Widget::createActions2() { m4Conf = new QAction(QString::fromLocal8Bit("Конфигурация сети РЛИ Ctrl+11"), this); m4Reper = new QAction(QString::fromLocal8Bit("Ввод реперов Ctrl+12"), this); m4Mesto = new QAction(QString::fromLocal8Bit("Ввод местоположения Ctrl+13"), this); m4Reglam = new QAction(QString::fromLocal8Bit("Регламент М-498РЛИ Ctrl+14"), this); m4TTX = new QAction(QString::fromLocal8Bit("ТТХ подчиненного Ctrl+15"), this); m4Date = new QAction(QString::fromLocal8Bit("Дата/Время Ctrl+16"), this); m4PerC_a1 = new QAction(QString::fromLocal8Bit("Геодезические в Гаусса-Крюгера Ctrl+17"), this); m4PerC_a2 = new QAction(QString::fromLocal8Bit("Гаусса-Крюгера в геодезические Ctrl+18"), this); m4PerC_a3 = new QAction(QString::fromLocal8Bit("Гаусса-Крюгера из зоны 1 в зону 2 Ctrl+19"), this); m4Table = new QAction(QString::fromLocal8Bit("Переговорная таблица"), this); m4Resend = new QAction(QString::fromLocal8Bit("Разослать данные управления"), this); m4Save = new QAction(QString::fromLocal8Bit("Сохранение настроек"), this); m4Load = new QAction(QString::fromLocal8Bit("Загрузка настроек"), this); m5RST = new QAction(QString::fromLocal8Bit("РСТ Ctrl+23"), this); m5RLS = new QAction(QString::fromLocal8Bit("Своя РЛС Ctrl+24"), this); m5R910 = new QAction(QString::fromLocal8Bit("Р910М Ctrl+25"), this); m6AZ = new QAction(QString::fromLocal8Bit("Бланк автозахвата Ctrl+31"), this); m6AZPT = new QAction(QString::fromLocal8Bit("Бланк АЗПТ Ctrl+32"), this); m6Manual = new QAction(QString::fromLocal8Bit("Код абонента для ручного ввода Ctrl+33"), this); m7Trace = new QAction(QString::fromLocal8Bit("Параметры трассы Ctrl+41"), this); m7Otozhd = new QAction(QString::fromLocal8Bit("Параметры отождествления Ctrl+42"), this); m7Opov = new QAction(QString::fromLocal8Bit("Параметры выборочного оповещения Ctrl+43"), this); m7Ukr_1[0] = new QAction(QString::fromLocal8Bit("Ввод стробов"), this); m7Ukr_1[1] = new QAction(QString::fromLocal8Bit("Разукрупнение"), this); m7Ukr_1[2] = new QAction(QString::fromLocal8Bit("Открупнить"), this); m7Ukr_1[3] = new QAction(QString::fromLocal8Bit("Приукрупнить"), this); m7Ukr_1[4] = new QAction(QString::fromLocal8Bit("Пуск"), this); m7Ukr_1[5] = new QAction(QString::fromLocal8Bit("Сброс"), this); m7Ukr_1[6] = new QAction(QString::fromLocal8Bit("Параметры группы"), this); m7Ukr_1[7] = new QAction(QString::fromLocal8Bit("Способ укрупнения"), this); m8Upr[0] = new QAction(QString::fromLocal8Bit("Установить режимы Ctrl+51"), this); connect(m8Upr[0], SIGNAL(triggered()), this, SLOT(msCtrlModes())); m8Upr[1] = new QAction(QString::fromLocal8Bit("Ввод сектора ответственности Ctrl+52"), this); connect(m8Upr[1], SIGNAL(triggered()), this, SLOT(msVvodSectOtvet())); m8Upr[2] = new QAction(QString::fromLocal8Bit("Ввод зоны ответственности Ctrl+53"), this); m8Upr[3] = new QAction(QString::fromLocal8Bit("Выдать ДКРУ Ctrl+54"), this); m8Upr[4] = new QAction(QString::fromLocal8Bit("Выдать реперную точку Ctrl+55"), this); m8Upr[5] = new QAction(QString::fromLocal8Bit("Выдать точку стояния на ВКП Ctrl+56"), this); m9Reg[0] = new QAction(QString::fromLocal8Bit("Селекция Ctrl+62"), this); m9Reg[1] = new QAction(QString::fromLocal8Bit("Просмотр Ctrl+63"), this); m9Reg[2] = new QAction(QString::fromLocal8Bit("Воспроизведение Ctrl+64"), this); m9Reg[3] = new QAction(QString::fromLocal8Bit("Документирование Ctrl+65"), this); m9Reg[4] = new QAction(QString::fromLocal8Bit("Журнал сообщений Ctrl+66"), this); m10Tren[0] = new QAction(QString::fromLocal8Bit("Загрузка сценария Ctrl+71"), this); m10Tren[1] = new QAction(QString::fromLocal8Bit("Пуск Ctrl+72"), this); m10Tren[2] = new QAction(QString::fromLocal8Bit("Вкл имитацию б/действий Ctrl+73"), this); m10Tren[3] = new QAction(QString::fromLocal8Bit("Сброс трассы Ctrl+74"), this); m10Tren[4] = new QAction(QString::fromLocal8Bit("Источник Ctrl+75"), this); m10Tren[5] = new QAction(QString::fromLocal8Bit("Трасса Ctrl+76"), this); m10Tren[6] = new QAction(QString::fromLocal8Bit("Редактор сценариев"), this); m10Tren[7] = new QAction(QString::fromLocal8Bit("Сохранение/удаление сценариев Ctrl+79"), this); m10ImitVKP_a1 = new QAction(QString::fromLocal8Bit("КО, КЦ, ПД Ctrl+77"), this); m10ImitVKP_a2 = new QAction(QString::fromLocal8Bit("КРУ Ctrl+78"), this); m11FK[0] = new QAction(QString::fromLocal8Bit("Контрольная сумма Ctrl+81"), this); m11FK[1] = new QAction(QString::fromLocal8Bit("Навигация Ctrl+82"), this); m11FK[2] = new QAction(QString::fromLocal8Bit("Н911 Ctrl+83"), this); m11FK[3] = new QAction(QString::fromLocal8Bit("М-498РЛИ Ctrl+84"), this); m11FK[4] = new QAction(QString::fromLocal8Bit("АВСК-У Ctrl+85"), this); m11FK[5] = new QAction(QString::fromLocal8Bit("РСТ Ctrl+86"), this); m11FK[6] = new QAction(QString::fromLocal8Bit("Р910М Ctrl+89"), this); m12Restart = new QAction(QString::fromLocal8Bit("Перезапуск ПО Ctrl+95"), this); m12Exit = new QAction(QString::fromLocal8Bit("Выключение Ctrl+96"), this); } void Widget::on_pushButton_40_clicked() { ui->pushButton_39->setChecked(false); ui->pushButton_38->setChecked(false); ui->pushButton_40->setChecked(true); ui->label_2->setText(QString::fromLocal8Bit("УЧЕБНО-ТРЕНИРОВОЧНЫЙ РЕЖИМ")); ui->label_2->setStyleSheet("color: black"); } void Widget::on_pushButton_39_clicked() { ui->pushButton_39->setChecked(true); ui->pushButton_38->setChecked(false); ui->pushButton_40->setChecked(false); ui->label_2->setText(QString::fromLocal8Bit("ДЕЖУРНЫЙ РЕЖИМ")); ui->label_2->setStyleSheet("color: black"); } void Widget::on_pushButton_38_clicked() { ui->pushButton_39->setChecked(false); ui->pushButton_38->setChecked(true); ui->pushButton_40->setChecked(false); ui->label_2->setText(QString::fromLocal8Bit("БОЕВОЙ РЕЖИМ")); ui->label_2->setStyleSheet("color: red"); QMessageBox msg(this); msg.setWindowTitle(QString::fromLocal8Bit("ВНИМАНИЕ!")); msg.setIcon(QMessageBox::Information); msg.setText(QString::fromLocal8Bit("Включите звуковую сигнализацию")); msg.addButton(QString::fromLocal8Bit("Да"),QMessageBox::AcceptRole); msg.exec(); } void Widget::on_comboBox_2_currentIndexChanged(int index) { setCentr(curCentr); QTimer::singleShot(50,this, SLOT(setCentr())); } void Widget::on_comboBox_4_currentIndexChanged(int index) { int d=grScales[index]*10, d2=d*2; gv2->fitInView(reper.x()-d,reper.y()-d,d2,d2, Qt::KeepAspectRatioByExpanding); gv2->setSceneRect(reper.x()-d,reper.y()-d,d2,d2); gv2->centerOn(reper); QRectF r = gv2->sceneRect(); QString s = QString("%1x%2").arg(r.width()/10).arg(r.height()/10); ui->pushButton_50->setText(s); } void Widget::keyPressEvent ( QKeyEvent *e ) { // int c = e->key(); // static int cOld=0; // int res = 0; bool fl=true; // флаг пропускать ли дальше обработку клавиши //// обрабатываем быстрый вызов Crtl+1x, Crtl+2x, Crtl+5x и Crtl+9x // if (e->modifiers() & Qt::ControlModifier) // { // if ((c>=0x30) && (c<=0x39)) // { // if ((cOld==0x31)||(cOld==0x32)||(cOld==0x35)||(cOld==0x39)) // { // res = (cOld-0x30)*10+c-0x30; //// ui->lineEdit->setText(QString::number(res, 10)); // switch (res) // { // case 21: //// // break; // default: // break; // } // } // cOld = c; // } // else // cOld = 0; // fl =false; // } // if (e->modifiers() & Qt::AltModifier) // { // switch (c) { // case 0x31: // releaseKeyboard(); // break; // case 0x32: // releaseKeyboard(); // break; // default: // break; // } // fl = false; // } switch (e->key()) { case Qt::Key_F1: // addLogText("F1 pressed"); QTimer::singleShot(100, this, SLOT(msAirTicket())); break; case Qt::Key_F2: // addLogText("F2 pressed"); QTimer::singleShot(100, this, SLOT(msAbnTicket())); break; case Qt::Key_F3: // addLogText("F3 pressed"); break; case Qt::Key_F4: QTimer::singleShot(100, this, SLOT(msResetTarget())); // addLogText("F4 pressed"); break; case Qt::Key_F5: // addLogText("F5 pressed"); QTimer::singleShot(100, this, SLOT(msKillTarget())); break; case Qt::Key_F6: // addLogText("F6 pressed"); QTimer::singleShot(100, this, SLOT(msResetCmd())); break; case Qt::Key_F7: //// addLogText("F7 pressed"); QTimer::singleShot(100, this, SLOT(msKzsTarget())); break; case Qt::Key_F8: QTimer::singleShot(100, this, SLOT(msVvod2Z())); // addLogText("F8 pressed"); break; case Qt::Key_F9: // addLogText("F9 pressed"); break; default: break; } if (fl) QWidget::keyPressEvent(e); } void Widget::msResetTarget() { vvodnomeratrace *vnt; vnt = new vvodnomeratrace(this); vnt->setTitle(QString::fromLocal8Bit("Сброс трассы")); vnt->exec(); int num = vnt->result(); vnt->close(); if (num>0) { targets[num-1]->exist = false; targets[num-1]->uid = -1; hashIdToNum[num]=-1; } } void Widget::refreshUprTab() { upravLine *ul; bool fl; bool dbgFlag=false; if (tmrCheckTaskStop->isActive()) { for (int i=0;i<100; i++) { if (uLines[i]!=0) { if (uLines[i]->tar->exist) { if (!uLines[i]->tar->haveCU()) { delete uLines[i]; uLines[i]=0; } } else { delete uLines[i]; uLines[i]=0; } } } } for (int i=0; iexist) { if (targets[i]->haveCU()) { fl = true; for (int j=0; j<100; j++) { if (uLines[j]!=0) if (uLines[j]->tar == targets[i]) { fl = false; break; } } if (fl) // true - такой строчки еще не было { for (int j=0;j<100;j++) { if (uLines[j]==0) { ul = new upravLine(); ul->setTarget(targets[i]); gscUprav->addItem(ul); // ul->setPos(0, 60+j*45); uLines[j]=ul; break; } } } // if (uLines.indexOf(targets[i])==-1) // { // ul = new upravLine(); // ul->setTarget(targets[i]); // gscUprav->addItem(ul); // ul->setPos(0, 60+i*45); // if (uLines.indexOf(0)!=-1) // { // uLines.at(uLines.indexOf(0)) = ul; // } // else // uLines<tar == targets[i]) { delete uLines[j]; uLines[j]=0; dbgFlag = true; break; } } } } } QQueue q; for (int i=0; i<100; ++i) { if (uLines[i]==0) q.enqueue(i); else if (!q.empty()) { int pos = q.dequeue(); std::swap(uLines[i], uLines[pos]); q.enqueue(i); } } for (int i=0; i<100; ++i) if (uLines[i]) uLines[i]->setPos(0, 60+i*45); gsc1->update(); gscUprav->update(); } void Widget::msVvodSectOtvet() { vvodSectOtvet *l=new vvodSectOtvet(this); l->show(); } void Widget::msAirTicket() { int d; vvodnomeratrace vv(this); vv.exec(); d = vv.result(); if (d>0) { if (openAirTicket) openAirTicket->close(); airTicket *airT = new airTicket(d-1, this ); openAirTicket = airT; airT->show(); curAirTicketNum = d; } vv.close(); } void Widget::msAirTicketFree() { int d = curAirTicketNum; if ((d>=0)&&(targets.at(d)->exist)) { if (openAirTicket) openAirTicket->close(); airTicket *airT = new airTicket(d, this); openAirTicket = airT; airT->show(); } } void Widget::changeOpenWidget(QObject *p, int code) { if (openWidget) openWidget->close(); openWidgetType = code; openWidget = (QWidget*)p; } void Widget::clearOpenWidget() { openWidget = 0; openWidgetType = 0; } void Widget::msKillTarget() { killTarget *killT = new killTarget(this); changeOpenWidget(killT); killT->show(); } void Widget::msKzsTarget() { kzsTarget *kzsT = new kzsTarget(this); changeOpenWidget(kzsT); kzsT->show(); } void Widget::msResetCmd() { resetCmd *resCmd = new resetCmd(this); changeOpenWidget(resCmd); resCmd->show(); } void Widget::msVvod2Z() { vvod2z *l=new vvod2z(this); changeOpenWidget(l, 2); l->show(); } void Widget::msAbnTicket() { abnticket *l=new abnticket(this); l->show(); } void Widget::msCtrlModes() { ctrlMode *l = new ctrlMode(this); changeOpenWidget(l); l->show(); }