//--------------------------------------------------------------------------- #include #include "ITSSkinF.h" #include "ITSUtilF.h" #include "AppGlobalF.h" #include "ITSLangTransF.h" #include "ITSMapF.h" #include "WindowMsgF.h" #include "CDSSgnlCtlrF.h" #include "ITS_OPLibF.h" #include "CDSLayerF.h" #include "FrmCctvImgF.h" #include "FrmVmsMsgF.h" #include "FrmStreamPlayerF.h" #pragma hdrstop #include "EVSP000MF.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "cxButtons" #pragma link "cxClasses" #pragma link "cxContainer" #pragma link "cxControls" #pragma link "cxCustomData" #pragma link "cxData" #pragma link "cxDataStorage" #pragma link "cxDropDownEdit" #pragma link "cxEdit" #pragma link "cxFilter" #pragma link "cxGraphics" #pragma link "cxGrid" #pragma link "cxGridCustomTableView" #pragma link "cxGridCustomView" #pragma link "cxGridLevel" #pragma link "cxGridTableView" #pragma link "cxGroupBox" #pragma link "cxLabel" #pragma link "cxLookAndFeelPainters" #pragma link "cxLookAndFeels" #pragma link "cxMaskEdit" #pragma link "cxSpinEdit" #pragma link "cxSplitter" #pragma link "cxStyles" #pragma link "cxTextEdit" #pragma link "dxSkinBlue" #pragma link "dxSkinsCore" #pragma link "dxSkinscxPCPainter" #pragma link "FRAME_OpenMapF" #pragma link "FRAME_SgnlCtlrListF" #pragma link "dxSkinBlack" #pragma link "dxSkinMcSkin" #pragma link "cxPC" #pragma link "cxPCdxBarPopupMenu" #pragma link "cxCalc" #pragma link "cxCheckBox" #pragma resource "*.dfm" TEVSP000M *EVSP000M = NULL; //--------------------------------------------------------------------------- void TEVSP000M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst) { try { if (!EVSP000M) return; EVSP000M->OpenMapCallback(ASender, AFunc, AArgs, AFirst); } catch(Exception &exception) { } } //--------------------------------------------------------------------------- __fastcall TEVSP000M::TEVSP000M(TComponent* Owner) : TForm(Owner) { LangTrans->Translate(this, ITSDb_GetConnection()); ITSSkin_Load(this); CMM_LoadForm(g_sFormsDir, this); FUpdate= false; FTitle = Caption; FLayerIdx = LyrTp_Evsp; FRAMEOpenMap1->LayerIdx = FLayerIdx; FRAMEOpenMap1->MapCallbackFunc = TEVSP000M_MapCallback; //FRAMEOpenMap1->ChkShowNmbr->Caption = "±³Â÷·Î ¹øÈ£"; FRAMEOpenMap1->ChkShowNmbr->Visible = false; ChkCctv->Parent = FRAMEOpenMap1->PnlGisTool; ChkCctv->Align = alLeft; ChkVms->Parent = FRAMEOpenMap1->PnlGisTool; ChkVms->Align = alLeft; ChkCctv->Visible = true; ChkVms->Visible = true; EditMode = false; PgRunInfo->Properties->ActivePage = TsSgnlIxr; } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::CommClose() { try { CMM_SaveForm(g_sFormsDir, this); } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::FormShow(TObject *Sender) { APP_FillCode(CbType, "VHCL"); Refresh(); FRAMEOpenMap1->OpenMap(); FormInit(); TmrShow->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::FormInit() { FNewDb = false; } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::TmrShowTimer(TObject *Sender) { TmrShow->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::BtnCloseClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::FormClose(TObject *Sender, TCloseAction &Action) { CommClose(); EVSP000M = NULL; Action = caFree; } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::FormCloseQuery(TObject *Sender, bool &CanClose) { FRAMEOpenMap1->OnCloseQuery(CanClose); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst) { try { if (AFirst) { sJs.printf(L"setMapImageSize(%d, %d, %d)", LyrTp_Evsp, 24, 24); FRAMEOpenMap1->ExecScript(sJs); FRAMEOpenMap1->ExecScript("showTrafficLayer(0)"); //sJs.printf(L"setEditMode(%d, 1)", LyrTp_Link); //FRAMEOpenMap1->ExecScript(sJs); //FRAMEOpenMap1->ExecScript("initEditLayer()"); //FRAMEOpenMap1->ExecScript("setEditArrow(1)"); //FRAMEOpenMap1->ExecScript("makeEditLinkLayer()"); FRAMEOpenMap1->ExecScript("setNormalMode(1)"); FRAMEOpenMap1->ExecScript("initTrafficLayer()"); FRAMEOpenMap1->ExecScript("showTrafficTooltip(0)"); sJs.printf(L"setTrafficLayerZoomVisible(%d, '1^2^3^4^5^6^7^8^9^10^11^12')", LyrTp_Link); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"showHideTooltip(%d, 0)", LyrTp_Pos); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"setMapImagePath(%d, 'facility/carPos_')", LyrTp_Pos); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"setTrafficLayerZoomVisible(%d, '1^2^3^4^5^6^7^8^9^10^11^12')", LyrTp_Pos); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"setMapImageSize(%d, %d, %d)", LyrTp_Pos, 48, 48); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"setMapImageSize(%d, %d, %d)", LyrTp_MoveCar, 48, 48); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"showLayer(%d, %d)", LyrTp_MoveCar, 1); FRAMEOpenMap1->ExecScript(sJs); Application->ProcessMessages(); TmrInitGis->Enabled = true; return; } if (AFunc.Pos("onfacilityrightclick")) { int nLyrType; String sFID; //int X, Y; TStringList *pStringList = new TStringList; pStringList->CommaText = AArgs; try { nLyrType = pStringList->Strings[0].ToIntDef(0); sFID = pStringList->Strings[1]; //X = pStringList->Strings[4].ToIntDef(0); //Y = pStringList->Strings[5].ToIntDef(0); //if (nLyrType != LyrTp_Vds) { OnMapPopupMenu(nLyrType, sFID, false); } } catch(Exception &e) { } delete pStringList; } } catch(Exception &exception) { } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::InitGisFacility() { String sTemp; TCDSObject *pObj; TItsLayer *pLayer; ItsFacilityManager->FLists.Lock(); try { FOR_STL(TItsFacility*, pFacility, ItsFacilityManager->FLists) { pObj = pFacility->Object; if (pObj == NULL) { continue; } if (pFacility->FCLT_TYPE != "VMS" && pFacility->FCLT_TYPE != "CCTV") { continue; } pLayer = ItsLayerManager->FLists.Find(pFacility->FCLT_TYPE); if (pLayer) { if (pLayer->arrObj != "") pLayer->arrObj += "|"; sTemp.printf(L"%s,%s,%s,%.6f,%.6f,%d,0,0,0", pObj->CTLR_NMBR.c_str(), pObj->CTLR_ID.c_str(), pObj->NAME.c_str(), pObj->X_CRDN, pObj->Y_CRDN, 0); pLayer->arrObj += sTemp; } } } __finally { ItsFacilityManager->FLists.UnLock(); } FOR_STL(TItsLayer*, pLayer, ItsLayerManager->FLists) { pLayer->Visible = false; if (pLayer->arrObj != "") { sJs.printf(L"addFacility(%d, '%s')", pLayer->Index, pLayer->arrObj.c_str()); FRAMEOpenMap1->ExecScript(sJs); pLayer->arrObj = ""; sJs.printf(L"showLayer(%d, %d)", pLayer->Index, 1); FRAMEOpenMap1->ExecScript(sJs); } } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::TmrInitGisTimer(TObject *Sender) { TmrInitGis->Enabled = false; if (!FRAMEOpenMap1->MapStart) return; InitGisFacility(); LoadEvspVehicleRunInfo(); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::LoadEvspVehicleRunInfo() { if (LoadPrioSgnlReqInfr()) { LoadPrioSgnlOperIxr(); LoadPrioSgnlPath(); } LoadEmrgVhclOperHs(); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::OnMapPopupMenu(int ALayerType, String AFID, bool AOnList) { FSelId = AFID; POINT p; GetCursorPos(&p); switch(ALayerType) { case LyrTp_Cctv: pmuCctv->Popup(p.x, p.y); break; case LyrTp_Vms: pmuVms->Popup(p.x, p.y); break; } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::ShowStrmCamera(String AId, TPoint pt) { TItsFacility *pFacility = ItsFacilityManager->FLists.Find(AId); if (!pFacility) return; TCDSObject *pObj = (TCDSObject*)pFacility->Object; if (!pObj) return; try { if (pObj->FData3) { TFrmStreamPlayer *pForm = (TFrmStreamPlayer *)pObj->FData3; pForm->SetFocus(); } else { TFrmStreamPlayer *pForm = new TFrmStreamPlayer(EVSP000M); pForm->FObj.ID = pObj->CTLR_ID; pForm->FObj.NAME = pObj->NAME; pForm->FObj.STRM_ADDR = pObj->STRM_ADDR; pForm->FObj.FULL_STRM_ADDR = pObj->FULL_STRM_ADDR; pForm->FObj.Data = (TCDSObject*)pObj; pForm->FObj.FCLT_TYPE = pObj->TYPE_CD; pForm->FObj.Installed = true; pForm->Parent = EVSP000M; if ((pt.x + pForm->Width + 5) > this->Width) { pt.x = this->Width - pForm->Width - 5; } if ((pt.y + pForm->Height + 5) > this->Height) { pt.y = this->Height - pForm->Height - 5; } //pForm->Left = Left + pt.x; //pForm->Top = Top + pt.y; pForm->Left = pt.x; pForm->Top = pt.y; pObj->FData3 = (void*)pForm; pForm->Show(); } } catch(...) {} } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::ShowVmsMessage(String AId, TPoint pt) { TItsFacility *pFacility = ItsFacilityManager->FLists.Find(AId); if (!pFacility) return; TVmsCtlr *pObj = (TVmsCtlr*)pFacility->Object; if (!pObj) return; try { if (pObj->FData3) { TFrmVmsMsg *pForm = (TFrmVmsMsg *)pObj->FData3; pForm->SetFocus(); } else { TFrmVmsMsg *pForm = new TFrmVmsMsg(EVSP000M, pObj); pForm->Parent = EVSP000M; int nHG = pForm->ClientHeight - pForm->PnlVmsMsgDisp->Height; int nWG = pForm->ClientWidth - pForm->PnlVmsMsgDisp->Width; if ((pt.x + pForm->Width + 5) > this->Width) { pt.x = this->Width - pForm->Width - 5; } if ((pt.y + pForm->Height + 5) > this->Height) { pt.y = this->Height - pForm->Height - 5; } //pForm->Left = Left + pt.x; //pForm->Top = Top + pt.y; pForm->Left = pt.x; pForm->Top = pt.y; pObj->FData3 = (void*)pForm; pForm->Show(); } } catch(...) {} } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::mnuVmsCamClick(TObject *Sender) { Application->ProcessMessages(); TPoint pt; GetCursorPos(&pt); pt = EVSP000M->ScreenToClient(pt); ShowStrmCamera(FSelId, pt); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::mnuVmsMsgClick(TObject *Sender) { Application->ProcessMessages(); TPoint pt; GetCursorPos(&pt); pt = EVSP000M->ScreenToClient(pt); ShowVmsMessage(FSelId, pt); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::mnuCctvCamClick(TObject *Sender) { Application->ProcessMessages(); TPoint pt; GetCursorPos(&pt); pt = EVSP000M->ScreenToClient(pt); ShowStrmCamera(FSelId, pt); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::pmuFacilityPopup(TObject *Sender) { TPopupMenu *pPopup = (TPopupMenu*)Sender; TItsFacility *pFacility = ItsFacilityManager->FLists.Find(FSelId); if (!pFacility) return; String sLayerType = ItsLayerManager->GetLayerName(pFacility->FCLT_TYPE); if (sLayerType == "") return; TCDSObject *pObj = pFacility->Object; if (!pObj) return; pPopup->Items->Items[0]->Caption = "[" + sLayerType + "] " + pObj->NAME; } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::TvListCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo, bool &ADone) { if (AViewInfo) { String sRunInfo = AViewInfo->GridRecord->DisplayTexts[Col06->Index]; if (sRunInfo.Pos("N")) { ACanvas->Brush->Color = clYellow; ACanvas->Font->Color = clRed; } } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { TcxDataController *pGDC = TvList->DataController; int nRow = pGDC->FocusedRecordIndex; if( nRow <= -1 ) return; String sVehicleId = pGDC->Values[nRow][Col01->Index]; String sRunInfo = pGDC->Values[nRow][Col06->Index]; String sServiceId = pGDC->Values[nRow][Col05->Index]; GrpOprInfo->Caption = "¢º ¿î¿µÁ¤º¸ - " + sVehicleId; LoadEvspVehicleOprIxrInfo(sVehicleId); LoadEvspVehicleOprPathInfo(sVehicleId); TReqVhcl *pObj = FReqLists.Find(sVehicleId); if (pObj != NULL) { FRAMEOpenMap1->SelectObjectByPos(pObj->X_CRDN, pObj->Y_CRDN, true); } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::LoadEvspVehicleOprIxrInfo(String AVehicleId) { String sQry; TADOQuery *pADO = NULL; CMM_ClearGridTableView(TvIxr); sQry = "SELECT B.SRVC_ID, B.IXR_NMBR, \r\n" " NVL(C.IXR_NM, '-') AS IXR_NM, \r\n" " B.IXR_ORD \r\n" " FROM PRIO_SGNL_REQ_INFR A, \r\n" " PRIO_SGNL_OPER_IXR B, \r\n" " SGNL_IXR_MNGM C \r\n" " WHERE A.EMRG_VHCL_ID = :p01 \r\n" " AND A.END_YN = 'N' \r\n" " AND A.SRVC_ID = B.SRVC_ID \r\n" " AND B.IXR_NMBR = C.SGNL_IXR_NMBR(+) \r\n" " ORDER BY B.IXR_ORD \r\n"; try { int nRow; TvIxr->BeginUpdate(); try { pADO = new TADOQuery(NULL); pADO->Close(); pADO->Connection = ITSDb_GetConnection(); pADO->SQL->Clear(); pADO->SQL->Text = sQry; pADO->Parameters->ParamByName("p01")->Value = AVehicleId; pADO->Prepared = true; pADO->Open(); for( ; !pADO->Eof; pADO->Next()) { nRow = TvIxr->DataController->AppendRecord(); TvIxr->DataController->Values[nRow][ColIxr01->Index] = pADO->FieldByName("IXR_ORD")->AsInteger; TvIxr->DataController->Values[nRow][ColIxr02->Index] = pADO->FieldByName("SRVC_ID")->AsString; TvIxr->DataController->Values[nRow][ColIxr03->Index] = pADO->FieldByName("IXR_NMBR")->AsString + "." + pADO->FieldByName("IXR_NM")->AsString; TvIxr->DataController->Values[nRow][ColIxr06->Index] = pADO->FieldByName("IXR_NMBR")->AsString; } } catch(EDatabaseError &E) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadEvspVehicleOprIxrInfo", String(E.ClassName()), E.Message, sQry); throw Exception(String(E.ClassName()) + E.Message); } catch(Exception &exception) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadEvspVehicleOprIxrInfo", String(exception.ClassName()), exception.Message, sQry); throw Exception(String(exception.ClassName()) + exception.Message); } } __finally { if (pADO) { pADO->Close(); delete pADO; } TvIxr->EndUpdate(); } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::LoadEvspVehicleOprPathInfo(String AVehicleId) { String sQry; TADOQuery *pADO = NULL; CMM_ClearGridTableView(TvPath); sQry = "SELECT B.SRVC_ID, B.PHAS, \r\n" " TO_CHAR(B.CLCT_DT, 'YYYY-MM-DD HH24:MI:SS') AS CLCT_DT \r\n" " FROM PRIO_SGNL_REQ_INFR A, \r\n" " PRIO_SGNL_PATH B \r\n" " WHERE A.EMRG_VHCL_ID = :p01 \r\n" " AND A.END_YN = 'N' \r\n" " AND A.SRVC_ID = B.SRVC_ID \r\n" " ORDER BY B.SRVC_ID \r\n"; try { int nRow; TvPath->BeginUpdate(); try { pADO = new TADOQuery(NULL); pADO->Close(); pADO->Connection = ITSDb_GetConnection(); pADO->SQL->Clear(); pADO->SQL->Text = sQry; pADO->Parameters->ParamByName("p01")->Value = AVehicleId; pADO->Prepared = true; pADO->Open(); for( ; !pADO->Eof; pADO->Next()) { String SRVC_ID = pADO->FieldByName("SRVC_ID")->AsString; String CLCT_DT = pADO->FieldByName("CLCT_DT")->AsString; String PHAS = pADO->FieldByName("PHAS")->AsString; TStringList *pStringList = new TStringList; pStringList->CommaText = PHAS; int SEQ = 1; int IDX = 0; int COUNT = pStringList->Count; for (int ii = 0; ii < (COUNT/6); ii++) { IDX = ii * 6; float POS_X = pStringList->Strings[IDX+4].ToIntDef(0)/1000000.; float POS_Y = pStringList->Strings[IDX+5].ToIntDef(0)/1000000.; if (POS_X < 100. || POS_X > 140.) { continue; } if (POS_Y < 30. || POS_Y > 50.) { continue; } nRow = TvPath->DataController->AppendRecord(); TvPath->DataController->Values[nRow][ColPath02->Index] = SRVC_ID; TvPath->DataController->Values[nRow][ColPath01->Index] = SEQ; TvPath->DataController->Values[nRow][ColPath03->Index] = POS_X; TvPath->DataController->Values[nRow][ColPath04->Index] = POS_Y; SEQ++; } delete pStringList; } } catch(EDatabaseError &E) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadEvspVehicleOprPathInfo", String(E.ClassName()), E.Message, sQry); throw Exception(String(E.ClassName()) + E.Message); } catch(Exception &exception) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadEvspVehicleOprPathInfo", String(exception.ClassName()), exception.Message, sQry); throw Exception(String(exception.ClassName()) + exception.Message); } } __finally { if (pADO) { pADO->Close(); delete pADO; } TvPath->EndUpdate(); } } //--------------------------------------------------------------------------- bool __fastcall TEVSP000M::LoadPrioSgnlReqInfr() { String sQry; TADOQuery *pADO = NULL; sQry = "SELECT A.EMRG_VHCL_ID, NVL(A.VHCL_NMBR, A.EMRG_VHCL_ID) AS VHCL_NMBR, \r\n" " A.VHCL_KIND, A.USE_YN, \r\n" " NVL(B.SRVC_ID, '-') AS SRVC_ID, NVL(B.END_YN, '-') AS END_YN \r\n" " FROM EMRG_VHCL A \r\n" " LEFT OUTER JOIN PRIO_SGNL_REQ_INFR B \r\n" " ON A.EMRG_VHCL_ID = B.EMRG_VHCL_ID \r\n" " WHERE A.USE_YN = 'Y' \r\n" " ORDER BY B.END_YN, A.EMRG_VHCL_ID \r\n"; CMM_ClearGridTableView(TvList); bool isUpdate = false; try { int nRow; TvList->BeginUpdate(); try { pADO = new TADOQuery(NULL); pADO->Close(); pADO->Connection = ITSDb_GetConnection(); pADO->SQL->Clear(); pADO->SQL->Text = sQry; pADO->Prepared = true; pADO->Open(); for( ; !pADO->Eof; pADO->Next()) { String VHCL_ID = pADO->FieldByName("EMRG_VHCL_ID")->AsString; int VHCL_NMBR = pADO->FieldByName("VHCL_NMBR")->AsInteger; nRow = TvList->DataController->AppendRecord(); TvList->DataController->Values[nRow][Col01->Index] = VHCL_ID; TvList->DataController->Values[nRow][Col02->Index] = VHCL_NMBR; String VHCL_KIND = pADO->FieldByName("VHCL_KIND")->AsString; String USE_YN = pADO->FieldByName("USE_YN")->AsString; String END_YN = pADO->FieldByName("END_YN")->AsString; if (USE_YN == "Y") USE_YN = "[Y] »ç¿ë"; else if (USE_YN == "N") USE_YN = "[N] ¹Ì»ç¿ë"; if (END_YN == "Y") END_YN = "[Y] Á¾·á"; else if (END_YN == "N") END_YN = "[N] ¿î¿µÁß"; String VHCL_KIND_DESC = APP_GetCodeName(CbType, VHCL_KIND); TvList->DataController->Values[nRow][Col03->Index] = "[" + VHCL_KIND + "] " + VHCL_KIND_DESC; TvList->DataController->Values[nRow][Col04->Index] = USE_YN; TvList->DataController->Values[nRow][Col05->Index] = pADO->FieldByName("SRVC_ID")->AsString; TvList->DataController->Values[nRow][Col06->Index] = END_YN; TReqVhcl *pReqVhcl = FReqLists.Find(VHCL_ID); if (pReqVhcl == NULL) { isUpdate = true; pReqVhcl = new TReqVhcl(); pReqVhcl->VHCL_ID = VHCL_ID; pReqVhcl->VHCL_NMBR = String(VHCL_NMBR); pReqVhcl->VHCL_KIND_DESC = VHCL_KIND_DESC; pReqVhcl->END_YN = END_YN; FReqLists.Push(pReqVhcl->VHCL_ID, pReqVhcl); } else { if (pReqVhcl->END_YN != END_YN) { pReqVhcl->END_YN = END_YN; isUpdate = true; } } } } catch(EDatabaseError &E) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadPrioSgnlReqInfr", String(E.ClassName()), E.Message, sQry); throw Exception(String(E.ClassName()) + E.Message); } catch(Exception &exception) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadPrioSgnlReqInfr", String(exception.ClassName()), exception.Message, sQry); throw Exception(String(exception.ClassName()) + exception.Message); } } __finally { if (pADO) { pADO->Close(); delete pADO; } TvList->EndUpdate(); } return isUpdate; } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::LoadPrioSgnlOperIxr() { String sQry; TADOQuery *pADO = NULL; FIxrLists.Clear(); sQry = "SELECT A.EMRG_VHCL_ID, B.SRVC_ID, B.IXR_NMBR, \r\n" " B.IXR_ORD \r\n" " FROM PRIO_SGNL_REQ_INFR A, \r\n" " PRIO_SGNL_OPER_IXR B \r\n" " WHERE A.END_YN = 'N' \r\n" " AND A.SRVC_ID = B.SRVC_ID \r\n" " ORDER BY B.IXR_ORD \r\n"; try { int nRow; try { pADO = new TADOQuery(NULL); pADO->Close(); pADO->Connection = ITSDb_GetConnection(); pADO->SQL->Clear(); pADO->SQL->Text = sQry; pADO->Prepared = true; pADO->Open(); for( ; !pADO->Eof; pADO->Next()) { String IXR_NMBR = pADO->FieldByName("IXR_NMBR")->AsString; TSgnlCtlr* pIxr = SgnlCtlrManager->FLists.Find(IXR_NMBR); if (!pIxr) { continue; } TOprIxr *pOprIxr = new TOprIxr(); pOprIxr->VHCL_ID = pADO->FieldByName("EMRG_VHCL_ID")->AsString; pOprIxr->ORD = pADO->FieldByName("IXR_ORD")->AsInteger; pOprIxr->IXR_NMBR = IXR_NMBR; pOprIxr->X_CRDN = pIxr->X_CRDN; pOprIxr->Y_CRDN = pIxr->Y_CRDN; pOprIxr->IXR_NM = pIxr->IXR_NM; FIxrLists.Push(pOprIxr->IXR_NMBR, pOprIxr); } } catch(EDatabaseError &E) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadPrioSgnlOperIxr", String(E.ClassName()), E.Message, sQry); throw Exception(String(E.ClassName()) + E.Message); } catch(Exception &exception) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadPrioSgnlOperIxr", String(exception.ClassName()), exception.Message, sQry); throw Exception(String(exception.ClassName()) + exception.Message); } } __finally { if (pADO) { pADO->Close(); delete pADO; } } UpdateOprIxrInfo(); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::LoadPrioSgnlPath() { String sQry; TADOQuery *pADO = NULL; sQry = "SELECT A.EMRG_VHCL_ID, B.SRVC_ID, \r\n" " TO_CHAR(B.CLCT_DT, 'YYYY-MM-DD HH24:MI:SS') AS CLCT_DT, \r\n" " B.PHAS \r\n" " FROM PRIO_SGNL_REQ_INFR A, \r\n" " PRIO_SGNL_PATH B \r\n" " WHERE A.END_YN = 'N' \r\n" " AND A.SRVC_ID = B.SRVC_ID \r\n" " ORDER BY A.EMRG_VHCL_ID \r\n"; sJs.printf(L"removeLayerObject(%d)", LyrTp_CarPos); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"removeLayerObject(%d)", LyrTp_Link); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"removeLayerObject(%d)", LyrTp_Pos); FRAMEOpenMap1->ExecScript(sJs); String arrStr = ""; String arrEnd = ""; String arrObj = ""; String sTemp; String sLast = ""; try { try { pADO = new TADOQuery(NULL); pADO->Close(); pADO->Connection = ITSDb_GetConnection(); pADO->SQL->Clear(); pADO->SQL->Text = sQry; pADO->Prepared = true; pADO->Open(); for( ; !pADO->Eof; pADO->Next()) { String EMRG_VHCL_ID = pADO->FieldByName("EMRG_VHCL_ID")->AsString; String SRVC_ID = pADO->FieldByName("SRVC_ID")->AsString; String CLCT_DT = pADO->FieldByName("CLCT_DT")->AsString; String PHAS = pADO->FieldByName("PHAS")->AsString; TStringList *pStringList = new TStringList; pStringList->CommaText = PHAS; String X_CRDN_ARR = ""; String Y_CRDN_ARR = ""; int SEQ = 1; int IDX = 0; int COUNT = pStringList->Count; int TOTAL = COUNT/6; for (int ii = 0; ii < TOTAL; ii++) { IDX = ii * 6; float POS_X = pStringList->Strings[IDX+4].ToIntDef(0)/1000000.; float POS_Y = pStringList->Strings[IDX+5].ToIntDef(0)/1000000.; if (POS_X < 100. || POS_X > 140.) { continue; } if (POS_Y < 30. || POS_Y > 50.) { continue; } if (arrObj != "") arrObj += "|"; String KEY = SRVC_ID + "." + String(SEQ); if (SEQ == 1) { sTemp.printf(L"%s,%s,%d,%.6f,%.6f,0,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y); arrStr.printf(L"%s,%s,%d,%.6f,%.6f,3,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y); } else { sTemp.printf(L"%s,%s,%d,%.6f,%.6f,1,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y); sLast.printf(L"%s,%s,%d,%.6f,%.6f,2,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y); arrEnd.printf(L"%s,%s,%d,%.6f,%.6f,4,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y); } arrObj += sTemp; sTemp.printf(L"%.6f", POS_X); if (X_CRDN_ARR != "") X_CRDN_ARR += ","; X_CRDN_ARR += sTemp; sTemp.printf(L"%.6f", POS_Y); if (Y_CRDN_ARR != "") Y_CRDN_ARR += ","; Y_CRDN_ARR += sTemp; SEQ++; } sJs.printf(L"addLink('%s', '%s', '1', '%d', '%d', '%d', %d, '%s', '%s')", SRVC_ID.c_str(), SRVC_ID.c_str(), SEQ-1, SEQ-1, SEQ-1, 1, X_CRDN_ARR.c_str(), Y_CRDN_ARR.c_str()); FRAMEOpenMap1->ExecScript(sJs); delete pStringList; } } catch(EDatabaseError &E) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadPrioSgnlPath", String(E.ClassName()), E.Message, sQry); throw Exception(String(E.ClassName()) + E.Message); } catch(Exception &exception) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadPrioSgnlPath", String(exception.ClassName()), exception.Message, sQry); throw Exception(String(exception.ClassName()) + exception.Message); } } __finally { if (pADO) { pADO->Close(); delete pADO; } if (arrObj != "") { if (sLast != "") { arrObj += "|"; arrObj += sLast; } sJs.printf(L"addFacility(%d, '%s')", LyrTp_Pos, String(arrStr + "|" + arrEnd).c_str()); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"addFacility(%d, '%s')", LyrTp_CarPos, arrObj.c_str()); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"showLayer(%d, %d)", LyrTp_CarPos, 1); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"showLayer(%d, %d)", LyrTp_Pos, 1); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"showLayer(%d, %d)", LyrTp_Link, 1); FRAMEOpenMap1->ExecScript(sJs); } } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::LoadEmrgVhclOperHs() { String sQry; TADOQuery *pADO = NULL; sQry = "SELECT A.EMRG_VHCL_ID, B.SRVC_ID, \r\n" " TO_CHAR(B.CLCT_DT, 'YYYY-MM-DD HH24:MI:SS') AS CLCT_DT, \r\n" " B.CLCT_NMBR, \r\n" " B.X_CRDN/1000000 AS X_CRDN, B.Y_CRDN/1000000 AS Y_CRDN \r\n" " FROM PRIO_SGNL_REQ_INFR A, \r\n" " EMRG_VHCL_OPER_HS B \r\n" " WHERE A.END_YN = 'N' \r\n" " AND A.EMRG_VHCL_ID = B.EMRG_VHCL_ID \r\n" " AND A.SRVC_ID = B.SRVC_ID \r\n" " ORDER BY A.EMRG_VHCL_ID, B.CLCT_NMBR \r\n"; try { try { pADO = new TADOQuery(NULL); pADO->Close(); pADO->Connection = ITSDb_GetConnection(); pADO->SQL->Clear(); pADO->SQL->Text = sQry; pADO->Prepared = true; pADO->Open(); for( ; !pADO->Eof; pADO->Next()) { String VHCL_ID = pADO->FieldByName("EMRG_VHCL_ID")->AsString; TReqVhcl *pReqVhcl = FReqLists.Find(VHCL_ID); if (pReqVhcl != NULL) { pReqVhcl->END_YN = "N"; pReqVhcl->X_CRDN = pADO->FieldByName("X_CRDN")->AsFloat; pReqVhcl->Y_CRDN = pADO->FieldByName("Y_CRDN")->AsFloat; } } } catch(EDatabaseError &E) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadEmrgVhclOperHs", String(E.ClassName()), E.Message, sQry); throw Exception(String(E.ClassName()) + E.Message); } catch(Exception &exception) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORMSG("TEVSP000M::LoadEmrgVhclOperHs", String(exception.ClassName()), exception.Message, sQry); throw Exception(String(exception.ClassName()) + exception.Message); } } __finally { if (pADO) { pADO->Close(); delete pADO; } sJs.printf(L"removeLayerObject(%d)", LyrTp_MoveCar); FRAMEOpenMap1->ExecScript(sJs); String arrObj = ""; String sTemp; double X_CRDN = 0.; double Y_CRDN = 0.; FOR_STL(TReqVhcl*, pObj, FReqLists) { if (pObj->END_YN == "N" && pObj->X_CRDN != 0. && pObj->Y_CRDN != 0.) { if (arrObj != "") arrObj += "|"; X_CRDN = pObj->X_CRDN; Y_CRDN = pObj->Y_CRDN; sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", pObj->VHCL_ID.c_str(), pObj->VHCL_KIND_DESC.c_str(), pObj->VHCL_NMBR.c_str(), pObj->X_CRDN, pObj->Y_CRDN); arrObj += sTemp; } } if (arrObj != "") { sJs.printf(L"addFacility(%d, '%s')", LyrTp_MoveCar, arrObj.c_str()); FRAMEOpenMap1->ExecScript(sJs); sJs.printf(L"selectPosWithoutArrow(0, '%.7f', '%.7f')", X_CRDN, Y_CRDN); FRAMEOpenMap1->ExecScript(sJs); } } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::UpdateOprIxrInfo() { if (!FRAMEOpenMap1->MapStart) return; sJs.printf(L"removeLayerObject(%d)", FLayerIdx); FRAMEOpenMap1->ExecScript(sJs); String arrObj = ""; String sTemp; String VHCL_ID; int ORD; SgnlCtlrManager->FLists.Lock(); try { FOR_STL(TOprIxr*, pObj, FIxrLists) { //String IXR_INFO = pObj->VHCL_ID + "-" + String(pObj->ORD) + ", " + pObj->IXR_NMBR; if (arrObj != "") arrObj += "|"; sTemp.printf(L"%s,%d,%s,%.6f,%.6f,0,0,0,0", pObj->IXR_NMBR.c_str(), pObj->ORD, pObj->IXR_NM.c_str(), pObj->X_CRDN, pObj->Y_CRDN); arrObj += sTemp; } } __finally { SgnlCtlrManager->FLists.UnLock(); if (arrObj != "") { sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str()); FRAMEOpenMap1->ExecScript(sJs); } } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::ChkShowHideFacilityClick(TObject *Sender) { // CCTV/VMS Show/Hide if (!FRAMEOpenMap1->MapStart) return; TcxCheckBox *pCheckBox = (TcxCheckBox*)Sender; sJs.printf(L"showLayer(%d, %d)", pCheckBox->Tag, (pCheckBox->Checked) ? 1 : 0); FRAMEOpenMap1->ExecScript(sJs); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::TvIxrCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { TcxDataController *pGDC = TvIxr->DataController; int nRow = pGDC->FocusedRecordIndex; if( nRow <= -1 ) return; String IXR_NMBR = pGDC->Values[nRow][ColIxr06->Index]; sJs.printf(L"selectLayerObject(%d, '%s', %d)", FLayerIdx, IXR_NMBR.c_str(), FRAMEOpenMap1->MapZoom); FRAMEOpenMap1->ExecScript(sJs); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::TvPathCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { TcxDataController *pGDC = TvPath->DataController; int nRow = pGDC->FocusedRecordIndex; if( nRow <= -1 ) return; float xCrdn = pGDC->Values[nRow][ColPath03->Index]; float yCrdn = pGDC->Values[nRow][ColPath04->Index]; FRAMEOpenMap1->SelectObjectByPos(xCrdn, yCrdn, true); } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::BtnSearchClick(TObject *Sender) { TSqlCursor sqlCrs; BtnSearch->Enabled = false; LoadEvspVehicleRunInfo(); BtnSearch->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::ChkAutoRefreshClick(TObject *Sender) { BtnSearch->Enabled = !ChkAutoRefresh->Checked; if (ChkAutoRefresh->Checked) { String interVal = CboAutoRefreshSec->Text; interVal = StringReplace(interVal , "ÃÊ", "", TReplaceFlags() << rfReplaceAll); interVal = interVal.Trim(); int refreshSec = interVal.ToIntDef(5); TmrRefresh->Interval = refreshSec * 1000; TmrRefreshTimer((TObject*)TmrRefresh); } else { TmrRefresh->Enabled = false; } } //--------------------------------------------------------------------------- void __fastcall TEVSP000M::TmrRefreshTimer(TObject *Sender) { TmrRefresh->Enabled = false; BtnSearchClick((TObject*)BtnSearch); if (ChkAutoRefresh->Checked) { TmrRefresh->Enabled = true; BtnSearch->Enabled = false; } else { BtnSearch->Enabled = true; } } //---------------------------------------------------------------------------