/**************************************************************************** * @source : * @description : **************************************************************************** * DATE AUTHOR DESCRIPTION * -------------------------------------------------------------------------- * 2011/12/24 Á¤½ÂÈ£ ÃÖÃÊÀÛ¼º * ****************************************************************************/ //--------------------------------------------------------------------------- #include #include "ITSSkinF.h" #include "ITSUtilF.h" #include "AppGlobalF.h" #include "CDSNodeF.h" #include "CDSLinkF.h" #include "CDSServiceLinkF.h" #include "XiMapUtilF.h" #pragma hdrstop #include "ITSSELAMF.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "cxButtons" #pragma link "cxContainer" #pragma link "cxControls" #pragma link "cxEdit" #pragma link "cxGraphics" #pragma link "cxGroupBox" #pragma link "cxLookAndFeelPainters" #pragma link "cxLookAndFeels" #pragma link "cxPC" #pragma link "cxPCdxBarPopupMenu" #pragma link "cxSplitter" #pragma link "dxSkinBlack" #pragma link "dxSkinBlue" #pragma link "dxSkinCaramel" #pragma link "dxSkinCoffee" #pragma link "dxSkinDarkRoom" #pragma link "dxSkinDarkSide" #pragma link "dxSkinFoggy" #pragma link "dxSkinGlassOceans" #pragma link "dxSkiniMaginary" #pragma link "dxSkinLilian" #pragma link "dxSkinLiquidSky" #pragma link "dxSkinLondonLiquidSky" #pragma link "dxSkinMcSkin" #pragma link "dxSkinMoneyTwins" #pragma link "dxSkinOffice2007Black" #pragma link "dxSkinOffice2007Blue" #pragma link "dxSkinOffice2007Green" #pragma link "dxSkinOffice2007Pink" #pragma link "dxSkinOffice2007Silver" #pragma link "dxSkinOffice2010Black" #pragma link "dxSkinOffice2010Blue" #pragma link "dxSkinOffice2010Silver" #pragma link "dxSkinsCore" #pragma link "dxSkinscxPCPainter" #pragma link "dxSkinSeven" #pragma link "dxSkinSharp" #pragma link "dxSkinSilver" #pragma link "dxSkinStardust" #pragma link "FRAME_GisMapF" #pragma link "FRAME_LinkListF" #pragma link "FRAME_NodeListF" #pragma link "FRAME_RoadListF" #pragma link "FRAME_ServiceLinkListF" #pragma link "cxLabel" #pragma link "cxTextEdit" #pragma link "cxCalc" #pragma link "cxCalendar" #pragma link "cxClasses" #pragma link "cxCustomData" #pragma link "cxData" #pragma link "cxDataStorage" #pragma link "cxFilter" #pragma link "cxGrid" #pragma link "cxGridCustomTableView" #pragma link "cxGridCustomView" #pragma link "cxGridLevel" #pragma link "cxGridTableView" #pragma link "cxSpinEdit" #pragma link "cxStyles" #pragma resource "*.dfm" TITSSELAM *ITSSELAM = NULL; const String LEVEL1_LINK_LAYER_NAME = "GD_LINK_LV7.dvf"; const String LEVEL2_LINK_LAYER_NAME = "GD_LINK_LV6.dvf"; const String LEVEL3_LINK_LAYER_NAME = "GD_LINK_LV5.dvf"; const String LEVEL1_NODE_LAYER_NAME = "GD_NODE_LV7.dvf"; const String LEVEL2_NODE_LAYER_NAME = "GD_NODE_LV6.dvf"; const String LEVEL3_NODE_LAYER_NAME = "GD_NODE_LV5.dvf"; //--------------------------------------------------------------------------- __fastcall TITSSELAM::TITSSELAM(TComponent* Owner) : TForm(Owner) { ITSSkin_Load(this); CMM_LoadForm(g_sFormsDir, this); FTitle = "±¸°£ ¼±ÅÃ"; FRefreshId = ""; FSelPosX = "0"; FSelPosY = "0"; FLinkLevel = 1; FSelected = false; FMultiSelect = false; FLinkId = ""; FPosX = FPosY = 0; FMouseDownPosX = FMouseDownPosY = 0; PgList->Properties->ActivePage = TabNode; TvList->OptionsView->NoDataToDisplayInfoText = "<¼±Åñ¸°£¸ñ·Ï>"; FRAMENodeList1->PnlTop->Visible = false; //FRAMENodeList1->PnlBottom->Visible = false; FRAMELinkList1->PnlTop->Visible = false; //FRAMELinkList1->PnlBottom->Visible = false; FRAMEServiceLinkList1->PnlTop->Visible = false; //FRAMEServiceLinkList1->PnlBottom->Visible = false; FRAMERoadList1->PnlTop->Visible = false; //FRAMERoadList1->PnlBottom->Visible = false; } //--------------------------------------------------------------------------- /* * ´Ý±â¹öư À̳ª x¹öư Ŭ¸¯½Ã °øÅëÀ¸·Î ó¸®ÇÏ´Â ·ÎÁ÷À̵é¾î°£´Ù.. * Form°ú DataModule class¸¦ delete½ÃŲ´Ù. * arguments * * return * void */ void __fastcall TITSSELAM::CommClose() { try { CMM_SaveForm(g_sFormsDir, this); } catch(...) { } } //--------------------------------------------------------------------------- /* * FormÀ» º¸¿©ÁÙ¶§ È£ÃâµÇ´Â event ¸Þ¼­µåÀÌ´Ù. * arguments * Sender : event handler °´Ã¼ * return * void */ void __fastcall TITSSELAM::FormShow(TObject *Sender) { Refresh(); FormInit(); TmrShow->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::SetLinkLevel(int ALinkLevel) { TabLink->Visible = false; TabLink->TabVisible = false; TabServiceLink->Visible = false; TabServiceLink->TabVisible = false; TabRoad->Visible = false; TabRoad->TabVisible = false; switch(ALinkLevel) { case 1: FRAMELinkList1->UpdateList(); TabLink->Visible = true; TabLink->TabVisible = true; break; case 2: FRAMEServiceLinkList1->UpdateList(); TabServiceLink->Visible = true; TabServiceLink->TabVisible = true; break; case 3: FRAMERoadList1->UpdateList(); TabRoad->Visible = true; TabRoad->TabVisible = true; break; default: return; } FLinkLevel = ALinkLevel; FRAMEGisMap1->LinkLevel = ALinkLevel; } //--------------------------------------------------------------------------- /* * form ÃʱâÈ­ * * arguments * * return * void */ void __fastcall TITSSELAM::FormInit() { FRAMENodeList1->UpdateList(); } //--------------------------------------------------------------------------- /* * FormÀÌ ShowµÇ°í ³­ ÈÄ ÃÖÃÊ 1ȸ ¼öÇàµÇ´Â ŸÀÌ¸Ó À̺¥Æ® * arguments * Sender : event handler °´Ã¼ * return * void */ void __fastcall TITSSELAM::TmrShowTimer(TObject *Sender) { TmrShow->Enabled = false; FRAMEGisMap1->LoadGisMap(); BtnSearchClick((TObject*)BtnSearch); Application->ProcessMessages(); RefreshId(); } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::RefreshId() { if (FRefreshId.IsEmpty()) return; SelGisItem(FLinkLevel, FRefreshId); Application->ProcessMessages(); } //--------------------------------------------------------------------------- /* * Search ¹öư Ŭ¸¯ À̺¥Æ® Çڵ鷯 * arguments * Sender : event handler °´Ã¼ * return * void */ void __fastcall TITSSELAM::BtnSearchClick(TObject *Sender) { RefreshData(); } //--------------------------------------------------------------------------- /* * Refresh Data Event Function * arguments * * return * void */ void __fastcall TITSSELAM::RefreshData() { } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::SelListData() { } //--------------------------------------------------------------------------- /* * Close ¹öư Ŭ¸¯ À̺¥Æ® Çڵ鷯 * arguments * Sender : event handler °´Ã¼ * return * void */ void __fastcall TITSSELAM::BtnCloseClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::FormClose(TObject *Sender, TCloseAction &Action) { CommClose(); ITSSELAM = NULL; //Action = caFree; } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::FRAMENodeList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { int nIndex = Sender->DataController->FocusedRecordIndex; if (nIndex < 0) return; SelGisItem(0, Sender->DataController->Values[nIndex][FRAMENodeList1->Column01->Index]); } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::FRAMELinkList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { int nIndex = Sender->DataController->FocusedRecordIndex; if (nIndex < 0) return; SelGisItem(1, Sender->DataController->Values[nIndex][FRAMELinkList1->Column01->Index]); } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::FRAMEServiceLinkList1TvListCellClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { int nIndex = Sender->DataController->FocusedRecordIndex; if (nIndex < 0) return; SelGisItem(2, Sender->DataController->Values[nIndex][FRAMEServiceLinkList1->Column01->Index]); } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::FRAMERoadList1TvListCellClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { int nIndex = Sender->DataController->FocusedRecordIndex; if (nIndex < 0) return; SelGisItem(3, Sender->DataController->Values[nIndex][FRAMERoadList1->Column01->Index]); } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::BtnSelectClick(TObject *Sender) { if (TvList->DataController->RecordCount <= 0) { Application->MessageBox(L"±¸°£ÀÌ ¼±ÅõÇÁö ¾Ê¾Ò½À´Ï´Ù.\r\nÁöµµ¿¡¼­ ±¸°£À» ¼±ÅÃÇϼ¼¿ä.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL); return; } FLinkId = EdLinkId->Text.Trim(); FSelected = true; Close(); Application->ProcessMessages(); } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::FRAMEGisMap1xclntMapMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (!FRAMEGisMap1->xclntMap->IsStart()) return; TDDPoint dptCurr = FRAMEGisMap1->xclntMap->ScreenToReal(Point(X, Y)); try { String sMousePos = FormatFloat("##,##0.#####0", dptCurr.X) + " " + FormatFloat("##,##0.#####0", dptCurr.Y); StatusBar->Panels->Items[1]->Text = sMousePos; } catch(...) {} } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::FRAMEGisMap1xclntMapMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Button != mbLeft) return; if (FRAMEGisMap1->xclntMap->MapOperation != OnSelect) return; FRAMEGisMap1->xclntMap->SetFocus(); FMouseDownPosX = X; FMouseDownPosY = Y; TDDPoint dptCurr = FRAMEGisMap1->xclntMap->ScreenToReal(Point( X, Y)); FPosX = dptCurr.X; FPosY = dptCurr.Y; try { String sMousePos = FormatFloat("##,##0.#####0", dptCurr.X) + "/" + FormatFloat("##,##0.#####0", dptCurr.Y); StatusBar->Panels->Items[1]->Text = sMousePos; EdPos->Text = sMousePos; } catch(...) {} if (FRAMEGisMap1->xclntMap->MouseTaget != 0) return; String sLinkId = ""; if (GetLinkId(X, Y, sLinkId)) { //DB¿¡ Á¸ÀçÇÏ´ÂÁö üũÇÏ·Á¸é ¿©±â¼­ ÇÏÀÚ. UpdateSelect(sLinkId, dptCurr.X, dptCurr.Y); #if 1 if (!FMultiSelect) { FRAMEGisMap1->xclntMap->ClearAccEvent( true ); FRAMEGisMap1->xclntMap->ADDAccEvent(dptCurr, "ÇöÀç ¼±Åà ÁÂÇ¥", "¼±Åà ¸µÅ© ¹× ÁÂÇ¥", AnsiString().sprintf( "ÇöÀç ¼±Åà ÁÂÇ¥|X : %03.08f|Y : %02.08f", dptCurr.X, dptCurr.Y ).c_str(), -1, true, 1, 7); FRAMEGisMap1->xclntMap->ReDraw( ); } #endif } } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::FRAMEGisMap1xclntMapMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { #if 0 FLinkId = ""; EdLinkId->Text = ""; if (FMouseDownPosX == X && FMouseDownPosY == Y) { if (FRAMEGisMap1->xclntMap->MouseTaget != 0) return; int nLayerIdx = GetLayerIndex(); if (nLayerIdx < 0) return; FRAMEGisMap1->xclntMap->ClearUserDrawPolyGon(); TXiMapUtil::SelectLinkByPos(FRAMEGisMap1->xsrvrMap, FRAMEGisMap1->xclntMap, nLayerIdx, X, Y, FLinkId); EdLinkId->Text = FLinkId; FRAMEGisMap1->xclntMap->ReDraw(); } #endif } //--------------------------------------------------------------------------- int __fastcall TITSSELAM::GetLayerIndex() { int nLayerIdx = 0; int nLevel = FRAMEGisMap1->xclntMap->GetLevel(); switch(FLinkLevel) { case 2: nLayerIdx = FRAMEGisMap1->xclntMap->GetLayerIndex(LEVEL2_LINK_LAYER_NAME); break; case 3: nLayerIdx = FRAMEGisMap1->xclntMap->GetLayerIndex(LEVEL3_LINK_LAYER_NAME); break; default:nLayerIdx = FRAMEGisMap1->xclntMap->GetLayerIndex(LEVEL1_LINK_LAYER_NAME); break; } return nLayerIdx; } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::SelGisItem(int AType, String AId) { try { switch(AType) { case 0: TXiMapUtil::MoveNode(FRAMEGisMap1->xclntMap, AId); break; case 1: TXiMapUtil::MoveLink(FRAMEGisMap1->xclntMap, AId); break; case 2: TXiMapUtil::MoveServiceLink(FRAMEGisMap1->xclntMap, AId); break; case 3: TXiMapUtil::MoveRoad(FRAMEGisMap1->xclntMap, AId); break; default: return; } } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::BtnDeleteClick(TObject *Sender) { try { TvList->BeginUpdate(); try { TvList->Controller->DeleteSelection(); } catch(...) { } } __finally { TvList->EndUpdate(); } RefreshSelect(); } //--------------------------------------------------------------------------- bool __fastcall TITSSELAM::GetLinkId(int X, int Y, String &ALinkId) { ALinkId = ""; int nLayerIdx = GetLayerIndex(); if (nLayerIdx < 0) return false; TStringList *slFldName = NULL; TStringList *slFldValue = NULL; try { slFldName = new TStringList(); slFldValue = new TStringList(); try { //TDDPoint dptCurr = MapClient->ScreenToReal(Point(X, Y)); // ¸µÅ©¿¡ ´ëÇÑ °ø°£Á¤º¸¸¦ °Ë»ö if (FRAMEGisMap1->xsrvrMap->ShpObjInfo(X, Y, nLayerIdx, slFldName, slFldValue, clWhite, true, false)) { if (slFldName->Count != slFldValue->Count) { return false; } ALinkId = slFldValue->Strings[1]; return true; } } catch(...) { } } __finally { if (slFldName) delete slFldName; if (slFldValue) delete slFldValue; } return false; } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::UpdateSelect(String ALinkId, double X, double Y) { try { int nRow; TcxDataController *pGDC = TvList->DataController; TvList->BeginUpdate(); try { bool bAdd = true; if (!FMultiSelect) { CMM_ClearGridTableView(TvList); } else { for (int ii = 0; ii < pGDC->RecordCount; ii++) { String sTmpLinkId = pGDC->Values[ii][Column01->Index]; if (sTmpLinkId == ALinkId) { pGDC->Values[ii][Column02->Index] = X; pGDC->Values[ii][Column03->Index] = Y; bAdd = false; break; } } } if (bAdd) { nRow = pGDC->AppendRecord(); pGDC->Values[nRow][Column01->Index] = ALinkId; pGDC->Values[nRow][Column02->Index] = X; pGDC->Values[nRow][Column03->Index] = Y; } } catch(...) { } } __finally { TvList->EndUpdate(); } RefreshSelect(); } //--------------------------------------------------------------------------- void __fastcall TITSSELAM::RefreshSelect() { FRAMEGisMap1->xclntMap->ClearPathInfo(); FRAMEGisMap1->xclntMap->ReDraw(); int nLayerIdx = GetLayerIndex(); if (nLayerIdx < 0) return; try { int nRow; TcxDataController *pGDC = TvList->DataController; TvList->BeginUpdate(); try { for (int ii = 0; ii < pGDC->RecordCount; ii++) { String sLinkId = pGDC->Values[ii][Column01->Index]; TXiMapUtil::SelectLinkById(FRAMEGisMap1->xsrvrMap, FRAMEGisMap1->xclntMap, nLayerIdx, sLinkId); } } catch(...) { } } __finally { TvList->EndUpdate(); } FRAMEGisMap1->xclntMap->ReDraw(); } //---------------------------------------------------------------------------