FRAME_ItsCrossF.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "FrmResourceF.h"
  7. #include "ITSLangTransF.h"
  8. #pragma hdrstop
  9. //---------------------------------------------------------------------------
  10. #include "CDSItsCrossInfoF.h"
  11. //---------------------------------------------------------------------------
  12. #include "FRAME_ItsCrossF.h"
  13. //---------------------------------------------------------------------------
  14. #pragma package(smart_init)
  15. #pragma link "cxButtons"
  16. #pragma link "cxCalc"
  17. #pragma link "cxContainer"
  18. #pragma link "cxControls"
  19. #pragma link "cxCustomData"
  20. #pragma link "cxEdit"
  21. #pragma link "cxGraphics"
  22. #pragma link "cxInplaceContainer"
  23. #pragma link "cxLabel"
  24. #pragma link "cxLookAndFeelPainters"
  25. #pragma link "cxLookAndFeels"
  26. #pragma link "cxStyles"
  27. #pragma link "cxTextEdit"
  28. #pragma link "cxTL"
  29. #pragma link "cxTLdxBarBuiltInMenu"
  30. #pragma link "dxSkinBlack"
  31. #pragma link "dxSkinBlue"
  32. #pragma link "dxSkinsCore"
  33. #pragma link "dxSkinMcSkin"
  34. #pragma resource "*.dfm"
  35. //TFRAMEItsCross *FRAMEItsCross;
  36. //---------------------------------------------------------------------------
  37. __fastcall TFRAMEItsCross::TFRAMEItsCross(TComponent* Owner)
  38. : TFrame(Owner)
  39. {
  40. LangTrans->Translate(this, ITSDb_GetConnection());
  41. FCompleted = false;
  42. tlItsCross->Clear();
  43. }
  44. //---------------------------------------------------------------------------
  45. void __fastcall TFRAMEItsCross::InitItsCross()
  46. {
  47. FCompleted = false;
  48. try
  49. {
  50. tlItsCross->BeginUpdate();
  51. tlItsCross->Clear();
  52. TcxTreeListNode *pRoot = tlItsCross->Root;
  53. FOR_STL(TRCrossRoad*, pObjSido, RCrossManager->FLists)
  54. {
  55. if (pObjSido->FCrosss.Size() == 0) continue;
  56. if (!pObjSido->FShow) continue;
  57. TcxTreeListNode *pCenter = pRoot->AddChild();
  58. pCenter->CheckGroupType = ncgCheckGroup;
  59. pCenter->Values[colItsCross->ItemIndex] = pObjSido->ROAD_NAME;
  60. pCenter->Values[colMem->ItemIndex] = 0;
  61. FOR_STL(TRCross*, pObjCross, pObjSido->FCrosss)
  62. {
  63. if (!pObjCross->FShow) continue;
  64. TcxTreeListNode *pCross = pCenter->AddChild();
  65. pCross->CheckGroupType = ncgCheckGroup;
  66. pCross->Values[colItsCross->ItemIndex] = pObjCross->CROSS_NAME;
  67. pCross->Values[colMem->ItemIndex] = 0;//(int)pObjCross;
  68. FOR_STL(TRCrossDir*, pObjLink, pObjCross->FLinks)
  69. {
  70. if (!pObjLink->FShow) continue;
  71. TcxTreeListNode *pLink = pCross->AddChild();
  72. pLink->CheckGroupType = ncgCheckGroup;
  73. pLink->Values[colItsCross->ItemIndex] = pObjLink->DIR_NAME;
  74. pLink->Values[colMem->ItemIndex] = (int)pObjLink;
  75. }
  76. }
  77. }
  78. }
  79. __finally
  80. {
  81. tlItsCross->EndUpdate();
  82. FCompleted = true;
  83. }
  84. //ShowMessage("Node count = " + IntToStr(tlItsCross->AbsoluteCount));
  85. //tlItsCross->FullExpand;
  86. }
  87. //---------------------------------------------------------------------------
  88. class TcxTreeListAccess : public TcxTreeList
  89. {
  90. };
  91. //---------------------------------------------------------------------------
  92. void __fastcall TFRAMEItsCross::InitFilter(bool AShow)
  93. {
  94. #if 0
  95. FOR_STL(TRSido*, pObjSido, RLinkManager->FLists)
  96. {
  97. pObjSido->FShow = AShow;
  98. FOR_STL(TRCross*, pObjCross, pObjSido->FCrosss)
  99. {
  100. pObjCross->FShow = AShow;
  101. FOR_STL(TRLink*, pObjLink, pObjCross->FLinks)
  102. {
  103. pObjLink->FShow = AShow;
  104. }
  105. }
  106. }
  107. #endif
  108. }
  109. //---------------------------------------------------------------------------
  110. void __fastcall TFRAMEItsCross::FilterItsCross(String AFilter)
  111. {
  112. #if 0
  113. if (AFilter.IsEmpty())
  114. {
  115. InitFilter(true);
  116. InitItsCross();
  117. return;
  118. }
  119. InitFilter(false);
  120. FOR_STL(TRSido*, pObjSido, RLinkManager->FLists)
  121. {
  122. if (pObjSido->NAME.Pos(AFilter) > 0)
  123. {
  124. pObjSido->FShow = true;
  125. FOR_STL(TRCross*, pObjCross, pObjSido->FCrosss)
  126. {
  127. pObjCross->FShow = true;
  128. FOR_STL(TRLink*, pObjLink, pObjCross->FLinks)
  129. {
  130. pObjLink->FShow = true;
  131. }
  132. }
  133. }
  134. else
  135. {
  136. FOR_STL(TRCross*, pObjCross, pObjSido->FCrosss)
  137. {
  138. if (pObjCross->NAME.Pos(AFilter) > 0)
  139. {
  140. pObjSido->FShow = true;
  141. pObjCross->FShow = true;
  142. FOR_STL(TRLink*, pObjLink, pObjCross->FLinks)
  143. {
  144. pObjLink->FShow = true;
  145. }
  146. }
  147. else
  148. {
  149. FOR_STL(TRLink*, pObjLink, pObjCross->FLinks)
  150. {
  151. if (pObjLink->LINKID.Pos(AFilter) > 0 ||
  152. pObjLink->STNODENAME.Pos(AFilter) > 0 ||
  153. pObjLink->EDNODENAME.Pos(AFilter) > 0 )
  154. {
  155. pObjSido->FShow = true;
  156. pObjCross->FShow = true;
  157. pObjLink->FShow = true;
  158. }
  159. }
  160. }
  161. }
  162. }
  163. }
  164. InitItsCross();
  165. #endif
  166. tlItsCross->FullExpand();
  167. }
  168. //---------------------------------------------------------------------------
  169. void __fastcall TFRAMEItsCross::FilterItsCrossA(String AFilter)
  170. {
  171. if (AFilter.IsEmpty())
  172. {
  173. UnFilterItsCross();
  174. return;
  175. }
  176. //TcxTreeListAccess *pTlList = (TcxTreeListAccess*)tlItsCross;
  177. //pTlList->ChangesLocked = true;
  178. int ii;
  179. tlItsCross->BeginUpdate();
  180. try
  181. {
  182. //그룹을 모두 숨긴다.
  183. for (ii = 0; ii < tlItsCross->AbsoluteCount; ii++)
  184. {
  185. if (tlItsCross->AbsoluteItems[ii]->IsGroupNode)
  186. {
  187. tlItsCross->AbsoluteItems[ii]->Visible = false;
  188. }
  189. }
  190. for (ii = 0; ii < tlItsCross->AbsoluteCount; ii++)
  191. {
  192. if (tlItsCross->AbsoluteItems[ii]->IsGroupNode) continue;
  193. tlItsCross->AbsoluteItems[ii]->CheckState = cbsUnchecked;
  194. String sItsCrossName = tlItsCross->AbsoluteItems[ii]->Texts[colItsCross->ItemIndex];
  195. if (sItsCrossName.Pos(AFilter) == 0)
  196. {
  197. tlItsCross->AbsoluteItems[ii]->Visible = false;
  198. }
  199. else
  200. {
  201. TcxTreeListNode *pCenter = tlItsCross->AbsoluteItems[ii]->Parent;
  202. if (pCenter)
  203. {
  204. pCenter->Visible = true;
  205. }
  206. tlItsCross->AbsoluteItems[ii]->Visible = true;
  207. }
  208. }
  209. }
  210. __finally
  211. {
  212. tlItsCross->EndUpdate();
  213. }
  214. }
  215. //---------------------------------------------------------------------------
  216. void __fastcall TFRAMEItsCross::UnFilterItsCross()
  217. {
  218. int ii;
  219. tlItsCross->BeginUpdate();
  220. try
  221. {
  222. for (ii = 0; ii < tlItsCross->AbsoluteCount; ii++)
  223. {
  224. if (!tlItsCross->AbsoluteItems[ii]->IsGroupNode)
  225. {
  226. tlItsCross->AbsoluteItems[ii]->CheckState = cbsUnchecked;
  227. }
  228. tlItsCross->AbsoluteItems[ii]->Visible = true;
  229. }
  230. }
  231. __finally
  232. {
  233. tlItsCross->EndUpdate();
  234. }
  235. }
  236. //---------------------------------------------------------------------------
  237. AnsiString __fastcall TFRAMEItsCross::GetHTMLString()
  238. {
  239. AnsiString sHtml = "";
  240. AnsiString sTemp;
  241. if (!FCompleted) return lblAll->Caption;//"전체";
  242. int ii, jj;
  243. tlItsCross->BeginUpdate();
  244. try
  245. {
  246. TcxTreeListNode *pRoot = tlItsCross->Root->GetNext();
  247. while(pRoot)
  248. {
  249. if (pRoot->CheckState == cbsUnchecked ||
  250. pRoot->Visible == false)
  251. {
  252. pRoot = pRoot->GetNext();
  253. continue;
  254. }
  255. for (ii = 0; ii < pRoot->Count; ii++)
  256. {
  257. TcxTreeListNode *pCross = pRoot->Items[ii];
  258. if (!pCross->Visible ||
  259. pCross->CheckState == cbsUnchecked)
  260. {
  261. continue;
  262. }
  263. int nChecked = 0;
  264. for (jj = 0; jj < pCross->Count; jj++)
  265. {
  266. if (!pCross->Items[jj]->Visible)
  267. continue;
  268. if (pCross->Items[jj]->Checked) nChecked++;
  269. }
  270. if (nChecked > 0)
  271. {
  272. sTemp = pCross->Texts[colItsCross->ItemIndex] + "(" + String(nChecked) + ")";
  273. if (sHtml.IsEmpty() == false)
  274. {
  275. sHtml += ", ";
  276. }
  277. sHtml += sTemp;
  278. }
  279. }
  280. pRoot = pRoot->GetNext();
  281. }
  282. }
  283. __finally
  284. {
  285. tlItsCross->EndUpdate();
  286. }
  287. if (sHtml.IsEmpty()) sHtml = lblAll->Caption;//"전체";
  288. return sHtml;
  289. }
  290. //---------------------------------------------------------------------------
  291. void __fastcall TFRAMEItsCross::GetCondition(STCondition& ACondition)
  292. {
  293. ACondition.bUse = false;
  294. ACondition.Codes.clear();
  295. FSelNm = lblAll->Caption;//"전체";
  296. int ii, jj;
  297. tlItsCross->BeginUpdate();
  298. try
  299. {
  300. int nMemIdx;
  301. TcxTreeListNode *pRoot = tlItsCross->Root->GetNext();
  302. while(pRoot)
  303. {
  304. if (pRoot->CheckState == cbsUnchecked ||
  305. pRoot->Visible == false)
  306. {
  307. pRoot = pRoot->GetNext();
  308. continue;
  309. }
  310. for (ii = 0; ii < pRoot->Count; ii++)
  311. {
  312. TcxTreeListNode *pCross = pRoot->Items[ii];
  313. if (!pCross->Visible ||
  314. pCross->CheckState == cbsUnchecked)
  315. {
  316. continue;
  317. }
  318. for (jj = 0; jj < pCross->Count; jj++)
  319. {
  320. if (!pCross->Items[jj]->Visible) continue;
  321. if (!pCross->Items[jj]->Checked) continue;
  322. String sMemIdx = pCross->Items[jj]->Texts[colMem->ItemIndex];
  323. nMemIdx = StrToIntDef(sMemIdx, 0);
  324. if (nMemIdx != 0)
  325. {
  326. try {
  327. TRCrossDir* pObj = (TRCrossDir*)nMemIdx;
  328. ACondition.Codes.push_back(pObj->VDS_CTLR_NMBR+","+pObj->VDS_CMRA_NO);
  329. if (FSelNm == lblAll->Caption)//"전체")
  330. {
  331. FSelNm = pObj->DIR_NAME;
  332. }
  333. } catch(...) {}
  334. }
  335. }
  336. }
  337. pRoot = pRoot->GetNext();
  338. }
  339. }
  340. __finally
  341. {
  342. tlItsCross->EndUpdate();
  343. }
  344. ACondition.bUse = !ACondition.Codes.empty();
  345. }
  346. //------------------------------------------------------------------------------
  347. void __fastcall TFRAMEItsCross::EdFilterKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
  348. {
  349. if (VK_RETURN == Key)
  350. {
  351. btnFilterClick(NULL);
  352. }
  353. }
  354. //---------------------------------------------------------------------------
  355. void __fastcall TFRAMEItsCross::btnFilterClick(TObject *Sender)
  356. {
  357. String sFilter = EdFilter->Text.Trim();
  358. FilterItsCross(sFilter);
  359. }
  360. //---------------------------------------------------------------------------
  361. void __fastcall TFRAMEItsCross::btnNoFilterClick(TObject *Sender)
  362. {
  363. EdFilter->Text = "";
  364. UnFilterItsCross();
  365. }
  366. //---------------------------------------------------------------------------