//--------------------------------------------------------------------------- #include #include "ITSSkinF.h" #include "ITSUtilF.h" #include "AppGlobalF.h" #include "CDSCodeF.h" #include "CDSFacilityF.h" #include "CDSNodeF.h" #include "CDSLinkF.h" #include "ITSLangTransF.h" #include "ITSMapF.h" #include "CDSLayerF.h" #include "ITS_OPLibF.h" #pragma hdrstop #include "CRSM200MF.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "FRAME_CrsCamListF" #pragma link "cxButtons" #pragma link "cxCheckBox" #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 "dxSkinBlack" #pragma link "dxSkinBlue" #pragma link "dxSkinsCore" #pragma link "dxSkinscxPCPainter" #pragma link "FRAME_OpenMapF" #pragma link "cxCalc" #pragma link "dxSkinMcSkin" #pragma resource "*.dfm" TCRSM200M *CRSM200M = NULL; //--------------------------------------------------------------------------- void TCRSM200M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst) { try { if (!CRSM200M) return; CRSM200M->OpenMapCallback(ASender, AFunc, AArgs, AFirst); } catch(Exception &exception) { } } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- __fastcall TCRSM200M::TCRSM200M(TComponent* Owner) : TForm(Owner) { LangTrans->Translate(this, ITSDb_GetConnection()); ITSSkin_Load(this); CMM_LoadForm(g_sFormsDir, this); FUpdate= false; FTitle = Caption; m_pGDC = FRAMECrsCamList1->TvList->DataController; FRAMECrsCamList1->PnlTop->Visible = false; FRAMECrsCamList1->PnlBottom->Visible = false; FRAMECrsCamList1->ColumnSel->Visible = false; FLayerIdx = LyrTp_CrsCam; FRAMEOpenMap1->LayerIdx = FLayerIdx; FRAMEOpenMap1->MapCallbackFunc = TCRSM200M_MapCallback; FRAMEOpenMap1->ChkShowNmbr->Caption = "Ä«¸Þ¶ó ID"; EditMode = false; } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::CommClose() { try { CMM_SaveForm(g_sFormsDir, this); } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::FormShow(TObject *Sender) { Refresh(); FRAMEOpenMap1->OpenMap(); CbCTLR_MNGM_NMBR->Properties->Items->Clear(); CrossManager->FLists.Lock(); try { FOR_STL(TCross*, pObj, CrossManager->FLists) { if (pObj->DEL_YN == "Y") continue; String sId = pObj->CTLR_NMBR; //°ü¸®¹øÈ£ String sNm = pObj->NAME; //À§Ä¡ CbCTLR_MNGM_NMBR->Properties->Items->Add("[" + sId + "] " + sNm); pObj->FData3 = NULL; FOR_STL(TCrossCam*, pTmp, pObj->FLists) { if (pTmp->DEL_YN == "Y") continue; pTmp->FData3 = NULL; } } } __finally { CrossManager->FLists.UnLock(); } CbCTLR_MNGM_NMBR->ItemIndex = -1; FormInit(); ChangeEditMode(1); TmrShow->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::FormInit() { EdCrossId->Text = ""; EdNmbr->Text = ""; EdCamId->Text = ""; EdCamNm->Text = ""; EdCtlrIp->Text = ""; EdRtspUrl->Text = ""; EdRtspId->Text = ""; EdRtspPwd->Text = ""; ChkRightTurn->Checked = true; SePosX->Value = 0; SePosY->Value = 0; Cb_USE_YN->ItemIndex = 1; FNewDb = false; } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::TmrShowTimer(TObject *Sender) { TmrShow->Enabled = false; //CrossManager->LoadCrossCam(); UpdateList(); } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::UpdateList() { FRAMECrsCamList1->UpdateList(); } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::BtnCloseClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::FormClose(TObject *Sender, TCloseAction &Action) { CommClose(); CRSM200M = NULL; Action = caFree; } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::FormCloseQuery(TObject *Sender, bool &CanClose) { if (FUpdate) { POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0); } FRAMECrsCamList1->OnCloseQuery(CanClose); FRAMEOpenMap1->OnCloseQuery(CanClose); } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::DisplayInfo(TCrossCam* AObj, bool AMoveObj/*=true*/) { FormInit(); if (!AObj) return; if (AMoveObj) { sJs.printf(L"selectLayerObject(%d, '%s', %d)", FLayerIdx, AObj->CTLR_NMBR.c_str(), FRAMEOpenMap1->MapZoom); FRAMEOpenMap1->ExecScript(sJs); } CMM_SetComboBoxItem(CbCTLR_MNGM_NMBR, AObj->CROSS_ID); EdCrossId->Text = AObj->CROSS_ID; EdNmbr->Text = AObj->CTLR_NMBR; EdCamId->Text = AObj->CTLR_NMBR; EdCamNm->Text = AObj->NAME; EdCtlrIp->Text = AObj->IP; EdRtspUrl->Text = AObj->RTSP_URL; EdRtspId->Text = AObj->ID; EdRtspPwd->Text = AObj->PWD; ChkRightTurn->Checked = AObj->RIGHT_USE == "1" ? true : false; SeRtspPort->Value = AObj->RTSP_PORT; SeHttpPort->Value = AObj->HTTP_PORT; SeAngle->Value = AObj->ANGLE; SePosX->Value = AObj->X_CRDN; SePosY->Value = AObj->Y_CRDN; //Cb_USE_YN->Text = AObj->DEL_YN; ChangeEditMode(3); } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::UpdateIcon() { if (!FRAMEOpenMap1->MapStart) return; sJs.printf(L"removeLayerObject(%d)", FLayerIdx); FRAMEOpenMap1->ExecScript(sJs); String arrObj = ""; String sTemp; CrossManager->FLists.Lock(); try { FOR_STL(TCross*, pTmp, CrossManager->FLists) { if (pTmp->DEL_YN == "Y") continue; FOR_STL(TCrossCam*, pObj, pTmp->FLists) { if (pObj->DEL_YN == "Y") continue; if (arrObj != "") arrObj += "|"; sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", pObj->CTLR_NMBR.c_str(), pObj->CTLR_NMBR.c_str(), pObj->NAME.c_str(), pObj->X_CRDN, pObj->Y_CRDN); arrObj += sTemp; } } } __finally { CrossManager->FLists.UnLock(); if (arrObj != "") { sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str()); FRAMEOpenMap1->ExecScript(sJs); } } } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::BtnEditClick(TObject *Sender) { String sCrossId = EdCrossId->Text; String sCamId = EdNmbr->Text; TCross *pCross = CrossManager->FLists.Find(sCrossId); TCrossCam *pObj = NULL; if (pCross) { pObj = pCross->FLists.Find(sCamId); } if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"ÆíÁý") { ChangeEditMode(0); if (pObj) { //½Ã¼³¹°¾ÆÀÌÄÜÀ» ÆíÁý¾ÆÀÌÄÜÀ¸·Î º¯°æ //function editFacilityObject(ALyrIdx, ANmbr, AComm(0:¿À·ù-ÆíÁý,1:Á¤»ó), AEdit(ÆíÁý¸ðµå:1-ÆíÁý,0-ÆíÁýÃë¼Ò)) sJs.printf(L"editFacilityObject(%d, '%s', 1, 1)", FLayerIdx, pObj->CTLR_NMBR.c_str()); FRAMEOpenMap1->ExecScript(sJs); FNewDb = false; } } else { //ÆíÁý¸ðµå Ãë¼Ò ChangeEditMode(1); if (pObj) { //¿ø·¡ Á¤º¸¸¦ È­¸é¿¡ Ç¥Ãâ CMM_SetGridRow(FRAMECrsCamList1->CxList, FRAMECrsCamList1->TvList, sCamId, FRAMECrsCamList1->Column02->Index); DisplayInfo(pObj, false); //Ãß°¡ ¸ðµå¿¡¼­ Ãë¼ÒÇÏ´Â °æ¿ì Áöµµ¿¡ ½Å±Ô·Î Ãß°¡ÇÑ °´Ã¼¸¦ ã¾Æ¼­ »èÁ¦ÇØ ÁÖ´Â°Í º¸´Ù //»õ·Ó°Ô ´Ù½Ã ±×¸®ÀÚ UpdateIcon(); } else { //°´Ã¼°¡ ¾ø´Â °æ¿ì´Â Ãß°¡ ¸ðµå¿¡¼­ Ãë¼ÒÇÑ °æ¿ìÀÓ sJs.printf(L"removeFacilityObject(%d, '%s')", FLayerIdx, sCamId.c_str()); FRAMEOpenMap1->ExecScript(sJs); } } } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::ChangeEditMode(int AEdit) { bool bGisEdit = true; bool bEnabled = false; switch(AEdit) { case 0: //ÆíÁý¹öưŬ¸¯ { BtnEdit->Enabled = true; BtnInsert->Enabled = false; BtnDelete->Enabled = false; BtnSave->Enabled = true; BtnEdit->Caption = FrmLang->lblCancel->Caption;//"Ãë¼Ò"; BtnEdit->Hint = FrmLang->lblCancel->Hint;//µ¥ÀÌÅÍ ÆíÁý Ãë¼Ò"; bEnabled = true; EditMode = true; } break; case 1: //ÆíÁý[Ãë¼Ò]¹öưŬ¸¯ { FormInit(); //È­¸éÀ» ¸ðµÎ Áö¿î´Ù. BtnEdit->Enabled = false; BtnInsert->Enabled = true; BtnDelete->Enabled = false; BtnSave->Enabled = false; BtnEdit->Caption = FrmLang->lblEdit->Caption;//"ÆíÁý"; BtnEdit->Hint = FrmLang->lblEdit->Hint;//µ¥ÀÌÅÍ ÆíÁý"; bEnabled = true; bGisEdit = false; EditMode = false; } break; case 2: //Ãß°¡ { BtnEdit->Enabled = true; BtnInsert->Enabled = false; BtnDelete->Enabled = false; BtnSave->Enabled = true; BtnEdit->Caption = FrmLang->lblCancel->Caption;//"Ãë¼Ò"; BtnEdit->Hint = FrmLang->lblCancel->Hint;//µ¥ÀÌÅÍ ÆíÁý Ãë¼Ò"; bEnabled = false; EditMode = true; } break; case 3: //¼öÁ¤¸ðµå { BtnEdit->Enabled = true; BtnInsert->Enabled = true; BtnDelete->Enabled = true; BtnSave->Enabled = false; BtnEdit->Caption = FrmLang->lblEdit->Caption;//"ÆíÁý"; BtnEdit->Hint = FrmLang->lblEdit->Hint;//µ¥ÀÌÅÍ ÆíÁý"; bEnabled = true; EditMode = true; } break; } if (AEdit == 0 || AEdit == 2) { FRAMECrsCamList1->CxList->Enabled = false; } else { FRAMECrsCamList1->CxList->Enabled = true; } CbCTLR_MNGM_NMBR->Properties->ReadOnly = bEnabled; PnlEdit->Enabled = EditMode; } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::BtnInsertClick(TObject *Sender) { int nMsgType = MB_OK|MB_ICONERROR|MB_APPLMODAL; String sCrossId = ITSUtil_GetCode(CbCTLR_MNGM_NMBR->Text); if (sCrossId == "") { Application->MessageBox(L"±³Åë·®±³Â÷·Î Á¤º¸¸¦ ¼±ÅÃÇϼ¼¿ä.", FTitle.c_str(), nMsgType); return; } String sCamId = InputBox("Ä«¸Þ¶ó ID", "½Å±Ô Ä«¸Þ¶ó ID¸¦ ÀÔ·ÂÇϼ¼¿ä.", "ÃÖ´ë10ÀÚ¸®" ); sCamId = sCamId.Trim(); if (sCamId == "ÃÖ´ë10ÀÚ¸®" || sCamId == "") { return; } if (AnsiString(sCamId).Length() > 10) { Application->MessageBox(L"Ä«¸Þ¶ó ID´Â 10Byte¸¦ ÃʰúÇÒ ¼ö ¾ø½À´Ï´Ù.", FTitle.c_str(), nMsgType); return; } CrossManager->FLists.Lock(); FOR_STL(TCross*, pObj, CrossManager->FLists) { TCrossCam *pDb = pObj->FLists.Find(sCamId); if (pDb) { String sErr = "Ä«¸Þ¶ó ID [" + sCamId + "]´Â ÀÌ¹Ì »ç¿ë Áß ÀÔ´Ï´Ù."; Application->MessageBox(sErr.c_str(), FTitle.c_str(), nMsgType); CrossManager->FLists.UnLock(); return; } } CrossManager->FLists.UnLock(); FormInit(); EdCrossId->Text = sCrossId; EdNmbr->Text = sCamId; EdCamId->Text = EdNmbr->Text; SePosX->Value = FRAMEOpenMap1->CenterX; SePosY->Value = FRAMEOpenMap1->CenterY; //Áöµµ¿¡ »õ·Î¿î ½Ã¼³¹° ¾ÆÀÌÄÜ Ãß°¡Çϸ鼭 ÆíÁý¸ðµå·Î º¯°æ String arrObj = ""; arrObj.printf(L"'%s',New,New,%.6f,%.6f,0", sCamId.c_str(), FRAMEOpenMap1->CenterX, FRAMEOpenMap1->CenterY); sJs.printf(L"addFacilityObject(%d, '%s')", FLayerIdx, arrObj.c_str()); FRAMEOpenMap1->ExecScript(sJs); ChangeEditMode(2); FNewDb = true; } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::BtnDeleteClick(TObject *Sender) { int nIdx = m_pGDC->FocusedRecordIndex; if (nIdx < 0) return; TCross *pCross; TCrossCam *pObj; String sCamId = EdNmbr->Text; String sCrossId = ITSUtil_GetCode(CbCTLR_MNGM_NMBR->Text); pCross = CrossManager->FLists.Find(sCrossId); if (pCross) { pObj = pCross->FLists.Find(sCamId); } if (!pCross || !pObj) { Application->MessageBox(lblText2->Caption.c_str(), FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL); return; } String sMsg; sMsg = lblText3->Caption + ": " + sCamId; sMsg+= "\r\n" + lblText4->Caption; if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return; if (pObj) { if (CrossManager->DeleteCrossCam(pObj)) { pObj->DEL_YN = "Y"; UpdateList(); } Application->MessageBox(lblText5->Caption.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL); FUpdate = true; FormInit(); ChangeEditMode(1); UpdateIcon(); } } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::BtnSaveClick(TObject *Sender) { TCross *pCross; TCrossCam *pObj; String sCamId = EdNmbr->Text; String sCrossId = ITSUtil_GetCode(CbCTLR_MNGM_NMBR->Text); pCross = CrossManager->FLists.Find(sCrossId); if (!pCross || EdCrossId->Text.Trim().IsEmpty() || EdCamId->Text.Trim().IsEmpty() || EdNmbr->Text.Trim().IsEmpty() || EdCamNm->Text.Trim().IsEmpty() || SePosX->Value == 0 || SePosY->Value == 0 || CbCTLR_MNGM_NMBR->ItemIndex < 0 ) { Application->MessageBox(FrmLang->lblCnfm->Caption.c_str(), FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL); return; } if (!FNewDb) { //¼öÁ¤¸ðµåÀ϶§ ÄÁÆ®·Ñ·¯°¡ ´Ù¸£´Ù¸é ½Å±Ô·Î ó¸®ÇÑ´Ù. if (EdCrossId->Text != sCrossId) { TCross *pTmpCross = CrossManager->FLists.Find(EdCrossId->Text); if (pTmpCross) { pTmpCross->FLists.Remove(sCamId); } FNewDb = true; } } if (FNewDb) { pObj = new TCrossCam(); pObj->DEL_YN = "N"; } else { pObj = pCross->FLists.Find(sCamId); } if (pObj) { pObj->CROSS_ID = EdCrossId->Text; pObj->CTLR_NMBR = EdCamId->Text; pObj->NAME = EdCamNm->Text.Trim(); pObj->IP = EdCtlrIp->Text.Trim(); pObj->RTSP_URL = EdRtspUrl->Text.Trim(); pObj->ID = EdRtspId->Text.Trim(); pObj->PWD = EdRtspPwd->Text.Trim(); pObj->RIGHT_USE = ChkRightTurn->Checked ? "1" : "0"; pObj->RTSP_PORT = SeRtspPort->Value; pObj->HTTP_PORT = SeHttpPort->Value; pObj->ANGLE = SeAngle->Value; pObj->X_CRDN = SePosX->Value; pObj->Y_CRDN = SePosY->Value; bool bResult; bResult = CrossManager->SaveCrossCam(pObj); if (bResult) { Application->MessageBox(FrmLang->lblDbSave->Caption.c_str(),//L"VDS-°ËÁö±â Á¤º¸ÀúÀå\r\nVDS-°ËÁö±â Á¤º¸¸¦ ÀúÀå ÇÏ¿´½À´Ï´Ù.", FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL); if (FNewDb) { pCross->FLists.Push(pObj->CTLR_NMBR, pObj); TCrossCam *pTmp = new TCrossCam(); pObj->Copy(pTmp); CrossManager->FCamLists.Push(pTmp->CTLR_NMBR, pTmp); } FUpdate = true; UpdateList(); UpdateIcon(); CMM_SetGridRow(FRAMECrsCamList1->CxList, FRAMECrsCamList1->TvList, sCamId, FRAMECrsCamList1->Column02->Index); DisplayInfo(pObj, true); } } } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::FRAMECrsCamList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { if (!ACellViewInfo) return; int nRow = FRAMECrsCamList1->TvList->DataController->FocusedRecordIndex; if( nRow <= -1 ) return; int nMemPtr = FRAMECrsCamList1->TvList->DataController->Values[nRow][FRAMECrsCamList1->Column99->Index]; TCrossCam* pObj = (TCrossCam*)nMemPtr; DisplayInfo(pObj); } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::UpdateEditLink() { if (!FRAMEOpenMap1->MapStart) return; TItsNode* pNode; String STRT_NM; String END_NM; try { ItsLinkManager->FLists.Lock(); try { FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists) { if (pLink->DEL_YN == "Y") continue; #if 0 pVrtx = pLink->Vrtxs.Find(nZoom); if (!pVrtx) continue; pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID); if (pNode) STRT_NM = pNode->NODE_NAME; else STRT_NM = " "; pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID); if (pNode) END_NM = pNode->NODE_NAME; else END_NM = " "; sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')", pLink->LINK_ID.c_str(), pLink->ROAD_NAME.c_str(), STRT_NM.c_str(), END_NM.c_str(), pVrtx->X_CRDN_ARR.c_str(), pVrtx->Y_CRDN_ARR.c_str()); FRAMEOpenMap1->ExecScript(sJs); #else if (pLink->IsVertex) { pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID); if (pNode) STRT_NM = pNode->NODE_NAME; else STRT_NM = " "; pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID); if (pNode) END_NM = pNode->NODE_NAME; else END_NM = " "; sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')", pLink->LINK_ID.c_str(), pLink->ROAD_NAME.c_str(), STRT_NM.c_str(), END_NM.c_str(), pLink->X_CRDN_ARR.c_str(), pLink->Y_CRDN_ARR.c_str()); FRAMEOpenMap1->ExecScript(sJs); } #endif } } __finally { ItsLinkManager->FLists.UnLock(); } FRAMEOpenMap1->ExecScript("makeEditLinkLayer()"); } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst) { try { if (AFirst) { //Áöµµ¸¦ ÆíÁý¸ðµå·Î º¯°æ sJs.printf(L"setEditMode(%d, 1)", FLayerIdx); FRAMEOpenMap1->ExecScript(sJs); //½Ã¼³¹°¾ÆÀÌÄÜ µî·Ï UpdateIcon(); sJs.printf(L"extentLayer(%d)", FLayerIdx); FRAMEOpenMap1->ExecScript(sJs); return; } if (AFunc.Pos("onfacilitydragend")) { TStringList *pStringList = new TStringList; pStringList->CommaText = AArgs; try { String sNmbr = pStringList->Strings[0]; String sCenterLat = pStringList->Strings[1]; String sCenterLng = pStringList->Strings[2]; SePosX->Value = sCenterLat.ToDouble(); SePosY->Value = sCenterLng.ToDouble(); } catch(Exception &e) { } delete pStringList; } } catch(Exception &exception) { } } //--------------------------------------------------------------------------- void __fastcall TCRSM200M::ChkViewIconClick(TObject *Sender) { if (!FRAMEOpenMap1->MapStart) return; sJs.printf(L"showLayerText(%d, %d)", FLayerIdx, (ChkViewIcon->Checked) ? 1: 0); FRAMEOpenMap1->ExecScript(sJs); } //---------------------------------------------------------------------------