FrmMonitoringEditF.cpp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "AppGlobalF.h"
  5. #pragma hdrstop
  6. #include "FrmMonitoringEditF.h"
  7. #include "CDSMonitoringObjF.h"
  8. //---------------------------------------------------------------------------
  9. #pragma package(smart_init)
  10. #pragma link "cxButtons"
  11. #pragma link "cxCalendar"
  12. #pragma link "cxContainer"
  13. #pragma link "cxControls"
  14. #pragma link "cxDropDownEdit"
  15. #pragma link "cxEdit"
  16. #pragma link "cxGraphics"
  17. #pragma link "cxGroupBox"
  18. #pragma link "cxLabel"
  19. #pragma link "cxLookAndFeelPainters"
  20. #pragma link "cxLookAndFeels"
  21. #pragma link "cxMaskEdit"
  22. #pragma link "cxPC"
  23. #pragma link "cxPCdxBarPopupMenu"
  24. #pragma link "cxSpinEdit"
  25. #pragma link "cxSplitter"
  26. #pragma link "cxTextEdit"
  27. #pragma link "cxTimeEdit"
  28. #pragma link "dxSkinBlack"
  29. #pragma link "dxSkinBlue"
  30. #pragma link "dxSkinCaramel"
  31. #pragma link "dxSkinCoffee"
  32. #pragma link "dxSkinDarkRoom"
  33. #pragma link "dxSkinDarkSide"
  34. #pragma link "dxSkinFoggy"
  35. #pragma link "dxSkinGlassOceans"
  36. #pragma link "dxSkiniMaginary"
  37. #pragma link "dxSkinLilian"
  38. #pragma link "dxSkinLiquidSky"
  39. #pragma link "dxSkinLondonLiquidSky"
  40. #pragma link "dxSkinMcSkin"
  41. #pragma link "dxSkinMoneyTwins"
  42. #pragma link "dxSkinOffice2007Black"
  43. #pragma link "dxSkinOffice2007Blue"
  44. #pragma link "dxSkinOffice2007Green"
  45. #pragma link "dxSkinOffice2007Pink"
  46. #pragma link "dxSkinOffice2007Silver"
  47. #pragma link "dxSkinOffice2010Black"
  48. #pragma link "dxSkinOffice2010Blue"
  49. #pragma link "dxSkinOffice2010Silver"
  50. #pragma link "dxSkinsCore"
  51. #pragma link "dxSkinscxPCPainter"
  52. #pragma link "dxSkinSeven"
  53. #pragma link "dxSkinSharp"
  54. #pragma link "dxSkinSilver"
  55. #pragma link "dxSkinStardust"
  56. #pragma link "cxRadioGroup"
  57. #pragma link "cxClasses"
  58. #pragma link "cxCustomData"
  59. #pragma link "cxData"
  60. #pragma link "cxDataStorage"
  61. #pragma link "cxDBData"
  62. #pragma link "cxFilter"
  63. #pragma link "cxGrid"
  64. #pragma link "cxGridCustomTableView"
  65. #pragma link "cxGridCustomView"
  66. #pragma link "cxGridDBTableView"
  67. #pragma link "cxGridLevel"
  68. #pragma link "cxGridTableView"
  69. #pragma link "cxStyles"
  70. #pragma link "cxCheckBox"
  71. #pragma link "cxImage"
  72. #pragma link "cxButtonEdit"
  73. #pragma link "cxBlobEdit"
  74. #pragma link "cxColorComboBox"
  75. #pragma link "cxCalc"
  76. #pragma resource "*.dfm"
  77. //TFrmMonitoringEdit *FrmMonitoringEdit = NULL;
  78. //---------------------------------------------------------------------------
  79. __fastcall TFrmMonitoringEdit::TFrmMonitoringEdit(TComponent* Owner)
  80. : TForm(Owner)
  81. {
  82. m_pGDC = TvCtlrList->DataController;
  83. ITSSkin_Load(this);
  84. ////CMM_LoadForm(g_sFormsDir, this);
  85. #if 1
  86. if (g_AppCfg.sLang != "kr")
  87. {
  88. Caption = "VMS Web Camera Monitoring Screen Management";
  89. GrpList->Caption = "▶ Monitoring screen list";
  90. cxGroupBox1->Caption = "▶ Monitoring screen setting";
  91. Col02->Caption = "Screen Name";
  92. Col03->Caption = "Count";
  93. ColCtlr3->Caption = "Name";
  94. BtnListAdd->Caption = "Regist";
  95. BtnListDelete->Caption = "Remove";
  96. BtnUp->Caption = "▲ Up";
  97. BtnDown->Caption = "▼ Down";
  98. //BtnEdit->Caption = "Edit";
  99. BtnEdit->Hint = "Edit data";
  100. //BtnInsert->Caption = "Add";
  101. BtnInsert->Hint = "Add new data";
  102. //BtnDelete->Caption = "Delete";
  103. BtnDelete->Hint = "Delete selected data";
  104. //BtnSave->Caption = "Save";
  105. BtnSave->Hint = "Save editing data";
  106. }
  107. else
  108. {
  109. Caption = "모니터링 화면 관리";
  110. GrpList->Caption = "▶ 모니터링 화면 목록";
  111. cxGroupBox1->Caption = "▶ 모니터링 화면 설정";
  112. Col02->Caption = "화면명칭";
  113. Col03->Caption = "갯수";
  114. ColCtlr3->Caption = "명칭";
  115. }
  116. #endif
  117. FUpdate= false;
  118. FTitle = Caption;//"영상 모니터링 화면 관리";
  119. EditMode = false;
  120. ColumnSel->Visible = false;
  121. Column04->Visible = true;
  122. //TvCtlrList->OptionsView->ColumnAutoWidth = true;
  123. TvCtlrList->OptionsSelection->MultiSelect = true;
  124. TvCtlrList->OptionsSelection->CellSelect = false;
  125. #ifdef __CCTV__
  126. Column05->Visible = false;
  127. #endif
  128. #ifdef __VMS__
  129. Column05->Visible = false;
  130. #endif
  131. FDbConnection = NULL;
  132. }
  133. //---------------------------------------------------------------------------
  134. void __fastcall TFrmMonitoringEdit::CommClose()
  135. {
  136. try {
  137. ////CMM_SaveForm(g_sFormsDir, this);
  138. }
  139. catch(...) {
  140. }
  141. }
  142. //---------------------------------------------------------------------------
  143. void __fastcall TFrmMonitoringEdit::FormShow(TObject *Sender)
  144. {
  145. Refresh();
  146. FormInit();
  147. ChangeEditMode(1);
  148. TmrShow->Enabled = true;
  149. }
  150. //---------------------------------------------------------------------------
  151. void __fastcall TFrmMonitoringEdit::FormInit()
  152. {
  153. //TvScnrList->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 정보가 없습니다>";
  154. //TvScrnCtlr->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 정보가 없습니다>";
  155. UpdateCtlrList();
  156. FNewDb = false;
  157. }
  158. //---------------------------------------------------------------------------
  159. void __fastcall TFrmMonitoringEdit::TmrShowTimer(TObject *Sender)
  160. {
  161. TmrShow->Enabled = false;
  162. BtnSearchClick(NULL);
  163. }
  164. //---------------------------------------------------------------------------
  165. void __fastcall TFrmMonitoringEdit::BtnCloseClick(TObject *Sender)
  166. {
  167. Close();
  168. }
  169. //---------------------------------------------------------------------------
  170. void __fastcall TFrmMonitoringEdit::FormClose(TObject *Sender, TCloseAction &Action)
  171. {
  172. CommClose();
  173. //FrmMonitoringEdit = NULL;
  174. Action = caFree;
  175. }
  176. //---------------------------------------------------------------------------
  177. void __fastcall TFrmMonitoringEdit::BtnEditClick(TObject *Sender)
  178. {
  179. String sCaption = "편집";
  180. if (g_AppCfg.sLang != "kr") sCaption = "Edit";
  181. if (BtnEdit->Caption == sCaption)//"편집")
  182. {
  183. ChangeEditMode(0);
  184. FNewDb = false;
  185. }
  186. else {
  187. String sName = EdName->Text;
  188. ChangeEditMode(1);
  189. if (CMM_FindGridData(TvScrnList->DataController, sName, Col02->Index) >= 0)
  190. {
  191. CMM_SetGridRow(CxScrnList, TvScrnList, sName, Col02->Index);
  192. DisplayInfo();
  193. }
  194. }
  195. }
  196. //---------------------------------------------------------------------------
  197. void __fastcall TFrmMonitoringEdit::ChangeEditMode(int AEdit)
  198. {
  199. bool bEnabled = false;
  200. switch(AEdit)
  201. {
  202. case 0: //편집버튼클릭
  203. {
  204. BtnEdit->Enabled = true;
  205. BtnInsert->Enabled = false;
  206. BtnDelete->Enabled = false;
  207. BtnSave->Enabled = true;
  208. if (g_AppCfg.sLang != "kr")
  209. {
  210. BtnEdit->Caption = "Cancel";
  211. BtnEdit->Hint = "Cancel ediging data";
  212. }
  213. else
  214. {
  215. BtnEdit->Caption = "취소";
  216. BtnEdit->Hint = "데이터 편집 취소";
  217. }
  218. EditMode = true;
  219. }
  220. break;
  221. case 1: //편집[취소]버튼클릭
  222. {
  223. FormClear(); //화면을 모두 지운다.
  224. BtnEdit->Enabled = false;
  225. BtnInsert->Enabled = true;
  226. BtnDelete->Enabled = false;
  227. BtnSave->Enabled = false;
  228. if (g_AppCfg.sLang != "kr")
  229. {
  230. BtnEdit->Caption = "Edit";
  231. BtnEdit->Hint = "Editing data";
  232. }
  233. else
  234. {
  235. BtnEdit->Caption = "편집";
  236. BtnEdit->Hint = "데이터 편집";
  237. }
  238. //bEnabled = true;
  239. EditMode = false;
  240. }
  241. break;
  242. case 2: //추가
  243. {
  244. BtnEdit->Enabled = true;
  245. BtnInsert->Enabled = false;
  246. BtnDelete->Enabled = false;
  247. BtnSave->Enabled = true;
  248. if (g_AppCfg.sLang != "kr")
  249. {
  250. BtnEdit->Caption = "Cancel";
  251. BtnEdit->Hint = "Cancel ediging data";
  252. }
  253. else
  254. {
  255. BtnEdit->Caption = "취소";
  256. BtnEdit->Hint = "데이터 추가 취소";
  257. }
  258. EditMode = true;
  259. }
  260. break;
  261. case 3: //수정모드
  262. {
  263. BtnEdit->Enabled = true;
  264. BtnInsert->Enabled = true;
  265. BtnDelete->Enabled = true;
  266. BtnSave->Enabled = false;
  267. if (g_AppCfg.sLang != "kr")
  268. {
  269. BtnEdit->Caption = "Edit";
  270. BtnEdit->Hint = "Editing data";
  271. }
  272. else
  273. {
  274. BtnEdit->Caption = "편집";
  275. BtnEdit->Hint = "데이터 수정";
  276. }
  277. bEnabled = true;
  278. EditMode = false;
  279. }
  280. break;
  281. }
  282. if (AEdit == 0 || AEdit == 2)
  283. {
  284. PnlCmd->Enabled = true;
  285. }
  286. else
  287. {
  288. PnlCmd->Enabled = false;
  289. }
  290. }
  291. //---------------------------------------------------------------------------
  292. int __fastcall TFrmMonitoringEdit::CheckDupFormName(String ANewName, String AOldName)
  293. {
  294. int nDupCnt = 0;
  295. try
  296. {
  297. TvScrnList->BeginUpdate();
  298. TcxGridDataController *pGDC = TvScrnList->DataController;
  299. int nRows = pGDC->RecordCount;
  300. for (int ii = 0; ii < nRows; ii++)
  301. {
  302. String sFormName = VarToStr(pGDC->Values[ii][Col02->Index]);
  303. if (sFormName == AOldName) {
  304. continue;
  305. }
  306. if (sFormName == ANewName) {
  307. nDupCnt++;
  308. }
  309. }
  310. }
  311. __finally
  312. {
  313. TvScrnList->EndUpdate();
  314. }
  315. return nDupCnt;
  316. }
  317. //---------------------------------------------------------------------------
  318. void __fastcall TFrmMonitoringEdit::BtnSaveClick(TObject *Sender)
  319. {
  320. if (EdName->Text.Trim().IsEmpty())
  321. {
  322. Application->MessageBox(lblText1->Caption.c_str(),//L"VMS 모니터링 화면 저장\r\nVMS 모니터링 화면명칭을 입력하세요.",
  323. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  324. return;
  325. }
  326. if (!FNewDb)
  327. {
  328. if (EdOrgName->Text.Trim().IsEmpty())
  329. {
  330. Application->MessageBox(lblText2->Caption.c_str(),//L"VMS 모니터링 화면 저장\r\nVMS 모니터링 화면을 목록에서 선택하세요.",
  331. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  332. return;
  333. }
  334. }
  335. if (TvScrnCtlr->DataController->RecordCount == 0)
  336. {
  337. Application->MessageBox(lblText3->Caption.c_str(),//L"VMS 모니터링 화면 저장\r\n모니터링 대상 VMS를 추가해 주세요.",
  338. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  339. return;
  340. }
  341. String sOldName = EdOrgName->Text;
  342. String sNewName = EdName->Text.Trim();
  343. int nDupCnt;
  344. bool bResult = false;
  345. if (FNewDb)
  346. {
  347. nDupCnt = CheckDupFormName(sNewName, "");
  348. }
  349. else
  350. {
  351. nDupCnt = CheckDupFormName(sNewName, sOldName);
  352. }
  353. if (nDupCnt >= 1)
  354. {
  355. Application->MessageBox(lblText4->Caption.c_str(),//L"VMS 모니터링 화면 저장\r\n이미 사용중인 모니터링 화면명칭 입니다.\r\n사용하지 않는 명칭을 입력하세요.",
  356. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  357. return;
  358. }
  359. bResult = DelCmraMonitoring(sOldName);
  360. if (!bResult)
  361. {
  362. return;
  363. }
  364. try
  365. {
  366. FDbConnection->BeginTrans();
  367. TcxGridDataController *pGDC = TvScrnCtlr->DataController;
  368. int nRows = pGDC->RecordCount;
  369. for (int ii = 0; ii < nRows; ii++)
  370. {
  371. String sCtlrNmbr = VarToStr(pGDC->Values[ii][ColCtlr2->Index]);
  372. ObjCtlrManager->InsMonitoringFormFromDb(sNewName, ii+1, sCtlrNmbr, 0, FDbConnection);
  373. }
  374. FDbConnection->CommitTrans();
  375. bResult = true;
  376. }
  377. catch(EDatabaseError &E)
  378. {
  379. FDbConnection->RollbackTrans();
  380. throw Exception(String(E.ClassName()) + E.Message);
  381. }
  382. catch(Exception &e)
  383. {
  384. FDbConnection->RollbackTrans();
  385. throw Exception(String(e.ClassName()) + e.Message);
  386. }
  387. if (bResult)
  388. {
  389. Application->MessageBox(lblText5->Caption.c_str(),//L"VMS 모니터링 화면 저장\r\nVMS 모니터링 화면 정보를 저장 하였습니다.",
  390. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  391. FUpdate = true;
  392. ObjCtlrManager->LoadMonitoringFormFromDb(FDbConnection);
  393. LoadCmraMonitoring();
  394. CMM_SetGridRow(CxScrnList, TvScrnList, sNewName, Col02->Index);
  395. DisplayInfo();
  396. }
  397. }
  398. //---------------------------------------------------------------------------
  399. void __fastcall TFrmMonitoringEdit::BtnInsertClick(TObject *Sender)
  400. {
  401. FormClear();
  402. EdName->Text = "";
  403. EdOrgName->Text = "";
  404. ChangeEditMode(2);
  405. FNewDb = true;
  406. }
  407. //---------------------------------------------------------------------------
  408. void __fastcall TFrmMonitoringEdit::BtnDeleteClick(TObject *Sender)
  409. {
  410. int nIdx = TvScrnList->DataController->FocusedRecordIndex;
  411. if (nIdx < 0) return;
  412. String sFormName = EdOrgName->Text;
  413. if (sFormName.IsEmpty())
  414. {
  415. Application->MessageBox(lblText6->Caption.c_str(),//L"VMS 모니터링 화면 삭제\r\n삭제할 VMS 모니터링 화면을 목록에서 선택하세요.",
  416. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  417. return;
  418. }
  419. String sMsg;
  420. sMsg = lblText7->Caption + ": " + sFormName;//"VMS 모니터링 화면: " + sFormName;
  421. sMsg+= "\r\n" + lblText8->Caption;//"선택하신 VMS 모니터링 화면 정보를 삭제하시겠습니까?";
  422. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  423. if (DelCmraMonitoring(sFormName))
  424. {
  425. FUpdate = true;
  426. Application->MessageBox(lblText9->Caption.c_str(),//L"VMS 모니터링 화면 삭제\r\nVMS 모니터링 화면 정보를 삭제 하였습니다.",
  427. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  428. FormClear();
  429. ChangeEditMode(1);
  430. ObjCtlrManager->LoadMonitoringFormFromDb(FDbConnection);
  431. LoadCmraMonitoring();
  432. }
  433. }
  434. //---------------------------------------------------------------------------
  435. bool __fastcall TFrmMonitoringEdit::DelCmraMonitoring(String AFormName)
  436. {
  437. return ObjCtlrManager->DelMonitoringFormFromDb(AFormName, FDbConnection);
  438. }
  439. //---------------------------------------------------------------------------
  440. void __fastcall TFrmMonitoringEdit::TvScrnListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  441. TMouseButton AButton, TShiftState AShift,
  442. bool &AHandled)
  443. {
  444. if (!ACellViewInfo) return;
  445. DisplayInfo();
  446. }
  447. //---------------------------------------------------------------------------
  448. void __fastcall TFrmMonitoringEdit::TvScrnListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  449. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  450. bool ANewItemRecordFocusingChanged)
  451. {
  452. if (!AFocusedRecord) return;
  453. DisplayInfo();
  454. }
  455. //---------------------------------------------------------------------------
  456. void __fastcall TFrmMonitoringEdit::BtnSearchClick(TObject *Sender)
  457. {
  458. RefreshData();
  459. EdFocus->SetFocus();
  460. ChangeEditMode(1);
  461. }
  462. //---------------------------------------------------------------------------
  463. void __fastcall TFrmMonitoringEdit::RefreshData()
  464. {
  465. // 검색조건에 의한 링크 데이터 조회
  466. FormClear();
  467. LoadCmraMonitoring();
  468. }
  469. //---------------------------------------------------------------------------
  470. void __fastcall TFrmMonitoringEdit::LoadCmraMonitoring()
  471. {
  472. CMM_ClearGridTableView(TvScrnList);
  473. try
  474. {
  475. int nRow;
  476. TcxDataController *pGDC = TvScrnList->DataController;
  477. TvScrnList->BeginUpdate();
  478. FOR_STL(TMonitoringScreen*, pObj, ObjScreenManager->FLists)
  479. {
  480. nRow = pGDC->AppendRecord();
  481. pGDC->Values[nRow][Col01->Index] = "";
  482. pGDC->Values[nRow][Col02->Index] = pObj->NAME;
  483. pGDC->Values[nRow][Col03->Index] = String(pObj->FLists.Size());
  484. }
  485. }
  486. __finally
  487. {
  488. TvScrnList->EndUpdate();
  489. }
  490. }
  491. //---------------------------------------------------------------------------
  492. void __fastcall TFrmMonitoringEdit::FormClear()
  493. {
  494. CMM_ClearGridTableView(TvScrnCtlr);
  495. EdOrgName->Clear();
  496. EdName->Clear();
  497. FNewDb = false;
  498. }
  499. //---------------------------------------------------------------------------
  500. void __fastcall TFrmMonitoringEdit::DisplayInfo()
  501. {
  502. FormClear();
  503. int nSelIdx = TvScrnList->DataController->FocusedRecordIndex;
  504. if( nSelIdx <= -1 )
  505. return;
  506. DisplayFormInfo(nSelIdx);
  507. ChangeEditMode(3);
  508. }
  509. //---------------------------------------------------------------------------
  510. void __fastcall TFrmMonitoringEdit::DisplayFormInfo(int AIdx)
  511. {
  512. TcxGridDataController *pDc = TvScrnList->DataController;
  513. String sScrName = VarToStr(pDc->Values[AIdx][Col02->Index]);
  514. EdName->Text = sScrName;
  515. EdOrgName->Text = sScrName;
  516. CMM_ClearGridTableView(TvScrnCtlr);
  517. try
  518. {
  519. int nRow;
  520. TcxDataController *pGDC = TvScrnCtlr->DataController;
  521. TvScrnCtlr->BeginUpdate();
  522. TMonitoringScreen *pObj = ObjScreenManager->FLists.Find(sScrName);
  523. if (!pObj)
  524. {
  525. return;
  526. }
  527. FOR_STL(TScreenCtlr*, pScr, pObj->FLists)
  528. {
  529. nRow = pGDC->AppendRecord();
  530. pGDC->Values[nRow][ColCtlr1->Index] = String(pScr->SEQ);
  531. pGDC->Values[nRow][ColCtlr2->Index] = String(pScr->CTLR_NMBR);
  532. TMonitoringCtlr *pCtlr = ObjCtlrManager->FLists.Find(pScr->CTLR_NMBR);
  533. if (pCtlr) pGDC->Values[nRow][ColCtlr3->Index] = pCtlr->NAME;
  534. else pGDC->Values[nRow][ColCtlr3->Index] = "--???--";
  535. }
  536. }
  537. __finally
  538. {
  539. TvScrnCtlr->EndUpdate();
  540. }
  541. }
  542. //---------------------------------------------------------------------------
  543. bool __fastcall TFrmMonitoringEdit::FindCtlrInfo(String ACtlrNmbr)
  544. {
  545. try {
  546. TvScrnCtlr->BeginUpdate();
  547. for (int ii = 0; ii < TvScrnCtlr->DataController->RecordCount; ii++)
  548. {
  549. String sCtlrNmbr = VarToStr(TvScrnCtlr->DataController->Values[ii][ColCtlr2->Index]);
  550. if (sCtlrNmbr == ACtlrNmbr) return true;
  551. }
  552. }
  553. __finally
  554. {
  555. TvScrnCtlr->EndUpdate();
  556. }
  557. return false;
  558. }
  559. //---------------------------------------------------------------------------
  560. void __fastcall TFrmMonitoringEdit::UpdateScrnCtlrSeq()
  561. {
  562. try {
  563. TvScrnCtlr->BeginUpdate();
  564. for (int ii = 0; ii < TvScrnCtlr->DataController->RecordCount; ii++)
  565. {
  566. TvScrnCtlr->DataController->Values[ii][ColCtlr1->Index] = String(ii+1);
  567. }
  568. }
  569. __finally
  570. {
  571. TvScrnCtlr->EndUpdate();
  572. }
  573. }
  574. //---------------------------------------------------------------------------
  575. void __fastcall TFrmMonitoringEdit::BtnListAddClick(TObject *Sender)
  576. {
  577. TcxGridTableView *pSrcList = TvCtlrList;
  578. TcxGridTableView *pDstList = TvScrnCtlr;
  579. int nSelRows = pSrcList->Controller->SelectedRowCount;
  580. if (nSelRows <= 0)
  581. {
  582. return;
  583. }
  584. try
  585. {
  586. TcxGridDataController *pGDC = pDstList->DataController;
  587. try
  588. {
  589. for (int ii = 0; ii < nSelRows; ii++)
  590. {
  591. int nSelIdx = pSrcList->Controller->SelectedRows[ii]->RecordIndex;
  592. String sCtlrNmbr = VarToStr(pSrcList->DataController->Values[nSelIdx][Column01->Index]);
  593. String sCtlrId = VarToStr(pSrcList->DataController->Values[nSelIdx][Column02->Index]);
  594. String sCtlrName = VarToStr(pSrcList->DataController->Values[nSelIdx][Column03->Index]);
  595. if (FindCtlrInfo(sCtlrNmbr)) continue;
  596. int nRow = pGDC->AppendRecord();
  597. pGDC->Values[nRow][ColCtlr2->Index] = sCtlrNmbr;
  598. pGDC->Values[nRow][ColCtlr3->Index] = sCtlrName;
  599. }
  600. }
  601. catch(...)
  602. {
  603. }
  604. }
  605. __finally
  606. {
  607. UpdateScrnCtlrSeq();
  608. }
  609. }
  610. //---------------------------------------------------------------------------
  611. void __fastcall TFrmMonitoringEdit::BtnListDeleteClick(TObject *Sender)
  612. {
  613. TcxGridTableView *pSrcList = TvScrnCtlr;
  614. int nFocused = pSrcList->Controller->FocusedRecordIndex;
  615. int nSelRows = pSrcList->Controller->SelectedRowCount;
  616. if (nSelRows <= 0)
  617. {
  618. return;
  619. }
  620. try
  621. {
  622. TcxGridDataController *pGDC = pSrcList->DataController;
  623. pSrcList->BeginUpdate();
  624. try
  625. {
  626. pSrcList->Controller->DeleteSelection();
  627. int nDataCnt = pSrcList->DataController->RecordCount;
  628. if (nDataCnt <= nFocused)
  629. nFocused = nDataCnt - 1;
  630. pSrcList->Controller->ClearSelection();
  631. if (nFocused >= 0)
  632. {
  633. pSrcList->Controller->FocusedRowIndex = nFocused;
  634. pSrcList->ViewData->Records[nFocused]->Focused = true;
  635. pSrcList->ViewData->Records[nFocused]->Selected = true;
  636. }
  637. //CxScrnCtlr->SetFocus();
  638. }
  639. catch(...)
  640. {
  641. }
  642. }
  643. __finally
  644. {
  645. pSrcList->EndUpdate();
  646. UpdateScrnCtlrSeq();
  647. }
  648. }
  649. //---------------------------------------------------------------------------
  650. void __fastcall TFrmMonitoringEdit::BtnUpClick(TObject *Sender)
  651. {
  652. try
  653. {
  654. TvScrnCtlr->BeginUpdate();
  655. int nCurIdx = TvScrnCtlr->DataController->FocusedRowIndex;//FocusedRecordIndex;
  656. if (nCurIdx <= 0)
  657. {
  658. return;
  659. }
  660. int nUpIdx = nCurIdx-1;
  661. try
  662. {
  663. String sVal1 = VarToStr(TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr1->Index]);
  664. String sVal2 = VarToStr(TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr2->Index]);
  665. String sVal3 = VarToStr(TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr3->Index]);
  666. TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr1->Index] = TvScrnCtlr->DataController->Values[nUpIdx][ColCtlr1->Index];
  667. TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr2->Index] = TvScrnCtlr->DataController->Values[nUpIdx][ColCtlr2->Index];
  668. TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr3->Index] = TvScrnCtlr->DataController->Values[nUpIdx][ColCtlr3->Index];
  669. TvScrnCtlr->DataController->Values[nUpIdx][ColCtlr1->Index] = sVal1;
  670. TvScrnCtlr->DataController->Values[nUpIdx][ColCtlr2->Index] = sVal2;
  671. TvScrnCtlr->DataController->Values[nUpIdx][ColCtlr3->Index] = sVal3;
  672. TvScrnCtlr->Controller->ClearSelection();
  673. TvScrnCtlr->Controller->FocusedRowIndex = nUpIdx;
  674. TvScrnCtlr->ViewData->Records[nUpIdx]->Focused = true;
  675. TvScrnCtlr->ViewData->Records[nUpIdx]->Selected = true;
  676. CxScrnCtlr->SetFocus();
  677. }
  678. catch(...)
  679. {
  680. }
  681. }
  682. __finally
  683. {
  684. TvScrnCtlr->EndUpdate();
  685. UpdateScrnCtlrSeq();
  686. }
  687. }
  688. //---------------------------------------------------------------------------
  689. void __fastcall TFrmMonitoringEdit::BtnDownClick(TObject *Sender)
  690. {
  691. try
  692. {
  693. TvScrnCtlr->BeginUpdate();
  694. int nCurIdx = TvScrnCtlr->DataController->FocusedRowIndex;//FocusedRecordIndex;
  695. if (nCurIdx < 0)
  696. {
  697. return;
  698. }
  699. if (nCurIdx == TvScrnCtlr->DataController->RecordCount-1)
  700. {
  701. return;
  702. }
  703. int nDnIdx = nCurIdx+1;
  704. try
  705. {
  706. String sVal1 = VarToStr(TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr1->Index]);
  707. String sVal2 = VarToStr(TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr2->Index]);
  708. String sVal3 = VarToStr(TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr3->Index]);
  709. TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr1->Index] = TvScrnCtlr->DataController->Values[nDnIdx][ColCtlr1->Index];
  710. TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr2->Index] = TvScrnCtlr->DataController->Values[nDnIdx][ColCtlr2->Index];
  711. TvScrnCtlr->DataController->Values[nCurIdx][ColCtlr3->Index] = TvScrnCtlr->DataController->Values[nDnIdx][ColCtlr3->Index];
  712. TvScrnCtlr->DataController->Values[nDnIdx][ColCtlr1->Index] = sVal1;
  713. TvScrnCtlr->DataController->Values[nDnIdx][ColCtlr2->Index] = sVal2;
  714. TvScrnCtlr->DataController->Values[nDnIdx][ColCtlr3->Index] = sVal3;
  715. TvScrnCtlr->Controller->ClearSelection();
  716. TvScrnCtlr->Controller->FocusedRowIndex = nDnIdx;
  717. TvScrnCtlr->ViewData->Records[nDnIdx]->Focused = true;
  718. TvScrnCtlr->ViewData->Records[nDnIdx]->Selected = true;
  719. CxScrnCtlr->SetFocus();
  720. }
  721. catch(...)
  722. {
  723. }
  724. }
  725. __finally
  726. {
  727. TvScrnCtlr->EndUpdate();
  728. UpdateScrnCtlrSeq();
  729. }
  730. }
  731. //---------------------------------------------------------------------------
  732. void __fastcall TFrmMonitoringEdit::UpdateCtlrList()
  733. {
  734. CMM_ClearGridTableView(TvCtlrList);
  735. int nRow = 0;
  736. try
  737. {
  738. TvCtlrList->BeginUpdate();
  739. try
  740. {
  741. ObjCtlrManager->FLists.Lock();
  742. FOR_STL(TMonitoringCtlr*, pObj, ObjCtlrManager->FLists)
  743. {
  744. nRow = m_pGDC->AppendRecord();
  745. m_pGDC->Values[nRow][ColumnSel->Index] = false;
  746. m_pGDC->Values[nRow][Column00->Index] = "-";
  747. m_pGDC->Values[nRow][Column01->Index] = String(pObj->CTLR_NMBR);
  748. m_pGDC->Values[nRow][Column02->Index] = pObj->CTLR_ID;
  749. m_pGDC->Values[nRow][Column03->Index] = pObj->NAME;
  750. m_pGDC->Values[nRow][Column04->Index] = pObj->STRM_ADDR;
  751. m_pGDC->Values[nRow][Column99->Index] = (int)pObj;
  752. m_pGDC->Values[nRow][Column11->Index] = pObj->CTLR_NMBR;
  753. m_pGDC->Values[nRow][Column12->Index] = pObj->CTLR_ID;
  754. }
  755. }
  756. __finally
  757. {
  758. ObjCtlrManager->FLists.UnLock();
  759. }
  760. }
  761. __finally
  762. {
  763. TvCtlrList->EndUpdate();
  764. TvCtlrList->DataController->GotoFirst();
  765. TvCtlrList->DataController->FocusedRecordIndex = 0;
  766. Column01->SortIndex = Column01->Index;
  767. Column01->SortOrder = soAscending;
  768. }
  769. }
  770. //---------------------------------------------------------------------------