Compare commits

..

123 Commits

Author SHA1 Message Date
djankowski b0bfb4d3f6 Merge pull request 'Development' (#690) from Development into master
Merging Development into master after successful testing.
2026-01-22 08:17:16 -05:00
djankowski af1a05ff40 Merge pull request 'Development' (#681) from Development into master
Merging C2025-043 from dev into master after successful testing.
2026-01-13 16:35:02 -05:00
djankowski de89200eae Merge pull request 'Development' (#678) from Development into master
Merging dev into master after successful testing.
2026-01-05 08:22:25 -05:00
djankowski 7009ca78f2 Merge pull request 'Development' (#675) from Development into master
Merging dev into master after successful testing.
2025-12-18 08:34:38 -05:00
djankowski 03c58b7ae3 Merge pull request 'Development' (#672) from Development into master
Merging changes from dev into Master after successful testing
2025-12-11 08:44:58 -05:00
djankowski c9166f6f92 Merge pull request 'Development' (#669) from Development into master
Merging all changes from dev into master after successful testing.
2025-12-05 11:50:16 -05:00
djankowski 343d6a8c9a Merge pull request 'Development' (#650) from Development into master
Merging from dev into master after successful testing.
2025-11-06 09:23:19 -05:00
djankowski 8c5c7a5d93 Merge pull request 'Development' (#634) from Development into master
Merging dev into master after successful testing.
2025-10-09 12:50:13 -04:00
djankowski 864ec2709c Merge pull request 'Development' (#620) from Development into master
Merging Dev into master after successful testing.
2025-09-24 08:25:00 -04:00
djankowski 4b1ca8d7bf Merge pull request 'Development' (#612) from Development into master
Merging data into master after successful testing
2025-09-11 12:13:22 -04:00
djankowski 3b73d54ea2 Merge pull request 'Development' (#600) from Development into master
Merging dev into master after successful testing.
2025-08-15 08:37:48 -04:00
djankowski 2ca433c83f Merge pull request 'Development' (#576) from Development into master
Merging Dev into Master after successful testing.
2025-07-28 08:20:18 -04:00
djankowski 0b40569727 Merge pull request 'Development' (#570) from Development into master
Reviewed-on: #570
2025-06-23 14:58:28 -04:00
djankowski afb0247d87 Merge pull request 'Development' (#559) from Development into master
Merging changes from dev into master after successful testing.
2025-05-20 13:24:21 -04:00
djankowski bce8461a7e Merge pull request 'Development' (#555) from Development into master
Merging all changes from dev into master after successful testing.
2025-05-15 15:01:00 -04:00
djankowski 9d5cc43d71 Merge pull request 'Development' (#543) from Development into master
Merging dev into master after successful testing.
2025-05-01 11:25:49 -04:00
djankowski bc1370ab29 Merge pull request 'Development' (#540) from Development into master
Merging changes from Development into master after successful testing.
2025-04-23 15:13:56 -04:00
djankowski eaf2b14cfc Merge pull request 'Development' (#535) from Development into master
Merging all changes from development into master after successful testing.
2025-03-26 09:25:11 -04:00
djankowski 1cf7d81aa5 Merge pull request 'Development' (#530) from Development into master
Merging all changes through B2025-017 from dev into master after successful testing.
2025-03-04 10:24:28 -05:00
djankowski f11a9536f0 Merge pull request 'Development' (#524) from Development into master
Merging all changes through B2025-015 from development into master after successful testing.
2025-02-20 15:33:44 -05:00
djankowski c7bdcf0104 Merge pull request 'Development' (#516) from Development into master
Merging changes from development into master after successful testing
2025-02-11 15:25:38 -05:00
djankowski df026499d5 Merge pull request 'Development' (#512) from Development into master
Merging all changes from development into master after successful testing.
2025-02-10 09:20:43 -05:00
djankowski a3aa4157b8 Merge pull request 'Development' (#508) from Development into master
Merging all changes through B2025-012 from development into master after successful testing.
2025-02-05 10:50:35 -05:00
djankowski 8f3268e1bc Merge pull request 'Development' (#504) from Development into master
Merging all changes from development into master after successful testing.
2025-01-30 15:55:02 -05:00
djankowski 5721d440e9 Merge branch 'master' of https://git.volian.com/Volian/SourceCode 2025-01-21 10:42:15 -05:00
djankowski 505c396283 Merge pull request 'Development' (#489) from Development into master
Merging from development into master after successful testing.
2025-01-21 10:41:15 -05:00
djankowski 643e6bc94f Merge pull request 'Development' (#486) from Development into master
Merging all items through B2025-003 from development in master after successful testing.
2025-01-09 15:02:16 -05:00
djankowski 76502e6d97 Merge pull request 'Development' (#481) from Development into master
Merging all changes through F2024-087 after successful testing.
2024-12-11 11:52:34 -05:00
djankowski 851a0b3810 Merge pull request 'Development' (#464) from Development into master
Merging all items through B2024-092 from development into master after successful testing.
2024-11-11 11:39:01 -05:00
djankowski fd8dbb4c8b Merge pull request 'Development' (#454) from Development into master
Merging all changes from development into master after successful testing.
2024-11-01 14:18:00 -04:00
djankowski 4ffd994c5e Merge pull request 'Development' (#450) from Development into master
Merging all development items into master after successful testing.
2024-10-31 09:11:59 -04:00
djankowski a34828113a Merge pull request 'Development' (#416) from Development into master
Merging C2017-031 and B2024-075 from development into master after successful testing.
2024-10-03 12:08:30 -04:00
djankowski 461329468c Merge pull request 'Development' (#413) from Development into master
Merging F2023-136 and F2024-074 in master after successful testing
2024-09-27 14:27:22 -04:00
djankowski 35de5df04d Merge pull request 'Development' (#410) from Development into master
Merging all items through B2024-03 from development into master after successful testing.
2024-09-17 12:03:23 -04:00
djankowski 4f0548fd60 Merge pull request 'Development' (#402) from Development into master
Merging C2021-034 and B2024-065 into master after successful testing.
2024-09-06 09:56:37 -04:00
djankowski 5c1d96cc51 Merge pull request 'Development' (#399) from Development into master
Merging all fixes through B2024-063 from development into master after successful testing.
2024-08-27 15:58:15 -04:00
djankowski 57049c0c52 Merge pull request 'Development' (#392) from Development into master
Merging B2024-059 and B2024-058 from development into master after successful testing.
2024-08-15 14:55:27 -04:00
djankowski 31326e1c91 Merge pull request 'Development' (#389) from Development into master
Merging all changes through F2024-069 from development into master after successful testing.
2024-08-09 13:06:40 -04:00
djankowski 3c60994a0a Merge pull request 'Development' (#373) from Development into master
Merging all changes through B2024-053 from development into master after successful testing.
2024-08-01 08:37:23 -04:00
djankowski 773cc42346 Merge pull request 'Development' (#362) from Development into master
Merging B2024-046 and B2024-047 from development into master after successful testing.
2024-07-25 10:44:42 -04:00
djankowski f46a1f39dc Merge pull request 'Development' (#359) from Development into master
Merging B2024-042 from development into master after successful testing.
2024-07-22 11:14:19 -04:00
djankowski b7175bf77f Merge pull request 'Development' (#357) from Development into master
Merging C2024-005 from development into master after successful testing.
2024-07-18 15:41:20 -04:00
djankowski ec22232aa8 Merge pull request 'Development' (#356) from Development into master
Merging all items through B2024-041 from development into master after successful testing.
2024-07-18 09:51:54 -04:00
djankowski f303cd2236 Merge pull request 'Development' (#348) from Development into master
Merging F2024-065 and F2024-066 from development into master after successful testing.
2024-07-03 10:45:41 -04:00
djankowski f40cef4416 Merge pull request 'Development' (#346) from Development into master
Merging F2024-064 from development into master after successful testing.
2024-07-01 11:54:15 -04:00
djankowski fbca97d38d Merge pull request 'Development' (#344) from Development into master
Merging C2024-013 from development into master after successful testing.
2024-06-25 15:55:32 -04:00
djankowski 28bd2cba5c Merge pull request 'Development' (#342) from Development into master
Merging C2022-029 from development into master after successful testing.
2024-06-20 11:36:59 -04:00
djankowski 4b35f73bbf Merge pull request 'Development' (#340) from Development into master
Merging C2024-004 from development into master after successful testing.
2024-06-19 16:23:23 -04:00
djankowski f4706eb126 Merge pull request 'Development' (#338) from Development into master
Merging C2019-047 from development into master after successful testing.
2024-06-17 08:38:34 -04:00
djankowski 21bcb90558 Merge pull request 'Development' (#335) from Development into master
Merging B2024-036 and F2024-063 from development into master after successful testing.
2024-06-06 14:51:13 -04:00
djankowski ae48ac0cae Merge pull request 'Development' (#332) from Development into master
Merging changes through B2024-035 from development into master after successful testing.
2024-05-30 08:08:28 -04:00
djankowski cb4979d5bc Merge pull request 'Development' (#327) from Development into master
Merging F2024-061 from development into master after successful testing.
2024-05-20 14:11:12 -04:00
djankowski 7d3ae74e1f Merge pull request 'Development' (#325) from Development into master
Merging F2024-060 from development into master after successful testing.
2024-05-16 15:32:13 -04:00
djankowski 9d680aa500 Merge pull request 'Development' (#323) from Development into master
Merging C2024-001 from development into master after successful testing.
2024-05-16 14:17:17 -04:00
djankowski 0d50b1c2fe Merge pull request 'Development' (#321) from Development into master
Merging all items through B2024-030 from development into master after successful testing.
2024-05-15 08:33:58 -04:00
djankowski 75e034863f Merge pull request 'Development' (#315) from Development into master
Merging all changes through B2024-026 from development into master after successful testing.
2024-05-09 14:01:48 -04:00
jjenko 3b42de1571 Merge pull request 'F2024-059_Callaway' (#311) from F2024-059_Callaway into master
Format only changes
2024-05-07 16:00:36 -04:00
djankowski 668472286e Merge pull request 'Development' (#307) from Development into master
Merging all changes through C2023-006 into master after successful testing.
2024-04-26 09:21:44 -04:00
djankowski e00d34c99d Merge pull request 'Development' (#300) from Development into master
Merging C2024-008 and C2024-007 from development into master after successful testing.
2024-04-17 14:57:22 -04:00
djankowski 9fb496dfb3 Merge pull request 'Development' (#297) from Development into master
Merging F2024-053 from development into master after successful testing.
2024-04-11 09:23:34 -04:00
djankowski f4eaa4a3ef Merge pull request 'Development' (#295) from Development into master
Merging F2024-052 from development into master after successful testing.
2024-04-08 11:11:43 -04:00
djankowski 5d50ed6bdf Merge pull request 'Development' (#292) from Development into master
Merging F2024-051, B2024-021, F2024-049, F2024-050 and F2024-045 after successful testing.
2024-04-05 10:54:57 -04:00
djankowski d7ace4eaf9 Merge pull request 'Development' (#287) from Development into master
Merging F2024-047, F2024-048, B2024-017 and B2024-019 from development into master after successful testing.
2024-04-04 11:36:56 -04:00
djankowski 16a4d335ea Merge pull request 'Development' (#282) from Development into master
Merging all items through B2024-018 from development into master after successful testing.
2024-03-27 13:39:46 -04:00
djankowski ba69bb0772 Merge pull request 'Development' (#275) from Development into master
Merging F2024-037 and CSLA updates into master after successful testing.
2024-03-20 16:07:27 -04:00
djankowski 455940caa2 Merge pull request 'Development' (#271) from Development into master
Merging F2024-040 into master after successful testing.
2024-03-18 10:00:30 -04:00
djankowski 439344757e Merge pull request 'Development' (#269) from Development into master
Merging F2024-044, F2024-043, and F2024-019 in master after successful testing.
2024-03-15 09:33:57 -04:00
djankowski ad912691c9 Merge pull request 'Development' (#265) from Development into master
Merging 	F2024-016, 	F2024-032, 	B2024-013, 	F2024-025,	F2024-027 & F2024-028 into master after successful testing.
2024-03-12 14:01:12 -04:00
djankowski 237144aff6 Merge pull request 'Development' (#259) from Development into master
Merging B2024-014 from development into master after successful testing.
2024-03-04 15:02:18 -05:00
djankowski 810332d558 Merge pull request 'Development' (#256) from Development into master
Merging F2024-020 from development into master.  No testing required since formats are under development.
2024-02-29 13:23:48 -05:00
djankowski f8431d0ba1 Merge pull request 'Development' (#252) from Development into master
Merging F2024-022 from development into master.  No testing required since formats are under development.
2024-02-29 09:23:51 -05:00
djankowski 57c3bfa16a Merge pull request 'Development' (#250) from Development into master
Merging C2023-003 and F2024-026 into master after successful testing.
2024-02-28 11:56:15 -05:00
djankowski 61f1077608 Merge pull request 'Development' (#248) from Development into master
Merging F2024-029, B2024-009, F2024-023, B2024-011, B2024-012 and F2024-017 from development into master after successful testing.
2024-02-27 14:21:22 -05:00
djankowski 8877e968b9 Merge pull request 'Development' (#239) from Development into master
Merging F2024-018, B2024-008, B2024-007, and F2024-015 from development into master after successful testing.
2024-02-22 08:22:26 -05:00
djankowski 4575c90bee Merge pull request 'Development' (#233) from Development into master
Merging updated formats from development into master after successful testing.
2024-02-14 16:07:57 -05:00
djankowski 21279a87ae Merge pull request 'Development' (#231) from Development into master
Merging B2024-006 from development into master after successful testing.
2024-02-14 08:19:09 -05:00
djankowski 3d5ad4a17e Merge pull request 'Development' (#229) from Development into master
Merging C2024-002 and F2024-013 from development into master after successful testing.
2024-02-09 11:30:41 -05:00
djankowski 9bb7b044a8 Merge pull request 'Development' (#226) from Development into master
Merging F2024-010, 	F2024-011, 	F2024-008, 	B2024-002, 	F2024-012  and B2024-005 from development into master after successful testing.
2024-02-08 11:38:49 -05:00
djankowski dc8f2f7561 Merge pull request 'Development' (#219) from Development into master
Merging C2022-009 into master after successful testing.
2024-02-02 13:53:22 -05:00
djankowski 829dbf84da Merge pull request 'Development' (#217) from Development into master
Merging F2024-005 and B2024-004 from development into master after successful testing
2024-01-31 08:34:00 -05:00
djankowski 7b156c17f8 Merge pull request 'Development' (#212) from Development into master
Merging all changes up through F2024-006 from development into master after successful testing.
2024-01-24 11:30:40 -05:00
djankowski cbf7cbc164 Merge pull request 'Development' (#198) from Development into master
Merging F2024-002 and F2023-112 from development into master.  No testing required since formats are under development.
2024-01-08 15:24:15 -05:00
djankowski b04faa816e Merge pull request 'Development' (#196) from Development into master
Merging F2023-126, F2024-001, C2022-009, C2023-024 and C2023-023 from development into Master after successful testing.
2024-01-03 10:54:22 -05:00
djankowski 517ebe2902 Merge pull request 'Development' (#189) from Development into master
Initial check-in of Vogtle Background formats.  No testing required since formats are under development.
2023-12-15 15:48:55 -05:00
djankowski 03d0d314e3 Merge pull request 'Development' (#187) from Development into master
Merging B2023-115 from development into master after successful testing.
2023-12-12 15:31:06 -05:00
djankowski 3e804c5cce Merge pull request 'Development' (#185) from Development into master
Merging F2023-133 into from development into master. No testing required since formats are under development.
2023-12-11 10:08:22 -05:00
djankowski ee2b8b538e Merge pull request 'Development' (#183) from Development into master
Merging PROMSFixes from development into master after minor changes to UpdateFormatList.
2023-12-08 14:51:21 -05:00
djankowski fdfd34fe92 Merge pull request 'Development' (#181) from Development into master
Merging F2023-151 from development into master.  No testing required since formats are under development.
2023-12-07 15:55:16 -05:00
djankowski 2d6fb6523b Merge pull request 'Development' (#179) from Development into master
Merging F2023-133 from development into master.  No testing required since formats are under development.
2023-12-07 11:44:31 -05:00
djankowski 3084bf3982 Merge pull request 'Development' (#177) from Development into master
Merging B2023-115 and F2023-150 from development into master.  No testing required since formats are under development.
2023-12-06 09:08:18 -05:00
djankowski 5ba51e8392 Merge pull request 'Development' (#174) from Development into master
Merging F2023-149 from development into master.  No testing required since formats are under development.
2023-12-05 16:30:39 -05:00
djankowski fb5eb43e34 Merge pull request 'Development' (#172) from Development into master
Merging F2023-124 from development into master.  No testing required since formats are under development.
2023-12-04 11:22:59 -05:00
djankowski b154056276 Merge pull request 'Development' (#170) from Development into master
Merging F2023-119 from development into master.  No testing required since formats are under development.
2023-12-01 15:36:22 -05:00
djankowski c67b8f9ca1 Merge pull request 'Development' (#168) from Development into master
Merging F2023-146 from development to master.  No testing required since formats are under development.
2023-12-01 10:02:50 -05:00
djankowski 95e4181360 Merge pull request 'Development' (#166) from Development into master
Merging F2023-148, F2023-148, and B2023-120 from development into Master. No testing required since formats are under development.
2023-11-30 14:38:49 -05:00
djankowski 32dffbe56b Merge pull request 'Development' (#162) from Development into master
Merging B2023-116, B2023-117, and F2023-143 from development to master after successful testing.
2023-11-29 15:58:44 -05:00
jjenko 6b3c8d373b Merge pull request 'F2023-143_Vogtle3&4_Alrm_Footer' (#159) from F2023-143_Vogtle3&4_Alrm_Footer into master
Format only change.
Vogtle 3&4 formats under development. This change will be tested as data in entered into PROMS by Volian
2023-11-27 16:23:44 -05:00
djankowski db29107f47 Merge pull request 'Development' (#156) from Development into master
Merging F2023-142 and B2022-046 in from development to master after successful testing.
2023-11-14 08:45:47 -05:00
djankowski 355537f2ab Merge pull request 'Development' (#153) from Development into master
Merging F2023-140, F2023-123, B2023-007, B2023-108, F2023-139, F2023-138 and B2023-103
2023-11-09 10:33:40 -05:00
djankowski 0729ef0c21 Merge pull request 'Development' (#147) from Development into master
Merging F2023-139 from development into master after successful testing.
2023-10-26 10:10:33 -04:00
djankowski 6fe82bfd0f Merge pull request 'Development' (#145) from Development into master
Merging F2023-138 from development into master after successful testing.
2023-10-25 14:40:15 -04:00
djankowski 39bf072363 Merge pull request 'Development' (#142) from Development into master
Merging B2023-103 from development into master after successful testing.
2023-10-23 15:28:31 -04:00
djankowski da7c384fd8 Merge pull request 'Development' (#139) from Development into master
Merging C2023-017, C2023-019, B2023-104, B2023-101 and B2023-102 from development into master after successful testing.
2023-10-18 10:37:59 -04:00
djankowski 95130fd9a0 Merge pull request 'Development' (#133) from Development into master
Merging C2023-018 from development into master after successful testing.
2023-10-11 09:26:45 -04:00
djankowski 978e2344a3 Merge pull request 'Development' (#131) from Development into master
Merging C2023-016 and C2023-017 from development into master after successful testing.
2023-10-06 10:56:34 -04:00
djankowski c9bf45602c Merge pull request 'Development' (#128) from Development into master
Merging F2023-137 and B2023-100 from development into master. F2023-137 does not require testing since formats are under development. B2023-100 tested successfully.
2023-10-02 11:52:22 -04:00
djankowski aa160b2036 Merge pull request 'Development' (#124) from Development into master
Merging B2023-099 from development into master after successful testing.
2023-09-28 15:58:27 -04:00
djankowski f82b32d351 Merge pull request 'Development' (#122) from Development into master
Merging B2023-097 and B2023-098 from development into master after successful testing.
2023-09-26 14:58:05 -04:00
djankowski e519dc9a57 Merge pull request 'Development' (#120) from Development into master
Merging B2023-094 from development into master after successful testing.
2023-09-22 13:24:17 -04:00
djankowski f020c37db9 Merge pull request 'Development' (#118) from Development into master
Merged B2023-096 from development into master after successful testing.
2023-09-15 11:50:57 -04:00
djankowski 5a4ec3b6b1 Merge pull request 'Development' (#117) from Development into master
Merging F2023-135 and B2023-093 from development into master after successful testing.
2023-09-14 15:58:52 -04:00
djankowski 2602d6c9d2 Merge pull request 'Development' (#113) from Development into master
Merging C2023-015 from development into master.
2023-09-12 09:23:57 -04:00
djankowski ff403583d7 Merge pull request 'Development' (#111) from Development into master
Merging B2023-091 and B2023-078 from development into master.
2023-08-30 16:07:17 -04:00
djankowski c5577cc2bd Merge pull request 'Development' (#108) from Development into master
Merging F2023-134 from development into master.  No testing required since formats are under development.
2023-08-24 15:01:12 -04:00
djankowski 78be6e5dc1 Merge pull request 'Development' (#106) from Development into master
Merging GitAutomation from Development into Master.
2023-08-24 09:13:06 -04:00
djankowski b954a41375 Merge pull request 'Development' (#104) from Development into master
Merging B2023-089 and F2023-131 from Development into Master.  No testing required since formats are under development.
2023-08-24 09:05:31 -04:00
djankowski 0100a11cfe Merge pull request 'Development' (#101) from Development into master
Merging F2023-125 from development into master.  No testing required since formats are under development.
2023-08-23 08:19:00 -04:00
djankowski 04cf2e8534 Merge pull request 'Development' (#99) from Development into master
Merging F2023-130 from Development into Master. No testing required since formats are under development.
2023-08-22 15:04:22 -04:00
djankowski be00724818 Merge pull request 'Development' (#97) from Development into master
Merging B2023-088 from development into master.  No testing required since formats are under development.
2023-08-22 10:52:09 -04:00
djankowski 274d93c61a Merge pull request 'Development' (#94) from Development into master
Merging F2023-122 from development into master.  No testing required since formats are under development.
2023-08-22 08:53:57 -04:00
djankowski 7dc4c30436 Merge pull request 'Development' (#92) from Development into master
Merging F2023-127 from development into master.  No testing required since formats are under development.
2023-08-22 08:33:56 -04:00
djankowski 028ef4bc31 Merge pull request 'Development' (#89) from Development into master
Merging F2023-128 and F2023-129 from development into master.  No testing required since formats are under development.
2023-08-21 11:46:01 -04:00
djankowski 42124d65c7 Merge pull request 'Development' (#87) from Development into master
Merging F2023-118,  F2023-120 and F2023-121 from development into master.  No testing required since formats are under development.
2023-08-16 10:13:52 -04:00
85 changed files with 3261 additions and 5809 deletions
+39 -117
View File
@@ -456,7 +456,7 @@ namespace Baseline
switch (myLast) switch (myLast)
{ {
case LastWas.Pagination: case LastWas.Pagination:
OpenPDF(line); line = OpenPDF(line);
break; break;
case LastWas.Baseline: // TODO: Need to add code here to open matching file case LastWas.Baseline: // TODO: Need to add code here to open matching file
OpenOnePDF(myLine,1); OpenOnePDF(myLine,1);
@@ -479,7 +479,7 @@ namespace Baseline
switch (myLast) switch (myLast)
{ {
case LastWas.Pagination: case LastWas.Pagination:
OpenPDF(line); line = OpenPDF(line);
break; break;
case LastWas.Baseline: // TODO: Need to add code here to open matching file case LastWas.Baseline: // TODO: Need to add code here to open matching file
OpenOnePDF(myLine,2); OpenOnePDF(myLine,2);
@@ -491,99 +491,34 @@ namespace Baseline
break; break;
} }
} }
/// <summary>
/// This will return the full path to the PDF file
/// </summary>
/// <param name="fi"></param>
/// <param name="patern"></param>
/// <returns></returns>
private string GetPFDFileAndPath(FileInfo fi, string patern)
{
string[] fileList = Directory.GetFiles(fi.DirectoryName, patern);
// sort the list of file list
Array.Sort((string[])fileList);
return fileList.First(); // the PDF file that we what should be top of the list then.
}
/// <summary>
/// This will parse out the procedure number for the PROMS ShortPath representation of a procedure section or step part
/// In the PROMS ShortPath, ".S" is used to delimit the procedure number, section then uses "..S" for the step parts
/// This method was written to handle cases where ".S" is used as part of the procedure number
/// </summary>
/// <param name="txt"></param>
/// <returns></returns>
private string ParseOutProcedureNumberFromLine(string txt)
{
// old logic was looking for the first occurence of ".S" in the txt string as the ending point of the procedure nuumber
// Beaver Valley has a procedure number "1.SBGEN" in which the old logic would not work
// 1.SBGEN.SC. ==> short path of attachment section "C"
// 1.SBGEN.SC..S1. ==> short path of Step 1 in attachment section "C"
string rtnstr = null;
int lidx = -1;
// if the item is to a high levels step or sub-step the short path as "..S" for each part of the step
// so look for the last occurence of ".." which will be the end of the section information
lidx = txt.LastIndexOf("..");
if (lidx > 0)
{
lidx = txt.LastIndexOf(".S", lidx); // this will position us to the end of the procedure number
}
else
{
lidx = txt.LastIndexOf(".S"); // this will position us to the end of the procedure number if there was no step information
}
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_");
return rtnstr;
}
string exePath; string exePath;
private void OpenPDF(string line) private string OpenPDF(string line)
{ {
int pageNum = int.Parse(line.Substring(0, 6)); int page = int.Parse(line.Substring(0, 6));
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file. // B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
string ProcNum = ParseOutProcedureNumberFromLine(line); line = line.Substring(8, line.IndexOf(".S") - 8).Replace("/", "_").Replace("\\", "_");
string procPatern = string.Format("*{0}*.pdf", string.IsNullOrEmpty(line) ? "noProcNumber" : ProcNum);
FindFile ff = lbDifferent.SelectedItem as FindFile; FindFile ff = lbDifferent.SelectedItem as FindFile;
FileInfo fi1 = new FileInfo(ff.File1); FileInfo fi1 = new FileInfo(ff.File1);
FileInfo fi2 = new FileInfo(ff.File2); FileInfo fi2 = new FileInfo(ff.File2);
string PDFfileName1 = GetPFDFileAndPath(fi1,procPatern);
string PDFfileName2 = GetPFDFileAndPath(fi2,procPatern);
if (string.IsNullOrEmpty(PDFfileName1) || string.IsNullOrEmpty(PDFfileName2)) return;
// If you don't know where the Reader executable is for PDFs Open a PDF and Check to see where the path points // If you don't know where the Reader executable is for PDFs Open a PDF and Check to see where the path points
if (exePath == null) if (exePath == null)
{ {
try System.Diagnostics.Process p = System.Diagnostics.Process.Start(fi1.DirectoryName + "\\" + line + ".pdf");
{ exePath = TryToGetPath(p);
System.Diagnostics.Process p = System.Diagnostics.Process.Start(PDFfileName1); p.Kill(); // No need to keep it open
exePath = TryToGetPath(p);
p.Kill(); // No need to keep it open
}
catch (Exception ex)
{
Application.DoEvents();
string msg = string.Format("{0} - {1}", ex.GetType().Name, ex.Message);
Console.WriteLine(msg);
MessageBox.Show(msg, "Error opening default PDF Viewer");
return;
}
} }
// Open the first PDF on a Specific Page // Open the first PDF on a Specific Page
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format(" /A \"page={0}\" \"{1}\" ", pageNum,PDFfileName1)); System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", page) + fi1.DirectoryName + "\\" + line + ".pdf ");
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1); System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
// Move the PDF Reader window to 0,0 // Move the PDF Reader window to 0,0
MoveProcess(p1, 0, 0); MoveProcess(p1, 0, 0);
// Open the first PDF on a Specific Page
// Open the second PDF on a Specific Page System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", page) + fi2.DirectoryName + "\\" + line + ".pdf ");
System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format(" /A \"page={0}\" \"{1}\" ", pageNum, PDFfileName2));
System.Diagnostics.Process p2 = System.Diagnostics.Process.Start(psi2); System.Diagnostics.Process p2 = System.Diagnostics.Process.Start(psi2);
// Move the PDF Reader window to 960,0 // Move the PDF Reader window to 960,0
// TODO: This Offset could be a Setting // TODO: This Offset could be a Setting
MoveProcess(p2, 960, 0); MoveProcess(p2, 960, 0);
return; return line;
} }
/// <summary> /// <summary>
/// Try to get the location of the PDF Reader executable /// Try to get the location of the PDF Reader executable
@@ -595,7 +530,7 @@ namespace Baseline
p.WaitForInputIdle(); p.WaitForInputIdle();
while (p.MainModule == null) while (p.MainModule == null)
{ {
Console.WriteLine("{0} - {1}", p.MainWindowTitle, p.ProcessName); Console.WriteLine("{0} - {1}", p.MainWindowTitle,p.ProcessName);
p.WaitForInputIdle(); p.WaitForInputIdle();
Application.DoEvents(); Application.DoEvents();
} }
@@ -659,52 +594,40 @@ namespace Baseline
/// <param name="list"></param> /// <param name="list"></param>
private void OpenOnePDF(Line myLine, int list) private void OpenOnePDF(Line myLine, int list)
{ {
if (myLine == null) return; // no PDF to open
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file. // B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
string proc = myLine.MyProc.Number.Replace("/","_").Replace("\\","_"); string proc = myLine.MyProc.Number.Replace("/","_").Replace("\\","_");
// if no procedure number, PROMS creates pdf filename "NoProcNumber.pdf"
// create pattern to use to get the PDF from the directory
// add wildcards (*) to file the file if any prefix or suffix was added to the filename
string procPatern = string.Format("*{0}*.pdf", proc == string.Empty ? "noProcNumber" : proc);
int pagenum = myLine.MyPage.Number; int pagenum = myLine.MyPage.Number;
FindFile ff = lbDifferent.SelectedItem as FindFile; FindFile ff = lbDifferent.SelectedItem as FindFile;
string PDFfileName = null; FileInfo fi1 = new FileInfo(ff.File1);
if (list == 1) FileInfo fi2 = new FileInfo(ff.File2);
{
FileInfo fi1 = new FileInfo(ff.File1);
PDFfileName = GetPFDFileAndPath(fi1, procPatern);
}
else // list == 2
{
FileInfo fi2 = new FileInfo(ff.File2);
PDFfileName = GetPFDFileAndPath(fi2, procPatern);
}
if (string.IsNullOrEmpty(PDFfileName)) return; // no PDF to open
// if exePath is null, then open the found PDF with the default PDF viewer and
// capture/save the entire name and path of the default PDF viewer
if (exePath == null) if (exePath == null)
{ {
try System.Diagnostics.Process p = System.Diagnostics.Process.Start(fi1.DirectoryName + "\\" + proc + ".pdf");
while (exePath == null)
{ {
System.Diagnostics.Process tp = System.Diagnostics.Process.Start(PDFfileName); try
exePath = TryToGetPath(tp); {
tp.Kill();
} exePath = p.MainModule.FileName;
catch (Exception ex) }
{ catch (Exception ex)
Application.DoEvents(); {
string msg = string.Format("{0} - {1}", ex.GetType().Name, ex.Message); Application.DoEvents();
Console.WriteLine(msg); Console.WriteLine("{0} - {1}", ex.GetType().Name, ex.Message);
MessageBox.Show(msg, "Error opening default PDF Viewer"); }
return;
} }
p.Kill();
}
if (list == 1)
{
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", pagenum) + fi1.DirectoryName + "\\" + proc + ".pdf ");
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
}
else
{
System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", pagenum) + fi2.DirectoryName + "\\" + proc + ".pdf ");
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi2);
} }
// open the PDF and jump to the page number
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A \"page={0}\" \"{1}\" ", pagenum,PDFfileName));
psi1.UseShellExecute = false;
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
} }
/// <summary> /// <summary>
/// Perform Debug Meta file comparison for all of the folders within the automated testing folders /// Perform Debug Meta file comparison for all of the folders within the automated testing folders
@@ -786,12 +709,11 @@ namespace Baseline
private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e) private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e)
{ {
//Initialize Results List Box //Initialize Results List Box
lbResults1.Items.Clear();
Procedure myProc = lbProcedures.SelectedItem as Procedure; Procedure myProc = lbProcedures.SelectedItem as Procedure;
if (myProc == null) return; // clicked on the white space (blank line) in the list of different procedures
//TODO: May need to consider if there are duplicate procedure numers and titles //TODO: May need to consider if there are duplicate procedure numers and titles
Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title); Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title);
// Build the results ListBox for the left window // Build the results ListBox for the left window
lbResults1.Items.Clear();
if (myProc1 != null) if (myProc1 != null)
{ {
foreach (Page myPage in myProc1.MyPages) foreach (Page myPage in myProc1.MyPages)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+253 -1
View File
@@ -422,6 +422,150 @@ namespace LBWordLibrary
return true; return true;
return false; return false;
} }
/// <summary>
/// If document contains symbol characters, returns problem font.
/// </summary>
public string FontHasSymbolCharacters
{
get
{
LBRange myRange = Range();
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
myRange.Start = 0;
int end = myRange.End;
string myText = GetRangeText(myRange);
//return _RegFindSymbol.IsMatch(myText);
MatchCollection problems = _RegFindSymbol.Matches(myText);
int offset = 0;
List<string> alreadyProcessed = new List<string>();
List<string> fontHasSymbols = new List<string>();
foreach (Match problem in problems)
{
if (!alreadyProcessed.Contains(problem.Value))
{
myRange.Start = problem.Index + offset;
myRange.End = problem.Index + problem.Length + offset;
int newOffset = FindRangeOffset(myRange, problem, offset, end);
string fontName = myRange.Font.Name;
if (IsSymbolFont(fontName))
{
if( !fontHasSymbols.Contains(fontName))
{
fontHasSymbols.Add(fontName);
// Found symbol font
_MyLog.InfoFormat("Font '{0}' has Symbols", fontName);
}
//Console.WriteLine("Font '{0}' has Symbols", myRange.Font.Name);
//return true;
}
else
return myRange.Font.Name;
offset = newOffset;
alreadyProcessed.Add(problem.Value);
}
}
return null;
}
}
/// <summary>
/// Debug Tool - Return a string containing a list of the fonts that have symbol characters.
/// </summary>
public string FontsHaveSymbolCharacters
{
get
{
string sep = "";
StringBuilder sb = new StringBuilder();
List<string> fonts=new List<string>();
LBRange myRange = Range();
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
myRange.Start = 0;
int end = myRange.End;
string myText = GetRangeText(myRange);
//return _RegFindSymbol.IsMatch(myText);
MatchCollection problems = _RegFindSymbol.Matches(myText);
int offset = 0;
foreach (Match problem in problems)
{
myRange.Start = problem.Index + offset;
myRange.End = problem.Index + problem.Length + offset;
int newOffset = FindRangeOffset(myRange, problem, offset, end);
if (!fonts.Contains(myRange.Font.Name))
{
fonts.Add(myRange.Font.Name);
sb.Append(sep + "'" + myRange.Font.Name + "'");
sep = ",";
}
offset = newOffset;
}
if (sb.Length > 0) return sb.ToString();
return null;
}
}
/// <summary>
/// Debug Tool - Return a list of symbol characters using VESYMB font.
/// </summary>
public string FontsHaveSymbolCharacters2
{
get
{
try
{
Dictionary<string, List<int>> fonts = new Dictionary<string, List<int>>();
LBRange myRange = Range();
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
myRange.Start = 0;
int end = myRange.End;
string myText = GetRangeText(myRange);
//return _RegFindSymbol.IsMatch(myText);
MatchCollection problems = _RegFindSymbol.Matches(myText);
int offset = 0;
foreach (Match problem in problems)
{
myRange.Start = problem.Index + offset;
myRange.End = problem.Index + problem.Length + offset;
int newOffset = FindRangeOffset(myRange, problem, offset, end);
string sFont = myRange.Font.Name;
if (sFont.ToUpper().StartsWith("VESYM"))
{
if (!fonts.ContainsKey(sFont))
{
fonts.Add(sFont, new List<int>());
}
List<int> symbols = fonts[sFont];
string myTextSymb = GetRangeText(myRange);
foreach (char c in myTextSymb)
{
if (!symbols.Contains((int)c))
symbols.Add((int)c);
}
}
offset = newOffset;
}
if (fonts.Count > 0)
{
string sep = "";
StringBuilder sb = new StringBuilder();
foreach (string font in fonts.Keys)
{
sb.Append(sep + "'" + font + "'");
sep = ",";
foreach (int i in fonts[font])
{
sb.Append(sep);
sb.Append(i);
}
}
return sb.ToString();
}
}
catch (Exception ex)
{
Console.WriteLine("{0},{1},{2}", ex.GetType().Name, ex.Message, ex.StackTrace);
}
return null;
}
}
/// <summary> /// <summary>
/// Checks to see if the document contains symbol characters /// Checks to see if the document contains symbol characters
@@ -457,7 +601,86 @@ namespace LBWordLibrary
} }
} }
Regex _RegFindSymbol = new Regex("[\\uF020-\\uF07F]+"); Regex _RegFindSymbol = new Regex("[\\uF020-\\uF07F]+");
/// <summary>
/// FixSymbolCharacters - Fix any symbol characters in the document
/// </summary>
public void FixSymbolCharacters()
{
// Set up range object to be used to process text
LBRange myRange = Range();
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
int end = myRange.End;
myRange.Start = 0;
string myText = GetRangeText(myRange);
MatchCollection problems = _RegFindSymbol.Matches(myText);
int offset = 0;
foreach (Match problem in problems)
{
myRange.Start = problem.Index + offset;
myRange.End = problem.Index + problem.Length + offset;
int newOffset = FindRangeOffset(myRange, problem, offset, end);
if (myRange.Font.Name == "")
{
int wrdStart = myRange.Start;
int wrdEnd = myRange.End;
int wrdMiddle = wrdStart;
while (myRange.Font.Name == "")
{
do
{
myRange.End = ++wrdMiddle;
} while(myRange.Font.Name != "");
myRange.End = wrdMiddle - 1;
ReplaceSymbolCharacters(myRange);
myRange.Start = wrdMiddle -1;
myRange.End = wrdEnd;
}
ReplaceSymbolCharacters(myRange);
}
else
{
ReplaceSymbolCharacters(myRange);
}
offset = newOffset;
}
}
/// <summary>
/// Try to fix the first character in the symbol range F000 to F0FF. If it cannot be
/// fixed, it is an indicator that the font is not installed properly. Regardless of
/// whether there is success, the change is undone so that the document will not be
/// considered dirty, i.e. will not prompt user for save.
/// </summary>
/// <returns></returns>
public bool AttemptToFixASymbolCharacter()
{
// Set up range object to be used to process text
LBRange myRange = Range();
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
int end = myRange.End;
myRange.Start = 0;
string myText = GetRangeText(myRange);
MatchCollection problems = _RegFindSymbol.Matches(myText);
if (problems.Count>0)
{
Match problem = problems[0];
myRange.Start = problem.Index;
myRange.End = myRange.Start + 1;
if (IsSymbolFont(myRange.Font.Name)) return true; // if it's a symbol font already, no issue.
string before = GetRangeText(myRange);
string updated = ReplaceSymbolCharacters(before);
myRange.Text = updated;
string after = GetRangeText(myRange);
Undo(1);
//Console.WriteLine("Undo1 results = {0}", tst);
//tst = Undo(1);
//Console.WriteLine("Undo2 results = {0}", tst);
//tst = Undo(1);
//Console.WriteLine("Undo3 results = {0}", tst);
return (updated == after);
}
return true;
}
/// <summary> /// <summary>
/// Get the Range Text with error handling. myRange.Text sometimes will get a null reference exception. /// Get the Range Text with error handling. myRange.Text sometimes will get a null reference exception.
/// </summary> /// </summary>
@@ -514,6 +737,35 @@ namespace LBWordLibrary
return myRange.Start - problem.Index; return myRange.Start - problem.Index;
} }
/// <summary> /// <summary>
/// ReplaceSymbolCharacters Replaces any symbol characters in the specified range
/// </summary>
/// <param name="myRange"></param>
private static void ReplaceSymbolCharacters(LBRange myRange)
{
try
{
if (IsSymbolFont(myRange.Font.Name))
return;
string before = GetRangeText(myRange);
string updated = ReplaceSymbolCharacters(before);
myRange.Text = updated;
string after = GetRangeText(myRange);
if (after != updated) // If the Word text doesn't match try including a character before and after and do it again.
{
Console.WriteLine("'TryEntireRange Failed',{0},{1},'{2}','{3}','{4}'", myRange.Start, myRange.End, before, updated, after);
int end = myRange.End;
myRange.Start = myRange.Start - 1;
myRange.End = end + 1;
myRange.Text = ReplaceSymbolCharacters(GetRangeText(myRange));
Console.WriteLine("'TryEntireRange Failed',{0},{1},'{2}'", myRange.Start, myRange.End, GetRangeText(myRange));
}
}
catch (Exception ex)
{
Console.WriteLine("'TryEntireRange Exception',{0},{1},'{2}'", myRange.Start, myRange.End, ex.Message);
}
}
/// <summary>
/// ReplaceSymbolCharacters processes the string returned and changes any symbols (0xF0??) to normal characters /// ReplaceSymbolCharacters processes the string returned and changes any symbols (0xF0??) to normal characters
/// </summary> /// </summary>
/// <param name="str"></param> /// <param name="str"></param>
@@ -77,7 +77,6 @@ using System.Xml.Schema;
using System.Text; using System.Text;
using ROFields; using ROFields;
using RODBInterface; using RODBInterface;
using System.Linq;
namespace ROEditor namespace ROEditor
{ {
@@ -281,7 +280,6 @@ namespace ROEditor
this.tbXYPlotWid.Size = new System.Drawing.Size(40, 22); this.tbXYPlotWid.Size = new System.Drawing.Size(40, 22);
this.tbXYPlotWid.TabIndex = 11; this.tbXYPlotWid.TabIndex = 11;
this.tbXYPlotWid.Text = ""; this.tbXYPlotWid.Text = "";
this.tbXYPlotWid.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// tbTableWid // tbTableWid
// //
@@ -290,7 +288,6 @@ namespace ROEditor
this.tbTableWid.Size = new System.Drawing.Size(40, 22); this.tbTableWid.Size = new System.Drawing.Size(40, 22);
this.tbTableWid.TabIndex = 10; this.tbTableWid.TabIndex = 10;
this.tbTableWid.Text = ""; this.tbTableWid.Text = "";
this.tbTableWid.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// tbVariableTxtWid // tbVariableTxtWid
// //
@@ -299,7 +296,6 @@ namespace ROEditor
this.tbVariableTxtWid.Size = new System.Drawing.Size(40, 22); this.tbVariableTxtWid.Size = new System.Drawing.Size(40, 22);
this.tbVariableTxtWid.TabIndex = 9; this.tbVariableTxtWid.TabIndex = 9;
this.tbVariableTxtWid.Text = ""; this.tbVariableTxtWid.Text = "";
this.tbVariableTxtWid.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// tbSingleTxtWid // tbSingleTxtWid
// //
@@ -308,7 +304,6 @@ namespace ROEditor
this.tbSingleTxtWid.Size = new System.Drawing.Size(40, 22); this.tbSingleTxtWid.Size = new System.Drawing.Size(40, 22);
this.tbSingleTxtWid.TabIndex = 8; this.tbSingleTxtWid.TabIndex = 8;
this.tbSingleTxtWid.Text = ""; this.tbSingleTxtWid.Text = "";
this.tbSingleTxtWid.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// lblW4 // lblW4
// //
@@ -591,18 +586,5 @@ namespace ROEditor
this.Close(); this.Close();
} }
private void txtBox_KeyDown(object sender, KeyEventArgs e)
{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
string clpBrd = Clipboard.GetText();
if (clpBrd.Any(c => c > 166))
{
MessageBox.Show("Symbols are not allowed in the field. Clipbroad: '" + clpBrd + "'");
Clipboard.Clear();
}
}
}
} }
} }
@@ -77,7 +77,6 @@ using System.Xml.Schema;
using System.Text; using System.Text;
using ROFields; using ROFields;
using RODBInterface; using RODBInterface;
using System.Linq;
namespace ROEditor namespace ROEditor
{ {
@@ -317,22 +316,6 @@ namespace ROEditor
} }
base.Dispose( disposing ); base.Dispose( disposing );
} }
private void txtBox_KeyDown(object sender, KeyEventArgs e)
{
bool symFlg = false;
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
string clpBrd = Clipboard.GetText();
if (clpBrd.Any(c => c > 166))
{
MessageBox.Show("Symbols are not allowed in the field. Clipbroad: '" + clpBrd + "'");
Clipboard.Clear();
}
}
}
}
#region Windows Form Designer generated code #region Windows Form Designer generated code
/// <summary> /// <summary>
@@ -374,7 +357,6 @@ namespace ROEditor
this.tbFieldName.Size = new System.Drawing.Size(320, 22); this.tbFieldName.Size = new System.Drawing.Size(320, 22);
this.tbFieldName.TabIndex = 2; this.tbFieldName.TabIndex = 2;
this.tbFieldName.Text = ""; this.tbFieldName.Text = "";
this.tbFieldName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// tbWidth // tbWidth
// //
@@ -383,7 +365,6 @@ namespace ROEditor
this.tbWidth.Size = new System.Drawing.Size(32, 22); this.tbWidth.Size = new System.Drawing.Size(32, 22);
this.tbWidth.TabIndex = 3; this.tbWidth.TabIndex = 3;
this.tbWidth.Text = ""; this.tbWidth.Text = "";
this.tbWidth.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// btnOK // btnOK
// //
@@ -421,7 +402,6 @@ namespace ROEditor
this.tbPattern.TabIndex = 7; this.tbPattern.TabIndex = 7;
this.tbPattern.Text = ""; this.tbPattern.Text = "";
this.tbPattern.Visible = false; this.tbPattern.Visible = false;
this.tbPattern.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// FieldTextFrm // FieldTextFrm
// //
@@ -445,4 +425,3 @@ namespace ROEditor
#endregion #endregion
} }
} }
@@ -72,7 +72,6 @@ using System.Xml;
using System.Text; using System.Text;
using RODBInterface; using RODBInterface;
using ROFields; using ROFields;
using System.Linq;
namespace ROEditor namespace ROEditor
{ {
@@ -278,22 +277,6 @@ namespace ROEditor
this.Close(); this.Close();
} }
private void txtBox_KeyDown(object sender, KeyEventArgs e)
{
bool symFlg = false;
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
string clpBrd = Clipboard.GetText();
if (clpBrd.Any(c => c > 166))
{
MessageBox.Show("Symbols are not allowed in the field. Clipbroad: '" + clpBrd + "'");
Clipboard.Clear();
}
}
}
}
#region Windows Form Designer generated code #region Windows Form Designer generated code
/// <summary> /// <summary>
/// Required method for Designer support - do not modify /// Required method for Designer support - do not modify
@@ -332,7 +315,6 @@ namespace ROEditor
this.tbFieldName.Size = new System.Drawing.Size(368, 22); this.tbFieldName.Size = new System.Drawing.Size(368, 22);
this.tbFieldName.TabIndex = 1; this.tbFieldName.TabIndex = 1;
this.tbFieldName.Text = ""; this.tbFieldName.Text = "";
this.tbFieldName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// gbFldType // gbFldType
// //
@@ -455,4 +437,3 @@ namespace ROEditor
#endregion #endregion
} }
} }
@@ -52,7 +52,6 @@ using System.Xml;
using System.Text; using System.Text;
using ROFields; using ROFields;
using RODBInterface; using RODBInterface;
using System.Linq;
namespace ROEditor namespace ROEditor
{ {
@@ -156,7 +155,6 @@ namespace ROEditor
this.tbGroup.Size = new System.Drawing.Size(248, 22); this.tbGroup.Size = new System.Drawing.Size(248, 22);
this.tbGroup.TabIndex = 8; this.tbGroup.TabIndex = 8;
this.tbGroup.Text = ""; this.tbGroup.Text = "";
this.tbGroup.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// lblGroup // lblGroup
// //
@@ -423,21 +421,5 @@ namespace ROEditor
GroupDefFrm grdef = new GroupDefFrm(nelem,myrodb,nelem.InnerText,dbtype); GroupDefFrm grdef = new GroupDefFrm(nelem,myrodb,nelem.InnerText,dbtype);
grdef.ShowDialog(); grdef.ShowDialog();
} }
private void txtBox_KeyDown(object sender, KeyEventArgs e)
{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
string clpBrd = Clipboard.GetText();
if (clpBrd.Any(c => c > 166))
{
MessageBox.Show("Symbols are not allowed in the field. Clipbroad: '" + clpBrd + "'");
Clipboard.Clear();
}
}
}
}
} }
} }
@@ -106,7 +106,6 @@ using ROFields;
using RODBInterface; using RODBInterface;
using VlnStatus; using VlnStatus;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace ROEditor namespace ROEditor
@@ -1312,22 +1311,6 @@ namespace ROEditor
} }
} }
} }
private void txtBox_KeyDown(object sender, KeyEventArgs e)
{
bool symFlg = false;
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
string clpBrd = Clipboard.GetText();
if (clpBrd.Any(c => c > 166))
{
MessageBox.Show("Symbols are not allowed in the field. Clipbroad: '" + clpBrd + "'");
Clipboard.Clear();
}
}
}
}
#region Windows Form Designer generated code #region Windows Form Designer generated code
/// <summary> /// <summary>
@@ -1392,7 +1375,6 @@ namespace ROEditor
this.tbRetVal.Size = new System.Drawing.Size(464, 22); this.tbRetVal.Size = new System.Drawing.Size(464, 22);
this.tbRetVal.TabIndex = 4; this.tbRetVal.TabIndex = 4;
this.tbRetVal.Text = "textBox1"; this.tbRetVal.Text = "textBox1";
this.tbRetVal.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// tbMenuVal // tbMenuVal
// //
@@ -1401,7 +1383,6 @@ namespace ROEditor
this.tbMenuVal.Size = new System.Drawing.Size(464, 22); this.tbMenuVal.Size = new System.Drawing.Size(464, 22);
this.tbMenuVal.TabIndex = 5; this.tbMenuVal.TabIndex = 5;
this.tbMenuVal.Text = "textBox1"; this.tbMenuVal.Text = "textBox1";
this.tbMenuVal.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBox_KeyDown);
// //
// lblGroupText // lblGroupText
// //
@@ -1627,4 +1608,3 @@ namespace ROEditor
#endregion #endregion
} }
} }
File diff suppressed because it is too large Load Diff
@@ -109,10 +109,6 @@
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="DevComponents.DotNetBar2, Version=14.1.0.37, Culture=neutral, PublicKeyToken=7eb7c3a35b91de04, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\3rdPartyLibraries\DotNetBar\DotNetBar4.6Build\DevComponents.DotNetBar2.dll</HintPath>
</Reference>
<Reference Include="System"> <Reference Include="System">
<Name>System</Name> <Name>System</Name>
</Reference> </Reference>
@@ -128,6 +124,10 @@
<Reference Include="System.Xml"> <Reference Include="System.Xml">
<Name>System.XML</Name> <Name>System.XML</Name>
</Reference> </Reference>
<Reference Include="Volian.Base.Library, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\Volian.Base.Library\bin\Debug\Volian.Base.Library.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="AboutROEditor.cs"> <Compile Include="AboutROEditor.cs">
@@ -168,7 +168,6 @@
<Compile Include="RO_FST.cs"> <Compile Include="RO_FST.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Content Include="Symbols.xml" />
<EmbeddedResource Include="AboutROEditor.resx"> <EmbeddedResource Include="AboutROEditor.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<DependentUpon>AboutROEditor.cs</DependentUpon> <DependentUpon>AboutROEditor.cs</DependentUpon>
@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACE ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACE
CAAAAk1TRnQBSQFMAgEBAgEAAUQBAAFEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo CAAAAk1TRnQBSQFMAgEBAgEAASwBAAEsAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -175,7 +175,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAe ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAe
CwAAAk1TRnQBSQFMAgEBBgEAAUQBAAFEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo CwAAAk1TRnQBSQFMAgEBBgEAASwBAAEsAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -101,6 +101,7 @@ using System.Runtime.InteropServices;
using VlnStatus; using VlnStatus;
using System.Collections.Specialized; using System.Collections.Specialized;
using ROFST_FILE; using ROFST_FILE;
using Volian.Base.Library;
//using VlnProfiler; //don't forget to add VlnProfiler to the reference list //using VlnProfiler; //don't forget to add VlnProfiler to the reference list
@@ -116,12 +117,12 @@ namespace ROEditor
public uint thisoff; public uint thisoff;
public string title; public string title;
public FstTmpSTRC(ushort type, uint offset, string tl) public FstTmpSTRC(ushort type, uint offset, string tl)
{ {
thistype = type; thistype = type;
thisoff = offset; thisoff = offset;
title = tl; title = tl;
} }
void WriteString(BinaryWriter bw, string str) void WriteString(BinaryWriter bw, string str)
{ {
@@ -150,7 +151,7 @@ namespace ROEditor
bw.Write(thisoff); bw.Write(thisoff);
bw.Write(thistype); bw.Write(thistype);
WriteString(bw,title); WriteString(bw,title);
} }
} }
// The Sorted Array was not sorting via the ASCII value of each character in a given string. // The Sorted Array was not sorting via the ASCII value of each character in a given string.
@@ -565,8 +566,8 @@ namespace ROEditor
string RecIdStr = elem.GetAttribute("RecID"); string RecIdStr = elem.GetAttribute("RecID");
curRecID = System.Convert.ToUInt32(RecIdStr,16); curRecID = System.Convert.ToUInt32(RecIdStr,16);
// Get the current node's parent id // Get the current node's parent id
string ParIdStr = elem.GetAttribute("ParentID"); string ParIdStr = elem.GetAttribute("ParentID");
elemParentID = Convert.ToUInt32(ParIdStr,16); elemParentID = Convert.ToUInt32(ParIdStr,16);
string HasKids = elem.GetAttribute("HasChild"); string HasKids = elem.GetAttribute("HasChild");
@@ -771,8 +772,8 @@ namespace ROEditor
private ushort SaveROToFST(XmlNode RONode,ArrayList InUseList,string RtnValTmplate, string AccPageIDTplate) private ushort SaveROToFST(XmlNode RONode,ArrayList InUseList,string RtnValTmplate, string AccPageIDTplate)
{ {
ushort RtnVal; ushort RtnVal;
uint startFST = (uint)fhFST.BaseStream.Position; uint startFST = (uint)fhFST.BaseStream.Position;
uint RORecID; uint RORecID;
uint ParID; uint ParID;
byte nullbyte=0; byte nullbyte=0;
@@ -844,12 +845,8 @@ namespace ROEditor
AccPageID = " "; AccPageID = " ";
WriteString(AccPageID); WriteString(AccPageID);
//C2026-008 Re-Architect RO.FST to include RO Modification date/time // Save the ID and offset entry for the current ID
string moddt = ROdatabase.RODB_GetModDateTime(elem.GetAttribute("RecID"), elem.GetAttribute("Table")); IdsAndOffsets.Add(RORecID,startFST);
if (!string.IsNullOrEmpty(moddt)) WriteString(moddt);
// Save the ID and offset entry for the current ID
IdsAndOffsets.Add(RORecID, startFST);
// Save the RecID and Accessory Page id // Save the RecID and Accessory Page id
IdsAndAccPgIds[AccPageID] = RORecID; IdsAndAccPgIds[AccPageID] = RORecID;
@@ -888,4 +885,3 @@ namespace ROEditor
} }
} }
@@ -263,7 +263,6 @@ using System.Collections.Specialized;
using Org.Mentalis.Files; using Org.Mentalis.Files;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace RODBInterface namespace RODBInterface
@@ -322,9 +321,9 @@ namespace RODBInterface
get { return _PCChildList; } get { return _PCChildList; }
set { _PCChildList = value; } set { _PCChildList = value; }
} }
#endregion #endregion
#region abstracts // need these for each method that must be defined for each database type #region abstracts // need these for each method that must be defined for each database type
public abstract string RODB_GetNextGroupTable(); public abstract string RODB_GetNextGroupTable();
public abstract string RODB_GetNextRecId(string table); public abstract string RODB_GetNextRecId(string table);
public abstract bool RODB_GetRootGroups(VlnXmlElement root); public abstract bool RODB_GetRootGroups(VlnXmlElement root);
public abstract bool RODB_DeleteGroup(XmlNode group, string tbname, string toprecid); public abstract bool RODB_DeleteGroup(XmlNode group, string tbname, string toprecid);
@@ -355,10 +354,9 @@ namespace RODBInterface
public abstract string RODB_GetDBServerForAbout(); public abstract string RODB_GetDBServerForAbout();
public abstract string RODB_HasBeenConverted(); public abstract string RODB_HasBeenConverted();
public abstract bool RODB_WriteSqlConnectToAccess(string newConectStr); public abstract bool RODB_WriteSqlConnectToAccess(string newConectStr);
public abstract string RODB_GetModDateTime(string Recid, string table); #endregion
#endregion
public RODB() public RODB()
{ {
} }
@@ -1911,8 +1909,6 @@ namespace RODBInterface
string Info = DBE.GetString(3); string Info = DBE.GetString(3);
//B2022-043 &pos; was missing the ; //B2022-043 &pos; was missing the ;
Info = Info.Replace("&apos;", "\'"); // B2021-071: crash when getting/saving field names Info = Info.Replace("&apos;", "\'"); // B2021-071: crash when getting/saving field names
Info = Regex.Replace(Info, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString()); // RO Editor add symbols C2022 - 003
node.SetAttribute("HasChild", "True"); node.SetAttribute("HasChild", "True");
// Store data in the VlnXmlElement as a subgroup // Store data in the VlnXmlElement as a subgroup
@@ -2143,20 +2139,7 @@ namespace RODBInterface
wraccid = accid; wraccid = accid;
string dt = string.Format("{0:yyyyMMddHHmmss}", System.DateTime.Now); string dt = string.Format("{0:yyyyMMddHHmmss}", System.DateTime.Now);
string xmlstr = GenerateXmlString(ro, false); string xmlstr = GenerateXmlString(ro, false);
StringBuilder xmlstrTmp = new StringBuilder(); // B2026-025 prep the info field data so it will be saved correctly. string strUpdate = "UPDATE " + ro.GetAttribute("Table") + " SET Info = '" + xmlstr + "'";
char[] chrAry = xmlstr.ToCharArray();
foreach (int chr in chrAry)
{
if (chr > 166)
{
xmlstrTmp.Append($"\\u{(int)chr}?");
}
else
{
xmlstrTmp.Append((char)chr);
}
}
string strUpdate = "UPDATE " + ro.GetAttribute("Table") + " SET Info = '" + xmlstrTmp.ToString() + "'";
if (movedRO) if (movedRO)
{ {
VlnXmlElement parent = (VlnXmlElement)ro.ParentNode; VlnXmlElement parent = (VlnXmlElement)ro.ParentNode;
@@ -2199,27 +2182,10 @@ namespace RODBInterface
parent.SetAttribute("ChildLoaded", "True"); parent.SetAttribute("ChildLoaded", "True");
} }
string xmlstr = GenerateXmlString(ro, false); string xmlstr = GenerateXmlString(ro, false);
StringBuilder xmlstrTmp = new StringBuilder(); // B2026-025 prep the info field data so it will be saved correctly.
char[] chrAry = xmlstr.ToCharArray();
foreach (int chr in chrAry)
{
if (chr > 166)
{
xmlstrTmp.Append($"\\u{(int)chr}?");
}
else
{
xmlstrTmp.Append((char)chr);
}
}
string wraccid = null; string wraccid = null;
if (ro.HasAttribute("AccPageID")) if (ro.HasAttribute("AccPageID"))
{ {
string accid = ro.GetAttribute("AccPageID"); string accid = ro.GetAttribute("AccPageID");
int quote = accid.IndexOf("'"); int quote = accid.IndexOf("'");
if (quote >= 0) if (quote >= 0)
wraccid = accid.Insert(quote, "'"); wraccid = accid.Insert(quote, "'");
@@ -2237,13 +2203,13 @@ namespace RODBInterface
// strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, AccPageID, ModDateTime, Info ) "; // strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, AccPageID, ModDateTime, Info ) ";
strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, ModDateTime, AccPageID, Info ) "; strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, ModDateTime, AccPageID, Info ) ";
strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.Group + ",'" + ro.GetAttribute("ParentID"); strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.Group + ",'" + ro.GetAttribute("ParentID");
strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstrTmp.ToString() + "');"; strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstr + "');";
} }
else else
{ {
strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, ModDateTime, Info ) "; strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, ModDateTime, Info ) ";
strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.Group + ",'" + ro.GetAttribute("ParentID"); strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.Group + ",'" + ro.GetAttribute("ParentID");
strInsert = strInsert + "','" + dt + "','" + xmlstrTmp.ToString() + "');"; strInsert = strInsert + "','" + dt + "','" + xmlstr + "');";
} }
} }
@@ -2251,7 +2217,7 @@ namespace RODBInterface
{ {
strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, AccPageId, ModDateTime, Info ) "; strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, AccPageId, ModDateTime, Info ) ";
strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.RRO + ",'" + ro.GetAttribute("ParentID"); strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.RRO + ",'" + ro.GetAttribute("ParentID");
strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstrTmp.ToString() + "');"; strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstr + "');";
} }
try try
@@ -2285,7 +2251,7 @@ namespace RODBInterface
// select all of the field definition records in this table. // select all of the field definition records in this table.
// strGetFields = "SELECT RecID, Info from " + elem.GetAttribute("Table"); // strGetFields = "SELECT RecID, Info from " + elem.GetAttribute("Table");
strGetFields = "SELECT RecID, Info from " + TableName; strGetFields = "SELECT RecID, Info from " + TableName;
strGetFields = strGetFields + " where RecType = 2"; strGetFields = strGetFields + " where RecType = 2"; // + rtype.ToString();
DBE.Command(strGetFields); DBE.Command(strGetFields);
DBE.Reader(); DBE.Reader();
@@ -2383,9 +2349,9 @@ namespace RODBInterface
RecID = DBE.GetString(0); RecID = DBE.GetString(0);
MyRecID = RecID; MyRecID = RecID;
Info = DBE.GetString(1); Info = DBE.GetString(1);
// it's defined in the local table if the first character is "<" which starts // it's defined in the local table if the first character is "<" which starts
// the schema definition string. // the schema definition string.
if ("<" == Info.Substring(0, 1)) if ("<" == Info.Substring(0, 1))
{ {
name = ParseEleName(Info); name = ParseEleName(Info);
if (name != null) if (name != null)
@@ -2426,7 +2392,7 @@ namespace RODBInterface
return retlist; return retlist;
} }
public override string RODB_GetSchemaPiece(string Recid, string table) public override string RODB_GetSchemaPiece(string Recid, string table)
{ {
string strGetSchemaPiece; string strGetSchemaPiece;
string Info; string Info;
@@ -2659,21 +2625,7 @@ namespace RODBInterface
} }
} }
StatMsgWindow.StatusMessage = echild.GetAttribute("MenuTitle"); StatMsgWindow.StatusMessage = echild.GetAttribute("MenuTitle");
StringBuilder tinfo2Tmp = new StringBuilder(); // B2026-025 prep the info field data so it will be saved correctly.
str = "UPDATE " + echild.GetAttribute("Table") + " SET Info = '" + tinfo2 + "'"; str = "UPDATE " + echild.GetAttribute("Table") + " SET Info = '" + tinfo2 + "'";
char[] chrAry = tinfo2.ToCharArray();
foreach (int chr in chrAry)
{
if (chr > 166)
{
tinfo2Tmp.Append($"\\u{(int)chr}?");
}
else
{
tinfo2Tmp.Append((char)chr);
}
}
str = "UPDATE " + echild.GetAttribute("Table") + " SET Info = '" + tinfo2Tmp.ToString() + "'";
str = str + ", ModDateTime = '" + dt + "' WHERE RecID = '" + echild.GetAttribute("RecID") + "';"; str = str + ", ModDateTime = '" + dt + "' WHERE RecID = '" + echild.GetAttribute("RecID") + "';";
DBE.Command(str); DBE.Command(str);
DBE.Reader(); DBE.Reader();
@@ -3083,28 +3035,7 @@ namespace RODBInterface
return GrpCnt; return GrpCnt;
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time }
//Get the Modification Date / Time for the RO
public override string RODB_GetModDateTime(string Recid, string table)
{
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(strDatabaseConnectionCommand))
{
connection.Open();
using (System.Data.OleDb.OleDbCommand command = connection.CreateCommand())
{
//Unfortunately Access wont let you paramaterize the table name
command.CommandText = $"SELECT ModDateTime FROM {Regex.Replace(table, "[^a-zA-Z0-9]", "")} WHERE RecID = @Value";
command.Parameters.Add(new System.Data.OleDb.OleDbParameter
{
OleDbType = System.Data.OleDb.OleDbType.VarChar,
ParameterName = "@Value",
Value = Recid
});
return command.ExecuteScalar().ToString();
}
}
}
}
} }
@@ -1803,9 +1803,9 @@ namespace RODBInterface
RecID = reader.GetString(0); RecID = reader.GetString(0);
MyRecID = RecID; MyRecID = RecID;
Info = reader.GetString(1); Info = reader.GetString(1);
// it's defined in the local table if the first character is "<" which starts // it's defined in the local table if the first character is "<" which starts
// the schema definition string. // the schema definition string.
if ("<" == Info.Substring(0, 1)) if ("<" == Info.Substring(0, 1))
{ {
name = ParseEleName(Info); name = ParseEleName(Info);
if (name != null) if (name != null)
@@ -1859,9 +1859,9 @@ namespace RODBInterface
RecID = reader.GetString(0); RecID = reader.GetString(0);
MyRecID = RecID; MyRecID = RecID;
Info = reader.GetString(1); Info = reader.GetString(1);
// it's defined in the local table if the first character is "<" which starts // it's defined in the local table if the first character is "<" which starts
// the schema definition string. // the schema definition string.
if ("<" == Info.Substring(0, 1)) if ("<" == Info.Substring(0, 1))
{ {
name = ParseEleName(Info); name = ParseEleName(Info);
if (name != null) if (name != null)
@@ -2653,36 +2653,8 @@ namespace RODBInterface
} }
return GrpCnt; return GrpCnt;
} }
#endregion
//C2026-008 Re-Architect RO.FST to include RO Modification date/time public static bool TestConnect(string constring)
//Get the Modification Date / Time for the RO
public override string RODB_GetModDateTime(string Recid, string table)
{
using (SqlConnection connection = new SqlConnection(strDatabaseConnectionCommand))
{
connection.Open();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = $"SELECT ModDateTime FROM ROALL WHERE RecID = @Value AND ROTable = @table";
command.Parameters.Add(new SqlParameter
{
SqlDbType = SqlDbType.VarChar,
ParameterName = "@Value",
Value = Recid
});
command.Parameters.Add(new SqlParameter
{
SqlDbType = SqlDbType.VarChar,
ParameterName = "@table",
Value = table
});
return command.ExecuteScalar().ToString();
}
}
}
#endregion
public static bool TestConnect(string constring)
{ {
bool success = false; bool success = false;
using (SqlConnection connection = new SqlConnection(constring)) using (SqlConnection connection = new SqlConnection(constring))
@@ -96,7 +96,6 @@ using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using ROFields; using ROFields;
using VlnStatus; using VlnStatus;
using System.Text.RegularExpressions;
//using VlnProfiler; //don't forget to add VlnProfiler to the reference list //using VlnProfiler; //don't forget to add VlnProfiler to the reference list
namespace RODBInterface namespace RODBInterface
@@ -518,8 +517,7 @@ namespace RODBInterface
strtmp.Append(" "); strtmp.Append(" ");
cnt++; cnt++;
} }
text = Regex.Replace(text, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : ""); //B2026-025 Unicode removed from RO menu titles in treeview. if ((cnt + text.Length) > frmt2) // longer than the field length?
if ((cnt + text.Length) > frmt2) // longer than the field length?
strtmp.Append(text.Substring(0,frmt2-cnt)); strtmp.Append(text.Substring(0,frmt2-cnt));
else else
strtmp.Append(text); strtmp.Append(text);
@@ -39,7 +39,7 @@ namespace ctlXMLEditLib
{ {
private System.Windows.Forms.Button btnSave; private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.Button btnCancel;
private ctlXMLEditLib.roRichTextBox tbZoom; // RO Editor add symbols C2022 - 003 private System.Windows.Forms.TextBox tbZoom;
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
/// </summary> /// </summary>
@@ -88,7 +88,7 @@ namespace ctlXMLEditLib
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.tbZoom = new ctlXMLEditLib.roRichTextBox(); // RO Editor add symbols C2022 - 003 this.tbZoom = new System.Windows.Forms.TextBox();
this.btnSave = new System.Windows.Forms.Button(); this.btnSave = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button(); this.btnCancel = new System.Windows.Forms.Button();
this.SuspendLayout(); this.SuspendLayout();
@@ -99,7 +99,7 @@ namespace ctlXMLEditLib
this.tbZoom.Location = new System.Drawing.Point(24, 16); this.tbZoom.Location = new System.Drawing.Point(24, 16);
this.tbZoom.Multiline = true; this.tbZoom.Multiline = true;
this.tbZoom.Name = "tbZoom"; this.tbZoom.Name = "tbZoom";
this.tbZoom.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; // RO Editor add symbols C2022 - 003 this.tbZoom.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.tbZoom.Size = new System.Drawing.Size(576, 392); this.tbZoom.Size = new System.Drawing.Size(576, 392);
this.tbZoom.TabIndex = 0; this.tbZoom.TabIndex = 0;
// //
@@ -149,4 +149,3 @@ namespace ctlXMLEditLib
} }
} }
@@ -200,11 +200,7 @@ using System.Xml.Schema;
using System.Text; using System.Text;
using RODBInterface; using RODBInterface;
using Org.Mentalis.Files; using Org.Mentalis.Files;
using System.Windows; //using IniFileIO;
using System.Text.RegularExpressions;
using System.Linq;
using Volian.Base.Library;
@@ -225,7 +221,6 @@ namespace ctlXMLEditLib
/// ///
/// ///
/// </summary> /// </summary>
public class ctlXMLEdit : System.Windows.Forms.UserControl public class ctlXMLEdit : System.Windows.Forms.UserControl
{ {
/// <summary> /// <summary>
@@ -242,12 +237,12 @@ namespace ctlXMLEditLib
private bool dosaveflag; private bool dosaveflag;
private VlnXmlElement editelem; private VlnXmlElement editelem;
private XmlDocument editdoc; private XmlDocument editdoc;
private roRichTextBox zoomtextbox; private TextBox zoomtextbox;
// the following is used for handling images. Note that if we want to have more // the following is used for handling images. Note that if we want to have more
// than one image defined in an ro, this should be become a list. // than one image defined in an ro, this should be become a list.
private roRichTextBox GraphicsFiletextbox; private TextBox GraphicsFiletextbox;
private roRichTextBox GraphicsWdtextbox; private TextBox GraphicsWdtextbox;
private roRichTextBox GraphicsHttextbox; private TextBox GraphicsHttextbox;
private System.Windows.Forms.Button btnFindFile; private System.Windows.Forms.Button btnFindFile;
private string GraphicsText; private string GraphicsText;
private ToolTip zmtooltip; private ToolTip zmtooltip;
@@ -270,19 +265,6 @@ namespace ctlXMLEditLib
private GroupBox pcGrpBox = null; private GroupBox pcGrpBox = null;
/** end C2021-026 **/ /** end C2021-026 **/
public string _RO_IDEN;
public string RO_IDEN
{
get
{
return _RO_IDEN;
}
set
{
_RO_IDEN = value;
}
}
// use this struct to define attributes for the text box fields, storing // use this struct to define attributes for the text box fields, storing
// the pattern, radio button association, required field flag, etc. // the pattern, radio button association, required field flag, etc.
struct TextBoxAttrTag struct TextBoxAttrTag
@@ -329,19 +311,10 @@ namespace ctlXMLEditLib
public string GetParentHTId { get { return parenthtid; } } public string GetParentHTId { get { return parenthtid; } }
public void SetParentHTId(string id) { this.parenthtid = id; } public void SetParentHTId(string id) { this.parenthtid = id; }
} }
private roRichTextBox _TextBoxFocus; // RO Editor add symbols C2022 - 003
public roRichTextBox TextBoxFocus
{
get { return _TextBoxFocus; }
set
{
_TextBoxFocus = value;
}
}
public ctlXMLEdit(VlnXmlElement myelem, XmlSchema myschema, ArrayList reqfields, ArrayList fldsWithApplic, string [] pckids) public ctlXMLEdit(VlnXmlElement myelem, XmlSchema myschema, ArrayList reqfields, ArrayList fldsWithApplic, string [] pckids)
{ {
// This call is required by the Windows.Forms Form Designer. // This call is required by the Windows.Forms Form Designer.
InitializeComponent(); InitializeComponent();
FieldsWithApplic = fldsWithApplic; FieldsWithApplic = fldsWithApplic;
PCChildren = pckids; //C2021-026 list of Parent/Child children PCChildren = pckids; //C2021-026 list of Parent/Child children
@@ -386,12 +359,11 @@ namespace ctlXMLEditLib
// Set required fields based on list. (can add message later). // Set required fields based on list. (can add message later).
SetRequiredFields(reqfields); SetRequiredFields(reqfields);
dosaveflag=true; dosaveflag=true;
RO_IDEN = myelem.GetAccPageIDTemplate();
} }
// set the required fields tag on those fields which are included in the passed // set the required fields tag on those fields which are included in the passed
// in required fields list. // in required fields list.
private void DoSet(roRichTextBox hwnd, string msg) // RO Editor add symbols C2022 - 003 private void DoSet(TextBox hwnd, string msg)
{ {
if (hwnd == null) return; if (hwnd == null) return;
if (hwnd.Tag != null) if (hwnd.Tag != null)
@@ -406,7 +378,7 @@ namespace ctlXMLEditLib
private void SetRequiredFields(ArrayList reqfields) private void SetRequiredFields(ArrayList reqfields)
{ {
Object o; Object o;
roRichTextBox hwnd; TextBox hwnd;
string field, msg; string field, msg;
int indx; int indx;
foreach (string strfld in reqfields) foreach (string strfld in reqfields)
@@ -425,15 +397,15 @@ namespace ctlXMLEditLib
o = myHT[field+"a"]; o = myHT[field+"a"];
if (o != null) // set all combo types required, the checker if (o != null) // set all combo types required, the checker
{ {
DoSet((roRichTextBox)o,msg); DoSet((TextBox)o,msg);
DoSet((roRichTextBox)myHT[field+"b"],msg); DoSet((TextBox)myHT[field+"b"],msg);
DoSet((roRichTextBox)myHT[field+"c"],msg); DoSet((TextBox)myHT[field+"c"],msg);
DoSet((roRichTextBox)myHT[field+"d"],msg); DoSet((TextBox)myHT[field+"d"],msg);
} }
} }
else if (o != null) else if (o != null)
{ {
hwnd = (roRichTextBox) o; hwnd = (TextBox) o;
if (hwnd.Tag != null) if (hwnd.Tag != null)
{ {
TextBoxAttrTag tag = (TextBoxAttrTag) hwnd.Tag; TextBoxAttrTag tag = (TextBoxAttrTag) hwnd.Tag;
@@ -447,7 +419,7 @@ namespace ctlXMLEditLib
// C2021-026 If this is a Parent/Child field that has no value saved in the database // C2021-026 If this is a Parent/Child field that has no value saved in the database
// then use the parent's value and display it as grey colored text. // then use the parent's value and display it as grey colored text.
private void GetDefaultParentValue(roRichTextBox tb, XmlNode node, string chldName) private void GetDefaultParentValue(TextBox tb, XmlNode node, string chldName)
{ {
XmlNode parentNode = null; XmlNode parentNode = null;
// PCChildren contains a list strings reprenting the Children setup in the current Working Draft Parent/Child property // PCChildren contains a list strings reprenting the Children setup in the current Working Draft Parent/Child property
@@ -491,23 +463,21 @@ namespace ctlXMLEditLib
private void DisplayFieldContents(XmlNode node) private void DisplayFieldContents(XmlNode node)
{ {
Object o; Object o;
roRichTextBox hwnd; TextBox hwnd;
XmlNode nd; XmlNode nd;
// if we have an image, check it for validity, i.e. file exists, etc.?? // if we have an image, check it for validity, i.e. file exists, etc.??
foreach (string str in myHT.Keys) foreach (string str in myHT.Keys)
{ {
o = myHT[str]; o = myHT[str];
hwnd = (roRichTextBox) o; hwnd = (TextBox) o;
nd = node.SelectSingleNode(str); nd = node.SelectSingleNode(str);
// if not found with just the string, search the tree. // if not found with just the string, search the tree.
if (nd==null)nd = node.SelectSingleNode("*/"+str); if (nd==null)nd = node.SelectSingleNode("*/"+str);
if (nd == null || nd.InnerText.Length==0) // B2024-004 use Parent value if Child text length is zero if (nd == null || nd.InnerText.Length==0) // B2024-004 use Parent value if Child text length is zero
GetDefaultParentValue(hwnd, node, str); // C2021-026 Parent/Child Field has no value so use parent's value GetDefaultParentValue(hwnd, node, str); // C2021-026 Parent/Child Field has no value so use parent's value
else else
{ {
hwnd.Text = nd.InnerText; // set the field's text from XML
hwnd.Text = Regex.Replace(nd.InnerText, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString()); // set the field's text from XML
Size size = hwnd.Size;
// check if this window has a button name as part of its tag. If // check if this window has a button name as part of its tag. If
// so it's a combo type & the radio button/visibility may need to // so it's a combo type & the radio button/visibility may need to
@@ -576,7 +546,7 @@ namespace ctlXMLEditLib
// height/width data of the image. // height/width data of the image.
if (GraphicsFiletextbox != null && GraphicsFiletextbox.Text != "") UpdateHtWd(); if (GraphicsFiletextbox != null && GraphicsFiletextbox.Text != "") UpdateHtWd();
} }
public roRichTextBox GetGraphicsFiletextbox() public TextBox GetGraphicsFiletextbox()
{ {
return GraphicsFiletextbox; return GraphicsFiletextbox;
} }
@@ -615,13 +585,13 @@ namespace ctlXMLEditLib
{ {
dosaveflag=false; dosaveflag=false;
mysavexml=false; mysavexml=false;
roRichTextBox hwnd; TextBox hwnd;
// first, clear out all of the text boxes. // first, clear out all of the text boxes.
foreach (string str in myHT.Keys) foreach (string str in myHT.Keys)
{ {
object o = myHT[str]; object o = myHT[str];
hwnd = (roRichTextBox) o; hwnd = (TextBox) o;
hwnd.Text = ""; hwnd.Text = "";
TextBoxAttrTag tag = (TextBoxAttrTag) hwnd.Tag; TextBoxAttrTag tag = (TextBoxAttrTag) hwnd.Tag;
RadioButton radio; RadioButton radio;
@@ -653,7 +623,7 @@ namespace ctlXMLEditLib
// to the parent's value, then clear the child's textbox so that nothing is saved // to the parent's value, then clear the child's textbox so that nothing is saved
// to the database. This allow us to know that a specific value was not set // to the database. This allow us to know that a specific value was not set
// for this Parent/Child child // for this Parent/Child child
private void RemovePCChildTextIfSameAsParent(XmlNode node, roRichTextBox tb, string chldName) private void RemovePCChildTextIfSameAsParent(XmlNode node, TextBox tb, string chldName)
{ {
XmlNode parentNode = null; XmlNode parentNode = null;
// if this is a child node get the parent's value // if this is a child node get the parent's value
@@ -690,35 +660,18 @@ namespace ctlXMLEditLib
// true if success, false if fail. // true if success, false if fail.
// Note that the Parent and Child XML node variables below are not coding for Parent/Child Applicabily Fields // Note that the Parent and Child XML node variables below are not coding for Parent/Child Applicabily Fields
public bool SaveData() public bool SaveData()
{ {
if (mysavexml) if (mysavexml)
{ {
roRichTextBox hwnd; TextBox hwnd;
TextBoxAttrTag tag; TextBoxAttrTag tag;
string imgdate; string imgdate;
//go thru the hash table to get textboxes. Find the ones that have text. //go thru the hash table to get textboxes. Find the ones that have text.
foreach (string str in myHT.Keys) // RO Editor add symbols C2022 - 003 foreach (string str in myHT.Keys)
{ {
object o = myHT[str]; object o = myHT[str];
hwnd = (roRichTextBox) o; hwnd = (TextBox) o;
StringBuilder result1 = new StringBuilder();
char[] chrAry = hwnd.Text.ToCharArray();
foreach (int chr in chrAry)
{
if (chr > 166)
{
result1.Append($"\\u{(int)chr}?");
}
else
{
result1.Append((char)chr);
}
}
hwnd.Text = result1.ToString();
imgdate = null; imgdate = null;
// if this is a required field and there is no text, put out an error // if this is a required field and there is no text, put out an error
// message and get out of here. // message and get out of here.
@@ -835,7 +788,6 @@ namespace ctlXMLEditLib
return (false); return (false);
} }
#region Component Designer generated code #region Component Designer generated code
/// <summary> /// <summary>
/// Required method for Designer support - do not modify /// Required method for Designer support - do not modify
@@ -906,7 +858,7 @@ namespace ctlXMLEditLib
// 'normalizedString') or a multiline text box(type is 'string'). Also, a radio // 'normalizedString') or a multiline text box(type is 'string'). Also, a radio
// button is passed in if this was called to handle an element within a combo type. // button is passed in if this was called to handle an element within a combo type.
// This button is saved for a given text box so that initialization of these combo types can occur. // This button is saved for a given text box so that initialization of these combo types can occur.
private string DisplayXmlSchemaSimpleType(XmlSchemaSimpleType simpleType, roRichTextBox mytextbox, RadioButton radio, private string DisplayXmlSchemaSimpleType(XmlSchemaSimpleType simpleType, TextBox mytextbox, RadioButton radio,
bool img, string imgname) bool img, string imgname)
{ {
// set up for text box tag, which stores whether field is required and // set up for text box tag, which stores whether field is required and
@@ -936,17 +888,12 @@ namespace ctlXMLEditLib
if (getannot.IndexOf("Lines")>=0) if (getannot.IndexOf("Lines")>=0)
{ {
GraphicsHttextbox = mytextbox; GraphicsHttextbox = mytextbox;
Size size = GraphicsHttextbox.Size;
mytextbox.LostFocus += new System.EventHandler(this.GraphicsHt_lostfocus); mytextbox.LostFocus += new System.EventHandler(this.GraphicsHt_lostfocus);
} }
if (getannot.IndexOf("Character")>=0) if (getannot.IndexOf("Character")>=0)
{ {
GraphicsWdtextbox = mytextbox; GraphicsWdtextbox = mytextbox;
mytextbox.LostFocus += new System.EventHandler(this.GraphicsWd_lostfocus); mytextbox.LostFocus += new System.EventHandler(this.GraphicsWd_lostfocus);
} }
} }
} }
@@ -957,17 +904,14 @@ namespace ctlXMLEditLib
{ {
// A Schema Type Restriction is used to define single or multi-line boxes. // A Schema Type Restriction is used to define single or multi-line boxes.
XmlSchemaSimpleTypeRestriction myRestrictions = (XmlSchemaSimpleTypeRestriction) simpleType.Content; XmlSchemaSimpleTypeRestriction myRestrictions = (XmlSchemaSimpleTypeRestriction) simpleType.Content;
if (myRestrictions.BaseTypeName.Name == "normalizedString") if (myRestrictions.BaseTypeName.Name == "normalizedString")
{
mytextbox.Multiline = false; mytextbox.Multiline = false;
mytextbox.Size = new Size(300, 40);
}
else else
{ {
mytextbox.Multiline = true; mytextbox.Multiline = true;
mytextbox.AcceptsTab = true; mytextbox.AcceptsReturn = true;
mytextbox.Height = (int) mytextbox.Font.GetHeight() * 4; mytextbox.Height = (int) mytextbox.Font.GetHeight() * 4;
mytextbox.ScrollBars = RichTextBoxScrollBars.Vertical; mytextbox.ScrollBars = ScrollBars.Vertical;
zmtooltip.SetToolTip(mytextbox, "Press Shift F2 To Zoom"); zmtooltip.SetToolTip(mytextbox, "Press Shift F2 To Zoom");
} }
@@ -1048,8 +992,7 @@ namespace ctlXMLEditLib
radio.CheckedChanged += new System.EventHandler(this.radiocheckchg); radio.CheckedChanged += new System.EventHandler(this.radiocheckchg);
gbox.Controls.Add(radio); gbox.Controls.Add(radio);
roRichTextBox tb = new roRichTextBox(); TextBox tb = new TextBox();
Size size3 = tb.Size;
tb.Location = new Point(boxx+20, y+25); tb.Location = new Point(boxx+20, y+25);
if (!first) tb.Visible = false; if (!first) tb.Visible = false;
myHT.Add(element.Name,tb); myHT.Add(element.Name,tb);
@@ -1058,7 +1001,7 @@ namespace ctlXMLEditLib
// the groupbox. // the groupbox.
Controls.Add(tb); Controls.Add(tb);
tb.TextChanged += new System.EventHandler(this.textbox_change); tb.TextChanged += new System.EventHandler(this.textbox_change);
tb.GotFocus += new System.EventHandler(this.currentTextBox); tb.GotFocus += new System.EventHandler(this.textbox_zoombtn);
tb.KeyDown += new KeyEventHandler(MyOnKeyDown); tb.KeyDown += new KeyEventHandler(MyOnKeyDown);
gbox.Contains(tb); gbox.Contains(tb);
// the following will set attributes on the text boxes such as maxlength, multiline, etc. // the following will set attributes on the text boxes such as maxlength, multiline, etc.
@@ -1201,9 +1144,8 @@ namespace ctlXMLEditLib
} }
else else
{ {
roRichTextBox mytextbox; TextBox mytextbox;
mytextbox = new roRichTextBox(); mytextbox = new TextBox();
Size size3 = mytextbox.Size;
mytextbox.Location = new Point(screenx+indent, screeny); mytextbox.Location = new Point(screenx+indent, screeny);
string tFieldName = (pcChildIdx == 0) ? CvtUserFldToFld(element.Name) : CvtUserFldToFld(pcChildFldName); string tFieldName = (pcChildIdx == 0) ? CvtUserFldToFld(element.Name) : CvtUserFldToFld(pcChildFldName);
mytextbox.Name = tFieldName; mytextbox.Name = tFieldName;
@@ -1213,7 +1155,7 @@ namespace ctlXMLEditLib
screeny = screeny + 10; screeny = screeny + 10;
mytextbox.TextChanged += new System.EventHandler(this.textbox_change); mytextbox.TextChanged += new System.EventHandler(this.textbox_change);
mytextbox.Validating += new System.ComponentModel.CancelEventHandler(this.textbox_Validating); mytextbox.Validating += new System.ComponentModel.CancelEventHandler(this.textbox_Validating);
mytextbox.GotFocus += new System.EventHandler(this.currentTextBox); mytextbox.GotFocus += new System.EventHandler(this.textbox_zoombtn);
mytextbox.KeyDown += new KeyEventHandler(MyOnKeyDown); mytextbox.KeyDown += new KeyEventHandler(MyOnKeyDown);
if (pcChildIdx > 0) if (pcChildIdx > 0)
{ {
@@ -1250,18 +1192,9 @@ namespace ctlXMLEditLib
// the following is needed to load the control. // the following is needed to load the control.
private void ctlXMLEdit_Load(object sender, System.EventArgs e) private void ctlXMLEdit_Load(object sender, System.EventArgs e)
{ {
} }
public delegate void ctlXMLEditEvent(object sender, ctlXMLEditEventArgs args); // RO Editor add symbols C2022 - 003 for turning off symbols btn for RO ID field.
public event ctlXMLEditEvent EnableDisableSymbolsBtn;
private void OnEnableDisableSymbolsBtn(ctlXMLEditEventArgs args)
{
if (EnableDisableSymbolsBtn != null)
EnableDisableSymbolsBtn(this, args);
}
// when data in a text box has changed, flag it (except for when this // when data in a text box has changed, flag it (except for when this
// happens during loading of original data). This flag will be used // happens during loading of original data). This flag will be used
// later to know whether to save data. // later to know whether to save data.
@@ -1277,7 +1210,7 @@ namespace ctlXMLEditLib
// When leaving the textbox // When leaving the textbox
private void txtBox_Leave(object sender, EventArgs e) private void txtBox_Leave(object sender, EventArgs e)
{ {
roRichTextBox tb = sender as roRichTextBox; TextBox tb = sender as TextBox;
string dfTxt = ""; string dfTxt = "";
try try
{ {
@@ -1286,7 +1219,7 @@ namespace ctlXMLEditLib
{ {
object o = myHT[parentid]; object o = myHT[parentid];
if (o != null) if (o != null)
dfTxt = (o as roRichTextBox).Text; // set to use the parent's value (default) dfTxt = (o as TextBox).Text; // set to use the parent's value (default)
} }
else else
{ {
@@ -1294,7 +1227,7 @@ namespace ctlXMLEditLib
string parName = pcGrpBox.Name.Substring(5); string parName = pcGrpBox.Name.Substring(5);
object o = myHT[parName]; object o = myHT[parName];
if (o != null) if (o != null)
dfTxt = (o as roRichTextBox).Text; // set to use the parent's value (default) dfTxt = (o as TextBox).Text; // set to use the parent's value (default)
} }
} }
catch catch
@@ -1302,7 +1235,7 @@ namespace ctlXMLEditLib
string parName = pcGrpBox.Name.Substring(5); string parName = pcGrpBox.Name.Substring(5);
object o = myHT[parName]; object o = myHT[parName];
if (o != null) if (o != null)
dfTxt = (o as roRichTextBox).Text; // set to use the parent's value (default) dfTxt = (o as TextBox).Text; // set to use the parent's value (default)
} }
if (dosaveflag) mysavexml = true; if (dosaveflag) mysavexml = true;
@@ -1318,7 +1251,7 @@ namespace ctlXMLEditLib
// so clear the textbox so that user can enter the value for that child // so clear the textbox so that user can enter the value for that child
private void txtBox_Enter(object sender, EventArgs e) private void txtBox_Enter(object sender, EventArgs e)
{ {
roRichTextBox tb = sender as roRichTextBox; TextBox tb = sender as TextBox;
if (tb.ForeColor == SystemColors.GrayText) // currently no value set - using parent's value if (tb.ForeColor == SystemColors.GrayText) // currently no value set - using parent's value
{ {
tb.Text = ""; tb.Text = "";
@@ -1331,7 +1264,7 @@ namespace ctlXMLEditLib
private void radiocheckchg(object sender, System.EventArgs e) private void radiocheckchg(object sender, System.EventArgs e)
{ {
RadioButton btnsel = (RadioButton) sender; RadioButton btnsel = (RadioButton) sender;
roRichTextBox assocbox; TextBox assocbox;
string btntext, str; string btntext, str;
if(dosaveflag)mysavexml = true; if(dosaveflag)mysavexml = true;
@@ -1344,7 +1277,7 @@ namespace ctlXMLEditLib
str = btnsel.Name.Replace(btntext,""); str = btnsel.Name.Replace(btntext,"");
object o = myHT[str]; object o = myHT[str];
if (o == null) return; if (o == null) return;
assocbox = (roRichTextBox) o; assocbox = (TextBox) o;
// make the text box visible if checked, otherwise, invisible // make the text box visible if checked, otherwise, invisible
assocbox.Visible = btnsel.Checked; assocbox.Visible = btnsel.Checked;
// C2021-026 show or hide the Parent/Child appicability group box // C2021-026 show or hide the Parent/Child appicability group box
@@ -1366,7 +1299,7 @@ namespace ctlXMLEditLib
c.Visible = vsblState; // show or hide the lable inside the group box c.Visible = vsblState; // show or hide the lable inside the group box
object oo = myHT[c.Name]; object oo = myHT[c.Name];
if (oo != null) if (oo != null)
(oo as roRichTextBox).Visible = vsblState; // show or hide the associated text box (oo as TextBox).Visible = vsblState; // show or hide the associated text box
} }
} }
} }
@@ -1458,7 +1391,7 @@ namespace ctlXMLEditLib
// The following can be used to validate the text, i.e. check the text against // The following can be used to validate the text, i.e. check the text against
// the pattern. this needs written yet (5/16/02) // the pattern. this needs written yet (5/16/02)
private void MyValidatingCode(roRichTextBox tb) private void MyValidatingCode(TextBox tb)
{ {
//get the text box's tag which contains a flag for whether this is required & //get the text box's tag which contains a flag for whether this is required &
//if it has a pattern. If it has a pattern, validate the field against the pattern. //if it has a pattern. If it has a pattern, validate the field against the pattern.
@@ -1487,33 +1420,20 @@ namespace ctlXMLEditLib
} }
// save which box we're on, for zoom processing. // save which box we're on, for zoom processing.
private void currentTextBox(object sender, System.EventArgs e) private void textbox_zoombtn(object sender, System.EventArgs e)
{ {
roRichTextBox textbox = (roRichTextBox) sender; TextBox textbox = (TextBox) sender;
if (textbox.Multiline == true || textbox == GraphicsFiletextbox) if (textbox.Multiline == true || textbox == GraphicsFiletextbox)
zoomtextbox = textbox; zoomtextbox = textbox;
else else
zoomtextbox = null; zoomtextbox = null;
TextBoxFocus = textbox;
string RO_IDENDITY = RO_IDEN.Substring(1, RO_IDEN.Length - 2); // RO Editor add symbols C2022 - 003 for turning off symbols btn for RO ID.
if (textbox.Name == RO_IDENDITY)
{
OnEnableDisableSymbolsBtn(new ctlXMLEditEventArgs(DisplaySymBolBtn:false));
}
else
{
OnEnableDisableSymbolsBtn(new ctlXMLEditEventArgs(DisplaySymBolBtn:true));
}
} }
private void textbox_Validating(object sender, System.ComponentModel.CancelEventArgs e) private void textbox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{ {
try try
{ {
MyValidatingCode((roRichTextBox) sender); MyValidatingCode((TextBox) sender);
} }
catch(Exception ex) catch(Exception ex)
@@ -1539,18 +1459,11 @@ namespace ctlXMLEditLib
} }
btnZoom_click(null, null); btnZoom_click(null, null);
} }
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
if (((kea.Modifiers & Keys.ControlKey) == Keys.ControlKey) && kea.KeyCode == Keys.V)
{
roRichTextBox o = (roRichTextBox)objSender;
o.rchtxtBox_KeyDown(objSender, RO_IDEN);
}
}
} }
public void btnZoom_click(object sender, System.EventArgs e) public void btnZoom_click(object sender, System.EventArgs e)
{ {
//TextBox tb = (TextBox) sender;
TextBoxAttrTag tag; TextBoxAttrTag tag;
bool doimage = false; bool doimage = false;
if (zoomtextbox.Tag != null) if (zoomtextbox.Tag != null)
@@ -1594,7 +1507,7 @@ namespace ctlXMLEditLib
// file local & keep width/height of file proportional. // file local & keep width/height of file proportional.
private void GraphicText_lostfocus(object sender, System.EventArgs e) private void GraphicText_lostfocus(object sender, System.EventArgs e)
{ {
roRichTextBox fnamebox = (roRichTextBox) sender; TextBox fnamebox = (TextBox) sender;
if (fnamebox.Text != "" && fnamebox.Modified == true) if (fnamebox.Text != "" && fnamebox.Modified == true)
{ {
FileInfo ifi = new FileInfo(fnamebox.Text); FileInfo ifi = new FileInfo(fnamebox.Text);
@@ -1803,7 +1716,7 @@ namespace ctlXMLEditLib
// if changed height, calculate associated width // if changed height, calculate associated width
private void GraphicsHt_lostfocus(object sender, System.EventArgs e) private void GraphicsHt_lostfocus(object sender, System.EventArgs e)
{ {
roRichTextBox ht = (roRichTextBox) sender; TextBox ht = (TextBox) sender;
if (ht.Modified == true) if (ht.Modified == true)
{ {
try try
@@ -1820,7 +1733,7 @@ namespace ctlXMLEditLib
// if changed width, calculate associated height // if changed width, calculate associated height
private void GraphicsWd_lostfocus(object sender, System.EventArgs e) private void GraphicsWd_lostfocus(object sender, System.EventArgs e)
{ {
roRichTextBox wd = (roRichTextBox) sender; TextBox wd = (TextBox) sender;
if (wd.Modified == true) if (wd.Modified == true)
{ {
try try
@@ -1975,7 +1888,7 @@ namespace ctlXMLEditLib
* and overload a couple of it's functions in order to use it. * and overload a couple of it's functions in order to use it.
* - called in CalculatePromsDate() above. * - called in CalculatePromsDate() above.
*/ */
public class ThisTimeZone : TimeZone public class ThisTimeZone : TimeZone
{ {
private TimeZone curTZ; private TimeZone curTZ;
public TimeSpan SpanTZ; public TimeSpan SpanTZ;
@@ -2016,31 +1929,5 @@ namespace ctlXMLEditLib
return curTZ.GetDaylightChanges(year); return curTZ.GetDaylightChanges(year);
} }
} }
public class ctlXMLEditEventArgs : EventArgs // RO Editor add symbols C2022 - 003 for turning off symbols btn for RO ID.
{
public ctlXMLEditEventArgs() {; }
public ctlXMLEditEventArgs(bool DisplaySymBolBtn)
{
_DisplaySymBolBtn = DisplaySymBolBtn;
}
private bool _DisplaySymBolBtn;
public bool DisplaySymBolBtn
{
get { return _DisplaySymBolBtn; }
set { _DisplaySymBolBtn = value; }
}
}
public enum E_FontStyle : byte
{
FS_NONE = 0,
FS_BOLD = 0x01,
FS_UNDERLINE = 0x02,
FS_ITALIC = 0x04,
FS_SUPERSCRIPT = 0x08,
FS_SUBSCRIPT = 0x10
}
} }
@@ -126,9 +126,6 @@
<Reference Include="System.Xml"> <Reference Include="System.Xml">
<Name>System.XML</Name> <Name>System.XML</Name>
</Reference> </Reference>
<Reference Include="Volian.Base.Library">
<HintPath>..\..\..\Volian.Base.Library\bin\Debug\Volian.Base.Library.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="AssemblyInfo.cs"> <Compile Include="AssemblyInfo.cs">
@@ -140,12 +137,6 @@
<Compile Include="ImageDialog.cs"> <Compile Include="ImageDialog.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="roRichTextBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="roRichTextBox.Designer.cs">
<DependentUpon>roRichTextBox.cs</DependentUpon>
</Compile>
<Compile Include="ZoomDialog.cs"> <Compile Include="ZoomDialog.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -1,40 +0,0 @@
namespace ctlXMLEditLib
{
partial class roRichTextBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
System.Windows.Forms.AutoScaleMode AutoScaleMode;
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
}
#endregion
}
}
@@ -1,100 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Volian.Base.Library;
namespace ctlXMLEditLib
{
public partial class roRichTextBox : RichTextBox // C2022-003 Symbols in RO Editor. Customized RichTextBox for RO Editor.
{
public roRichTextBox()
{
InitializeComponent();
}
private string _RtfPrefix; // contains Font table and styles (bold/underline/italics) for rtb from step style
public string RtfPrefixForSymbols
{
get
{
//B2020-100 RHM Use SelectionFont rather than the font from the format file.
StringBuilder selectedRtfSB = new StringBuilder();
AddFontTable(selectedRtfSB, FormatFont, true);
_RtfPrefix = selectedRtfSB.ToString();
return _RtfPrefix + @"\f1\fs" + 10 * 2 + " ";
}
}
public void InsertSymbol( int symbcode)
{
int position = this.SelectionStart;
string sym = symbcode < 256 ? ((char)symbcode).ToString() : string.Format(@"\u{0}", symbcode);
this.SelectedRtf = RtfPrefixForSymbols + sym + @"}";
Select(position, -1);
Select(position + 1, 0);
}
public void rchtxtBox_KeyDown(object sender,string RO_IDEN) // C2022-003 code used to prevent a symbol from being inserted into RO ID.
{
bool symFlg = false;
roRichTextBox o = (roRichTextBox)sender;
if (o.Name == RO_IDEN)
{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
string clpBrd = Clipboard.GetText();
if (clpBrd.Any(c => c > 166))
{
MessageBox.Show("Symbols are not allowed in the field. Clipbroad: '" + clpBrd + "'");
Clipboard.Clear();
}
}
}
}
private static void AddFontTable(StringBuilder selectedRtfSB, Font myFont, bool isFixed)
{
StringBuilder sbbeg = new StringBuilder();
StringBuilder sbend = new StringBuilder();
if (myFont.Bold)
{
sbbeg.Append(@"\b");
sbend.Append(@"\b0");
}
if (myFont.Underline)
{
sbbeg.Append(@"\ul");
sbend.Insert(0, @"\ulnone");
}
if (myFont.Italic)
{
sbbeg.Append(@"\i");
sbend.Insert(0, @"\i0");
}
// RO Editor add symbols C2022-003
selectedRtfSB.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset2 " + myFont.FontFamily.Name + @";}");
selectedRtfSB.Append(@"{\f1\fnil\fcharset0 FreeMono;}}{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}"); // FreeMono is now used for symbols display.
selectedRtfSB.Append("\r\n");
selectedRtfSB.Append(@"\viewkind4\uc1\pard" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" ");
}
private Font _FormatFont;
public Font FormatFont
{
get
{
if (_FormatFont == null)
{
Font formatFont;
formatFont = Font;
_FormatFont = formatFont;
}
return _FormatFont;
}
set { _FormatFont = value; }
}
}
}
@@ -1,147 +0,0 @@
/*****************************************************************************
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2026 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
-- =============================================
-- Author: Matthew Schill
-- Create date: 03/20/2026
-- Description: Script to consolidate Cover Pages for Barakah
-- by Converting multi-unit procedures with Cover Pages
-- to use 1 Library Document Cover Page
-- =============================================
select Contents.ContentID
, Contenttext = Contents.Text
, Items.ItemID
, tblDocuments.DocID
, ParentContentID
, ParentItemID
, LibTitle = ISNULL(LibTitle,'')
, numLibCP
, numCP
,BaseFlag = 0
INTO #tmpUpdate
from Contents
inner join Entries on Contents.ContentID = Entries.ContentID
inner join tblDocuments on tblDocuments.DocID = Entries.DocID
inner join Items on Items.ContentID = Contents.ContentID
outer apply
(select ParentContentID=ContentID, ParentItemID = PItm.ItemID
FROM dbo.vefn_ParentItems(Items.ItemID) PItm
where PItm.ItemID <> Items.ItemID
) parent
outer apply
(select numLibCP = Count(*)
FROM dbo.vefn_ChildItems(ParentItemID) PItm
INNER JOIN Contents on Contents.ContentID = PItm.ContentID
INNER JOIN Entries on Contents.ContentID = Entries.ContentID
INNER JOIN tblDocuments on tblDocuments.DocID = Entries.DocID
where PItm.ItemID <> ParentItemID
AND Contents.text like 'Cover Page%' and ISNULL(tblDocuments.LibTitle,'') <> ''
) childWithLibTitle
outer apply
(select numCP = Count(*)
FROM dbo.vefn_ChildItems(ParentItemID) PItm
INNER JOIN Contents on Contents.ContentID = PItm.ContentID
where PItm.ItemID <> ParentItemID
AND Contents.text like 'Cover Page%'
) child
where Contents.text like 'Cover Page%'
order by ParentContentID asc, CASE WHEN ISNULL(LibTitle,'') <> '' THEN 1 ELSE 2 END asc, Contents.Text asc
UPDATE #tmpUpdate SET BaseFlag = 1 where LibTitle <> '' and numLibCP = 1
UPDATE #tmpUpdate SET BaseFlag = CASE WHEN tU.LibTitle <> '' THEN 1 ELSE 2 END FROM #tmpUpdate tU
where BaseFlag = 0 AND tU.ContentID IN
(
Select ContentID FROM
(SELECT sub.ContentID,
row_number() OVER(PARTITION BY sub.ParentContentID ORDER BY CASE WHEN ISNULL(sub.LibTitle,'') <> '' THEN 1 ELSE 2 END asc, sub.Contenttext asc) as pos
FROM #tmpUpdate sub
) x
WHERE x.pos = 1
)
declare @Cont TABLE
(
ContentID int,
ItemID int,
xConfig xml
)
insert into @Cont
SELECT tU.ContentID, ItemID, xConfig = CAST(tblContents.config AS xml) FROM
tblContents
INNER JOIN
#tmpUpdate tU ON tU.ContentID = tblContents.ContentID
where tU.BaseFlag > 0
Update @Cont Set xConfig.modify('delete //MasterSlave') From @Cont;
Update tblContents SET Text = 'Cover Page', Config = CAST(xConfig AS varchar(max)),
DTS = GETDATE(), UserID = 'CPVolian2026'
FROM
@Cont CNT INNER JOIN
tblContents ON CNT.ContentID = tblContents.ContentID;
--Update items PreviousIds
UPDATE tblItems Set PreviousID = IdToSwapTO.ItemID
FROM
tblItems
INNER JOIN
#tmpUpdate tU ON tblItems.PreviousID = tU.ItemID AND tU.BaseFlag = 0
INNER JOIN #tmpUpdate IdToSwapTO ON IdToSwapTO.ParentContentID = tU.ParentContentID AND IdToSwapTO.BaseFlag IN (1,2)
UPDATE tblItems Set DeleteStatus = 1, DTS = GETDATE(), UserID = 'CPVolian2026'
FROM
#tmpUpdate tU INNER JOIN
tblItems ON tU.ContentID = tblItems.ContentID
WHERE tU.BaseFlag = 0;
UPDATE tblContents Set DeleteStatus = 1, DTS = GETDATE(), UserID = 'CPVolian2026'
FROM
#tmpUpdate tU INNER JOIN
tblContents ON tU.ContentID = tblContents.ContentID
WHERE tU.BaseFlag = 0;
DELETE FROM
tblEntries
FROM
tblEntries
INNER JOIN
#tmpUpdate tU ON tU.ContentID = tblEntries.ContentID
WHERE tU.BaseFlag in (0,2);
INSERT INTO [dbo].[tblEntries]
([ContentID]
,[DocID]
,[DTS]
,[UserID]
,[DeleteStatus])
SELECT
DISTINCT tU.ContentID,
766, -- docid 766 "Cover Page 1"
GETDATE(),
'CPVolian2026',
0
FROM
#tmpUpdate tU
INNER JOIN
@Cont CNT ON tU.ContentID = CNT.ContentID
WHERE tU.BaseFlag = 2;
drop table #tmpUpdate;
IF (@@Error = 0) SELECT '[Barakah Cover Page Consolidation] Succeeded'
ELSE SELECT '[Barakah Cover Page Consolidation] Error'
go
@@ -1,263 +0,0 @@
-- =============================================
-- Author: Matthew Schill
-- Create date: 03/20/2026
-- Description: Script to consolidate Cover Pages for Barakah
-- by Converting multi-unit procedures with Cover Pages
-- to use 1 Library Document Cover Page
-- =============================================
----@isTest = 0 will change data
----@isTest = 1 for internal testing (no data will be changed)
DECLARE @isTest bit = 1;
----Per Cover Page, pull how many cover pages
----Each Cover Page's procedure has
----and how many of those are library documents
select Contents.ContentID
, Contenttext = Contents.Text
, Items.ItemID
, tblDocuments.DocID
, ParentContentID
, ParentItemID
, LibTitle = ISNULL(LibTitle,'')
, numLibCP
, numCP
,BaseFlag = 0
INTO #tmpUpdate
from Contents
inner join Entries on Contents.ContentID = Entries.ContentID
inner join tblDocuments on tblDocuments.DocID = Entries.DocID
inner join Items on Items.ContentID = Contents.ContentID
outer apply
(select ParentContentID=ContentID, ParentItemID = PItm.ItemID
FROM dbo.vefn_ParentItems(Items.ItemID) PItm
where PItm.ItemID <> Items.ItemID
) parent
outer apply
(select numLibCP = Count(*)
FROM dbo.vefn_ChildItems(ParentItemID) PItm
INNER JOIN Contents on Contents.ContentID = PItm.ContentID
INNER JOIN Entries on Contents.ContentID = Entries.ContentID
INNER JOIN tblDocuments on tblDocuments.DocID = Entries.DocID
where PItm.ItemID <> ParentItemID
AND Contents.text like 'Cover Page%' and ISNULL(tblDocuments.LibTitle,'') <> ''
) childWithLibTitle
outer apply
(select numCP = Count(*)
FROM dbo.vefn_ChildItems(ParentItemID) PItm
INNER JOIN Contents on Contents.ContentID = PItm.ContentID
where PItm.ItemID <> ParentItemID
AND Contents.text like 'Cover Page%'
) child
where Contents.text like 'Cover Page%'
order by ParentContentID asc, CASE WHEN ISNULL(LibTitle,'') <> '' THEN 1 ELSE 2 END asc, Contents.Text asc
--BaseFlag
-- 0 = a Cover Page that will be deleted
-- 1 = is base item (Cover Page will get renamed and applicability set to all)
-- 2 = would be base item but not linked to Lib document (Cover Page will get renamed and applicability set to all + will need linked to library doc)
---- If only 1 Library Doc CP for the CP's procedure and this is it, then mark this CP as the one we will keep
UPDATE #tmpUpdate SET BaseFlag = 1 where LibTitle <> '' and numLibCP = 1
---- If multiple Library Document CPs, pick the first one as the one we will keep (BaseFlag = 1)
---- If no Library Document CPs, pick the first one as the one we will repurpose (BaseFlag = 2)
UPDATE #tmpUpdate SET BaseFlag = CASE WHEN tU.LibTitle <> '' THEN 1 ELSE 2 END FROM #tmpUpdate tU
where BaseFlag = 0 AND tU.ContentID IN
(
Select ContentID FROM
(SELECT sub.ContentID,
row_number() OVER(PARTITION BY sub.ParentContentID ORDER BY CASE WHEN ISNULL(sub.LibTitle,'') <> '' THEN 1 ELSE 2 END asc, sub.Contenttext asc) as pos
FROM #tmpUpdate sub
) x
WHERE x.pos = 1
)
----BEGIN TESTS--
if(@isTest = 1)
BEGIN
select Count(*), 'Should be Zero - not exactly one BaseFlag set to non 0 for each Parent Item' FROM #tmpUpdate TU
OUTER APPLY
(select numBaseFlagSet = SUM(CASE WHEN sub.BaseFlag > 0 THEN 1 ELSE 0 END)
FROM #tmpUpdate sub
where sub.ParentContentID = TU.ParentContentID
) sub
where numBaseFlagSet <> 1
select Count(*), 'Should be Zero - 0 Lib Docs, BaseFlag is 1' FROM #tmpUpdate TU
where numLibCP = 0 and BaseFlag = 1
select Count(*), 'Should be Zero - at least 1 Lib Docs, BaseFlag is 2' FROM #tmpUpdate TU
where numLibCP > 0 and BaseFlag = 2
select Count(*), 'Should be Zero - 1 Lib Docs, BaseFlag not 1 for that Lib doc' FROM #tmpUpdate TU
where numLibCP = 1 and LibTitle <> '' and BaseFlag <> 1
select Count(*), 'Should be Zero - 1 Lib Docs, BaseFlag not 0 for ones without Lib Doc' FROM #tmpUpdate TU
where numLibCP = 1 and LibTitle = '' and BaseFlag <> 0
select Count(*), 'Should be Zero - 1 CP, no Lib Docs, BaseFlag not 2' FROM #tmpUpdate TU
where numLibCP = 0 and numCP = 1 and BaseFlag <> 2
select Count(*), 'Should be Zero - more than 1 Lib Docs, BaseFlag is 1' FROM #tmpUpdate TU
where numLibCP = 0 and BaseFlag = 1
select Count(*), 'Should be Zero - not exactly one BaseFlag set to non 0 for each Parent Item' FROM #tmpUpdate TU
OUTER APPLY
(select numBaseFlagSet = SUM(CASE WHEN sub.BaseFlag > 0 THEN 1 ELSE 0 END)
FROM #tmpUpdate sub
where sub.ParentContentID = TU.ParentContentID
) sub
where numBaseFlagSet <> 1
select Count(*), 'Should be Zero - 0 Lib Docs, BaseFlag is 1' FROM #tmpUpdate TU
where numLibCP = 0
and BaseFlag = 1
--all Parents should have exactly 1 Baseflag=1 or BaseFlage = 2
select 'Should be No Records where not a BaseFlag 1 or 2'
select NumNotBaseFlag12 = Count(*)
FROM #tmpUpdate TU
Group by ParentContentID
HAVING SUM(CASE WHEN BaseFlag in (1,2) THEN 1 ELSE 0 END) <> 1
select 'Should be No Records where with both a BaseFlag 1 and 2'
select NumBothBaseFlag12 = Count(*)
FROM #tmpUpdate TU
Group by ParentContentID
HAVING SUM(BaseFlag) > 2
END
--END TESTS--
--BaseFlag
-- 0 = a Cover Page that will be deleted
-- 1 = is base item (Cover Page will get renamed and applicability set to all)
-- 2 = would be base item but not linked to Lib document (Cover Page will get renamed and applicability set to all + will need linked to library doc)
----Update config for Coverpage 1 to remove <MasterSlave Applicability="1" />
----from that config
----cover page 1s
declare @Cont TABLE
(
ContentID int,
ItemID int,
xConfig xml
)
insert into @Cont
SELECT tU.ContentID, ItemID, xConfig = CAST(tblContents.config AS xml) FROM
tblContents
INNER JOIN
#tmpUpdate tU ON tU.ContentID = tblContents.ContentID
where tU.BaseFlag > 0
if(@isTest = 1)
BEGIN
select WRD='Have Masterslave in xconfig', NumwithMasterSlave = Count(*) FROM @Cont CNT
INNER JOIN
tblContents ON CNT.ContentID = tblContents.ContentID
where CAST(xConfig AS varchar(max)) like '%MasterSlave%'
END
Update @Cont Set xConfig.modify('delete //MasterSlave') From @Cont;
if(@isTest = 1)
BEGIN
select WRD='None should have Masterslave Removed in xconfig', NumwithMasterSlave = Count(*) FROM @Cont CNT
INNER JOIN
tblContents ON CNT.ContentID = tblContents.ContentID
where CAST(xConfig AS varchar(max)) like '%MasterSlave%'
select 'Show Records and how the ids will be re-linked'
Select tblItems.ItemID, tblItems.ContentID, tblItems.PreviousID, tblContents.Text,
PreviousItemID = tU.ItemID, PreviousContentID = tU.ContentID, PreviousText = tUCont.Text,
RelinkToItemID = IdToSwapTO.ItemID, RelinkToContentID = IdToSwapTO.ContentID, RelinkToText = IdToSwapTOCont.Text
FROM
tblItems
INNER JOIN
tblContents on tblContents.ContentID = tblItems.ContentID
INNER JOIN
#tmpUpdate tU ON tblItems.PreviousID = tU.ItemID AND tU.BaseFlag = 0
INNER JOIN
tblContents tUCont on tUCont.ContentID = tU.ContentID
LEFT OUTER JOIN #tmpUpdate IdToSwapTO ON IdToSwapTO.ParentContentID = tU.ParentContentID AND IdToSwapTO.BaseFlag IN (1,2)
LEFT OUTER JOIN tblContents IdToSwapTOCont on IdToSwapTOCont.ContentID = IdToSwapTO.ContentID
END
ELSE
BEGIN
--Update Config for Contents and set Text = 'Cover Page'
Update tblContents SET Text = 'Cover Page', Config = CAST(xConfig AS varchar(max)),
DTS = GETDATE(), UserID = 'CPVolian2026'
FROM
@Cont CNT INNER JOIN
tblContents ON CNT.ContentID = tblContents.ContentID;
--Update items PreviousIds
UPDATE tblItems Set PreviousID = IdToSwapTO.ItemID
FROM
tblItems
INNER JOIN
#tmpUpdate tU ON tblItems.PreviousID = tU.ItemID AND tU.BaseFlag = 0
INNER JOIN #tmpUpdate IdToSwapTO ON IdToSwapTO.ParentContentID = tU.ParentContentID AND IdToSwapTO.BaseFlag IN (1,2)
--delete where BaseFlag = 0 ---Items,Content,Entries, --set DeleteStatus = 1
--these are ones that will be replaced by a library document
UPDATE tblItems Set DeleteStatus = 1, DTS = GETDATE(), UserID = 'CPVolian2026'
FROM
#tmpUpdate tU INNER JOIN
tblItems ON tU.ContentID = tblItems.ContentID
WHERE tU.BaseFlag = 0;
UPDATE tblContents Set DeleteStatus = 1, DTS = GETDATE(), UserID = 'CPVolian2026'
FROM
#tmpUpdate tU INNER JOIN
tblContents ON tU.ContentID = tblContents.ContentID
WHERE tU.BaseFlag = 0;
--delete entries where Baseflag = 2
--create new entries where Baseflag = 2
DELETE FROM
tblEntries
FROM
tblEntries
INNER JOIN
#tmpUpdate tU ON tU.ContentID = tblEntries.ContentID
WHERE tU.BaseFlag in (0,2);
INSERT INTO [dbo].[tblEntries]
([ContentID]
,[DocID]
,[DTS]
,[UserID]
,[DeleteStatus])
SELECT
DISTINCT tU.ContentID,
766, -- docid 766 "Cover Page 1"
GETDATE(),
'CPVolian2026',
0
FROM
#tmpUpdate tU
INNER JOIN
@Cont CNT ON tU.ContentID = CNT.ContentID
WHERE tU.BaseFlag = 2;
END;
drop table #tmpUpdate;
+34 -495
View File
@@ -1643,11 +1643,7 @@ Begin
Select Cast(i.LastChanged as varbinary(8)) as 'ILastChanged', Select Cast(i.LastChanged as varbinary(8)) as 'ILastChanged',
i.ItemID as 'ItemID', i.ItemID as 'ItemID',
zi.VersionID as 'VersionID', zi.VersionID as 'VersionID',
CASE WHEN c.[Type] % 20000 = 6 THEN REPLACE(zi.PPath,'Note','Caution') zi.PPath +
WHEN c.[Type] % 20000 = 7 THEN REPLACE(zi.PPath,'Caution','Note')
ELSE zi.PPath
END
+
Case (c.[Type]/10000) Case (c.[Type]/10000)
When 0 Then @Delim + @UnitPrefix + IsNull(c.Number,'') + @DelimNumber + IsNull(c.Text,'') -- Procedure When 0 Then @Delim + @UnitPrefix + IsNull(c.Number,'') + @DelimNumber + IsNull(c.Text,'') -- Procedure
When 1 Then @Delim + IsNull(c.Number,'') + @DelimNumber + IsNull(c.Text,'') -- Section When 1 Then @Delim + IsNull(c.Number,'') + @DelimNumber + IsNull(c.Text,'') -- Section
@@ -5227,7 +5223,7 @@ CREATE PROCEDURE [dbo].[getRevisionByItemIDandRevisionNumberAndUnitID]
WITH EXECUTE AS OWNER WITH EXECUTE AS OWNER
AS AS
declare @RevisionID int declare @RevisionID int
set @RevisionID = (select top 1 revisionid from revisions rr cross apply rr.config.nodes('//Applicability') t1(r1) where itemid = @itemid and revisionnumber = @RevisionNumber and r1.value('@Index','int') = @UnitID order by revisionid desc) set @RevisionID = (select revisionid from revisions rr cross apply rr.config.nodes('//Applicability') t1(r1) where itemid = @itemid and revisionnumber = @RevisionNumber and r1.value('@Index','int') = @UnitID)
SELECT SELECT
[RevisionID], [RevisionID],
[ItemID], [ItemID],
@@ -13540,7 +13536,35 @@ GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteAllDocVersionPdfs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteAllDocVersionPdfs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [deleteAllDocVersionPdfs]; DROP PROCEDURE [deleteAllDocVersionPdfs];
GO GO
/*****************************************************************************
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2017 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
CREATE PROCEDURE [dbo].[deleteAllDocVersionPdfs]
(
@VersionID int
)
WITH EXECUTE AS OWNER
AS
BEGIN TRY -- Try Block
BEGIN TRANSACTION
DELETE [Pdfs]
WHERE [DocID] IN(select EE.DocID from vefn_GetVersionItems(cast(@VersionID as varchar(20))) VI
Join Entries EE ON EE.ContentID= VI.ContentID)
IF( @@TRANCOUNT > 0 ) COMMIT
END TRY
BEGIN CATCH -- Catch Block
IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level
ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback
EXEC vlnErrorHandler
END CATCH
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: deleteAllDocVersionPdfs Succeeded'
ELSE PRINT 'Procedure Creation: deleteAllDocVersionPdfs Error on Creation'
GO
/****** Object: StoredProcedure [addFiguresByROFstIDandImageIDs] ******/ /****** Object: StoredProcedure [addFiguresByROFstIDandImageIDs] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[addFiguresByROFstIDandImageIDs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[addFiguresByROFstIDandImageIDs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [addFiguresByROFstIDandImageIDs]; DROP PROCEDURE [addFiguresByROFstIDandImageIDs];
@@ -17141,7 +17165,6 @@ GO
[roid] [varchar](50) NOT NULL, [roid] [varchar](50) NOT NULL,
[appid] [varchar](max) NULL, [appid] [varchar](max) NULL,
[value] [varchar](max) NULL, [value] [varchar](max) NULL,
[moddatetime] [datetime] NULL,
CONSTRAINT [PK_RofstChild] PRIMARY KEY CLUSTERED CONSTRAINT [PK_RofstChild] PRIMARY KEY CLUSTERED
( (
[RofstChildID] ASC [RofstChildID] ASC
@@ -17276,23 +17299,6 @@ GO
End -- Rofst Tables End -- Rofst Tables
Go Go
-- =============================================
-- Author: Matthew Schill
-- Create date: 03/30/2026
-- Description: Store RO Modification date/time
-- =============================================
--- Add Column to store RO Modification date/time if it does not already exist
IF NOT EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'RofstChild'
AND COLUMN_NAME = 'moddatetime')
ALTER TABLE RofstChild ADD moddatetime datetime NULL;
go
-- Display the status
IF (@@Error = 0) PRINT 'Altered table [RofstChild] Succeeded for moddatetime'
ELSE PRINT 'Altered table [RofstChild] Error on Alter for moddatetime'
go
/* /*
---------------------------------------------------------------------------------- ----------------------------------------------------------------------------------
@@ -19695,7 +19701,6 @@ GO
@roid VarChar(50), @roid VarChar(50),
@appid VarChar(Max) = null, @appid VarChar(Max) = null,
@value VarChar(Max) = null, @value VarChar(Max) = null,
@ModDateTime DateTime = null,
@missingDefaultValue VarChar(Max) = null @missingDefaultValue VarChar(Max) = null
) )
With Execute as Owner With Execute as Owner
@@ -19713,8 +19718,8 @@ GO
Set @missingDefaultValue = '[TBD]'; Set @missingDefaultValue = '[TBD]';
-- Create Rofst Child/Group Record --> [Roid = (12) Digits] -- Create Rofst Child/Group Record --> [Roid = (12) Digits]
Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, moddatetime, [value]) Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, [value])
Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, @ModDateTime, REPLACE(REPLACE(@value, '&123;', '{'), '&125;', '}')); Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, REPLACE(REPLACE(@value, '&123;', '{'), '&125;', '}'));
-- Check for appid, if exists, then insert the default value for each return type if multi-value -- Check for appid, if exists, then insert the default value for each return type if multi-value
@@ -24320,10 +24325,8 @@ BEGIN
OR FromID in (Select ContentID from tblContents where deletestatus != 0 and ActionDTS < @dte) OR FromID in (Select ContentID from tblContents where deletestatus != 0 and ActionDTS < @dte)
) )
PRINT 'Deleting Items and Parts' PRINT 'Deleting Items and Parts'
alter table tblParts nocheck constraint FK_Parts_Items
delete from tblItems where deletestatus != 0 and DTS < @dte delete from tblItems where deletestatus != 0 and DTS < @dte
delete from tblParts where deletestatus != 0 and ItemID Not IN (Select ItemID from Items) and DTS < @dte delete from tblParts where deletestatus != 0 and ItemID Not IN (Select ItemID from Items) and DTS < @dte
alter table tblParts check constraint FK_Parts_Items
PRINT 'Purging Parts with deleted Contents' PRINT 'Purging Parts with deleted Contents'
DELETE from Child DELETE from Child
FROM tblParts AS Child FROM tblParts AS Child
@@ -24348,9 +24351,7 @@ BEGIN
ON Itms.ItemID = tblItems.ItemID AND Itms.deletestatus = tblItems.deletestatus ON Itms.ItemID = tblItems.ItemID AND Itms.deletestatus = tblItems.deletestatus
alter table tblItems check constraint FK_Items_Items alter table tblItems check constraint FK_Items_Items
PRINT 'Purging Contents' PRINT 'Purging Contents'
alter table tblEntries nocheck constraint FK_Entries_Contents
delete from tblContents where deletestatus != 0 and ActionDTS < @dte delete from tblContents where deletestatus != 0 and ActionDTS < @dte
alter table tblEntries check constraint FK_Entries_Contents
PRINT 'Phase 3' PRINT 'Phase 3'
delete from AnnotationAudits where DTS < @dte delete from AnnotationAudits where DTS < @dte
delete from ContentAudits where DTS < @dte delete from ContentAudits where DTS < @dte
@@ -24528,468 +24529,6 @@ GO
PRINT 'Added IX_tblROUsagesRODbIDDeleteStatusROID Index. Speeds up RO queries' PRINT 'Added IX_tblROUsagesRODbIDDeleteStatusROID Index. Speeds up RO queries'
GO GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[GetCurrentApprovedRevisions]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [GetCurrentApprovedRevisions];
GO
/****** Object: StoredProcedure [dbo].[GetCurrentApprovedRevisions] Script Date: 02/05/2026 7:54:42 AM ******/
-- =============================================
-- Author: Matthew Schill
-- Create date: 02/05/2026
-- Description: Gets all current approved revisions
-- =============================================
CREATE PROCEDURE [dbo].[GetCurrentApprovedRevisions]
(
@ItemID AS bigint
)
AS
BEGIN
select max(rr.revisionid) revisionid, UnitId, UnitVal.name UnitName, max(rr.DTS) DTS
from items ii
inner join revisions rr on ii.itemid = rr.itemid
inner join versions vv on rr.revisionid = vv.revisionid
inner join stages ss on vv.stageid = ss.stageid
outer apply
(Select UnitId = r1.value('@Index','int') FROM rr.config.nodes('Config/Applicability') t1(r1)) App
left outer join
(select r1.value('@index','int') indx
,r1.value('@Name','varchar') name
from (select *,cast(config as xml) xconfig from DocVersions
where ItemID in(select itemID from vefn_AllSiblingItems(@ItemID))) SDV
cross apply
xconfig.nodes('Config/Slaves/Slave') t1(r1)) UnitVal ON UnitVal.indx = UnitId
where ss.isapproved = 1
and ii.itemid = @ItemID
group by UnitId, UnitVal.name
RETURN
END
IF (@@Error = 0) PRINT 'Procedure Creation: [GetCurrentApprovedRevisions] Succeeded'
ELSE PRINT 'Procedure Creation: [GetCurrentApprovedRevisions] Error on Creation'
GO
/*
==========================================================================================================
-- Begin: C2026-010 Add Audit Ability for ChangeBars
-- Author: Matthew Schill
-- Create date: 02/17/2026
==========================================================================================================
*/
/*
----------------------------------------------------------------------------------
Tables:
----------------------------------------------------------------------------------
[ChangeBarAudits]
----------------------------------------------------------------------------------
Indexes:
----------------------------------------------------------------------------------
[IX_ChangeBarAudits_ItemID] on [dbo].[ChangeBarAudits]
*/
IF Not Exists(SELECT * FROM sys.objects Where name = 'ChangeBarAudits' AND type in (N'U'))
Begin
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
/****** Create Table to hold Audit Information ******/
CREATE TABLE [dbo].[ChangeBarAudits](
[AuditID] [bigint] IDENTITY(1,1) NOT NULL,
[ItemID] [bigint] NOT NULL,
[Text] [nvarchar](max) NULL,
[DTS] [datetime] NOT NULL,
[UserID] [nvarchar](100) NOT NULL,
[UnitIndex] [int] NULL,
CONSTRAINT [PK_ChangeBarAudits] PRIMARY KEY CLUSTERED
(
[AuditID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
IF (@@Error = 0) PRINT 'Table Creation: [ChangeBarAudits] Succeeded'
ELSE PRINT 'Table Creation: [ChangeBarAudits] Error on Creation'
/****** Table was not previously created - so intially populate with info from Approvals ******/
INSERT into ChangeBarAudits([ItemID],[Text],[DTS],[UserID],[UnitIndex])
select --rr.RevisionID,
rr.ItemID,
Text = CASE WHEN r1.value('@Index','int') <> 0 AND UnitName IS NOT NULL THEN
'(Unit ' + UnitName + ') '
ELSE
''
END +
'Approved by (' + rr.UserID + ') on (' +
CAST(rr.DTS AS VARCHAR) + ')',
rr.DTS,
rr.UserID,
UnitIndex = r1.value('@Index','int')
-- , UnitName
from revisions rr
inner join versions vv on rr.revisionid = vv.revisionid
inner join stages ss on vv.stageid = ss.stageid
outer apply rr.config.nodes('Config/Applicability') t1(r1)
outer apply
( Select r2.value('@Name','varchar') UnitName
FROM
(select DocVerSions.ItemID, cast(config as xml) xconfig from DocVersions
inner join
vefn_AllSiblingItems(rr.ItemID) Sib ON DocVerSions.ItemID = Sib.ItemID) SDV
cross apply
xconfig.nodes('Config/Slaves/Slave') t2(r2)
WHERE r2.value('@index','varchar') = r1.value('@Index','int')
) UN
where ss.isapproved = 1
order by rr.ItemID, rr.RevisionID desc
IF (@@Error = 0) PRINT '[ChangeBarAudits] Initial Population Succeeded'
ELSE PRINT '[ChangeBarAudits] Initial Population Error'
/****** Create Index to get ChangeBar Audit Information for Item (ItemID = ProcedureID) ******/
CREATE NONCLUSTERED INDEX [IX_ChangeBarAudits_ItemID] ON [dbo].[ChangeBarAudits]
(
[ItemID] ASC
)
INCLUDE ([AuditID], [Text], [DTS], [UnitIndex])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
IF (@@Error = 0) PRINT 'Index Creation: [IX_ChangeBarAudits_ItemID] Succeeded'
ELSE PRINT 'Index Creation: [IX_ChangeBarAudits_ItemID] Error on Creation'
End
-- =============================================
-- Description: Gets ChangeBar Audit History by item
-- =============================================
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[GetChangeBarAuditHistoryByItem]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [GetChangeBarAuditHistoryByItem];
GO
CREATE PROCEDURE [dbo].[GetChangeBarAuditHistoryByItem]
(
@ItemID AS bigint
)
AS
BEGIN
Select * FROM ChangeBarAudits where ItemID = @ItemID
order by DTS desc
RETURN
END
IF (@@Error = 0) PRINT 'Procedure Creation: [GetChangeBarAuditHistoryByItem] Succeeded'
ELSE PRINT 'Procedure Creation: [GetChangeBarAuditHistoryByItem] Error on Creation'
GO
-- =============================================
-- Description: Adds ChangeBar Audit History
-- =============================================
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[AddChangeBarAuditHistory]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [AddChangeBarAuditHistory];
GO
CREATE PROCEDURE [dbo].[AddChangeBarAuditHistory]
(
@ItemID AS bigint,
@Description As nvarchar(max),
@DTS AS Datetime,
@UserID As nvarchar(100),
@UnitIndex AS bigint = NULL
)
AS
BEGIN
INSERT into ChangeBarAudits([ItemID],[Text],[DTS],[UserID],[UnitIndex])
VALUES (@ItemID, @Description, @DTS, @UserID, @UnitIndex)
RETURN
END
IF (@@Error = 0) PRINT 'Procedure Creation: [AddChangeBarAuditHistory] Succeeded'
ELSE PRINT 'Procedure Creation: [AddChangeBarAuditHistory] Error on Creation'
GO
/*
==========================================================================================================
-- End: C2026-010 Add Audit Ability for ChangeBars
==========================================================================================================
*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[GetMissingDocsByUnit]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [GetMissingDocsByUnit];
GO
-- =============================================
-- Author: Matthew Schill
-- Create date: 02/27/2026
-- Description: Get Missing Docs by Unit for Generating Pdf table
-- =============================================
CREATE PROCEDURE [dbo].[GetMissingDocsByUnit]
AS
BEGIN
select Docs.DocID, UnitID, SectionID = MIN(SectionID)
FROM
(SELECT DISTINCT [DocID]
FROM [tblDocuments]) Docs
INNER JOIN Entries on Docs.DocID = Entries.DocID
INNER JOIN Contents on Entries.ContentID = Contents.ContentID
inner join Items on Items.ContentID = Contents.ContentID
outer apply
(Select UnitID = ID FROM dbo.vefn_SplitInt([dbo].[ve_GetItemDerivedApplicability](Items.ItemID),',')) Unit
outer apply
(Select TOP 1 SectionID = ItemID FROM Contents SecC where SecC.ContentID = Contents.ContentID
AND (SecC.Type / 10000) = 1
AND dbo.vefn_GetVersionIDByItemID(ItemID) IS NOT NULL
) Section
left outer join Pdfs on Pdfs.DocID = Docs.DocID AND Pdfs.DebugStatus = CASE WHEN UNITID IS NULL THEN 0 ELSE UnitID * 10 END
WHERE Pdfs.DocID IS NULL
AND SectionID IS NOT NULL
Group by Docs.DocID, UnitID
order by Docs.DocID, UnitID
RETURN
END
IF (@@Error = 0) PRINT 'Procedure Creation: [GetMissingDocsByUnit] Succeeded'
ELSE PRINT 'Procedure Creation: [GetMissingDocsByUnit] Error on Creation'
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_ROFST_changes]') AND OBJECTPROPERTY(id,N'IsTableFunction') = 1)
DROP FUNCTION [vefn_ROFST_changes];
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 03/31/2026
Description: Function for ROs that updated in latest RO FST Load
==========================================================================================================
*/
CREATE FUNCTION [dbo].[vefn_ROFST_changes](@OrigFSTID int, @NewFSTid int, @VersionID int)
RETURNS @ROIDs TABLE
(
[roid] varchar(50)
)
WITH EXECUTE AS OWNER
AS
BEGIN
insert into @ROIDs
SELECT DISTINCT ISNULL(RofstChild.roid,previous.roid)
FROM
(SELECT * FROM RofstChild where RofstChild.RofstID = @NewFSTid) RofstChild
FULL OUTER JOIN
(SELECT * FROM RofstChild previous where previous.RofstID = @OrigFSTID) previous
ON previous.dbiID = RofstChild.dbiID AND previous.ID = RofstChild.ID
where
ISNULL(previous.RofstID,'') != ISNULL(RofstChild.RofstID,'')
AND
(
(RofstChild.RofstID = @NewFSTid OR RofstChild.RofstID IS NULL)
AND
(previous.RofstID = @OrigFSTID OR previous.RofstID IS NULL)
)
AND
(previous.moddatetime IS NULL
OR RofstChild.moddatetime IS NULL
OR RofstChild.moddatetime != previous.moddatetime
OR RofstChild.title != previous.title
OR RofstChild.value != previous.value
)
RETURN
END
go
IF (@@Error = 0) PRINT 'TableFunction [vefn_ROFST_changes] Succeeded'
ELSE PRINT 'TableFunction [vefn_ROFST_changes] Error on Creation'
go
/****** Object: StoredProcedure [deleteDocVersionPdfsWithNewROs] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteDocVersionPdfsWithNewROs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [deleteDocVersionPdfsWithNewROs];
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 03/31/2026
Description: Delete all PDFs with ROs that will need re-resolved
==========================================================================================================
*/
CREATE PROCEDURE [dbo].[deleteDocVersionPdfsWithNewROs]
(
@VersionID int,
@OrigFSTid int,
@NewFSTid int
)
WITH EXECUTE AS OWNER
AS
BEGIN
DELETE [Pdfs]
WHERE [DocID] IN
(
select EE.DocID from vefn_GetVersionItems(cast(@VersionID as varchar(20))) VI
Join Entries EE ON EE.ContentID= VI.ContentID
Join DRoUsages ON DRoUsages.DocID = EE.DocID
Join dbo.vefn_ROFST_changes(@OrigFSTID, @NewFSTid, @VersionID) ROFST_changes on LEFT(DRoUsages.ROID,12) = ROFST_changes.roid
)
RETURN
END
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: deleteDocVersionPdfsWithNewROs Succeeded'
ELSE PRINT 'Procedure Creation: deleteDocVersionPdfsWithNewROs Error on Creation'
GO
/****** Object: StoredProcedure [getItemsWithNewROs] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getItemsWithNewROs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [getItemsWithNewROs];
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 03/31/2026
Description: Get Items with New ROs that will need resolved
==========================================================================================================
*/
CREATE PROCEDURE [dbo].[getItemsWithNewROs]
(
@VersionID int,
@OrigFSTid int,
@NewFSTid int
)
WITH EXECUTE AS OWNER
AS
BEGIN
select DISTINCT tblItems.ItemID FROM
dbo.vefn_ROFST_changes(@OrigFSTID, @NewFSTid, @VersionID) ROFST_changes
INNER JOIN RoUsages ON LEFT(RoUsages.ROID,12) = ROFST_changes.roid
INNER JOIN tblItems ON RoUsages.ContentID = tblItems.ContentID
OUTER APPLY (Select VersionID = dbo.vefn_GetVersionIDByItemID(tblItems.ItemID)) ver
INNER JOIN DocVersions DV ON DV.VersionID = ver.VersionID
INNER JOIN Associations ON Associations.VersionID = DV.VersionID
where ver.VersionID = @VersionID
RETURN
END
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: getItemsWithNewROs Succeeded'
ELSE PRINT 'Procedure Creation: getItemsWithNewROs Error on Creation'
GO
/****** Object: StoredProcedure [dbo].[getRevisionByItemIDandRevisionNumber] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[getRevisionByItemIDandRevisionNumber]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[getRevisionByItemIDandRevisionNumber];
GO
/*****************************************************************************
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
CREATE PROCEDURE [dbo].[getRevisionByItemIDandRevisionNumber]
(
@ItemID int,
@RevisionNumber nvarchar(50)
)
WITH EXECUTE AS OWNER
AS
declare @RevisionID int
set @RevisionID = (select top 1 revisionid from revisions where itemid = @itemid and revisionnumber = @RevisionNumber order by revisionid desc)
SELECT
[RevisionID],
[ItemID],
[TypeID],
[RevisionNumber],
[RevisionDate],
[Notes],
[Config],
[DTS],
[UserID],
[LastChanged],
(SELECT COUNT(*) FROM [Checks] WHERE [Checks].[RevisionID]=[Revisions].[RevisionID]) [CheckCount],
(SELECT COUNT(*) FROM [Versions] WHERE [Versions].[RevisionID]=[Revisions].[RevisionID]) [VersionCount]
FROM [Revisions]
WHERE [RevisionID]=@RevisionID
SELECT
[Checks].[CheckID],
[Checks].[RevisionID],
[Checks].[StageID],
[Checks].[ConsistencyChecks],
[Checks].[DTS],
[Checks].[UserID],
[Checks].[LastChanged],
[Stages].[Name] [Stage_Name],
[Stages].[Description] [Stage_Description],
[Stages].[IsApproved] [Stage_IsApproved],
[Stages].[DTS] [Stage_DTS],
[Stages].[UserID] [Stage_UserID]
FROM [Checks]
JOIN [Stages] ON
[Stages].[StageID]=[Checks].[StageID]
WHERE
[Checks].[RevisionID]=@RevisionID
SELECT
[Versions].[VersionID],
[Versions].[RevisionID],
[Versions].[StageID],
[Versions].[DTS],
[Versions].[UserID],
[Versions].[LastChanged],
[Versions].[PDF],
[Versions].[SummaryPDF],
[Stages].[Name] [Stage_Name],
[Stages].[Description] [Stage_Description],
[Stages].[IsApproved] [Stage_IsApproved],
[Stages].[DTS] [Stage_DTS],
[Stages].[UserID] [Stage_UserID]
FROM [Versions]
JOIN [Stages] ON
[Stages].[StageID]=[Versions].[StageID]
WHERE
[Versions].[RevisionID]=@RevisionID
RETURN
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: getRevisionByItemIDandRevisionNumber Succeeded'
ELSE PRINT 'Procedure Creation: getRevisionByItemIDandRevisionNumber Error on Creation'
GO
/* /*
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
| ADD New Code Before this Block | | ADD New Code Before this Block |
@@ -25023,8 +24562,8 @@ BEGIN TRY -- Try Block
DECLARE @RevDate varchar(255) DECLARE @RevDate varchar(255)
DECLARE @RevDescription varchar(255) DECLARE @RevDescription varchar(255)
set @RevDate = '05/26/2026 7:00 AM' set @RevDate = '01/19/2026 5:00 PM'
set @RevDescription = 'Get Most Recent Revision when Duplicates' set @RevDescription = 'Sync tree list Sort order between in RO Editor and PROMS'
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
@@ -1135,7 +1135,6 @@ namespace VEPROMS
ViewPDF = ViewPDF && MyProcedures.Count == 1; ViewPDF = ViewPDF && MyProcedures.Count == 1;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
StageInfo nsi = StageInfo.GetJustStage(RevStage); StageInfo nsi = StageInfo.GetJustStage(RevStage);
DateTime now = DateTime.Now; //using variable so dates are consistent
foreach (ApprovalProcedure ap in MyProcedures) //spin thru looking for updating current revision foreach (ApprovalProcedure ap in MyProcedures) //spin thru looking for updating current revision
{ {
// ric: current revision info record, not new one being created. // ric: current revision info record, not new one being created.
@@ -1208,7 +1207,7 @@ namespace VEPROMS
cfg.History_StartDate = myDTS; // if there is a slave, date found from above code cfg.History_StartDate = myDTS; // if there is a slave, date found from above code
cfg.Applicability_Index = ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave; cfg.Applicability_Index = ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave;
//cfg.Save(); //cfg.Save();
revision = Revision.MakeRevision(pi.ItemID, RevType, ap.RevNumber, ap.RevDate, RevNote, cfg.ToString(), now, Volian.Base.Library.VlnSettings.UserID); revision = Revision.MakeRevision(pi.ItemID, RevType, ap.RevNumber, ap.RevDate, RevNote, cfg.ToString(), DateTime.Now, Volian.Base.Library.VlnSettings.UserID);
// revision.MyConfig.History_StartDate = pi.DTS; // revision.MyConfig.History_StartDate = pi.DTS;
// revision.MyConfig.Save(); // revision.MyConfig.Save();
// revision = revision.Save(); // revision = revision.Save();
@@ -1235,7 +1234,7 @@ namespace VEPROMS
RevisionConfig cfg = new RevisionConfig(); RevisionConfig cfg = new RevisionConfig();
cfg.History_StartDate = pi.DTS; // todo: this should probably be myDTS, found during fix of B2019-051. cfg.History_StartDate = pi.DTS; // todo: this should probably be myDTS, found during fix of B2019-051.
//cfg.Save(); //cfg.Save();
revision = Revision.MakeRevision(pi.ItemID, RevType, ap.RevNumber, ap.RevDate, RevNote, cfg.ToString(), now, Volian.Base.Library.VlnSettings.UserID); revision = Revision.MakeRevision(pi.ItemID, RevType, ap.RevNumber, ap.RevDate, RevNote, cfg.ToString(), DateTime.Now, Volian.Base.Library.VlnSettings.UserID);
// revision.MyConfig.History_StartDate = pi.DTS; // revision.MyConfig.History_StartDate = pi.DTS;
// revision.MyConfig.Save(); // revision.MyConfig.Save();
// revision = revision.Save(); // revision = revision.Save();
@@ -1254,7 +1253,7 @@ namespace VEPROMS
byte[] summaryBuf = null; byte[] summaryBuf = null;
//B2017-149 Allow the user to choose if they want the Summary of Changes report created during the approval process //B2017-149 Allow the user to choose if they want the Summary of Changes report created during the approval process
if (doSumChg) summaryBuf = CreateSummary(ref pi, summaryPDF, myDTS); if (doSumChg) summaryBuf = CreateSummary(ref pi, summaryPDF, myDTS);
DateTime currentDTS = now; DateTime currentDTS = DateTime.Now;
Check check = Check.MakeCheck(revision, Stage.GetJustStage(RevStage), RevisionInfo.BuildRevisionChecks(pi), currentDTS, VlnSettings.UserID); Check check = Check.MakeCheck(revision, Stage.GetJustStage(RevStage), RevisionInfo.BuildRevisionChecks(pi), currentDTS, VlnSettings.UserID);
//make pdf with promsprinter and get byte stream //make pdf with promsprinter and get byte stream
// Moved to end so that Item and Content are saved at the same time // Moved to end so that Item and Content are saved at the same time
@@ -1312,15 +1311,7 @@ namespace VEPROMS
pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0; pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
if (si.IsApproved == 1) if (si.IsApproved == 1)
{ {
dlgExportImport dlg = new dlgExportImport("Export", pi, MyFrmVEPROMS, (selectedSlave)); // "true tell export to convert ROs and Transitions to text
//B2026-016 - Fix error pulling Reference Object info into Export
if (pi.MyDocVersion.DocVersionAssociationCount == 0)
{
MessageBox.Show("Prior to Approval you must set the Referenced Object Database", "No RO Database set", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return false;
}
dlgExportImport dlg = new dlgExportImport("Export", pi, MyFrmVEPROMS, (selectedSlave)); // "true tell export to convert ROs and Transitions to text
dlg.DocReplace = frm.DocReplace; // this tells approval to prepare an export file with resolved transitions and ROs, word sections are saved with resolved ROs during approval PDF creation and saved in DocReplace dlg.DocReplace = frm.DocReplace; // this tells approval to prepare an export file with resolved transitions and ROs, word sections are saved with resolved ROs during approval PDF creation and saved in DocReplace
System.Xml.XmlDocument xd = new System.Xml.XmlDocument(); System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
dlg.ExportItem(xd, pi, "procedure"); dlg.ExportItem(xd, pi, "procedure");
@@ -1328,33 +1319,25 @@ namespace VEPROMS
version.ApprovedXML = xd.OuterXml; version.ApprovedXML = xd.OuterXml;
version.Save(); version.Save();
dlg.Dispose(); dlg.Dispose();
UpdateProcedureConfig(pi, ap.RevNumber, ap.RevDate, now, selectedSlave); UpdateProcedureConfig(pi, ap.RevNumber, ap.RevDate, DateTime.Now, selectedSlave);
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History // Clear the change bar override for this procedure:
ChangeBarAuditHistory.AddAudit(pi.ItemID, $"{(selectedSlave > 0 ? $"(Unit {pi.MyDocVersion.UnitNames[selectedSlave - 1]}) " : "")}Approved by ({VlnSettings.UserID}) on ({now})", now, VlnSettings.UserID, selectedSlave); pi.ClearChangeBarOverrides();
// Clear the change bar override for this procedure:
pi.ClearChangeBarOverrides();
//B2019-140 Change bars do not get refreshed when approval is run. //B2019-140 Change bars do not get refreshed when approval is run.
ProcedureInfo newproc; ProcedureInfo newproc = ItemInfo.ResetProcedure(pi.ItemID);
//// Refresh the StepPanel for the current Procedure //// Refresh the StepPanel for the current Procedure
//// so change bars update //// so change bars update
//// on any open StepPanel //// on any open StepPanel
newproc = ItemInfo.ResetProcedure(pi.ItemID);
//B2026-019 Attempt to prevent an Access Error by utilizing a different Refresh if a Procedure is Open
DisplayTabItem dti = MyFrmVEPROMS.GetTabContainingProcedure(pi.ItemID); DisplayTabItem dti = MyFrmVEPROMS.GetTabContainingProcedure(pi.ItemID);
if (dti != null) if (dti != null)
{ {
if (!dti.MyStepTabPanel.MyStepPanel.ContainsFocus) if (!dti.MyStepTabPanel.MyStepPanel.ContainsFocus)
dti.MyStepTabPanel.MyStepPanel.Focus(); dti.MyStepTabPanel.MyStepPanel.Focus();
dti.MyStepTabPanel.MyStepTabRibbon.RefreshProcedure(); foreach (EditItem eitm in dti.MyStepTabPanel.MyStepPanel.Controls.OfType<EditItem>())
Application.DoEvents(); eitm.ChangeBar = eitm.MyItemInfo.HasChangeBar;
} }
//since in a separate form, need to update the tree view //since in a separate form, need to update the tree view
@@ -1470,34 +1453,19 @@ namespace VEPROMS
{ {
ProcedureConfig pc = procedureInfo.MyConfig as ProcedureConfig; ProcedureConfig pc = procedureInfo.MyConfig as ProcedureConfig;
if (pc == null) return; if (pc == null) return;
pc.SelectedSlave = selectedSlave;
pc.SelectedSlave = selectedSlave;
pc.Print_Rev = revNumber; pc.Print_Rev = revNumber;
//AppRevDate Change //AppRevDate Change
pc.Print_RevDate = revDate.ToString("MM/dd/yyyy"); pc.Print_RevDate = revDate.ToString("MM/dd/yyyy");
pc.Print_ChangeBarDate = dts.ToString("MM/dd/yyyy HH:mm:ss"); //this is needed to set the changebar date for an indeividual unit also pc.Print_ChangeBarDate = dts.ToString("MM/dd/yyyy HH:mm:ss");
using (Item itm = Item.Get(procedureInfo.ItemID)) using (Item itm = Item.Get(procedureInfo.ItemID))
{ {
itm.MyContent.Config = pc.ToString(); itm.MyContent.Config = pc.ToString();
//itm.DTS = dts; //itm.DTS = dts;
itm.UserID = Volian.Base.Library.VlnSettings.UserID; itm.UserID = Volian.Base.Library.VlnSettings.UserID;
itm.Save(); itm.Save();
//C2026-015 set overall change bar date
if (selectedSlave > 0)
{
pc.SelectedSlave = 0;
pc.Print_Rev = revNumber;
pc.Print_RevDate = revDate.ToString("MM/dd/yyyy");
pc.Print_ChangeBarDate = dts.ToString("MM/dd/yyyy HH:mm:ss"); //this is needed to set the changebar date for an indeividual unit also
using (Item itm2 = Item.Get(procedureInfo.ItemID))
{
itm2.MyContent.Config = pc.ToString();
itm2.UserID = Volian.Base.Library.VlnSettings.UserID;
itm2.Save();
}
}
} }
} }
} }
public class RevType public class RevType
@@ -947,16 +947,14 @@ namespace VEPROMS
pi = AddProcedure(xd.DocumentElement, dvi, pi); pi = AddProcedure(xd.DocumentElement, dvi, pi);
GC.Collect(); // need to cleanup memory after importing each procedure due to use of Regular Expressions in processing RO and Transition links GC.Collect(); // need to cleanup memory after importing each procedure due to use of Regular Expressions in processing RO and Transition links
} }
lblImportStatus.Text = "Updating Transitions";
AddTransitions();
FixFloatingFoldouts();
SaveTransitionAndItemContentIDs();
// B2026-034 remove the folders created from un-ziping the import set file - this was done prior to updating transitions
// so if there was an issue deleting these temporay folders and files, the actual importing will be completed
DirectoryInfo di = new DirectoryInfo(PEIPath); DirectoryInfo di = new DirectoryInfo(PEIPath);
DirectoryInfo[] dis = di.GetDirectories(); DirectoryInfo[] dis = di.GetDirectories();
for (int d = 0; d < dis.Length; d++) for (int d = 0; d < dis.Length; d++)
dis[d].Delete(true); dis[d].Delete(true);
lblImportStatus.Text = "Updating Transitions";
AddTransitions();
FixFloatingFoldouts();
SaveTransitionAndItemContentIDs();
return true; return true;
} }
} }
@@ -1620,15 +1618,8 @@ namespace VEPROMS
public void ExportItem(XmlDocument xd, ItemInfo ii, string nodename) public void ExportItem(XmlDocument xd, ItemInfo ii, string nodename)
{ {
//B2026-016 - Fix error pulling Reference Object info into Export XmlElement xe = xd.CreateElement(nodename);
if (ii.MyDocVersion.DocVersionAssociationCount == 0) if (ii.IsProcedure)
{
MessageBox.Show("Prior to Exporting Procedures you must set the Referenced Object Database", "No RO Database set", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
XmlElement xe = xd.CreateElement(nodename);
if (ii.IsProcedure)
{ {
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rodbid", ii.MyDocVersion.DocVersionAssociations[0].MyROFst.MyRODb.RODbID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rodbid", ii.MyDocVersion.DocVersionAssociations[0].MyROFst.MyRODb.RODbID.ToString()));
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rofolderpath", ii.MyDocVersion.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rofolderpath", ii.MyDocVersion.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath));
@@ -145,9 +145,6 @@ namespace VEPROMS
} }
LoadRefreshGroupUsers(); LoadRefreshGroupUsers();
// C2026-004 - messagebox when create group
MessageBox.Show($"{txt} group successfully created.", "Create group", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
private void tvFolders_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) private void tvFolders_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{ {
@@ -190,22 +187,18 @@ namespace VEPROMS
//Add a Member to a Group //Add a Member to a Group
private void addMember_Click(object sender, EventArgs e) private void addMember_Click(object sender, EventArgs e)
{ {
// B2026-007 PROMS Security - don't error when add a user to a group but no group selected int groupIndex = cbGroupSelection.SelectedIndex;
if (lstNonMembers.SelectedValue != null) string selectedUserID = lstNonMembers.SelectedValue.ToString();
{ int selectedUID = UserInfo.GetByUserID(selectedUserID).UID;
int groupIndex = cbGroupSelection.SelectedIndex; GroupInfo gi = myGroupInfoList[groupIndex];
string selectedUserID = lstNonMembers.SelectedValue.ToString(); User selectedUser = User.Get(selectedUID);
int selectedUID = UserInfo.GetByUserID(selectedUserID).UID;
GroupInfo gi = myGroupInfoList[groupIndex];
User selectedUser = User.Get(selectedUID);
Membership.MakeMembership(selectedUser, Group.Get(gi.GID), null, ""); Membership.MakeMembership(selectedUser, Group.Get(gi.GID), null, "");
updateMembershipLists(); updateMembershipLists();
lstNonMembers.SelectedIndex = -1; lstNonMembers.SelectedIndex = -1;
int index = lstMembers.FindString(selectedUserID); int index = lstMembers.FindString(selectedUserID);
lstMembers.SetSelected(index, true); lstMembers.SetSelected(index, true);
}
} }
//Remove a Member From a Group //Remove a Member From a Group
@@ -216,7 +209,7 @@ namespace VEPROMS
MembershipInfo mi = (MembershipInfo)lstMembers.SelectedItem; MembershipInfo mi = (MembershipInfo)lstMembers.SelectedItem;
string selectedUserID = mi.MyUserUserID; string selectedUserID = mi.MyUserUserID;
string msg = "Are you sure you want to remove this Group Member?"; string msg = "Are you sure you want to remove this Group Member?";
if (MessageBox.Show(this, msg, "Confirm Group Member Removal", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) if (MessageBox.Show(this, msg, "Confirm Group Member Removal", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
{ {
if (mi.MyGroup.GroupName == "Administrators" && mi.MyGroup.GroupMemberships.Count(mm => mm.EndDate == null || mm.EndDate == string.Empty) == 1) if (mi.MyGroup.GroupName == "Administrators" && mi.MyGroup.GroupMemberships.Count(mm => mm.EndDate == null || mm.EndDate == string.Empty) == 1)
{ {
@@ -255,7 +248,7 @@ namespace VEPROMS
MessageBox.Show("There are still users who are members of this group. You need to delete all members in order to delete this group.", "Group Has Members", MessageBoxButtons.OK, MessageBoxIcon.Warning); MessageBox.Show("There are still users who are members of this group. You need to delete all members in order to delete this group.", "Group Has Members", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; return;
} }
if (MessageBox.Show("Are you sure you want to delete this group?", "Confirm Deleting Group", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) if (MessageBox.Show("Are you sure you want to delete this group?", "Confirm Deleting Group", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
{ {
Group.Delete(gi.GID); Group.Delete(gi.GID);
LoadRefreshGroupUsers(); LoadRefreshGroupUsers();
@@ -333,7 +326,6 @@ namespace VEPROMS
User u = User.MakeUser("[Enter New UserID]", "", "", "", "", "", "", "", "", "", "", DateTime.Now, ""); User u = User.MakeUser("[Enter New UserID]", "", "", "", "", "", "", "", "", "", "", DateTime.Now, "");
frmManageUser frm = new frmManageUser("add"); frmManageUser frm = new frmManageUser("add");
frm.MyUser = u; frm.MyUser = u;
frm.Text = "Enter New UserID"; //C2026-002 Change Title bar on Add/Edit User
if (frm.ShowDialog(this) == DialogResult.OK) if (frm.ShowDialog(this) == DialogResult.OK)
{ {
u = frm.MyUser; u = frm.MyUser;
@@ -397,7 +389,7 @@ namespace VEPROMS
} }
int nummemberships = ui.UserMemberships.Count(mi => mi.EndDate == null || mi.EndDate == string.Empty); int nummemberships = ui.UserMemberships.Count(mi => mi.EndDate == null || mi.EndDate == string.Empty);
string mem_text = nummemberships > 0 ? "\r\nNote that this will remove all memberships that this user has." : ""; string mem_text = nummemberships > 0 ? "\r\nNote that this will remove all memberships that this user has." : "";
if (MessageBox.Show($"Are you sure you want to delete this user?{mem_text}", "Confirm Deleting User", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) if (MessageBox.Show($"Are you sure you want to delete this user?{mem_text}", "Confirm Deleting User", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
{ {
foreach (MembershipInfo minfo in ui.UserMemberships.Where(mi => mi.EndDate == null || mi.EndDate == string.Empty)) foreach (MembershipInfo minfo in ui.UserMemberships.Where(mi => mi.EndDate == null || mi.EndDate == string.Empty))
{ {
@@ -477,7 +469,7 @@ namespace VEPROMS
{ {
MembershipInfo mi = (MembershipInfo)lstGroups.SelectedItem; MembershipInfo mi = (MembershipInfo)lstGroups.SelectedItem;
string msg = "Are you sure you want to remove this Group Member?"; string msg = "Are you sure you want to remove this Group Member?";
if (MessageBox.Show(this, msg, "Confirm Group Member Removal", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) if (MessageBox.Show(this, msg, "Confirm Group Member Removal", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
{ {
if (mi.MyGroup.GroupName == "Administrators" && mi.MyGroup.GroupMemberships.Count(mm => mm.EndDate == null || mm.EndDate == string.Empty) == 1) if (mi.MyGroup.GroupName == "Administrators" && mi.MyGroup.GroupMemberships.Count(mm => mm.EndDate == null || mm.EndDate == string.Empty) == 1)
{ {
+137 -154
View File
@@ -28,158 +28,142 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.btnOK = new DevComponents.DotNetBar.ButtonX(); this.btnOK = new DevComponents.DotNetBar.ButtonX();
this.btnCancel = new DevComponents.DotNetBar.ButtonX(); this.btnCancel = new DevComponents.DotNetBar.ButtonX();
this.label1 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label();
this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip(); this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip();
this.dateTimeInput1 = new DevComponents.Editors.DateTimeAdv.DateTimeInput(); this.dateTimeInput1 = new DevComponents.Editors.DateTimeAdv.DateTimeInput();
this.btnNow = new DevComponents.DotNetBar.ButtonX(); this.btnNow = new DevComponents.DotNetBar.ButtonX();
this.btnResetToApproved = new DevComponents.DotNetBar.ButtonX(); ((System.ComponentModel.ISupportInitialize)(this.dateTimeInput1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dateTimeInput1)).BeginInit(); this.SuspendLayout();
this.SuspendLayout(); //
// // btnOK
// btnOK //
// this.btnOK.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnOK.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.btnOK.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnOK.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.btnOK.Location = new System.Drawing.Point(18, 111);
this.btnOK.Location = new System.Drawing.Point(18, 111); this.btnOK.Name = "btnOK";
this.btnOK.Name = "btnOK"; this.btnOK.Size = new System.Drawing.Size(64, 23);
this.btnOK.Size = new System.Drawing.Size(64, 23); this.btnOK.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.btnOK.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnOK.TabIndex = 1;
this.btnOK.TabIndex = 1; this.btnOK.Text = "OK";
this.btnOK.Text = "OK"; this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
this.btnOK.Click += new System.EventHandler(this.btnOK_Click); //
// // btnCancel
// btnCancel //
// this.btnCancel.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnCancel.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnCancel.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnCancel.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnCancel.Location = new System.Drawing.Point(179, 111);
this.btnCancel.Location = new System.Drawing.Point(179, 111); this.btnCancel.Name = "btnCancel";
this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(64, 23);
this.btnCancel.Size = new System.Drawing.Size(64, 23); this.btnCancel.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.btnCancel.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnCancel.TabIndex = 2;
this.btnCancel.TabIndex = 2; this.btnCancel.Text = "Cancel";
this.btnCancel.Text = "Cancel"; //
// // label1
// label1 //
// this.label1.AutoSize = true;
this.label1.AutoSize = true; this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label1.Location = new System.Drawing.Point(3, 19);
this.label1.Location = new System.Drawing.Point(3, 19); this.label1.Name = "label1";
this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(229, 15);
this.label1.Size = new System.Drawing.Size(229, 15); this.label1.TabIndex = 3;
this.label1.TabIndex = 3; this.label1.Text = "Show Change Bars on Changes Starting:";
this.label1.Text = "Show Change Bars on Changes Starting:"; //
// // superTooltip1
// superTooltip1 //
// this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray);
this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray); this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F";
this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; //
// // dateTimeInput1
// dateTimeInput1 //
// //
// //
// //
// this.dateTimeInput1.BackgroundStyle.Class = "DateTimeInputBackground";
this.dateTimeInput1.BackgroundStyle.Class = "DateTimeInputBackground"; this.dateTimeInput1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.dateTimeInput1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.dateTimeInput1.ButtonDropDown.Shortcut = DevComponents.DotNetBar.eShortcut.AltDown;
this.dateTimeInput1.ButtonDropDown.Shortcut = DevComponents.DotNetBar.eShortcut.AltDown; this.dateTimeInput1.ButtonDropDown.Visible = true;
this.dateTimeInput1.ButtonDropDown.Visible = true; this.dateTimeInput1.CustomFormat = "MM/dd/yyyy HH:mm:ss";
this.dateTimeInput1.CustomFormat = "MM/dd/yyyy HH:mm:ss"; this.dateTimeInput1.DateTimeSelectorVisibility = DevComponents.Editors.DateTimeAdv.eDateTimeSelectorVisibility.DateSelector;
this.dateTimeInput1.DateTimeSelectorVisibility = DevComponents.Editors.DateTimeAdv.eDateTimeSelectorVisibility.DateSelector; this.dateTimeInput1.Format = DevComponents.Editors.eDateTimePickerFormat.Custom;
this.dateTimeInput1.Format = DevComponents.Editors.eDateTimePickerFormat.Custom; this.dateTimeInput1.IsPopupCalendarOpen = false;
this.dateTimeInput1.IsPopupCalendarOpen = false; this.dateTimeInput1.Location = new System.Drawing.Point(30, 51);
this.dateTimeInput1.Location = new System.Drawing.Point(30, 51); //
// //
// //
// //
// //
// //
// this.dateTimeInput1.MonthCalendar.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.dateTimeInput1.MonthCalendar.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.dateTimeInput1.MonthCalendar.CalendarDimensions = new System.Drawing.Size(1, 1);
this.dateTimeInput1.MonthCalendar.CalendarDimensions = new System.Drawing.Size(1, 1); this.dateTimeInput1.MonthCalendar.ClearButtonVisible = true;
this.dateTimeInput1.MonthCalendar.ClearButtonVisible = true; //
// //
// //
// this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2;
this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2; this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BackColorGradientAngle = 90;
this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BackColorGradientAngle = 90; this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid;
this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BorderTopColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BorderTopColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder; this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BorderTopWidth = 1;
this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.BorderTopWidth = 1; this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.dateTimeInput1.MonthCalendar.CommandsBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.dateTimeInput1.MonthCalendar.DisplayMonth = new System.DateTime(2016, 2, 1, 0, 0, 0, 0);
this.dateTimeInput1.MonthCalendar.DisplayMonth = new System.DateTime(2016, 2, 1, 0, 0, 0, 0); //
// //
// //
// this.dateTimeInput1.MonthCalendar.NavigationBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2;
this.dateTimeInput1.MonthCalendar.NavigationBackgroundStyle.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; this.dateTimeInput1.MonthCalendar.NavigationBackgroundStyle.BackColorGradientAngle = 90;
this.dateTimeInput1.MonthCalendar.NavigationBackgroundStyle.BackColorGradientAngle = 90; this.dateTimeInput1.MonthCalendar.NavigationBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground;
this.dateTimeInput1.MonthCalendar.NavigationBackgroundStyle.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; this.dateTimeInput1.MonthCalendar.NavigationBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.dateTimeInput1.MonthCalendar.NavigationBackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.dateTimeInput1.MonthCalendar.TodayButtonVisible = true;
this.dateTimeInput1.MonthCalendar.TodayButtonVisible = true; this.dateTimeInput1.Name = "dateTimeInput1";
this.dateTimeInput1.Name = "dateTimeInput1"; this.dateTimeInput1.Size = new System.Drawing.Size(146, 20);
this.dateTimeInput1.Size = new System.Drawing.Size(146, 20); this.dateTimeInput1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.dateTimeInput1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.superTooltip1.SetSuperTooltip(this.dateTimeInput1, new DevComponents.DotNetBar.SuperTooltipInfo("Change Bar Start Date", "", "Only the changes made after this date will have change bars.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(138, 67)));
this.superTooltip1.SetSuperTooltip(this.dateTimeInput1, new DevComponents.DotNetBar.SuperTooltipInfo("Change Bar Start Date", "", "Only the changes made after this date will have change bars.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(138, 67))); this.dateTimeInput1.TabIndex = 4;
this.dateTimeInput1.TabIndex = 4; this.dateTimeInput1.TimeSelectorTimeFormat = DevComponents.Editors.DateTimeAdv.eTimeSelectorFormat.Time24H;
this.dateTimeInput1.TimeSelectorTimeFormat = DevComponents.Editors.DateTimeAdv.eTimeSelectorFormat.Time24H; this.dateTimeInput1.TimeSelectorType = DevComponents.Editors.DateTimeAdv.eTimeSelectorType.TouchStyle;
this.dateTimeInput1.TimeSelectorType = DevComponents.Editors.DateTimeAdv.eTimeSelectorType.TouchStyle; //
// // btnNow
// btnNow //
// this.btnNow.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnNow.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.btnNow.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnNow.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.btnNow.Location = new System.Drawing.Point(182, 51);
this.btnNow.Location = new System.Drawing.Point(182, 51); this.btnNow.Name = "btnNow";
this.btnNow.Name = "btnNow"; this.btnNow.Size = new System.Drawing.Size(49, 23);
this.btnNow.Size = new System.Drawing.Size(49, 23); this.btnNow.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.btnNow.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.superTooltip1.SetSuperTooltip(this.btnNow, new DevComponents.DotNetBar.SuperTooltipInfo("Now", "", "This will set the Change Bar Start date to today.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
this.superTooltip1.SetSuperTooltip(this.btnNow, new DevComponents.DotNetBar.SuperTooltipInfo("Now", "", "This will set the Change Bar Start date to today.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.btnNow.TabIndex = 5;
this.btnNow.TabIndex = 5; this.btnNow.Text = "Today";
this.btnNow.Text = "Today"; this.btnNow.Click += new System.EventHandler(this.btnNow_Click);
this.btnNow.Click += new System.EventHandler(this.btnNow_Click); //
// // dlgSetChangeBarStartDate
// btnResetToApproved //
// this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.btnResetToApproved.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.btnResetToApproved.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.ClientSize = new System.Drawing.Size(268, 144);
this.btnResetToApproved.Location = new System.Drawing.Point(30, 77); this.Controls.Add(this.btnNow);
this.btnResetToApproved.Name = "btnResetToApproved"; this.Controls.Add(this.dateTimeInput1);
this.btnResetToApproved.Size = new System.Drawing.Size(201, 23); this.Controls.Add(this.label1);
this.btnResetToApproved.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.Controls.Add(this.btnCancel);
this.btnResetToApproved.TabIndex = 6; this.Controls.Add(this.btnOK);
this.btnResetToApproved.Text = "Reset Change Bar To Approved Date"; this.DoubleBuffered = true;
this.btnResetToApproved.Tooltip = "Reset Change Bar to the last approved date. If no approvals, reset to as if no ch" + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
"ange bar date. After selecting this, press OK to save."; this.MaximizeBox = false;
this.btnResetToApproved.Click += new System.EventHandler(this.btnResetToApproved_Click); this.MinimizeBox = false;
// this.Name = "dlgSetChangeBarStartDate";
// dlgSetChangeBarStartDate this.ShowIcon = false;
// this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.Text = "Change Bar Start Date";
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Load += new System.EventHandler(this.dlgSetChangeBarStartDate_Load);
this.ClientSize = new System.Drawing.Size(268, 144); ((System.ComponentModel.ISupportInitialize)(this.dateTimeInput1)).EndInit();
this.Controls.Add(this.btnResetToApproved); this.ResumeLayout(false);
this.Controls.Add(this.btnNow); this.PerformLayout();
this.Controls.Add(this.dateTimeInput1);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.DoubleBuffered = true;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "dlgSetChangeBarStartDate";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Change Bar Start Date";
this.Load += new System.EventHandler(this.dlgSetChangeBarStartDate_Load);
((System.ComponentModel.ISupportInitialize)(this.dateTimeInput1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
} }
@@ -191,6 +175,5 @@
private DevComponents.DotNetBar.SuperTooltip superTooltip1; private DevComponents.DotNetBar.SuperTooltip superTooltip1;
private DevComponents.Editors.DateTimeAdv.DateTimeInput dateTimeInput1; private DevComponents.Editors.DateTimeAdv.DateTimeInput dateTimeInput1;
private DevComponents.DotNetBar.ButtonX btnNow; private DevComponents.DotNetBar.ButtonX btnNow;
private DevComponents.DotNetBar.ButtonX btnResetToApproved; }
}
} }
@@ -1,25 +1,31 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using DevComponents.DotNetBar;
using DevComponents.DotNetBar.Controls;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Base.Library;
using Volian.Controls.Library;
namespace VEPROMS namespace VEPROMS
{ {
public partial class dlgSetChangeBarStartDate : DevComponents.DotNetBar.Office2007Form public partial class dlgSetChangeBarStartDate : DevComponents.DotNetBar.Office2007Form
{ {
public ProcedureConfig MyProcConfig { get; set; } = null; private ProcedureConfig _MyProcConfig = null;
public ProcedureInfo MyProcInfo { get; set; } = null; public ProcedureConfig MyProcConfig
{
get { return _MyProcConfig; }
set { _MyProcConfig = value; }
}
public dlgSetChangeBarStartDate(ProcedureConfig pc, ProcedureInfo pi) public dlgSetChangeBarStartDate(ProcedureConfig pc)
{ {
InitializeComponent(); InitializeComponent();
MyProcConfig = pc; _MyProcConfig = pc;
MyProcInfo = pi;
} }
private void dlgSetChangeBarStartDate_Load(object sender, EventArgs e) private void dlgSetChangeBarStartDate_Load(object sender, EventArgs e)
@@ -31,7 +37,7 @@ namespace VEPROMS
{ {
cbdt = DateTime.Now.ToString("MM/dd/yyyy") + " " + DateTime.Now.ToString("HH:mm:ss"); cbdt = DateTime.Now.ToString("MM/dd/yyyy") + " " + DateTime.Now.ToString("HH:mm:ss");
dateTimeInput1.Value = DateTime.Parse(cbdt); dateTimeInput1.Value = DateTime.Parse(cbdt);
return; return;
} }
else else
{ {
@@ -66,115 +72,13 @@ namespace VEPROMS
private void btnOK_Click(object sender, EventArgs e) private void btnOK_Click(object sender, EventArgs e)
{ {
MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss");// ("MM/dd/yyyy HH:mm:ss"); MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss");// ("MM/dd/yyyy HH:mm:ss");
}
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Set ChangeBars set to ({dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss")}) by ({VlnSettings.UserID}) on ({DateTime.Now})", DateTime.Now, VlnSettings.UserID, 0);
//CSM C2026-014 if multi-unit, set for each unit
System.Data.DataTable dt = RevisionData.GetRevisionDataByUnit(MyProcInfo.ItemID);
if (RevisionData.HasUnits(dt))
{
//Change the ChangeBarDate for each unit
foreach (DataRow r in dt.Rows)
{
if (!r.IsNull("UnitID"))
{
MyProcConfig.SelectedSlave = Convert.ToInt32(r["UnitID"]);
MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss");
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Set ChangeBars set to ({dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss")}) by ({VlnSettings.UserID}) on ({DateTime.Now}) for (Unit {r["UnitName"]})", DateTime.Now, VlnSettings.UserID, MyProcConfig.SelectedSlave);
}
}
MyProcConfig.SelectedSlave = 0;
}
}
private void btnNow_Click(object sender, EventArgs e) private void btnNow_Click(object sender, EventArgs e)
{ {
dateTimeInput1.Value = DateTime.Now; dateTimeInput1.Value = DateTime.Now;
} }
//C2026-009 Add Option to Reset Change Bar to Last Approved Date/Time }
private void btnResetToApproved_Click(object sender, EventArgs e)
{
System.Data.DataTable dt = RevisionData.GetRevisionDataByUnit(MyProcInfo.ItemID);
if (dt.Rows.Count == 0)
{
//no records, remove
if (MessageBox.Show("There are currently no approvals set. Selecting yes will set ChangeBars to show all changes since the creation of the procedure.\r\nAre you sure you wish to reset ChangeBars?", "Reset ChangeBar Date", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MyProcConfig.Print_ChangeBarDate = "";
DialogResult = DialogResult.OK;
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Reset ChangeBars performed by ({VlnSettings.UserID}) on ({DateTime.Now}). ChangeBars reset to show all changes.", DateTime.Now, VlnSettings.UserID, 0);
Close();
}
}
else if (RevisionData.HasUnits(dt))
{
//any with units
string maxDTS = RevisionData.MaxDTS(dt).ToString("MM/dd/yyyy HH:mm:ss");
//create wording for ChangeBar changes
StringBuilder sb = new StringBuilder();
sb.Append($" The Procedure Viewer Change Bar Date will be set to ({maxDTS}).");
foreach (DataRow r in dt.Rows)
{
if (!r.IsNull("UnitID"))
{
sb.Append($"\r\n The Change Bar Date for Unit ({r["UnitName"]}) will be set to ({Convert.ToDateTime(r["DTS"]):MM/dd/yyyy HH:mm:ss}).");
}
}
sb.Append("\r\n Any Change Bars for Units not listed above will use the Overall/Procedure Viewer Change Bar Date (as these Units have no approvals).");
if (CustomMessageBox.Show($"This will reset ChangeBars to show for changes newer than the last approval.\r\nThis includes the following changes:\r\n{sb.ToString()}\r\n\r\nAre you sure you wish to reset ChangeBars?", "Reset ChangeBar Date", "Yes", "No") == DialogResult.Yes)
{
//Change the overall ChangeBarDate
MyProcConfig.Print_ChangeBarDate = maxDTS;
//Change the ChangeBarDate for each unit
foreach (DataRow r in dt.Rows)
{
if (!r.IsNull("UnitID"))
{
MyProcConfig.SelectedSlave = Convert.ToInt32(r["UnitID"]);
MyProcConfig.Print_ChangeBarDate = Convert.ToDateTime(r["DTS"]).ToString("MM / dd / yyyy HH: mm: ss");
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Reset ChangeBars performed by ({VlnSettings.UserID}) on ({DateTime.Now}). ChangeBars reset to show since last approval ({Convert.ToDateTime(r["DTS"]):MM/dd/yyyy HH:mm:ss}) for (Unit {r["UnitName"]})", DateTime.Now, VlnSettings.UserID, MyProcConfig.SelectedSlave);
}
}
MyProcConfig.SelectedSlave = 0;
DialogResult = DialogResult.OK;
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Reset ChangeBars performed by ({VlnSettings.UserID}) on ({DateTime.Now}). ChangeBars reset to show since last approval ({maxDTS})", DateTime.Now, VlnSettings.UserID, 0);
Close();
}
}
else
{
//no units
string maxDTS = RevisionData.MaxDTS(dt).ToString("MM/dd/yyyy HH:mm:ss");
if (MessageBox.Show($"This will reset ChangeBars to show for changes newer than the last approval ({maxDTS}).\r\nAre you sure you wish to reset ChangeBars?", "Reset ChangeBar Date", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MyProcConfig.Print_ChangeBarDate = maxDTS;
DialogResult = DialogResult.OK;
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Reset ChangeBars performed by ({VlnSettings.UserID}) on ({DateTime.Now}). ChangeBars reset to show since last approval ({maxDTS})", DateTime.Now, VlnSettings.UserID, 0);
Close();
}
}
}
}
} }
+8 -46
View File
@@ -113,8 +113,6 @@
this.lblAdmToolProgressType = new DevComponents.DotNetBar.LabelX(); this.lblAdmToolProgressType = new DevComponents.DotNetBar.LabelX();
this.buttonItem1 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItem1 = new DevComponents.DotNetBar.ButtonItem();
this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip(); this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip();
this.swRegenWordAttmts = new DevComponents.DotNetBar.Controls.SwitchButton();
this.labelX1 = new DevComponents.DotNetBar.LabelX();
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();
this.splitContainer3.Panel1.SuspendLayout(); this.splitContainer3.Panel1.SuspendLayout();
this.splitContainer3.Panel2.SuspendLayout(); this.splitContainer3.Panel2.SuspendLayout();
@@ -904,8 +902,6 @@
// //
// sideNavPanel2 // sideNavPanel2
// //
this.sideNavPanel2.Controls.Add(this.swRegenWordAttmts);
this.sideNavPanel2.Controls.Add(this.labelX1);
this.sideNavPanel2.Controls.Add(this.swRefreshTblsForSrch); this.sideNavPanel2.Controls.Add(this.swRefreshTblsForSrch);
this.sideNavPanel2.Controls.Add(this.lblRefreshTblForSrch); this.sideNavPanel2.Controls.Add(this.lblRefreshTblForSrch);
this.sideNavPanel2.Controls.Add(this.warningBox4); this.sideNavPanel2.Controls.Add(this.warningBox4);
@@ -934,11 +930,11 @@
// //
// //
this.swRefreshTblsForSrch.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.swRefreshTblsForSrch.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.swRefreshTblsForSrch.Location = new System.Drawing.Point(10, 178); this.swRefreshTblsForSrch.Location = new System.Drawing.Point(10, 153);
this.swRefreshTblsForSrch.Name = "swRefreshTblsForSrch"; this.swRefreshTblsForSrch.Name = "swRefreshTblsForSrch";
this.swRefreshTblsForSrch.Size = new System.Drawing.Size(91, 22); this.swRefreshTblsForSrch.Size = new System.Drawing.Size(91, 22);
this.swRefreshTblsForSrch.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.swRefreshTblsForSrch.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.superTooltip1.SetSuperTooltip(this.swRefreshTblsForSrch, new DevComponents.DotNetBar.SuperTooltipInfo("Refesh Tables For Search", "", resources.GetString("swRefreshTblsForSrch.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(300, 125))); this.superTooltip1.SetSuperTooltip(this.swRefreshTblsForSrch, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Word Attachments", "", resources.GetString("swRefreshTblsForSrch.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(300, 200)));
this.swRefreshTblsForSrch.SwitchClickTogglesValue = true; this.swRefreshTblsForSrch.SwitchClickTogglesValue = true;
this.swRefreshTblsForSrch.TabIndex = 32; this.swRefreshTblsForSrch.TabIndex = 32;
this.swRefreshTblsForSrch.Value = true; this.swRefreshTblsForSrch.Value = true;
@@ -953,10 +949,10 @@
// //
this.lblRefreshTblForSrch.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.lblRefreshTblForSrch.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.lblRefreshTblForSrch.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblRefreshTblForSrch.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblRefreshTblForSrch.Location = new System.Drawing.Point(107, 178); this.lblRefreshTblForSrch.Location = new System.Drawing.Point(107, 153);
this.lblRefreshTblForSrch.Name = "lblRefreshTblForSrch"; this.lblRefreshTblForSrch.Name = "lblRefreshTblForSrch";
this.lblRefreshTblForSrch.Size = new System.Drawing.Size(186, 22); this.lblRefreshTblForSrch.Size = new System.Drawing.Size(186, 22);
this.superTooltip1.SetSuperTooltip(this.lblRefreshTblForSrch, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Tables For Search", "", resources.GetString("lblRefreshTblForSrch.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(300, 125))); this.superTooltip1.SetSuperTooltip(this.lblRefreshTblForSrch, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Word Attachments", "", resources.GetString("lblRefreshTblForSrch.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(300, 200)));
this.lblRefreshTblForSrch.TabIndex = 31; this.lblRefreshTblForSrch.TabIndex = 31;
this.lblRefreshTblForSrch.Text = "Refresh Tables For Search"; this.lblRefreshTblForSrch.Text = "Refresh Tables For Search";
// //
@@ -965,7 +961,7 @@
this.warningBox4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); this.warningBox4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249)))));
this.warningBox4.CloseButtonVisible = false; this.warningBox4.CloseButtonVisible = false;
this.warningBox4.Image = ((System.Drawing.Image)(resources.GetObject("warningBox4.Image"))); this.warningBox4.Image = ((System.Drawing.Image)(resources.GetObject("warningBox4.Image")));
this.warningBox4.Location = new System.Drawing.Point(12, 287); this.warningBox4.Location = new System.Drawing.Point(12, 264);
this.warningBox4.Margin = new System.Windows.Forms.Padding(4); this.warningBox4.Margin = new System.Windows.Forms.Padding(4);
this.warningBox4.Name = "warningBox4"; this.warningBox4.Name = "warningBox4";
this.warningBox4.OptionsButtonVisible = false; this.warningBox4.OptionsButtonVisible = false;
@@ -978,7 +974,7 @@
this.warningBox2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); this.warningBox2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249)))));
this.warningBox2.CloseButtonVisible = false; this.warningBox2.CloseButtonVisible = false;
this.warningBox2.Image = ((System.Drawing.Image)(resources.GetObject("warningBox2.Image"))); this.warningBox2.Image = ((System.Drawing.Image)(resources.GetObject("warningBox2.Image")));
this.warningBox2.Location = new System.Drawing.Point(12, 325); this.warningBox2.Location = new System.Drawing.Point(12, 302);
this.warningBox2.Margin = new System.Windows.Forms.Padding(4); this.warningBox2.Margin = new System.Windows.Forms.Padding(4);
this.warningBox2.Name = "warningBox2"; this.warningBox2.Name = "warningBox2";
this.warningBox2.OptionsButtonVisible = false; this.warningBox2.OptionsButtonVisible = false;
@@ -1132,7 +1128,7 @@
// line2 // line2
// //
this.line2.BackColor = System.Drawing.Color.Transparent; this.line2.BackColor = System.Drawing.Color.Transparent;
this.line2.Location = new System.Drawing.Point(4, 260); this.line2.Location = new System.Drawing.Point(4, 237);
this.line2.Name = "line2"; this.line2.Name = "line2";
this.line2.Size = new System.Drawing.Size(281, 12); this.line2.Size = new System.Drawing.Size(281, 12);
this.line2.TabIndex = 20; this.line2.TabIndex = 20;
@@ -1144,7 +1140,7 @@
this.btnRunRepair.Checked = true; this.btnRunRepair.Checked = true;
this.btnRunRepair.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.btnRunRepair.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnRunRepair.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnRunRepair.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnRunRepair.Location = new System.Drawing.Point(5, 221); this.btnRunRepair.Location = new System.Drawing.Point(5, 198);
this.btnRunRepair.Name = "btnRunRepair"; this.btnRunRepair.Name = "btnRunRepair";
this.btnRunRepair.Size = new System.Drawing.Size(280, 23); this.btnRunRepair.Size = new System.Drawing.Size(280, 23);
this.btnRunRepair.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnRunRepair.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
@@ -1307,38 +1303,6 @@
this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray); this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray);
this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F";
// //
// swRegenWordAttmts
//
//
//
//
this.swRegenWordAttmts.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.swRegenWordAttmts.Location = new System.Drawing.Point(10, 150);
this.swRegenWordAttmts.Name = "swRegenWordAttmts";
this.swRegenWordAttmts.Size = new System.Drawing.Size(91, 22);
this.swRegenWordAttmts.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.superTooltip1.SetSuperTooltip(this.swRegenWordAttmts, new DevComponents.DotNetBar.SuperTooltipInfo("Generate Word Attachments", "", resources.GetString("swRegenWordAttmts.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(300, 250)));
this.swRegenWordAttmts.SwitchClickTogglesValue = true;
this.swRegenWordAttmts.TabIndex = 34;
this.swRegenWordAttmts.Value = true;
this.swRegenWordAttmts.ValueObject = "Y";
this.swRegenWordAttmts.ValueChanged += new System.EventHandler(this.swCk_ValueChanged);
//
// labelX1
//
this.labelX1.BackColor = System.Drawing.Color.Transparent;
//
//
//
this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelX1.Location = new System.Drawing.Point(107, 150);
this.labelX1.Name = "labelX1";
this.labelX1.Size = new System.Drawing.Size(186, 22);
this.superTooltip1.SetSuperTooltip(this.labelX1, new DevComponents.DotNetBar.SuperTooltipInfo("Generate Word Attachments", "", resources.GetString("labelX1.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(300, 250)));
this.labelX1.TabIndex = 33;
this.labelX1.Text = "Generate Missing Word Attachments";
//
// frmBatchRefresh // frmBatchRefresh
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -1466,8 +1430,6 @@
private DevComponents.DotNetBar.PanelEx itemPanel2; private DevComponents.DotNetBar.PanelEx itemPanel2;
private DevComponents.DotNetBar.PanelEx itemPanel3; private DevComponents.DotNetBar.PanelEx itemPanel3;
private DevComponents.DotNetBar.ButtonX btnROsNotUsed; private DevComponents.DotNetBar.ButtonX btnROsNotUsed;
private DevComponents.DotNetBar.Controls.SwitchButton swRegenWordAttmts;
private DevComponents.DotNetBar.LabelX labelX1;
} }
} }
+17 -151
View File
@@ -62,8 +62,6 @@ namespace VEPROMS
swRmObsoleteROData.Enabled = false; swRmObsoleteROData.Enabled = false;
swRmOrphanDataRecs.Enabled = false; swRmOrphanDataRecs.Enabled = false;
swRefreshWordAttmts.Enabled = false; swRefreshWordAttmts.Enabled = false;
swRegenWordAttmts.Enabled = false;
swRefreshTblsForSrch.Enabled = false;
swStandardHypenChars.Enabled = false; swStandardHypenChars.Enabled = false;
//if not full admin, disable Purge Change History //if not full admin, disable Purge Change History
@@ -650,111 +648,11 @@ namespace VEPROMS
this.Cursor = Cursors.Default; this.Cursor = Cursors.Default;
} }
private int RegenCounter = 0; // B2022-047 - refresh the Content/Text field for table, i.e. Grid, Data so that search will find text in the Grid
private int RegenTotal = 0; // NOTE that an out of memeory error occurs when having to process alot of tables. A config flag is used on the
private const int TicksToupdate = 300000; //5 minutes(300 seconds). // grid record to flag that this operation has been run. And a message is placed in the result window stating to
// rerun until all tables/text fields are completed.
// C2026-007 - Generate Missing PDFs private void RefreshTablesForSearch()
// regenerates the saved attachment PDFs from the database
// so that this is not needed the next time the procedures are printed. This also forces ROs to be refreshed in the attachments
private void RegenPDFs()
{
this.Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now;
txtProcess.AppendText("Generating missing Word Attachments");
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm")));
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText("Gathering data for Word Attachments that need generated.");
txtProcess.AppendText(Environment.NewLine);
Application.DoEvents();
//get data of missing Docs by Unit that will need regenerated
DataTable dt = Maintenance.GetMissingDocsByUnit();
RegenCounter = 0;
RegenTotal = dt.Rows.Count;
txtProcess.AppendText($"Word Attachments to be generated: {RegenTotal}");
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText($"Note that this will provide updates approximately every {TicksToupdate/60000} minutes. Some attachments may take longer than others due to size/number of pages/number of ROs. If PROMS is in the middle of generating a large attachment, it may delay the update message until generation of that attachment completes (in that case taking more than 5 minutes between updates).");
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine);
txtResults.AppendText($"{RegenTotal} Word Attachments to be generated.");
txtResults.AppendText(Environment.NewLine);
txtResults.AppendText(Environment.NewLine);
//generate as if not debug
int debugstatus = MSWordToPDF.DebugStatus;
MSWordToPDF.DebugStatus = 0;
MSWordToPDF.OverrideColor = Color.Transparent;
Timer timer1 = new Timer();
timer1.Tick += new EventHandler(UpdateRegenProgress);
timer1.Interval = TicksToupdate;
timer1.Start();
foreach (DataRow dr in dt.Rows)
{
//Do Generation
using (Section sect = Section.Get((int)dr["SectionID"]))
{
using (DocumentInfo docInfo = DocumentInfo.Get((int)dr["DocID"]))
{
if (!dr.IsNull("UnitID")) sect.MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = (int)dr["UnitID"];
MSWordToPDF.SetDocPdf(docInfo, sect.MyItemInfo);
}
}
//Increment - message every _ minutes
RegenCounter++;
}
//done with loop - stop timer and destroy it
timer1.Stop();
timer1.Dispose();
//Change DebugStatus Back to what it was
if (debugstatus == 1)
{
MSWordToPDF.DebugStatus = 1;
MSWordToPDF.OverrideColor = Color.Red;
}
else
{
MSWordToPDF.DebugStatus = 0;
MSWordToPDF.OverrideColor = Color.Transparent;
}
//end messaging
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText($"Word Attachments Generated: {RegenTotal}");
txtProcess.AppendText(Environment.NewLine);
txtResults.AppendText(Environment.NewLine);
txtResults.AppendText($"{RegenTotal} Word Attachments generated.");
txtResults.AppendText(Environment.NewLine);
txtResults.AppendText(Environment.NewLine);
txtProcess.AppendText($"Completed: {DateTime.Now:G}");
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine);
Application.DoEvents();
this.Cursor = Cursors.Default;
}
//Outputs the Progress of Regenerating the PDFs every __ minutes
private void UpdateRegenProgress(Object myObject, EventArgs myEventArgs)
{
string progress_str = $"Generated {RegenCounter} of {RegenTotal} ({(decimal)RegenCounter / RegenTotal * 100M:F2}%): {DateTime.Now:G}";
txtProcess.AppendText(progress_str);
txtProcess.AppendText(Environment.NewLine);
txtResults.AppendText(progress_str);
txtResults.AppendText(Environment.NewLine);
}
// B2022-047 - refresh the Content/Text field for table, i.e. Grid, Data so that search will find text in the Grid
// NOTE that an out of memeory error occurs when having to process alot of tables. A config flag is used on the
// grid record to flag that this operation has been run. And a message is placed in the result window stating to
// rerun until all tables/text fields are completed.
private void RefreshTablesForSearch()
{ {
this.Cursor = Cursors.WaitCursor; this.Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
@@ -1036,11 +934,8 @@ namespace VEPROMS
ROFstInfo roFstInfo = dq.DocVersionAssociations[0].MyROFst; ROFstInfo roFstInfo = dq.DocVersionAssociations[0].MyROFst;
string rofstPath = roFstInfo.MyRODb.FolderPath + @"\ro.fst"; string rofstPath = roFstInfo.MyRODb.FolderPath + @"\ro.fst";
//must get id before ROFST gets updated so know what to refresh later //if (!pathExists(rofstPath))
int origfstid = roFstInfo.ROFstID; if (!File.Exists(rofstPath))
//if (!pathExists(rofstPath))
if (!File.Exists(rofstPath))
{ {
ProgressBar.ColorTable = eProgressBarItemColor.Error; ProgressBar.ColorTable = eProgressBarItemColor.Error;
FinalProgressBarMessage = "No existing RO.FST"; FinalProgressBarMessage = "No existing RO.FST";
@@ -1066,29 +961,9 @@ namespace VEPROMS
ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh); ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh);
roFstInfo = dq.DocVersionAssociations[0].MyROFst; roFstInfo = dq.DocVersionAssociations[0].MyROFst;
} }
else if (!dv.ROfstLastCompleted && origfstid == roFstInfo.ROFstID) roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
{ ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, txtProcess);
//Handle issue where load failed without completing update roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
//previous RO FST did not load, get last loaded ID
//if none, use -1 which will check all ROs in the Working Draft
string cfg = dv.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
if (dv.DocVersionAssociations[0]?.MyROFst != null)
{
if (!int.TryParse(ac.ROUpdate_PrevROFSTID, out origfstid))
{
origfstid = -1;
}
}
else
{
origfstid = -1;
}
}
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, txtProcess, roFstInfo, origfstid, roFstInfo.ROFstID);
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
} }
Cursor = Cursors.Default; Cursor = Cursors.Default;
@@ -1339,10 +1214,10 @@ namespace VEPROMS
{ {
if (ProgressBar == null) return; if (ProgressBar == null) return;
ProgressBar.Text = value; ProgressBar.Value = 100;
ProgressBar.Maximum = 100; ProgressBar.Maximum = 100;
ProgressBar.Value = 100; ProgressBar.Text = value;
txtProcess.AppendText(value); txtProcess.AppendText(value);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -1430,8 +1305,7 @@ namespace VEPROMS
DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data"); DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data");
DevComponents.DotNetBar.StepItem siStandardHyphens = new DevComponents.DotNetBar.StepItem("siStandardHyphens", "Standardize Hyphens"); DevComponents.DotNetBar.StepItem siStandardHyphens = new DevComponents.DotNetBar.StepItem("siStandardHyphens", "Standardize Hyphens");
DevComponents.DotNetBar.StepItem siRefreshAttmts = new DevComponents.DotNetBar.StepItem("siRefreshAttmts", "Refresh Word Attachments"); DevComponents.DotNetBar.StepItem siRefreshAttmts = new DevComponents.DotNetBar.StepItem("siRefreshAttmts", "Refresh Word Attachments");
DevComponents.DotNetBar.StepItem siRegenAttmts = new DevComponents.DotNetBar.StepItem("siRegenAttmts", "Regenerate Word Attachments"); DevComponents.DotNetBar.StepItem siRefreshTblsSrchTxt = new DevComponents.DotNetBar.StepItem("siRefreshTblsSrchTxt", "Refresh Tables For Search");
DevComponents.DotNetBar.StepItem siRefreshTblsSrchTxt = new DevComponents.DotNetBar.StepItem("siRefreshTblsSrchTxt", "Refresh Tables For Search");
// this will update/rebuild the progress bar in the bottom panel of Admin Tools // this will update/rebuild the progress bar in the bottom panel of Admin Tools
private void setupProgessSteps1() private void setupProgessSteps1()
{ {
@@ -1449,9 +1323,7 @@ namespace VEPROMS
progressSteps1.Items.Add(siStandardHyphens); progressSteps1.Items.Add(siStandardHyphens);
if (swRefreshWordAttmts.Value) if (swRefreshWordAttmts.Value)
progressSteps1.Items.Add(siRefreshAttmts); progressSteps1.Items.Add(siRefreshAttmts);
if (swRegenWordAttmts.Value) if (swRefreshTblsForSrch.Value)
progressSteps1.Items.Add(siRegenAttmts);
if (swRefreshTblsForSrch.Value)
progressSteps1.Items.Add(siRefreshTblsSrchTxt); progressSteps1.Items.Add(siRefreshTblsSrchTxt);
splitContainer3.Panel2Collapsed = false; splitContainer3.Panel2Collapsed = false;
progressSteps1.Visible = true; progressSteps1.Visible = true;
@@ -1615,13 +1487,7 @@ namespace VEPROMS
DeletePDFs(); // refresh word attachments DeletePDFs(); // refresh word attachments
StepProgress(prgStpIdx, 100); StepProgress(prgStpIdx, 100);
} }
if (swRegenWordAttmts.Value) if (swRefreshTblsForSrch.Value)
{
StepProgress(++prgStpIdx, 50);
RegenPDFs(); // generate missing pdfs
StepProgress(prgStpIdx, 100);
}
if (swRefreshTblsForSrch.Value)
{ {
StepProgress(++prgStpIdx, 50); StepProgress(++prgStpIdx, 50);
RefreshTablesForSearch(); RefreshTablesForSearch();
+96 -104
View File
@@ -117,30 +117,108 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="btnPurgeChange.Tooltip" xml:space="preserve">
<value>Purges all audit information and change history older than the above date.
It is recommended that you perform a database backup before performing this action.
Note after purging the information, this will automatically perform the Index
Maintenance function to realign indexes with the cut down audit data.
Only Full PROMS Administrator Users can perform this action.</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="warningBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F
k11Ik1Ecxv9zouJ2E4TWnR8V5tAppJmYsLnNlaLTxAoiKIQiibpYSmEEmSSa0IVGISMUw7rpE+yiQiuk
/IhROssPyjanpL4udeq29z3nCdcH+Wb1g+fq/zzP+R8Oh+gvPK4kNWujp1IrPek8S5Hy+X9hbXSN9aVC
eq1FwEYN8vk/mWqiDPZwI+NOHbhLj8CdDaK7npLlvnWpO0AKqZV62YgO/GMquDMN0rAevkbqlHvXZdlG
h6Rn8eATu4GJncB0Fvh8HnwPYuGpJ4vcvwZbGYWJrcpPzGXG8ngGtsZFQJOggrS0B9J0MbwNIR9uHqRQ
ee4XPhuVSy814IIB/lk9QkIIanUomFgIzkux0qHB/CUqk+eCtB2jCLEl1M1mLcBSLthKHlQqJaKjw8FZ
Mbi/ENKXEizUKD/f2k9h8jz5mumk2K0F9xUAUgE4K0JUVDji4yLBvflgMyYwlxFL9zSYq6ITa8I3DlNY
wKZ0soVSgFkAXgwuFSEmJhJJiWqwCR3YSCbY2x0QB4zwnFc6W4p+22KxiY4EXiQF74kf6/L5vdi+TYV0
rRpsMB2sPxWsRwvpTTq87QmYOUNHg+HqQlL4ryscbK4UPGD5vu60CWw8G7evbkN7bSykXm0w/FMBew6E
CsXQFQMpaLKezP6OLeDL+8AFM5hLBzaciennKcFXUCgI7o7ENQWSfRcWmmPgPEW5tNJIj8QxM9hkDthY
FthAGlh/SvAPXC7fjOrjmyC+Sl5TsCpfdzYEK92llUbllDiaD3HEDPG9CaLDCGnI9IdEhwnioBHiOwMC
dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N
ud8AKwnMnBpmYFAAAAAASUVORK5CYII=
</value>
</data>
<data name="warningBox6.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F
k11Ik1Ecxv9zouJ2E4TWnR8V5tAppJmYsLnNlaLTxAoiKIQiibpYSmEEmSSa0IVGISMUw7rpE+yiQiuk
/IhROssPyjanpL4udeq29z3nCdcH+Wb1g+fq/zzP+R8Oh+gvPK4kNWujp1IrPek8S5Hy+X9hbXSN9aVC
eq1FwEYN8vk/mWqiDPZwI+NOHbhLj8CdDaK7npLlvnWpO0AKqZV62YgO/GMquDMN0rAevkbqlHvXZdlG
h6Rn8eATu4GJncB0Fvh8HnwPYuGpJ4vcvwZbGYWJrcpPzGXG8ngGtsZFQJOggrS0B9J0MbwNIR9uHqRQ
ee4XPhuVSy814IIB/lk9QkIIanUomFgIzkux0qHB/CUqk+eCtB2jCLEl1M1mLcBSLthKHlQqJaKjw8FZ
Mbi/ENKXEizUKD/f2k9h8jz5mumk2K0F9xUAUgE4K0JUVDji4yLBvflgMyYwlxFL9zSYq6ITa8I3DlNY
wKZ0soVSgFkAXgwuFSEmJhJJiWqwCR3YSCbY2x0QB4zwnFc6W4p+22KxiY4EXiQF74kf6/L5vdi+TYV0
rRpsMB2sPxWsRwvpTTq87QmYOUNHg+HqQlL4ryscbK4UPGD5vu60CWw8G7evbkN7bSykXm0w/FMBew6E
CsXQFQMpaLKezP6OLeDL+8AFM5hLBzaciennKcFXUCgI7o7ENQWSfRcWmmPgPEW5tNJIj8QxM9hkDthY
FthAGlh/SvAPXC7fjOrjmyC+Sl5TsCpfdzYEK92llUbllDiaD3HEDPG9CaLDCGnI9IdEhwnioBHiOwMC
dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N
ud8AKwnMnBpmYFAAAAAASUVORK5CYII=
</value>
</data>
<data name="btnIndexMaint.Tooltip" xml:space="preserve">
<value>This will perform Index Maintenance to realign indexes to optimize performance.
This function will cause no change to data or records in PROMS.
It should however be performed when other users are not in PROMS, as it could
cause slowdown or errors for other users while it is running.</value>
</data>
<metadata name="superTooltip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="superTooltip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<data name="swRegenWordAttmts.SuperTooltip" xml:space="preserve"> <data name="swDeleteFolder.SuperTooltip" xml:space="preserve">
<value>When Word attachments are modified and saved, PROMS will create a PDF of the attachment contents and save it in the database. When this is done, all of the RO references are resolved as well as pagination of the attachment. This speeds up the overall printing of the procedure in that PROMS simply inserts the attachment contents. Certain actions like loading a new RO.FST require that these PDFs be regenerated which is normally done at print time. <value>This allows the user to remove folders and sub folders as well as their contents.
Be sure a current backup of the database exists prior performing this function.
It is recommended that this be done during off hours.
This function will generate (and save) any missing saved attachment PDFs stored in the database (not the PDFs of the entire procedure that you had previous printed). This will cause printing to be faster when you print after this as the PDFs will be pre-genrated in those cases (and thus not require regeneration unless changes were made to the Word Sections or ROs after running this).
</value> </value>
</data> </data>
<data name="labelX1.SuperTooltip" xml:space="preserve"> <data name="labelX13.SuperTooltip" xml:space="preserve">
<value>When Word attachments are modified and saved, PROMS will create a PDF of the attachment contents and save it in the database. When this is done, all of the RO references are resolved as well as pagination of the attachment. This speeds up the overall printing of the procedure in that PROMS simply inserts the attachment contents. Certain actions like loading a new RO.FST require that these PDFs be regenerated which is normally done at print time. <value>This allows the user to remove folders and sub folders as well as their contents.
Be sure a current backup of the database exists prior performing this function.
It is recommended that this be done during off hours.
This function will generate (and save) any missing saved attachment PDFs stored in the database (not the PDFs of the entire procedure that you had previous printed). This will cause printing to be faster when you print after this as the PDFs will be pre-genrated in those cases (and thus not require regeneration unless changes were made to the Word Sections or ROs after running this).
</value> </value>
</data>
<data name="swDeleteAnnotations.SuperTooltip" xml:space="preserve">
<value>This function will allow the user to remove annotations from the selected working drafts.
Be sure a current backup of the database exists prior to running this function.
If more than one working draft is selected, it is recommended that this be performed during off hours.</value>
</data>
<data name="labelX14.SuperTooltip" xml:space="preserve">
<value>This function will allow the user to remove annotations from the selected working drafts.
Be sure a current backup of the database exists prior to running this function.
If more than one working draft is selected, it is recommended that this be performed during off hours.</value>
</data>
<data name="btnDeleteItems.SuperTooltip" xml:space="preserve">
<value>This will allow for the deletion of groups of annotations and allow for deleting entire folders within PROMS. Use the tree nodes to select which items to delete.
Click on the on/off switches to turn on/off each tool.
Note that only one of these tools can be run at a time.</value>
</data> </data>
<data name="swRefreshTblsForSrch.SuperTooltip" xml:space="preserve"> <data name="swRefreshTblsForSrch.SuperTooltip" xml:space="preserve">
<value>To allow for a quicker search of the contents within a PROMS Step editor table, a text version of the table is stored separately. If the PROMS Search function is not finding something in a table, this tool will refresh the content of that separately stored table text. Another search should then be performed for the content that was not originally found. <value>When Word attachments are modified and saved, PROMS will create a PDF of the attachment contents and save it in the database. When this is done, all the of the RO references are resolved as well as pagination of the attachment. This speeds up the overall printing of the procedure in that PROMS simply inserts the attachment contents.
This function will remove all of the saved attachment PDFS stored in the database (not the PDFs of the entire procedure that you had previous printed). This will force PROMS to regenerate (and save) the word attachment PDFs the next time the procedure is printed.
</value> </value>
</data> </data>
<data name="lblRefreshTblForSrch.SuperTooltip" xml:space="preserve"> <data name="lblRefreshTblForSrch.SuperTooltip" xml:space="preserve">
<value>To allow for a quicker search of the contents within a PROMS Step editor table, a text version of the table is stored separately. If the PROMS Search function is not finding something in a table, this tool will refresh the content of that separately stored table text. Another search should then be performed for the content that was not originally found. <value>When Word attachments are modified and saved, PROMS will create a PDF of the attachment contents and save it in the database. When this is done, all the of the RO references are resolved as well as pagination of the attachment. This speeds up the overall printing of the procedure in that PROMS simply inserts the attachment contents.
This function will remove all of the saved attachment PDFS stored in the database (not the PDFs of the entire procedure that you had previous printed). This will force PROMS to regenerate (and save) the word attachment PDFs the next time the procedure is printed.
</value> </value>
</data> </data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="warningBox4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="warningBox4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F
@@ -183,7 +261,7 @@ RO paths, ROFST versions, and the contents of RO figures are stored in the datab
Be sure a current backup exists prior to running this function!!</value> Be sure a current backup exists prior to running this function!!</value>
</data> </data>
<data name="swRefreshWordAttmts.SuperTooltip" xml:space="preserve"> <data name="swRefreshWordAttmts.SuperTooltip" xml:space="preserve">
<value>When Word attachments are modified and saved, PROMS will create a PDF of the attachment contents and save it in the database. When this is done, all of the RO references are resolved as well as pagination of the attachment. This speeds up the overall printing of the procedure in that PROMS simply inserts the attachment contents. <value>When Word attachments are modified and saved, PROMS will create a PDF of the attachment contents and save it in the database. When this is done, all the of the RO references are resolved as well as pagination of the attachment. This speeds up the overall printing of the procedure in that PROMS simply inserts the attachment contents.
This function will remove all of the saved attachment PDFS stored in the database (not the PDFs of the entire procedure that you had previous printed). This will force PROMS to regenerate (and save) the word attachment PDFs the next time the procedure is printed. This function will remove all of the saved attachment PDFS stored in the database (not the PDFs of the entire procedure that you had previous printed). This will force PROMS to regenerate (and save) the word attachment PDFs the next time the procedure is printed.
</value> </value>
@@ -202,9 +280,9 @@ RO paths, ROFST versions, and the contents of RO figures are stored in the datab
Be sure a current backup exists prior to running this function!!</value> Be sure a current backup exists prior to running this function!!</value>
</data> </data>
<data name="labelX5.SuperTooltip" xml:space="preserve"> <data name="labelX5.SuperTooltip" xml:space="preserve">
<value>When Word attachments are modified and saved, PROMS will create a PDF of the attachment contents and save it in the database. When this is done, all of the RO references are resolved as well as pagination of the attachment. This speeds up the overall printing of the procedure in that PROMS simply inserts the attachment contents. <value>When Word attachments are modified and saved, PROMS will create a PDF of the attachment contents and save it in the database. When this is done, all the of the RO references are resolved as well as pagination of the attachment. This speeds up the overall printing of the procedure in that PROMS simply inserts the attachment contents.
This function will remove all of the saved attachment PDFs stored in the database (not the PDFs of the entire procedure that you had previous printed). This will force PROMS to regenerate (and save) the word attachment PDFs the next time the procedure is printed. This function will remove all of the saved attachment PDFS stored in the database (not the PDFs of the entire procedure that you had previous printed). This will force PROMS to regenerate (and save) the word attachment PDFs the next time the procedure is printed.
</value> </value>
</data> </data>
<data name="labelX9.SuperTooltip" xml:space="preserve"> <data name="labelX9.SuperTooltip" xml:space="preserve">
@@ -224,71 +302,24 @@ Should an item become orphaned (disconnected) from the rest of the data, it will
Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool removes any orphaned items from the database. Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool removes any orphaned items from the database.
</value> </value>
</data>
<data name="btnPurgeChange.Tooltip" xml:space="preserve">
<value>Purges all audit information and change history older than the above date.
It is recommended that you perform a database backup before performing this action.
Note after purging the information, this will automatically perform the Index
Maintenance function to realign indexes with the cut down audit data.
Only Full PROMS Administrator Users can perform this action.</value>
</data>
<data name="warningBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F
k11Ik1Ecxv9zouJ2E4TWnR8V5tAppJmYsLnNlaLTxAoiKIQiibpYSmEEmSSa0IVGISMUw7rpE+yiQiuk
/IhROssPyjanpL4udeq29z3nCdcH+Wb1g+fq/zzP+R8Oh+gvPK4kNWujp1IrPek8S5Hy+X9hbXSN9aVC
eq1FwEYN8vk/mWqiDPZwI+NOHbhLj8CdDaK7npLlvnWpO0AKqZV62YgO/GMquDMN0rAevkbqlHvXZdlG
h6Rn8eATu4GJncB0Fvh8HnwPYuGpJ4vcvwZbGYWJrcpPzGXG8ngGtsZFQJOggrS0B9J0MbwNIR9uHqRQ
ee4XPhuVSy814IIB/lk9QkIIanUomFgIzkux0qHB/CUqk+eCtB2jCLEl1M1mLcBSLthKHlQqJaKjw8FZ
Mbi/ENKXEizUKD/f2k9h8jz5mumk2K0F9xUAUgE4K0JUVDji4yLBvflgMyYwlxFL9zSYq6ITa8I3DlNY
wKZ0soVSgFkAXgwuFSEmJhJJiWqwCR3YSCbY2x0QB4zwnFc6W4p+22KxiY4EXiQF74kf6/L5vdi+TYV0
rRpsMB2sPxWsRwvpTTq87QmYOUNHg+HqQlL4ryscbK4UPGD5vu60CWw8G7evbkN7bSykXm0w/FMBew6E
CsXQFQMpaLKezP6OLeDL+8AFM5hLBzaciennKcFXUCgI7o7ENQWSfRcWmmPgPEW5tNJIj8QxM9hkDthY
FthAGlh/SvAPXC7fjOrjmyC+Sl5TsCpfdzYEK92llUbllDiaD3HEDPG9CaLDCGnI9IdEhwnioBHiOwMC
dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N
ud8AKwnMnBpmYFAAAAAASUVORK5CYII=
</value>
</data>
<data name="warningBox6.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F
k11Ik1Ecxv9zouJ2E4TWnR8V5tAppJmYsLnNlaLTxAoiKIQiibpYSmEEmSSa0IVGISMUw7rpE+yiQiuk
/IhROssPyjanpL4udeq29z3nCdcH+Wb1g+fq/zzP+R8Oh+gvPK4kNWujp1IrPek8S5Hy+X9hbXSN9aVC
eq1FwEYN8vk/mWqiDPZwI+NOHbhLj8CdDaK7npLlvnWpO0AKqZV62YgO/GMquDMN0rAevkbqlHvXZdlG
h6Rn8eATu4GJncB0Fvh8HnwPYuGpJ4vcvwZbGYWJrcpPzGXG8ngGtsZFQJOggrS0B9J0MbwNIR9uHqRQ
ee4XPhuVSy814IIB/lk9QkIIanUomFgIzkux0qHB/CUqk+eCtB2jCLEl1M1mLcBSLthKHlQqJaKjw8FZ
Mbi/ENKXEizUKD/f2k9h8jz5mumk2K0F9xUAUgE4K0JUVDji4yLBvflgMyYwlxFL9zSYq6ITa8I3DlNY
wKZ0soVSgFkAXgwuFSEmJhJJiWqwCR3YSCbY2x0QB4zwnFc6W4p+22KxiY4EXiQF74kf6/L5vdi+TYV0
rRpsMB2sPxWsRwvpTTq87QmYOUNHg+HqQlL4ryscbK4UPGD5vu60CWw8G7evbkN7bSykXm0w/FMBew6E
CsXQFQMpaLKezP6OLeDL+8AFM5hLBzaciennKcFXUCgI7o7ENQWSfRcWmmPgPEW5tNJIj8QxM9hkDthY
FthAGlh/SvAPXC7fjOrjmyC+Sl5TsCpfdzYEK92llUbllDiaD3HEDPG9CaLDCGnI9IdEhwnioBHiOwMC
dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N
ud8AKwnMnBpmYFAAAAAASUVORK5CYII=
</value>
</data>
<data name="btnIndexMaint.Tooltip" xml:space="preserve">
<value>This will perform Index Maintenance to realign indexes to optimize performance.
This function will cause no change to data or records in PROMS.
It should however be performed when other users are not in PROMS, as it could
cause slowdown or errors for other users while it is running.</value>
</data> </data>
<data name="swCheckROLinks.SuperTooltip" xml:space="preserve"> <data name="swCheckROLinks.SuperTooltip" xml:space="preserve">
<value>This allows the user to check referenced object links in procedure step data for multiple working drafts in a batch mode. <value>This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode.
Bad referenced object links will be identified with a Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation.
Be sure a current backup of the database exists prior to performing this function. Be sure a current backup of the database exists prior performing this function.
It is recommended that this be done during off hours. It is recommended that this be done during off hours.
</value> </value>
</data> </data>
<data name="labelX12.SuperTooltip" xml:space="preserve"> <data name="labelX12.SuperTooltip" xml:space="preserve">
<value>This allows the user to check referenced object links in procedure step data for multiple working drafts in a batch mode. <value>This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode.
Bad referenced object links will be identified with a Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation.
Be sure a current backup of the database exists prior to performing this function. Be sure a current backup of the database exists prior performing this function.
It is recommended that this be done during off hours. It is recommended that this be done during off hours.
</value> </value>
@@ -356,45 +387,6 @@ If more than one procedure is selected, it is recommended that this be performed
dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N
ud8AKwnMnBpmYFAAAAAASUVORK5CYII= ud8AKwnMnBpmYFAAAAAASUVORK5CYII=
</value> </value>
</data>
<data name="swDeleteFolder.SuperTooltip" xml:space="preserve">
<value>This allows the user to remove folders and sub folders as well as their contents.
Be sure a current backup of the database exists prior performing this function.
It is recommended that this be done during off hours.
</value>
</data>
<data name="labelX13.SuperTooltip" xml:space="preserve">
<value>This allows the user to remove folders and sub folders as well as their contents.
Be sure a current backup of the database exists prior performing this function.
It is recommended that this be done during off hours.
</value>
</data>
<data name="swDeleteAnnotations.SuperTooltip" xml:space="preserve">
<value>This function will allow the user to remove annotations from the selected working drafts.
Be sure a current backup of the database exists prior to running this function.
If more than one working draft is selected, it is recommended that this be performed during off hours.</value>
</data>
<data name="labelX14.SuperTooltip" xml:space="preserve">
<value>This function will allow the user to remove annotations from the selected working drafts.
Be sure a current backup of the database exists prior to running this function.
If more than one working draft is selected, it is recommended that this be performed during off hours.</value>
</data>
<data name="btnDeleteItems.SuperTooltip" xml:space="preserve">
<value>This will allow for the deletion of groups of annotations and allow for deleting entire folders within PROMS. Use the tree nodes to select which items to delete.
Click on the on/off switches to turn on/off each tool.
Note that only one of these tools can be run at a time.</value>
</data> </data>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>25</value> <value>25</value>
+1 -21
View File
@@ -20,27 +20,7 @@ namespace VEPROMS
_MyUser = value; _MyUser = value;
SimpleUser su = new SimpleUser(_MyUser); SimpleUser su = new SimpleUser(_MyUser);
pgUser.SelectedObject = su; pgUser.SelectedObject = su;
this.Text = string.Format("{0} ({1} {2}) Information",su.UserID,su.FirstName,su.LastName);
//C2026-002 Change Title bar on Add/Edit User
string tmp;
if (!string.IsNullOrEmpty(su.FirstName) && !string.IsNullOrEmpty(su.LastName))
{
tmp = $"{su.UserID} ({su.FirstName} {su.LastName}) Information";
}
else if (!string.IsNullOrEmpty(su.LastName))
{
tmp = $"{su.UserID} ({su.LastName}) Information";
}
else if (!string.IsNullOrEmpty(su.FirstName))
{
tmp = $"{su.UserID} ({su.FirstName}) Information";
}
else
{
tmp = $"{su.UserID} Information";
}
this.Text = tmp;
} }
} }
private string _Mode; private string _Mode;
@@ -678,7 +678,7 @@ namespace VEPROMS
// to check that there are enough docstyles to map the selected type of section. // to check that there are enough docstyles to map the selected type of section.
PlantFormat pf = _SectionConfig.MyFormat != null ? _SectionConfig.MyFormat.PlantFormat : _SectionConfig.MyDefaultFormat.PlantFormat; PlantFormat pf = _SectionConfig.MyFormat != null ? _SectionConfig.MyFormat.PlantFormat : _SectionConfig.MyDefaultFormat.PlantFormat;
if (!_Initializing && ppCmbxFormat.SelectedIndex >= 0) if (!_Initializing && ppCmbxFormat.SelectedIndex >= 0)
pf = ((FormatInfo) ppCmbxFormat.SelectedItem).PlantFormat; pf = FormatInfoList.SortedFormatInfoList[ppCmbxFormat.SelectedIndex].PlantFormat;
else if (!_Initializing) // if the format was changed, it may have been set to default. else if (!_Initializing) // if the format was changed, it may have been set to default.
pf = _SectionConfig.MyDefaultFormat.PlantFormat; pf = _SectionConfig.MyDefaultFormat.PlantFormat;
_Initializing = true; _Initializing = true;
+13 -2
View File
@@ -83,6 +83,7 @@ namespace VEPROMS
this.lblUser = new DevComponents.DotNetBar.LabelItem(); this.lblUser = new DevComponents.DotNetBar.LabelItem();
this.lblLastChange = new DevComponents.DotNetBar.LabelItem(); this.lblLastChange = new DevComponents.DotNetBar.LabelItem();
this.btnStepRTF = new DevComponents.DotNetBar.ButtonItem(); this.btnStepRTF = new DevComponents.DotNetBar.ButtonItem();
this.btnFixMSWord = new DevComponents.DotNetBar.ButtonItem();
this.epAnnotations = new DevComponents.DotNetBar.ExpandablePanel(); this.epAnnotations = new DevComponents.DotNetBar.ExpandablePanel();
this.ctrlAnnotationDetails = new Volian.Controls.Library.AnnotationDetails(); this.ctrlAnnotationDetails = new Volian.Controls.Library.AnnotationDetails();
this.btnAnnoDetailsPushPin = new DevComponents.DotNetBar.ButtonX(); this.btnAnnoDetailsPushPin = new DevComponents.DotNetBar.ButtonX();
@@ -540,7 +541,8 @@ namespace VEPROMS
this.btnEditItem, this.btnEditItem,
this.lblUser, this.lblUser,
this.lblLastChange, this.lblLastChange,
this.btnStepRTF}); this.btnStepRTF,
this.btnFixMSWord});
this.bottomBar.Location = new System.Drawing.Point(5, 573); this.bottomBar.Location = new System.Drawing.Point(5, 573);
this.bottomBar.Name = "bottomBar"; this.bottomBar.Name = "bottomBar";
this.bottomBar.Size = new System.Drawing.Size(1185, 25); this.bottomBar.Size = new System.Drawing.Size(1185, 25);
@@ -726,6 +728,14 @@ namespace VEPROMS
this.btnStepRTF.Text = "Step RTF"; this.btnStepRTF.Text = "Step RTF";
this.btnStepRTF.Click += new System.EventHandler(this.btnStepRTF_Click); this.btnStepRTF.Click += new System.EventHandler(this.btnStepRTF_Click);
// //
// btnFixMSWord
//
this.btnFixMSWord.ForeColor = System.Drawing.Color.Black;
this.btnFixMSWord.Name = "btnFixMSWord";
this.btnFixMSWord.Text = "Fix Symbol Fonts";
this.btnFixMSWord.Visible = false;
this.btnFixMSWord.Click += new System.EventHandler(this.btnFixMSWord_Click);
//
// epAnnotations // epAnnotations
// //
this.epAnnotations.CanvasColor = System.Drawing.SystemColors.Control; this.epAnnotations.CanvasColor = System.Drawing.SystemColors.Control;
@@ -867,7 +877,7 @@ namespace VEPROMS
this.infoPanel.ExpandOnTitleClick = true; this.infoPanel.ExpandOnTitleClick = true;
this.infoPanel.Location = new System.Drawing.Point(614, 57); this.infoPanel.Location = new System.Drawing.Point(614, 57);
this.infoPanel.Name = "infoPanel"; this.infoPanel.Name = "infoPanel";
this.infoPanel.Size = new System.Drawing.Size(300, 490); this.infoPanel.Size = new System.Drawing.Size(230, 490);
this.infoPanel.Style.Alignment = System.Drawing.StringAlignment.Center; this.infoPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
this.infoPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; this.infoPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground;
this.infoPanel.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; this.infoPanel.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2;
@@ -1765,6 +1775,7 @@ namespace VEPROMS
private DevComponents.DotNetBar.ButtonItem btnItemInfo; private DevComponents.DotNetBar.ButtonItem btnItemInfo;
private DevComponents.DotNetBar.ButtonItem btnFilter; private DevComponents.DotNetBar.ButtonItem btnFilter;
private DevComponents.DotNetBar.TextBoxItem txtFilter; private DevComponents.DotNetBar.TextBoxItem txtFilter;
private DevComponents.DotNetBar.ButtonItem btnFixMSWord;
private Volian.Controls.Library.DisplayBookMarks displayBookMarks; private Volian.Controls.Library.DisplayBookMarks displayBookMarks;
//private DevComponents.DotNetBar.LabelItem lblLocked; //private DevComponents.DotNetBar.LabelItem lblLocked;
private DevComponents.DotNetBar.ButtonItem btnShortCuts; private DevComponents.DotNetBar.ButtonItem btnShortCuts;
+55 -114
View File
@@ -234,7 +234,7 @@ namespace VEPROMS
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer
SetupFolder(MyDocVersion.FolderID); SetupFolder(MyDocVersion.FolderID);
tc.MySessionInfo = MyParent.MySessionInfo; tc.MySessionInfo = MyParent.MySessionInfo;
displaySearch1.TopFolderID = myDocVersion.FolderID; displaySearch1.TopFolderID = myDocVersion.FolderID;
SelectedDVI = myDocVersion; SelectedDVI = myDocVersion;
@@ -245,17 +245,13 @@ namespace VEPROMS
displayBookMarks.SetupBookMarks(); // setup bookmarks in the child window displayBookMarks.SetupBookMarks(); // setup bookmarks in the child window
tc.MyCopyStep = myParent.tc.MyCopyStep; // copy the copystep info to the child window tc.MyCopyStep = myParent.tc.MyCopyStep; // copy the copystep info to the child window
//B2026 - 048 View Only Mode freezes PROMS if last tab closed
tc.EnableDisableStepProperties -= EnableDisableStepProperties;
tc.EnableDisableStepProperties += new StepTabRibbonEvent(EnableDisableStepProperties);
(tv.Nodes[0] as VETreeNode).InChildWindow = true; // tells us this folder's tree nodes are in the child window (tv.Nodes[0] as VETreeNode).InChildWindow = true; // tells us this folder's tree nodes are in the child window
} }
public void OpenItem(ItemInfo myItemInfo) public void OpenItem(ItemInfo myItemInfo)
{ {
tc.OpenItem(myItemInfo); tc.OpenItem(myItemInfo);
} }
public void RefreshItem(ItemInfo myItemInfo) public void RefreshItem(ItemInfo myItemInfo)
@@ -356,10 +352,9 @@ namespace VEPROMS
displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer
bottomProgBar.ValueChanged += new EventHandler(bottomProgBar_ValueChanged); bottomProgBar.ValueChanged += new EventHandler(bottomProgBar_ValueChanged);
tc.EnableDisableStepProperties += new StepTabRibbonEvent(EnableDisableStepProperties);
// When creating an XY Plot, a System.Drawing.Graphics is needed and it requires a form. Use the main form. // When creating an XY Plot, a System.Drawing.Graphics is needed and it requires a form. Use the main form.
if (VlnSettings.DebugMode) if (VlnSettings.DebugMode)
{ {
MSWordToPDF.DebugStatus = 1; MSWordToPDF.DebugStatus = 1;
MSWordToPDF.OverrideColor = Color.Red; MSWordToPDF.OverrideColor = Color.Red;
@@ -622,7 +617,7 @@ namespace VEPROMS
ProcedureConfig pc = pi.MyConfig as ProcedureConfig; ProcedureConfig pc = pi.MyConfig as ProcedureConfig;
if (pc == null) return; if (pc == null) return;
dlgSetChangeBarStartDate cbdDlg = new dlgSetChangeBarStartDate(pc, pi); dlgSetChangeBarStartDate cbdDlg = new dlgSetChangeBarStartDate(pc);
if (cbdDlg.ShowDialog() == DialogResult.OK) if (cbdDlg.ShowDialog() == DialogResult.OK)
{ {
using (Item itm = Item.Get(pi.ItemID)) using (Item itm = Item.Get(pi.ItemID))
@@ -631,26 +626,21 @@ namespace VEPROMS
itm.UserID = Volian.Base.Library.VlnSettings.UserID; itm.UserID = Volian.Base.Library.VlnSettings.UserID;
itm.Save(); itm.Save();
//B2019-140 Change bars do not get refreshed when approval is run. //B2019-140 Change bars do not get refreshed when approval is run.
// Reset a Procedure and sub items in the cache // Reset a Procedure and sub items in the cache
ProcedureInfo newproc = ItemInfo.ResetProcedure(pi.ItemID); ProcedureInfo newproc = ItemInfo.ResetProcedure(pi.ItemID);
//// Refresh the StepPanel for the current Procedure
//// so change bars update
//// on any open StepPanel
//B2026-019 Attempt to prevent an Access Error by utilizing a different Refresh if a Procedure is Open
DisplayTabItem dti = GetTabContainingProcedure(pi.ItemID);
if (dti != null)
{
//// Refresh the StepPanel for the current Procedure
//// so change bars update
//// on any open StepPanel
DisplayTabItem dti = GetTabContainingProcedure(pi.ItemID);
if (dti != null)
{
if (!dti.MyStepTabPanel.MyStepPanel.ContainsFocus) if (!dti.MyStepTabPanel.MyStepPanel.ContainsFocus)
dti.MyStepTabPanel.MyStepPanel.Focus(); dti.MyStepTabPanel.MyStepPanel.Focus();
foreach (EditItem eitm in dti.MyStepTabPanel.MyStepPanel.Controls.OfType<EditItem>()) foreach (EditItem eitm in dti.MyStepTabPanel.MyStepPanel.Controls.OfType<EditItem>())
{
eitm.ChangeBar = eitm.MyItemInfo.HasChangeBar; eitm.ChangeBar = eitm.MyItemInfo.HasChangeBar;
}
} }
} }
} }
@@ -969,18 +959,7 @@ namespace VEPROMS
{ {
pnl.ApplDisplayMode = displayApplicability.ViewMode; pnl.ApplDisplayMode = displayApplicability.ViewMode;
displayHistory.ApplDisplayMode = pnl.ApplDisplayMode; displayHistory.ApplDisplayMode = pnl.ApplDisplayMode;
//C2026-021 Expand Functionality of Viewing Mode
if (pnl.ApplDisplayMode > 0 && pnl.VwMode != E_ViewMode.View)
{
pnl.VwMode = E_ViewMode.View;
EnableDisableStepProperties(sender, new StepTabRibbonEventArgs(tc.SelectedDisplayTabItem.MyItemInfo, 0, pnl.VwMode));
MessageBox.Show("Changing to View Only Mode. Applicability Viewing Mode must be Master to return to Edit Mode. View Mode can be toggled off via the Ribbon->View tab.", "Changing to View Mode", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
pnl.MyStepTabPanel.MyStepTabRibbon.RefreshProcedure();
} }
} }
void tv_ViewPDF(object sender, vlnTreeViewPdfArgs args) void tv_ViewPDF(object sender, vlnTreeViewPdfArgs args)
@@ -1594,13 +1573,13 @@ namespace VEPROMS
} }
else else
{ {
SelectedROFst = myDTP.MyDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst; SelectedROFst = myDTP.MyDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
} }
} }
} }
else if (tc.MyEditItem != null && displayRO.MyROFST != null && tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].ROFstID != displayRO.MyROFST.ROFstID) else if (tc.MyEditItem != null && displayRO.MyROFST != null && tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].ROFstID != displayRO.MyROFST.ROFstID)
{ {
SelectedROFst = tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst; SelectedROFst = tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
} }
// need this to update RO Tree after UpdateRofst (B2015-226) // need this to update RO Tree after UpdateRofst (B2015-226)
@@ -1608,9 +1587,9 @@ namespace VEPROMS
if (displayRO.MyROFST != SelectedROFst) if (displayRO.MyROFST != SelectedROFst)
{ {
displayRO.MyROFST = SelectedROFst; displayRO.MyROFST = SelectedROFst;
// B2023-021: force Load of Step Prop/RO panel RO tree by passing in // B2023-021: force Load of Step Prop/RO panel RO tree by passing in
// true to LoadTree // true to LoadTree
if (!_WeAreExitingPROMS) displayRO.LoadTree(true); displayRO.LoadTree(true);
} }
} }
@@ -2411,10 +2390,9 @@ namespace VEPROMS
tv.MySessionInfo = MySessionInfo; tv.MySessionInfo = MySessionInfo;
tv.MyUserInfo = MyUserInfo; tv.MyUserInfo = MyUserInfo;
StepTabRibbon.MySessionInfo = MySessionInfo; StepTabRibbon.MySessionInfo = MySessionInfo;
displayRO.MySessionInfo = MySessionInfo;
// Initialize Caption with Server name and Database name. // Initialize Caption with Server name and Database name.
SetCaption(tv.TopNode as VETreeNode); SetCaption(tv.TopNode as VETreeNode);
System.Threading.AutoResetEvent autoEvent = new System.Threading.AutoResetEvent(false); System.Threading.AutoResetEvent autoEvent = new System.Threading.AutoResetEvent(false);
//System.Threading.TimerCallback timerDelegate = new System.Threading.TimerCallback(MySessionInfo.PingSession); //System.Threading.TimerCallback timerDelegate = new System.Threading.TimerCallback(MySessionInfo.PingSession);
@@ -4569,17 +4547,8 @@ namespace VEPROMS
SetCaption(tv.SelectedNode as VETreeNode); SetCaption(tv.SelectedNode as VETreeNode);
displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem; displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem;
//C2026-008 Re-Architect RO.FST to include RO Modification date/time if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0)
// DisplayTab was changed
// need to clear the RTB selected
// without resetting the DVI or FST
// (those will be set manually / individually)
// this will prevent DVI and FST from changing to null then back again
// which will trigger reloads
displayRO.ClearRTB();
if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0)
{ {
displayRO.MyROFST = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst; displayRO.MyROFST = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
} }
@@ -4588,24 +4557,9 @@ namespace VEPROMS
displayRO.MyROFST = null; displayRO.MyROFST = null;
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time // B2022-026 RO Memory reduction coding (Jakes Merge)
// set the DocVersionInfo so that the FST and docversion are in sync // B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures. (Added True for the forceLoad parameter)
SelectedDVI = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion; displayRO.LoadTree(true);
if (displayRO.MyDvi != SelectedDVI)
{
displayRO.MyDvi = SelectedDVI;
}
Application.DoEvents();
// B2022-026 RO Memory reduction coding (Jakes Merge)
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures. (Added True for the forceLoad parameter)
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// if ROFST got updated,
// set the Selected FST so it is in sync
if (!_WeAreExitingPROMS && displayRO.LoadTree(true))
{
SelectedROFst = displayRO.MyROFST;
}
lblUser.Text = tc.SelectedDisplayTabItem.MyUserRole; lblUser.Text = tc.SelectedDisplayTabItem.MyUserRole;
@@ -4669,6 +4623,8 @@ namespace VEPROMS
if (args != null && args.MyEditItem != null && !args.MyEditItem.MyStepPanel.ContainsFocus) if (args != null && args.MyEditItem != null && !args.MyEditItem.MyStepPanel.ContainsFocus)
return; return;
btnFixMSWord.Visible = (args != null && (args.MyItemInfo != null && args.MyEditItem == null));
if (_LastStepRTB != null && !_LastStepRTB.Disposing && !_LastStepRTB.Closed) if (_LastStepRTB != null && !_LastStepRTB.Disposing && !_LastStepRTB.Closed)
_LastStepRTB.EditModeChanged -= new StepRTBEvent(_LastStepRTB_EditModeChanged); _LastStepRTB.EditModeChanged -= new StepRTBEvent(_LastStepRTB_EditModeChanged);
@@ -4806,15 +4762,9 @@ namespace VEPROMS
// B2022-026 RO Memory reduction coding (Jakes Merge) // B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.ProgressBar = bottomProgBar; displayRO.ProgressBar = bottomProgBar;
displayRO.MyRTB = args.MyEditItem.MyStepRTB; displayRO.MyRTB = args.MyEditItem.MyStepRTB;
//C2026-008 Re-Architect RO.FST to include RO Modification date/time displayRO.LoadTree();
// if ROFST got updated,
// set the Selected FST so it is in sync
if (!_WeAreExitingPROMS && displayRO.LoadTree())
{
SelectedROFst = displayRO.MyROFST;
}
displayBookMarks.MyEditItem = args.MyEditItem; displayBookMarks.MyEditItem = args.MyEditItem;
displayHistory.MyEditItem = args.MyEditItem; displayHistory.MyEditItem = args.MyEditItem;
lblEditView.Text = args.MyEditItem.MyStepPanel.VwMode == E_ViewMode.Edit ? "Edit" : "View"; lblEditView.Text = args.MyEditItem.MyStepPanel.VwMode == E_ViewMode.Edit ? "Edit" : "View";
@@ -4842,7 +4792,7 @@ namespace VEPROMS
// B2022-026 RO Memory reduction coding (Jakes Merge) // B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.SetFindDocROButton(false); displayRO.SetFindDocROButton(false);
if (!_WeAreExitingPROMS) displayRO.LoadTree(); displayRO.LoadTree();
//C2019-036 View Only mode work with Checked Out Procedures //C2019-036 View Only mode work with Checked Out Procedures
//In View Only Mode - Step Properties should be disabled //In View Only Mode - Step Properties should be disabled
@@ -4883,31 +4833,15 @@ namespace VEPROMS
//In View Only Mode - Step Properties should be disabled //In View Only Mode - Step Properties should be disabled
public void EnableDisableStepProperties(object sender, StepTabRibbonEventArgs args) public void EnableDisableStepProperties(object sender, StepTabRibbonEventArgs args)
{ {
//C2026 - 021 Expand Functionality of Viewing Mode if (args.ViewMode == E_ViewMode.View && (infoTabs.Enabled || infoTabs.SelectedTab != infotabTags))
//B2026 - 048 View Only Mode freezes PROMS if last tab closed
if (args.ViewMode == E_ViewMode.View && (infotabControlPanelTags.Enabled || (infoTabs.SelectedTab != infotabTags && infoTabs.SelectedTab != infotabApplicability)))
{ {
if (infoTabs.SelectedTab != infotabApplicability) infoTabs.Enabled = true;
{ infoTabs.SelectedTab = infotabTags;
infoTabs.SelectedTab = infotabTags; infoTabs.Enabled = false;
}
infotabControlPanelTags.Enabled = false;
infotabControlPanelRO.Enabled = false;
infotabControlPanelTransitions.Enabled = false;
tabControlPanel1.Enabled = false;
displayApplicability.SetEnableDisableItemSelection(false);
tcpFoldoutMaint.Enabled = false;
} }
else if (args.ViewMode != E_ViewMode.View && !infotabControlPanelTags.Enabled) else if (args.ViewMode != E_ViewMode.View && !infoTabs.Enabled)
{ {
infotabControlPanelTags.Enabled = true; infoTabs.Enabled = true;
infotabControlPanelRO.Enabled = true;
infotabControlPanelTransitions.Enabled = true;
tabControlPanel1.Enabled = true;
displayApplicability.SetEnableDisableItemSelection(true);
tcpFoldoutMaint.Enabled = true;
} }
} }
@@ -4991,15 +4925,9 @@ namespace VEPROMS
displayRO.MyRTB = SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB; displayRO.MyRTB = SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB;
displayRO.CurROLink = args.MyLinkText.MyRoUsageInfo; displayRO.CurROLink = args.MyLinkText.MyRoUsageInfo;
// B2022-026 RO Memory reduction coding (Jakes Merge) // B2022-026 RO Memory reduction coding (Jakes Merge)
//C2026-008 Re-Architect RO.FST to include RO Modification date/time displayRO.LoadTree();
// if ROFST got updated, }
// set the Selected FST so it is in sync
if (displayRO.LoadTree())
{
SelectedROFst = displayRO.MyROFST;
}
}
#endregion #endregion
@@ -5308,6 +5236,19 @@ namespace VEPROMS
Clipboard.SetDataObject(mydo); Clipboard.SetDataObject(mydo);
} }
} }
private void btnFixMSWord_Click(object sender, EventArgs e)
{
if (tc.SelectedDisplayTabItem != null && tc.SelectedDisplayTabItem.MyDSOTabPanel != null)
{
string btnText = btnFixMSWord.Text;
btnFixMSWord.FixedSize = btnFixMSWord.Size;
btnFixMSWord.Text = "Processing ...";
this.Cursor = Cursors.WaitCursor;
tc.SelectedDisplayTabItem.MyDSOTabPanel.FixSymbolCharacters();
btnFixMSWord.Text = btnText;
this.Cursor = Cursors.Default;
}
}
private void epAnnotations_Resize(object sender, EventArgs e) private void epAnnotations_Resize(object sender, EventArgs e)
{ {
@@ -899,10 +899,10 @@ namespace VEPROMS
set set
{ {
if (ProgressBar == null) return; if (ProgressBar == null) return;
ProgressBar.Text = value; ProgressBar.Maximum = 100;
ProgressBar.Maximum = 100; ProgressBar.Value = 100;
ProgressBar.Value = 100; ProgressBar.Text = value;
Application.DoEvents(); Application.DoEvents();
} }
} }
@@ -1113,34 +1113,13 @@ namespace VEPROMS
if (_Apples == null) if (_Apples == null)
{ {
_Apples = new List<MiniConfig>(); _Apples = new List<MiniConfig>();
} }
_Apples.Add(cfg);
//B2026-017 Use Pre-typed in information when adding New Applicability
if (_Apples.Count == 0)
{
cfg.ID = textBox1.Text;
if (!string.IsNullOrEmpty(textBox2.Text))
{
cfg.Name = textBox2.Text;
}
cfg.Number = textBox3.Text;
cfg.Text = textBox4.Text;
cfg.OtherID = textBox8.Text;
cfg.OtherName = textBox9.Text;
cfg.OtherNumber = textBox10.Text;
cfg.OtherText = textBox11.Text;
cfg.ProcedureNumber = textBox5.Text;
cfg.SetID = textBox6.Text;
cfg.SetName = textBox7.Text;
}
_Apples.Add(cfg);
bsApples.DataSource = null; bsApples.DataSource = null;
bsApples.DataSource = _Apples; bsApples.DataSource = _Apples;
lbApplicabilities.SelectedItem = cfg; lbApplicabilities.SelectedItem = cfg;
lbApplicabilities_SelectedIndexChanged(sender, e); }
}
private bool ApplicIsUsed(MiniConfig cfg) // B2017-230 - don't allow user to remove an applicability that is being used (specified) private bool ApplicIsUsed(MiniConfig cfg) // B2017-230 - don't allow user to remove an applicability that is being used (specified)
{ {
@@ -1527,11 +1506,8 @@ namespace VEPROMS
Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
//must get id before ROFST gets updated so know what to refresh later // RO changes placed in file in the Documents\VEPROMS folder
int origfstid = SelectedROFst.ROFstID; swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(_DocVersionConfig.MyDocVersion.MyDocVersionInfo));
// RO changes placed in file in the Documents\VEPROMS folder
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(_DocVersionConfig.MyDocVersion.MyDocVersionInfo));
DocVersion dv = _DocVersionConfig.MyDocVersion; DocVersion dv = _DocVersionConfig.MyDocVersion;
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo // B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed
@@ -1539,32 +1515,13 @@ namespace VEPROMS
ROFstInfo.UpdateRoFst(SelectedROFst.MyRODb, dv, SelectedROFst, DoProgressBarRefresh); ROFstInfo.UpdateRoFst(SelectedROFst.MyRODb, dv, SelectedROFst, DoProgressBarRefresh);
SelectedROFst = null; // set to null to force getting the updated ROfst SelectedROFst = null; // set to null to force getting the updated ROfst
} }
else if (!dv.ROfstLastCompleted && origfstid == SelectedROFst.ROFstID)
{
//Handle issue where load failed without completing update
//previous RO FST did not load, get last loaded ID
//if none, use -1 which will check all ROs in the Working Draft
string cfg = dv.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
if (dv.DocVersionAssociations[0]?.MyROFst != null)
{
if (!int.TryParse(ac.ROUpdate_PrevROFSTID, out origfstid))
{
origfstid = -1;
}
}
else
{
origfstid = -1;
}
}
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
SelectedROFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); SelectedROFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, SelectedROFst, origfstid, SelectedROFst.ROFstID); ROFst newrofst = ROFstInfo.RefreshROFst(_DocVersionConfig.MyDocVersion, SelectedROFst, DoProgressBarRefresh, null);
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange; ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
SelectedROFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); SelectedROFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
swROUpdate.Close(); swROUpdate.Close();
@@ -124,26 +124,9 @@ namespace VEPROMS.CSLA.Library
_Xp["ROUpdate", "LoadingFigures"] = value; // save selected value _Xp["ROUpdate", "LoadingFigures"] = value; // save selected value
} }
} }
#endregion // ROUpdate
[Category("RO Update")] #region ToString
[DisplayName("Previous ROFSTID")] public override string ToString()
[RefreshProperties(RefreshProperties.All)]
[Description("Previous ROFSTID")]
public string ROUpdate_PrevROFSTID
{
get
{
string s = _Xp["ROUpdate", "PrevROFSTID"];// get the saved value
return s;
}
set
{
_Xp["ROUpdate", "PrevROFSTID"] = value; // save selected value
}
}
#endregion // ROUpdate
#region ToString
public override string ToString()
{ {
string s = _Xp.ToString(); string s = _Xp.ToString();
if (s == "<Config/>" || s == "<Config></config>") return string.Empty; if (s == "<Config/>" || s == "<Config></config>") return string.Empty;
@@ -2291,7 +2291,7 @@ OnPropertyChanged("Default_BkColor");
public void RemoveSlave(int index) public void RemoveSlave(int index)
{ {
XmlNode dd = _Xp.XmlContents.SelectSingleNode("//Slave[@index='" + index.ToString() + "']"); XmlNode dd = _Xp.XmlContents.SelectSingleNode("//Slave[@index='" + index.ToString() + "']");
dd?.ParentNode?.RemoveChild(dd); dd.ParentNode.RemoveChild(dd);
} }
public int MaxSlaveIndex public int MaxSlaveIndex
{ {
@@ -1,14 +1,14 @@
using Csla.Data;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text;
using System.ComponentModel; using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Data; using System.Data;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Linq; using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using static System.Net.Mime.MediaTypeNames;
using Csla.Data;
namespace VEPROMS.CSLA.Library namespace VEPROMS.CSLA.Library
@@ -97,8 +97,7 @@ namespace VEPROMS.CSLA.Library
public string appid; public string appid;
public int ID; public int ID;
public int ParentID; public int ParentID;
public DateTime? ModDateTime; //C2026-008 Re-Architect RO.FST to include RO Modification date/time public rochild[] children;
public rochild[] children;
}; };
[Serializable] [Serializable]
@@ -111,8 +110,7 @@ namespace VEPROMS.CSLA.Library
public string roid; // roid unique identifier public string roid; // roid unique identifier
public string appid; // accessory page id - user specified unique id public string appid; // accessory page id - user specified unique id
public string value; // return value, can be multiple values public string value; // return value, can be multiple values
public DateTime? ModDateTime; //C2026-008 Re-Architect RO.FST to include RO Modification date/time public rochild[] children;
public rochild[] children;
}; };
public class RoExtension public class RoExtension
@@ -496,8 +494,6 @@ namespace VEPROMS.CSLA.Library
{ {
roid = FormatRoidKey(roid, true); roid = FormatRoidKey(roid, true);
string retval = GetRoChild(roid).value; string retval = GetRoChild(roid).value;
if (string.IsNullOrEmpty(retval)) if (string.IsNullOrEmpty(retval))
@@ -688,19 +684,15 @@ namespace VEPROMS.CSLA.Library
//return string.Format("{0,10:#####0.00}", TimeSpan.FromTicks(DateTime.Now.Ticks - dtStart.Ticks).TotalSeconds); //return string.Format("{0,10:#####0.00}", TimeSpan.FromTicks(DateTime.Now.Ticks - dtStart.Ticks).TotalSeconds);
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time #endregion
//return new ROFstID if there is a newer ID that matches the same ROFSTDB
public int GetNewerFSTID() => RofstGetLatestID(RofstID);
#endregion #endregion
#endregion #region Private Methods
#region Private Methods #region (Database Calls)
#region (Database Calls) private bool RofstDataExists(int rofstID)
private bool RofstDataExists(int rofstID)
{ {
int headerStatusID = RofstDataGetHeaderLoadStatus(rofstID); int headerStatusID = RofstDataGetHeaderLoadStatus(rofstID);
@@ -894,7 +886,7 @@ namespace VEPROMS.CSLA.Library
} }
} }
private void RofstChildInsert(int rofstID, int id, int parentID, int dbiID, int type, string title, string roid, string appid, string value, DateTime? dt = null) private void RofstChildInsert(int rofstID, int id, int parentID, int dbiID, int type, string title, string roid, string appid, string value)
{ {
try try
{ {
@@ -923,10 +915,7 @@ namespace VEPROMS.CSLA.Library
if (!string.IsNullOrEmpty(this.RoMissingDefaultValue)) if (!string.IsNullOrEmpty(this.RoMissingDefaultValue))
cmd.Parameters.Add(new SqlParameter("@missingDefaultValue", SqlDbType.VarChar)).Value = this.RoMissingDefaultValue; cmd.Parameters.Add(new SqlParameter("@missingDefaultValue", SqlDbType.VarChar)).Value = this.RoMissingDefaultValue;
if (dt != null) cmd.ExecuteNonQuery();
cmd.Parameters.Add(new SqlParameter("@ModDateTime", SqlDbType.DateTime)).Value = dt;
cmd.ExecuteNonQuery();
} }
} }
} }
@@ -1308,37 +1297,11 @@ namespace VEPROMS.CSLA.Library
} }
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time #endregion
//return new ROFstID if there is a newer ID that matches the same ROFSTDB
private int RofstGetLatestID(int rofstID)
{
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandTimeout = 0;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT ISNULL((SELECT TOP 1 ROFsts.ROFstID FROM ROFsts INNER JOIN ROFsts curFST ON curFST.RODbID = ROFsts.RODbID WHERE curFST.ROFstID = @FSTid order by ROFsts.DTS desc),-1)";
cmd.Parameters.Add(new SqlParameter("@FSTid", SqlDbType.Int)).Value = rofstID; #region (Core/Base logic for RO Values & UnitInfo RO Values)
return (int) cmd.ExecuteScalar(); private ROFSTLookup.rochild RofstDataGetChildByRoid(int rofstID, string roid, bool loadChildren = false, bool loadAllChildren = false)
}
}
}
catch (Exception ex)
{
throw new DbCslaException("RofstData.RofstGetLatestID", ex);
}
}
#endregion
#region (Core/Base logic for RO Values & UnitInfo RO Values)
private ROFSTLookup.rochild RofstDataGetChildByRoid(int rofstID, string roid, bool loadChildren = false, bool loadAllChildren = false)
{ {
try try
{ {
@@ -1547,10 +1510,10 @@ namespace VEPROMS.CSLA.Library
int slen = StringLength(ab, myOffset + 6); int slen = StringLength(ab, myOffset + 6);
tmp.title = Encoding.Default.GetString(ab, myOffset + 6, slen); tmp.title = Encoding.Default.GetString(ab, myOffset + 6, slen);
myOffset += (7 + slen); myOffset += (7 + slen);
ROFSTLookup.rogrp tmpg = LoadGroup(ab, childOffset, tableID); ROFSTLookup.rogrp tmpg = LoadGroup(ab, childOffset, tableID);
tmp.ID = tmpg.ID; tmp.ID = tmpg.ID;
tmp.ParentID = tmpg.ParentID; tmp.ParentID = tmpg.ParentID;
@@ -1558,12 +1521,8 @@ namespace VEPROMS.CSLA.Library
tmp.appid = tmpg.appid; tmp.appid = tmpg.appid;
tmp.roid = tableID.ToString("X4") + tmp.ID.ToString("X8"); tmp.roid = tableID.ToString("X4") + tmp.ID.ToString("X8");
tmp.children = tmpg.children; tmp.children = tmpg.children;
if (tmpg.ModDateTime != null)
{
tmp.ModDateTime = tmpg.ModDateTime;
}
int j; int j;
for (j = i - 1; j >= 0 && tmp.ID < myGrp.children[j].ID; j--) for (j = i - 1; j >= 0 && tmp.ID < myGrp.children[j].ID; j--)
{ {
@@ -1581,13 +1540,7 @@ namespace VEPROMS.CSLA.Library
int slen2 = StringLength(ab, offset + 13 + slen); int slen2 = StringLength(ab, offset + 13 + slen);
myGrp.appid = Encoding.Default.GetString(ab, offset + 13 + slen, slen2); myGrp.appid = Encoding.Default.GetString(ab, offset + 13 + slen, slen2);
//C2026-008 Re-Architect RO.FST to include RO Modification date/time _dbRoCnt++;
if (myGrp.value != "" && DateTime.TryParseExact(Encoding.Default.GetString(ab, offset + 14 + slen + slen2, 14), "yyyyMMddHHmmss", null, System.Globalization.DateTimeStyles.None, out DateTime dt))
{
myGrp.ModDateTime = dt;
}
_dbRoCnt++;
} }
return myGrp; return myGrp;
@@ -1700,7 +1653,7 @@ namespace VEPROMS.CSLA.Library
private void LoadChild(int rofstID, int dbiID, ROFSTLookup.rochild child) private void LoadChild(int rofstID, int dbiID, ROFSTLookup.rochild child)
{ {
//Insert Rofst Child //Insert Rofst Child
RofstChildInsert(rofstID, child.ID, child.ParentID, dbiID, child.type, child.title, child.roid, child.appid, child.value, child.ModDateTime); RofstChildInsert(rofstID, child.ID, child.ParentID, dbiID, child.type, child.title, child.roid, child.appid, child.value);
//Increment RO Count if RoChild has a return value //Increment RO Count if RoChild has a return value
if (!string.IsNullOrEmpty(child.value)) _curRoCnt++; if (!string.IsNullOrEmpty(child.value)) _curRoCnt++;
@@ -2209,7 +2162,7 @@ namespace VEPROMS.CSLA.Library
return s2; return s2;
s2 = s2.Replace(@"\u160?", "<HSP>"); // convert hard spaces bug fix: B2016-206 s2 = s2.Replace(@"\u160?", "<HSP>"); // convert hard spaces bug fix: B2016-206
s2 = Regex.Replace(s2, @"\\(?!u)", @"\u9586?"); // convert backslashes to a backslash symbol s2 = s2.Replace(@"\", @"\u9586?"); // convert backslashes to a backslash symbol
s2 = s2.Replace("<HSP>", @"\u160?"); // convert hard spaces bug fix: B2016-206 s2 = s2.Replace("<HSP>", @"\u160?"); // convert hard spaces bug fix: B2016-206
s2 = s2.Replace("`", @"\'b0"); // convert backquote to degree - left over from DOS days. s2 = s2.Replace("`", @"\'b0"); // convert backquote to degree - left over from DOS days.
s2 = s2.Replace("\xf8", @"\'b0"); // convert \xf8 to degree. s2 = s2.Replace("\xf8", @"\'b0"); // convert \xf8 to degree.
@@ -88,9 +88,9 @@ namespace VEPROMS.CSLA.Library
} }
public override string ToString() public override string ToString()
{ {
string itemTitle = Regex.Replace(this.Path, "^..+?\\u0007", ""); string itemTitle = Regex.Replace(this.Path, "^..+?\\u0007", "");
itemTitle = itemTitle.Replace("\x11", itemTitle[0] == '\x11' ? "" : " - ").Replace("\\u8209?", "-").Replace(@"\u9586?",@"\"); itemTitle = itemTitle.Replace("\x11", itemTitle[0] == '\x11' ? "" : " - ").Replace("\\u8209?", "-").Replace(@"\u9586?",@"\");
return string.Format("{4} item {0} by {1} on {2} @ {3}", this.ActionWhat, this.UserID, this.ActionWhen == DateTime.MinValue ? this.DTS.ToShortDateString() : this.ActionWhen.ToShortDateString(), this.ActionWhen == DateTime.MinValue ? this.DTS.ToString("HH:mm:ss") : this.ActionWhen.ToString("HH:mm:ss"), itemTitle); return string.Format("{4} item {0} by {1} on {2} @ {3}", this.ActionWhat, this.UserID, this.ActionWhen == DateTime.MinValue ? this.DTS.ToShortDateString() : this.ActionWhen.ToShortDateString(), this.ActionWhen == DateTime.MinValue ? this.DTS.ToShortTimeString() : this.ActionWhen.ToShortTimeString(), itemTitle);
//return string.Format("{0} by {1} on {2}", this.DeleteStatus == 0 ? "Changed" : "Deleted", this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss")); //return string.Format("{0} by {1} on {2}", this.DeleteStatus == 0 ? "Changed" : "Deleted", this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss"));
//return string.Format("{0} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted"); //return string.Format("{0} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted");
} }
@@ -102,7 +102,7 @@ namespace VEPROMS.CSLA.Library
who = string.Format(" by {0}", this.UserID); who = string.Format(" by {0}", this.UserID);
if (this.DTS != DateTime.Parse("1/1/1980")) if (this.DTS != DateTime.Parse("1/1/1980"))
when = string.Format(" on {0}", this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss")); when = string.Format(" on {0}", this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss"));
return string.Format("{0}{1}{2}", this.ActionWhat, who, when); return string.Format("{0}{1}{2}", this.ActionWhat, who, when);
} }
} }
@@ -177,7 +177,7 @@ namespace VEPROMS.CSLA.Library
public override string ToString() public override string ToString()
{ {
return string.Format("{0}{1} deleted by {2} on {3}", this.Level == 0 ? "Previous " : this.Level == 1 ? "Next " : "", this.ItemType, this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss")); return string.Format("{0}{1} deleted by {2} on {3} @ {4}", this.Level == 0 ? "Previous " : this.Level == 1 ? "Next " : "", this.ItemType, this.UserID, this.DTS.ToShortDateString(), this.DTS.ToShortTimeString());
// return string.Format("Deleted by {0} on {1} @ {2}", this.UserID, this.DTS.ToShortDateString(), this.DTS.ToShortTimeString()); // return string.Format("Deleted by {0} on {1} @ {2}", this.UserID, this.DTS.ToShortDateString(), this.DTS.ToShortTimeString());
// return string.Format("(ItemID: {4}, DeleteID: {5}, {0} by {1} on {2} Level: {3}", this.DeleteStatus == 0 ? "Changed" : "Deleted", this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss"), Level.ToString(), this.ItemID.ToString(), this.DeleteStatus.ToString()); // return string.Format("(ItemID: {4}, DeleteID: {5}, {0} by {1} on {2} Level: {3}", this.DeleteStatus == 0 ? "Changed" : "Deleted", this.UserID, this.DTS.ToString("MM/dd/yyyy @ HH:mm:ss"), Level.ToString(), this.ItemID.ToString(), this.DeleteStatus.ToString());
// return string.Format("Level: {3}, {0} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted", this.Level.ToString()); // return string.Format("Level: {3}, {0} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted", this.Level.ToString());
@@ -1003,34 +1003,40 @@ namespace VEPROMS.CSLA.Library
if (pdfTmp == null) return false; if (pdfTmp == null) return false;
FileInfo pdfFile = new FileInfo(pdfTmp); FileInfo pdfFile = new FileInfo(pdfTmp);
Byte[] buf = new byte[pdfFile.Length]; FileStream fs = pdfFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Byte[] buf = new byte[pdfFile.Length];
fs.Read(buf, 0, buf.Length);
fs.Close();
using (FileStream fs = pdfFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) // B2023-022 & B2023-023 commented out the deletion of the temporary Word section PDF file
// These files are deleted when the procedure pdf file is closed after being generated.
// PROMS was crashing because it could not find these temporary files to delete.
//try
//{
// pdfFile.Delete();
//}
//catch { }
using (Document doc = docInfo.Get())
{ {
fs.Read(buf, 0, buf.Length); DocStyle myDocStyle = sect.ActiveSection.MyDocStyle;
fs.Close(); SectionConfig sc = sect.ActiveSection.MyConfig as SectionConfig;
int ss = sect.MyDocVersion.DocVersionConfig.SelectedSlave;
if (sc != null && sc.Section_WordMargin == "Y")
{
using (Pdf myPdf = Pdf.MakePdf(doc, ss * 10 + MSWordToPDF.DebugStatus, 0, 0, 0, 0, (double)sect.MSWordPageCount, buf)) {; }
}
else
{
using (Pdf myPdf1 = Pdf.MakePdf(doc, ss * 10 + MSWordToPDF.DebugStatus, (int)myDocStyle.Layout.TopMargin, (int)myDocStyle.Layout.PageLength,
(int)myDocStyle.Layout.LeftMargin, (int)myDocStyle.Layout.PageWidth, (double)sect.MSWordPageCount, buf)) {; }
}
doc.UpdateDRoUsages(roids);
doc.Save();
} }
using (Document doc = docInfo.Get())
{
DocStyle myDocStyle = sect.ActiveSection.MyDocStyle;
SectionConfig sc = sect.ActiveSection.MyConfig as SectionConfig;
int ss = sect.MyDocVersion.DocVersionConfig.SelectedSlave;
if (sc != null && sc.Section_WordMargin == "Y")
{
using (Pdf myPdf = Pdf.MakePdf(doc, ss * 10 + MSWordToPDF.DebugStatus, 0, 0, 0, 0, (double)sect.MSWordPageCount, buf)) {; }
}
else
{
using (Pdf myPdf1 = Pdf.MakePdf(doc, ss * 10 + MSWordToPDF.DebugStatus, (int)myDocStyle.Layout.TopMargin, (int)myDocStyle.Layout.PageLength,
(int)myDocStyle.Layout.LeftMargin, (int)myDocStyle.Layout.PageWidth, (double)sect.MSWordPageCount, buf)) {; }
}
doc.UpdateDRoUsages(roids);
doc.Save();
}
docInfo.RefreshConfig(); docInfo.RefreshConfig();
return true; return true;
@@ -1476,22 +1482,12 @@ namespace VEPROMS.CSLA.Library
} }
catch { } catch { }
try if (CloseWordWhenDone)
{
if (CloseWordWhenDone)
{
CloseAppAfterWait();
}
}
catch (Exception ex)
{ {
System.Windows.Forms.Application.DoEvents(); CloseAppAfterWait();
_MyLog.Error("Failed to close Microsoft Word. Collecting reclaimable memory.", ex); }
GC.Collect();
_MyLog.Warn("Finished collecting reclaimable memory.");
}
if (statusChange != null) statusChange(VolianStatusType.Complete, 0, string.Empty); if (statusChange != null) statusChange(VolianStatusType.Complete, 0, string.Empty);
if (Volian.Base.Library.BaselineMetaFile.IsOpen && Volian.Base.Library.BaselineMetaFile.IncludeWordSecText) Volian.Base.Library.BaselineMetaFile.WriteLine("++EndTxt++"); if (Volian.Base.Library.BaselineMetaFile.IsOpen && Volian.Base.Library.BaselineMetaFile.IncludeWordSecText) Volian.Base.Library.BaselineMetaFile.WriteLine("++EndTxt++");
// [jpr 2022.07.26] - For memory optimization // [jpr 2022.07.26] - For memory optimization
+54 -163
View File
@@ -1093,17 +1093,8 @@ namespace VEPROMS.CSLA.Library
} }
} }
} }
// B2022-026 RO Memory Reduction code - pass in ROFstInfo
//C2026-008 Re-Architect RO.FST to include RO Modification date/time internal static void MyRefreshReferenceObjects(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, DocVersionInfo docVersionInfo, ROFstInfo origROFst)
//Refresh at item level
public static void RefreshReferenceObjects(ItemInfo tmp, ROFstInfo origROFst)
{
if (tmp.MyDocVersion.DocVersionConfig.SelectedSlave <= 0)
MyRefreshReferenceObjects(tmp, null, tmp.GetSectionInfo(), tmp.MyDocVersion, origROFst);
}
// B2022-026 RO Memory Reduction code - pass in ROFstInfo
internal static void MyRefreshReferenceObjects(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, DocVersionInfo docVersionInfo, ROFstInfo origROFst)
{ {
if (itemInfo.MyContent.ContentPartCount > 0) if (itemInfo.MyContent.ContentPartCount > 0)
{ {
@@ -1228,47 +1219,31 @@ namespace VEPROMS.CSLA.Library
return true; return true;
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time #region Debug Code
public static List<ItemInfo> GetItemInfoWithChangedROs(int docversionid, int origfstid, int newfstid)
{
List<ItemInfo> lst = new List<ItemInfo>();
foreach (DataRow r in Data_GetItemsWithChangedROs(docversionid, origfstid, newfstid).Rows) //private static void ShowDifference(string oldText, string newText)
{ //{
using (ItemInfo itm = Get((int)r["ItemID"])) // string nt = newText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
{ // string ot = oldText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
lst.Add(itm); // ShowText("OldText", ot);
} // ShowText("NewText", nt);
} //}
//private static void ShowText(string title, string newText)
//{
// StringBuilder sb = new StringBuilder();
// foreach (char c in newText)
// {
// if(c<' ' || c> '\x7F')
// sb.Append(string.Format("\\x{0:X2}",((int) c)));
// else
// sb.Append(c);
// }
// Console.WriteLine("{0}='{1}'",title,sb.ToString());
//}
return lst; #endregion // debug
}
#region Debug Code internal static void SetParentSectionAndDocVersionPageNum(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, ProcedureInfo procInfo, DocVersionInfo docVersionInfo, TransitionLookup tranLookup)
//private static void ShowDifference(string oldText, string newText)
//{
// string nt = newText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
// string ot = oldText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
// ShowText("OldText", ot);
// ShowText("NewText", nt);
//}
//private static void ShowText(string title, string newText)
//{
// StringBuilder sb = new StringBuilder();
// foreach (char c in newText)
// {
// if(c<' ' || c> '\x7F')
// sb.Append(string.Format("\\x{0:X2}",((int) c)));
// else
// sb.Append(c);
// }
// Console.WriteLine("{0}='{1}'",title,sb.ToString());
//}
#endregion // debug
internal static void SetParentSectionAndDocVersionPageNum(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, ProcedureInfo procInfo, DocVersionInfo docVersionInfo, TransitionLookup tranLookup)
{ {
if (itemInfo.MyContent.ContentPartCount > 0) if (itemInfo.MyContent.ContentPartCount > 0)
{ {
@@ -1915,44 +1890,10 @@ namespace VEPROMS.CSLA.Library
foreach (ItemInfo itemInfo in partInfo.MyItems) foreach (ItemInfo itemInfo in partInfo.MyItems)
itemInfo.SpinThroughChildren(); itemInfo.SpinThroughChildren();
} }
#endregion
//C2026-008 Re-Architect RO.FST to include RO Modification date/time #region LoadAtOnce
private static DataTable Data_GetItemsWithChangedROs(int docversionid, int origfstid, int newfstid) // Method to Get Item and children
{ public static ItemInfo GetItemAndChildren(int? itemID, int? parentID)
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "getItemsWithNewROs";
cm.Parameters.AddWithValue("@VersionID", docversionid);
cm.Parameters.AddWithValue("@OrigFSTid", origfstid);
cm.Parameters.AddWithValue("@NewFSTid", newfstid);
cm.CommandTimeout = Database.DefaultTimeout;
using (SqlDataAdapter da = new SqlDataAdapter(cm))
{
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
}
}
catch (Exception ex)
{
Database.LogException("ItemInfoList.Data_GetItemsWithChangedROs", ex);
throw new DbCslaException("ItemInfoList.Data_GetItemsWithChangedROs", ex);
}
}
#endregion
#region LoadAtOnce
// Method to Get Item and children
public static ItemInfo GetItemAndChildren(int? itemID, int? parentID)
{ {
try try
{ {
@@ -3371,26 +3312,7 @@ namespace VEPROMS.CSLA.Library
return retval; return retval;
} }
} }
public string DisplayNumber
//B2026-011 Improve the resolution of unit numbers in multi-unit background documents when printing.
// for enhanced documents, when copying content, need to not resolve the
//unit designators until print time
public string DisplayTextKeepSpecialCharsKeepUnitSpecific
{
get
{
string str = MyContent.Text;
foreach (string key in SpecialCharacters.Keys)
str = str.Replace(key, SpecialCharacters[key]);
string retval = ConvertToDisplayText(str);
foreach (string key in SpecialCharacters.Keys)
retval = retval.Replace(SpecialCharacters[key], key);
return retval;
}
}
public string DisplayNumber
{ {
get get
{ {
@@ -3898,17 +3820,9 @@ namespace VEPROMS.CSLA.Library
_SupInfos = null; _SupInfos = null;
} }
//B2019-140 Change bars do not get refreshed when approval is run. //B2019-140 Change bars do not get refreshed when approval is run.
// Reset a Procedure and sub items in the cache // Reset a Procedure and sub items in the cache
// ********************** public static ProcedureInfo ResetProcedure(int procID)
// Be carefull calling this when the Procedure is Open
// When the Procedure is Open - use StepTabRibbon.RefreshProcedure(); instead
// When a Procedure is open and you try to refresh it,
// events can fire behind the scenes - causing data to try to be accessed while you are trying to refresh it
// When This occurs, it will cause a
// "ThreadException ... Collection was modified; enumeration operation may not execute.”
// **********************
public static ProcedureInfo ResetProcedure(int procID)
{ {
// The following lines reload the procedure info cache // The following lines reload the procedure info cache
ProcedureInfo newproc = ProcedureInfo.Get(procID, true); ProcedureInfo newproc = ProcedureInfo.Get(procID, true);
@@ -3926,27 +3840,26 @@ namespace VEPROMS.CSLA.Library
ItemInfo newprocitem = Get(procID, true); ItemInfo newprocitem = Get(procID, true);
newprocitem.RefreshConfig(); newprocitem.RefreshConfig();
//Reload all the child/sub items //Reload all the child/sub items
#pragma warning disable S2971 // LINQ expressions should be simplified - need initial ToList to force enumeration #pragma warning disable S2971 // LINQ expressions should be simplified - need initial ToList to force enumeration
//otherwise will get a "Collection was modified; enumeration operation may not execute" error //otherwise will get a "Collection was modified; enumeration operation may not execute" error
List<int> itemIDs = _CacheByPrimaryKey.SelectMany(kvp => kvp.Value).ToList().Where(t => t?.ActiveParent != null && (t.ActiveParent is ItemInfo) && t.MyProcedure.ItemID == procID).Select(x => (x.ActiveParent as ItemInfo).ItemID).Distinct().ToList(); List<int> itemIDs = _CacheByPrimaryKey.Values.ToList().SelectMany(y => y).Where(t => t?.ActiveParent != null && (t.ActiveParent is ItemInfo) && t.MyProcedure.ItemID == procID).Select(x => (x.ActiveParent as ItemInfo).ItemID).Distinct().ToList();
#pragma warning restore S2971 // LINQ expressions should be simplified #pragma warning restore S2971 // LINQ expressions should be simplified
for (int index = 0; index < itemIDs.Count; index++) for (int index = 0; index < itemIDs.Count; index++)
{ {
ResetParts(itemIDs[index]); ResetParts(itemIDs[index]);
} }
//reset the procedure config for all items attached to current procedure //reset the procedure config for all items attached to current procedure
#pragma warning disable S2971 // LINQ expressions should be simplified - need initial ToList to force enumeration #pragma warning disable S2971 // LINQ expressions should be simplified - need initial ToList to force enumeration
//otherwise will get a "Collection was modified; enumeration operation may not execute" error //otherwise will get a "Collection was modified; enumeration operation may not execute" error
List<ItemInfo> pconfigrefresh_items = _CacheByPrimaryKey.SelectMany(kvp => kvp.Value).ToList().Where(t => t?.MyProcedure?.ItemID == procID).Distinct().ToList(); List<ItemInfo> pconfigrefresh_items = _CacheByPrimaryKey.Values.ToList().SelectMany(y => y).Where(t => t?.MyProcedure?.ItemID == procID).Distinct().ToList();
#pragma warning restore S2971 // LINQ expressions should be simplified #pragma warning restore S2971 // LINQ expressions should be simplified
for (int index = 0; index < pconfigrefresh_items.Count; index++) for (int index = 0; index < pconfigrefresh_items.Count; index++)
{ {
pconfigrefresh_items[index].MyProcedure = newproc; pconfigrefresh_items[index].MyProcedure = newproc;
} }
//return the changed procedure info //return the changed procedure info
return newproc; return newproc;
} }
@@ -4113,7 +4026,7 @@ namespace VEPROMS.CSLA.Library
// date). Print_ViewableAfterChangeBarDate was created to get only that user specified date, if it exists. If it does exist, we compare // date). Print_ViewableAfterChangeBarDate was created to get only that user specified date, if it exists. If it does exist, we compare
// that with the Content datetime, otherwise we proceed as before. // that with the Content datetime, otherwise we proceed as before.
DateTime? viewableStartingDateTime = (MyProcedure.MyConfig as ProcedureConfig).Print_ViewableStartingChangeBarDate; DateTime? viewableStartingDateTime = (MyProcedure.MyConfig as ProcedureConfig).Print_ViewableStartingChangeBarDate;
if (viewableStartingDateTime != null && viewableStartingDateTime > MyProcedure.ChangeBarDate && (MyProcedure.MyConfig as ProcedureConfig).SelectedSlave == 0) if (viewableStartingDateTime != null && viewableStartingDateTime > MyProcedure.ChangeBarDate)
return (MyContent.DTS > viewableStartingDateTime); return (MyContent.DTS > viewableStartingDateTime);
return (MyContent.DTS > MyProcedure.ChangeBarDate); return (MyContent.DTS > MyProcedure.ChangeBarDate);
} }
@@ -4836,20 +4749,13 @@ namespace VEPROMS.CSLA.Library
if (ActiveFormat.MyStepSectionLayoutData.AddContActTagToHighLevelRNOWhenIncludedOnCAS && if (ActiveFormat.MyStepSectionLayoutData.AddContActTagToHighLevelRNOWhenIncludedOnCAS &&
IsInRNO && !MyParent.IsInRNO && FormatStepData.TabData.CASPrintMacro != null) IsInRNO && !MyParent.IsInRNO && FormatStepData.TabData.CASPrintMacro != null)
{ {
// B2026-009 needed to make sure parent wasn't a continuous action step type StepConfig sc = MyConfig as StepConfig;
// the ExcludeFromContActSum is set to False for continuous action if (sc != null && sc.Step_CAS == "True")
// step types and True for all others
StepConfig psc = MyParent.MyConfig as StepConfig;
if (MyParent.FormatStepData.ExcludeFromContActSum && psc != null && psc.Step_CAS != "True")
{ {
StepConfig sc = MyConfig as StepConfig; if (FormatStepData.TabData.CASPrintMacro != null)
if (sc != null && sc.Step_CAS == "True") _MyTab.Text = FormatStepData.TabData.CASPrintMacro + _MyTab.Text;
{ if (FormatStepData.TabData.CASEditTag != null)
if (FormatStepData.TabData.CASPrintMacro != null) _MyTab.CleanText = FormatStepData.TabData.CASEditTag + _MyTab.CleanText;
_MyTab.Text = FormatStepData.TabData.CASPrintMacro + _MyTab.Text;
if (FormatStepData.TabData.CASEditTag != null)
_MyTab.CleanText = FormatStepData.TabData.CASEditTag + _MyTab.CleanText;
}
} }
} }
_MyTab.RNOTabWidthAdjust = ((ItemInfo)ActiveParent).FormatStepData.TabData.RNOAdjustTabSize ?? 0; _MyTab.RNOTabWidthAdjust = ((ItemInfo)ActiveParent).FormatStepData.TabData.RNOAdjustTabSize ?? 0;
@@ -6274,13 +6180,8 @@ namespace VEPROMS.CSLA.Library
if (!SectionHasCheckOffs()) return null; if (!SectionHasCheckOffs()) return null;
int stpCoIndx = CheckOffIndex(); // this step has a checkoff defined int stpCoIndx = CheckOffIndex(); // this step has a checkoff defined
if (stpCoIndx == -1) return null; if (stpCoIndx == -1) return null;
//B2026-040 - Signoff/Checkoffs not printing unless set to Section Default
if (stpCoIndx > 1)
{
return ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList[stpCoIndx]; // DO override of CheckOffList[]
}
int sectCoIndx = SectionDefaultCheckOffIndex(); // no checkoff on step, see if there is a section default. int sectCoIndx = SectionDefaultCheckOffIndex(); // no checkoff on step, see if there is a section default.
if (sectCoIndx == -1) return null; if (sectCoIndx == -1) return null;
if ((ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsHigh) if ((ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsHigh)
|| (!ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsLowestLevelStep && stpCheckOff)) // && !RNOsHighHasCheckOff())) || (!ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsLowestLevelStep && stpCheckOff)) // && !RNOsHighHasCheckOff()))
@@ -8123,10 +8024,6 @@ namespace VEPROMS.CSLA.Library
} }
set { _ChangeBarDate = value; } set { _ChangeBarDate = value; }
} }
//C2026-021 Expand Functionality of Viewing Mode
public void ResetChangeBar() => _ChangeBarDate = null;
public Dictionary<int, ItemInfo> MyLookup = null; public Dictionary<int, ItemInfo> MyLookup = null;
public override void SetupTags() public override void SetupTags()
{ {
@@ -8453,11 +8350,8 @@ namespace VEPROMS.CSLA.Library
if (seds != null && seds.Count != 0) if (seds != null && seds.Count != 0)
{ {
ItemInfo srcItem = ItemInfo.Get(seds[0].ItemID); ItemInfo srcItem = ItemInfo.Get(seds[0].ItemID);
// B2022-049: Copy/paste of enhanced procedure and bad links between source and enhanced. Null reference check // B2022-049: Copy/paste of enhanced procedure and bad links between source and enhanced. Null reference check
//B2026-011 Improve the resolution of unit numbers in multi-unit background documents when printing. if (srcItem != null && srcItem.DisplayTextKeepSpecialChars != ii.DisplayTextKeepSpecialChars)
// for enhanced documents, when copying content, need to not resolve the
//unit designators until print time
if (srcItem != null && srcItem.DisplayTextKeepSpecialCharsKeepUnitSpecific != ii.DisplayTextKeepSpecialCharsKeepUnitSpecific)
{ {
if (retiil == null) retiil = new ItemInfoList(ii); if (retiil == null) retiil = new ItemInfoList(ii);
else retiil.AddItem(ii); else retiil.AddItem(ii);
@@ -8483,10 +8377,7 @@ namespace VEPROMS.CSLA.Library
ItemInfo srcItem = ItemInfo.Get(seds[0].ItemID); ItemInfo srcItem = ItemInfo.Get(seds[0].ItemID);
using (Item enhItem = Item.Get(ii.ItemID)) using (Item enhItem = Item.Get(ii.ItemID))
{ {
//B2026-011 Improve the resolution of unit numbers in multi-unit background documents when printing. enhItem.MyContent.Text = srcItem.DisplayTextKeepSpecialChars;
// for enhanced documents, when copying content, need to not resolve the
//unit designators until print time
enhItem.MyContent.Text = srcItem.DisplayTextKeepSpecialCharsKeepUnitSpecific;
enhItem.Save(); enhItem.Save();
} }
} }
+50 -40
View File
@@ -61,47 +61,57 @@ namespace VEPROMS.CSLA.Library
throw new DbCslaException("Pdf.DataPortal_Delete", ex); throw new DbCslaException("Pdf.DataPortal_Delete", ex);
} }
} }
// used to remove word section PDFs to force ROs to be updated when printed or saved
public static void DeleteAllDocVersion(int versionID)
{
if (!CanDeleteObject())
throw new System.Security.SecurityException("User not authorized to remove a Pdf");
try
{
DataPortal.Delete(new VersionIDCriteria(versionID));
}
catch (Exception ex)
{
throw new DbCslaException("Error on Pdf.DeleteAllDocVersion", ex);
}
}
[Serializable()]
protected class VersionIDCriteria
{
private int _VersionID;
public int VersionID
{ get { return _VersionID; } }
public VersionIDCriteria(int versionID)
{
_VersionID = versionID;
}
}
[Transactional(TransactionalTypes.TransactionScope)]
private void DataPortal_Delete(VersionIDCriteria criteria)
{
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Pdf.DataPortal_Delete", GetHashCode());
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandTimeout = Database.SQLTimeout;
cm.CommandText = "deleteAllDocVersionPdfs";
cm.Parameters.AddWithValue("@VersionID", criteria.VersionID);
cm.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
if (_MyLog.IsErrorEnabled) _MyLog.Error("Pdf.DataPortal_Delete", ex);
_ErrorMessage = ex.Message;
throw new DbCslaException("Pdf.DataPortal_Delete", ex);
}
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// used to remove word section PDFs to force ROs to be updated when printed or saved
public static void DeleteDocVersionPDFsWithNewROs(int versionID, int origfstid, int newfstid)
{
if (!CanDeleteObject())
throw new System.Security.SecurityException("User not authorized to remove a Pdf");
try
{
DeleteWithNewROs(versionID, origfstid, newfstid);
}
catch (Exception ex)
{
throw new DbCslaException("Error on Pdf.DeleteAllDocVersion", ex);
}
}
static private void DeleteWithNewROs(int docversionID, int origfstid, int newfstid)
{
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandTimeout = Database.SQLTimeout;
cm.CommandText = "deleteDocVersionPdfsWithNewROs";
cm.Parameters.AddWithValue("@VersionID", docversionID);
cm.Parameters.AddWithValue("@OrigFSTid", origfstid);
cm.Parameters.AddWithValue("@NewFSTid", newfstid);
cm.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
if (_MyLog.IsErrorEnabled) _MyLog.Error("Pdf.DeleteWithNewROs", ex);
throw new DbCslaException("Pdf.DeleteWithNewROs", ex);
}
}
} }
public partial class PdfInfo public partial class PdfInfo
{ {
+245 -77
View File
@@ -225,62 +225,41 @@ namespace VEPROMS.CSLA.Library
} }
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time // B2022-026 RO Memory Reduction code - pass in the ROFstInfo
// Refresh at item level public static int RefreshROFst(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo origROFst)
public static int RefreshROFstAtItemLevel(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo localROFst, int origfstid, int newfstid) {
{ int fixedROs = 0;
int fixedROs = 0;
if (dvi.DocVersionConfig.SelectedSlave <= 0) if (dvi.DocVersionConfig.SelectedSlave <= 0)
{ {
// remove word section PDFs to force update of RO values when printed myProgressBarRefresh(1, 100, "Update MS Word ROs");
myProgressBarRefresh(1, 100, "Updating MS Word ROs In Progress");
Pdf.DeleteDocVersionPDFsWithNewROs(dvi.VersionID, origfstid, newfstid);
//Loop Through ROs in this docversion that are different than the previous fst Pdf.DeleteAllDocVersion(dvi.VersionID); // remove word section PDFs to force update of RO values when printed
myProgressBarRefresh(50, 100, "Updating ROs In PROMS Steps In Progress"); int i = 0;
int i = 0;
List<ItemInfo> list = ItemInfo.GetItemInfoWithChangedROs(dvi.VersionID, origfstid, newfstid);
foreach (ItemInfo itm in list)
{
DateTime start = DateTime.Now;
ItemInfo.ResetROCounters(); foreach (ProcedureInfo proc in dvi.Procedures)
myProgressBarRefresh(++i, list.Count, string.Format("{0} ({1}/{2} ROs {3})", itm.MyProcedure.DisplayNumber, i, list.Count, fixedROs)); {
ItemInfo.RefreshReferenceObjects(itm, localROFst); DateTime start = DateTime.Now;
fixedROs += ItemInfo.ROFixCount;
TimeSpan ts = DateTime.Now - start; ProcedureInfo.ResetROCounters();
myProgressBarRefresh(++i, dvi.Procedures.Count, string.Format("{0} ({1}/{2} ROs {3})", proc.DisplayNumber, i, dvi.Procedures.Count, fixedROs));
ProcedureInfo.RefreshReferenceObjects(proc, origROFst);
fixedROs += ProcedureInfo.ROFixCount;
if (tbStatus != null) TimeSpan ts = DateTime.Now - start;
tbStatus.AppendText(string.Format("Procedure: {1}{0}, Checked {2} Referenced Objects{0}, Fixed {3} Referenced Objects{0}, Elapsed Seconds:{4}{0}{0}", Environment.NewLine, itm.MyProcedure.DisplayNumber, ItemInfo.ROCheckCount, ItemInfo.ROFixCount, ts.TotalSeconds));
}
//Update the DocVersion Associations to link to the new RO FST id and current date/time if (tbStatus != null)
using (DocVersion dv = DocVersion.Get(dvi.VersionID)) tbStatus.AppendText(string.Format("Procedure: {1}{0}, Checked {2} Referenced Objects{0}, Fixed {3} Referenced Objects{0}, Elapsed Seconds:{4}{0}{0}", Environment.NewLine, proc.DisplayNumber, ProcedureInfo.ROCheckCount, ProcedureInfo.ROFixCount, ts.TotalSeconds));
{ }
if (dvi.DocVersionAssociations[0].MyROFst.ROFstID != newfstid) }
{
dv.DocVersionAssociations[0].MyROFst = localROFst.GetJustROFst();
SetAssociationLastCompleted(dv, DateTime.Now.ToString());
}
}
}
// pop up a message window telling the user the RO Update has completed and how many ROs were updated return fixedROs;
// If we are updating RO from the Admin Tools (from the V button) and we are updating more than on procedure set, then just append the "RO Update Complete" text }
// To the MessageList. Once completed will all procedure sets, Admin Tools will display one message box with all the results in it.
if (MessageList == null)
FlexibleMessageBox.Show(fixedROs == 0 ? "No ROs Required Updating" : string.Format("{0} ROs Updated for {1}", fixedROs, dvi.MyFolder.Name), "RO Update Complete");
else
MessageList.AppendLine((fixedROs == 0 ? "No ROs Required Updating for " : string.Format("{0} ROs Updated for ", fixedROs)) + dvi.MyFolder.Name);
return fixedROs;
}
//C2022-028 for Admin tool to check for bad RO links //C2022-028 for Admin tool to check for bad RO links
//B2022-144 we now loop through checked procedures list from Admin Tools and call this method for each procedure we want to process //B2022-144 we now loop through checked procedures list from Admin Tools and call this method for each procedure we want to process
public static int CheckROLinksInThisProcedure(ProcedureInfo proc, System.Windows.Forms.TextBox tbStatus) public static int CheckROLinksInThisProcedure(ProcedureInfo proc, System.Windows.Forms.TextBox tbStatus)
{ {
int FoundBadROLinks = 0; int FoundBadROLinks = 0;
DocVersionInfo dvi = DocVersionInfo.Get(proc.MyDocVersion.VersionID); DocVersionInfo dvi = DocVersionInfo.Get(proc.MyDocVersion.VersionID);
@@ -312,6 +291,34 @@ namespace VEPROMS.CSLA.Library
return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\ROUpdateReport_" + ValidFileName.FixFileName(dvi.MyFolder.Name.Replace(" ", "_") + "_" + DateTime.Now.ToString("MM-dd-yyyy_HH-mm-ss") + ".txt"); return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\ROUpdateReport_" + ValidFileName.FixFileName(dvi.MyFolder.Name.Replace(" ", "_") + "_" + DateTime.Now.ToString("MM-dd-yyyy_HH-mm-ss") + ".txt");
} }
// B2022-026 RO Memory Reduction code - moved the call to UpdateROFst() to before we call RefreshROFst
// so that we used the correct ROFstInfo which as the needed event methods set when updated RO Table types
public static ROFst RefreshROFst(DocVersion docver, ROFstInfo origROFst, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus)
{
ROFst rofst = null;
rofst = docver.DocVersionAssociations[0].MyROFst;
DocVersionInfo dvi = DocVersionInfo.Get(docver.VersionID);
SetAssociationLastCompleted(docver, string.Empty);
int fixedROs = RefreshROFst(dvi, myProgressBarRefresh, tbStatus, origROFst);
SetAssociationLastCompleted(docver, DateTime.Now.ToString()); // RO Update completed successfully and un-interrupted, save the date/time to the Doc Version Association config
myProgressBarRefresh(100, 100, "RO Update Complete"); // update the progress bar
System.Windows.Forms.Application.DoEvents();
// pop up a message window telling the user the RO Update has completed and how many ROs were updated
// If we are updating RO from the Admin Tools (from the V button) and we are updating more than on procedure set, then just append the "RO Update Complete" text
// To the MessageList. Once completed will all procedure sets, Admin Tools will display one message box with all the results in it.
if (MessageList == null)
FlexibleMessageBox.Show(fixedROs == 0 ? "No ROs Required Updating" : string.Format("{0} ROs Updated for {1}", fixedROs, dvi.MyFolder.Name), "RO Update Complete");
else
MessageList.AppendLine((fixedROs == 0 ? "No ROs Required Updating for " : string.Format("{0} ROs Updated for ", fixedROs)) + dvi.MyFolder.Name);
return rofst;
}
/// <summary> /// <summary>
/// Updates an ro.fst into a sql database. /// Updates an ro.fst into a sql database.
/// </summary> /// </summary>
@@ -328,9 +335,7 @@ namespace VEPROMS.CSLA.Library
{ {
if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Starting Update"); if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Starting Update");
int origFSTid = origROFst.ROFstID; DirectoryInfo di = new DirectoryInfo(rdi.FolderPath);
DirectoryInfo di = new DirectoryInfo(rdi.FolderPath);
string rofstfilepath = rdi.FolderPath + @"\ro.fst"; string rofstfilepath = rdi.FolderPath + @"\ro.fst";
FileStream fsIn = new FileStream(rofstfilepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); FileStream fsIn = new FileStream(rofstfilepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
FileInfo rofstFI = new FileInfo(rofstfilepath); FileInfo rofstFI = new FileInfo(rofstfilepath);
@@ -356,9 +361,8 @@ namespace VEPROMS.CSLA.Library
docver.DocVersionAssociations[0].MyROFst = rofst; docver.DocVersionAssociations[0].MyROFst = rofst;
SetAssociationLastCompleted(docver, string.Empty); SetAssociationLastCompleted(docver, string.Empty);
SetPrevFSTID(docver, origFSTid); // //C2026-008 Re-Architect RO.FST to include RO Modification date/time
return rofst; return rofst;
} }
// Read in the rofst & make the rofst record. // Read in the rofst & make the rofst record.
@@ -380,10 +384,7 @@ namespace VEPROMS.CSLA.Library
// Keep a list of ROIDs for Images that have changed. // Keep a list of ROIDs for Images that have changed.
List<string> MyChangedFigureROIDs = UpdateROFigures(rdi, myProgressBarRefresh, rofst, rodb, myLookup, docver); List<string> MyChangedFigureROIDs = UpdateROFigures(rdi, myProgressBarRefresh, rofst, rodb, myLookup, docver);
//C2026-008 Re-Architect RO.FST to include RO Modification date/time return rofst;
SetPrevFSTID(docver, origFSTid);
return rofst;
} }
} }
@@ -483,22 +484,8 @@ namespace VEPROMS.CSLA.Library
docver.Save(); docver.Save();
} }
//C2026-008 Re-Architect RO.FST to include RO Modification date/time // Place the status of loading the RO Figures when updating RO Values
// Place the previous ROFSTID in the config in case network error or computer crashes while updating RO Values private static void SetAssociationROFiguresLoading(DocVersion docver, string value)
private static void SetPrevFSTID(DocVersion docver, int value)
{
if (docver.DocVersionAssociations[0]?.MyROFst != null && value != -1)
{
string cfg = docver.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
ac.ROUpdate_PrevROFSTID = value.ToString();
docver.DocVersionAssociations[0].Config = ac.ToString();
docver.Save();
}
}
// Place the status of loading the RO Figures when updating RO Values
private static void SetAssociationROFiguresLoading(DocVersion docver, string value)
{ {
string cfg = docver.DocVersionAssociations[0].Config; string cfg = docver.DocVersionAssociations[0].Config;
@@ -683,7 +670,188 @@ namespace VEPROMS.CSLA.Library
return sb.ToString(); return sb.ToString();
} }
private static DateTime ShowDuration(DateTime dtLast, string message) private static void UpdateROValuesText(ROFstInfo origROFstInfo, ROFst newROFst, DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, List<string> MyChangedFigureROIDs)
{
if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Update Ro Values");
string versionList = dvi.VersionID.ToString();
ROFSTLookup origLookup = new ROFSTLookup(origROFstInfo.ROFstID, dvi);
ROFSTLookup newLookup = new ROFSTLookup(newROFst.ROFstID, dvi);
List<string> delList = new List<string>();
List<string> chgList = newLookup.GetValueDifferences(origROFstInfo.ROFstID, ref delList);
// Any figures which have been changed will be included in the list of values that have changed.
if (MyChangedFigureROIDs != null)
{
foreach (string roid in MyChangedFigureROIDs)
{
if (!chgList.Contains(roid)) chgList.Add(roid);
}
}
string RoidList = GetRoidList(newROFst.RODbID, chgList);
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
List<string> activeRoids = BuildActiveROIDsForRoUsages12(RoidList, versionList);
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Updating RO Values");
int iCount = 0;
if (activeRoids.Count > 0)
{
foreach (string chg in chgList)
{
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Updating RO Values");
if (activeRoids.Contains(chg.Substring(0, 12)))
{
ROFSTLookup.rochild roch = newLookup.GetRoChild(chg);
string desc = string.Format("Change in RO Values: Old value = {0}, New value = {1}", origLookup.GetRoChild(chg).value, roch.value);
// roid's are stored in database as 16 characters long in the RoUsages table. They may be stored as 12 characters in the ro.fst.
// string padroid = chg.Length <= 12 ? chg + "0000" : chg;
// B2022-088: Find Doc Ro button not working in Word Sections
string padroid = ROFSTLookup.FormatRoidKey(chg, true);
using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed", versionList))
{
foreach (RoUsageInfo roUsg in affected)
{
using (Content content = Content.Get(roUsg.MyContent.ContentID))
{
foreach (ItemInfo ii in roUsg.MyContent.ContentItems)
{
string val = newLookup.GetTranslatedRoValue(padroid, ii.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta, ii.ActiveFormat.PlantFormat.FormatData.SectData.UseTildaPoundCharsForSuperSubScriptInROValues, false, ii);
content.FixContentText(roUsg, val, roch.type, origROFstInfo, true);
if (content.IsDirty)
{
// Update UserID and DTS when RO Value is updated.
content.UserID = Volian.Base.Library.VlnSettings.UserID;
content.DTS = DateTime.Now;
content.Save();
if (content.MyGrid != null)
{
GridInfo.Refresh(content.MyGrid);
}
}
}
}
}
}
}
}
}
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
List<string> activeDRoids = BuildActiveROIDsForDRoUsages12(RoidList, versionList);
iCount = 0;
if (activeDRoids.Count > 0)
{
foreach (string chg in chgList)
{
// B2022-088: Find Doc Ro button not working in Word Sections
// string padroid = chg.Length <= 12 ? chg + "0000" : chg;
string padroid = ROFSTLookup.FormatRoidKey(chg, true);
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Updating RO Values");
if (activeDRoids.Contains(chg.Substring(0, 12)))
{
ROFSTLookup.rochild roch = newLookup.GetRoChild(chg);
string desc = string.Format("Change in RO Values: Old value = {0}, New value = {1}", origLookup.GetRoChild(chg).value, roch.value);
// roid's are stored in database as 16 characters long in the rousages table. They may be stored as 12 characters in the ro.fst.
using (DROUsageInfoList affected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed", versionList))
{
foreach (DROUsageInfo droUsg in affected)
{
Pdf.DeleteAll(droUsg.DocID);
}
}
}
}
}
iCount = 0;
string RoidDelList = GetRoidList(newROFst.RODbID, delList);
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
activeRoids = BuildActiveROIDsForRoUsages12(RoidDelList, versionList);
if (activeRoids.Count > 0)
{
foreach (string del in delList)
{
// B2022-088: Find Doc Ro button not working in Word Sections
//string padroiddel = del.Length <= 12 ? del + "0000" : del;
string padroiddel = ROFSTLookup.FormatRoidKey(del, true);
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(del).value);
if (activeRoids.Contains(del.Substring(0, 12).ToUpper()))
{
using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted", versionList))
{
foreach (RoUsageInfo roUsg in affected)
{
using (Content content = Content.Get(roUsg.MyContent.ContentID))
{
content.FixContentText(roUsg, "?", 0, origROFstInfo);
if (content.IsDirty)
{
// Update UserID and DTS when RO Value is updated.
content.UserID = Volian.Base.Library.VlnSettings.UserID;
content.DTS = DateTime.Now;
content.Save();
}
}
}
}
}
}
}
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
activeDRoids = BuildActiveROIDsForDRoUsages12(RoidDelList, versionList);
iCount = 0;
if (activeDRoids.Count > 0)
{
foreach (string del in delList)
{
// B2022-088: Find Doc Ro button not working in Word Sections
string padroiddel = ROFSTLookup.FormatRoidKey(del, true);
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(del).value);
// If there's an issue then maybe try getting the RoChild with the Padded roid instead
//string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(padroiddel).value);
if (activeDRoids.Contains(del.Substring(0, 12).ToUpper()))
{
using (DROUsageInfoList Daffected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted", versionList))
{
foreach (DROUsageInfo droUsg in Daffected)
{
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
Pdf.DeleteAll(droUsg.DocID);
}
}
}
}
}
if (myProgressBarRefresh != null) myProgressBarRefresh(100, 100, "RO Values Updated");
}
private static DateTime ShowDuration(DateTime dtLast, string message)
{ {
DateTime dtNext = DateTime.Now; DateTime dtNext = DateTime.Now;
Console.WriteLine("{0,10:#####0.00},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - dtLast.Ticks).TotalSeconds, message); Console.WriteLine("{0,10:#####0.00},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - dtLast.Ticks).TotalSeconds, message);
@@ -931,10 +1099,10 @@ namespace VEPROMS.CSLA.Library
} }
} }
#endregion #endregion
} }
public class ROFstInfoROTableUpdateEventArgs public class ROFstInfoROTableUpdateEventArgs
{ {
private string _ROText; private string _ROText;
public string ROText public string ROText
@@ -1084,5 +1252,5 @@ namespace VEPROMS.CSLA.Library
this.RaiseListChangedEvents = true; this.RaiseListChangedEvents = true;
} }
} }
} }
@@ -597,6 +597,13 @@ namespace VEPROMS.CSLA.Library
//if (_RevisionInfoList != null) //if (_RevisionInfoList != null)
// return _RevisionInfoList; // return _RevisionInfoList;
RevisionInfoList tmp = DataPortal.Fetch<RevisionInfoList>(new ItemUnitCriteria(itemID, unitID)); RevisionInfoList tmp = DataPortal.Fetch<RevisionInfoList>(new ItemUnitCriteria(itemID, unitID));
foreach (var x in tmp)
{
x.LatestVersion.ApprovedXML = x.RevisionID.ToString();
x.LatestVersion.PDF = Encoding.ASCII.GetBytes(x.RevisionID.ToString());
x.LatestVersion.SummaryPDF = Encoding.ASCII.GetBytes(x.RevisionID.ToString());
}
RevisionInfo.AddList(tmp); RevisionInfo.AddList(tmp);
tmp.AddEvents(); tmp.AddEvents();
//_RevisionInfoList = tmp; //_RevisionInfoList = tmp;
+9 -12
View File
@@ -522,22 +522,19 @@ namespace VEPROMS.CSLA.Library
} }
public static Pdf MakePdf(Document myDocument, int debugStatus, int topRow, int pageLength, int leftMargin, int pageWidth, double pageCount, byte[] docPdf) public static Pdf MakePdf(Document myDocument, int debugStatus, int topRow, int pageLength, int leftMargin, int pageWidth, double pageCount, byte[] docPdf)
{ {
using (Pdf tmp = Pdf.New(myDocument, debugStatus, topRow, pageLength, leftMargin, pageWidth, pageCount, docPdf)) Pdf tmp = Pdf.New(myDocument, debugStatus, topRow, pageLength, leftMargin, pageWidth, pageCount, docPdf);
if (tmp.IsSavable)
tmp = tmp.Save();
else
{ {
if (tmp.IsSavable) Csla.Validation.BrokenRulesCollection brc = tmp.ValidationRules.GetBrokenRules();
return tmp.Save(); tmp._ErrorMessage = "Failed Validation:";
else foreach (Csla.Validation.BrokenRule br in brc)
{ {
Csla.Validation.BrokenRulesCollection brc = tmp.ValidationRules.GetBrokenRules(); tmp._ErrorMessage += "\r\n\tFailure: " + br.RuleName;
tmp._ErrorMessage = "Failed Validation:";
foreach (Csla.Validation.BrokenRule br in brc)
{
tmp._ErrorMessage += "\r\n\tFailure: " + br.RuleName;
}
return tmp;
} }
} }
return tmp;
} }
public static Pdf Get(int docID, int debugStatus, int topRow, int pageLength, int leftMargin, int pageWidth) public static Pdf Get(int docID, int debugStatus, int topRow, int pageLength, int leftMargin, int pageWidth)
{ {
@@ -1,72 +0,0 @@
using System;
using Csla.Data;
using System.Data;
using System.Data.SqlClient;
//CSM - C2026-010 - Minimal Class for Managing Change Bar Audit History
namespace VEPROMS.CSLA.Library
{
public static class ChangeBarAuditHistory
{
#region Add Audit Record for ChangeBar History
public static void AddAudit(int itemID, string description, DateTime dts, string userID, int unitIndex)
{
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "AddChangeBarAuditHistory";
cm.Parameters.AddWithValue("@ItemID", itemID);
cm.Parameters.AddWithValue("@Description", description);
cm.Parameters.AddWithValue("@DTS", dts);
cm.Parameters.AddWithValue("@UserID", userID);
if (unitIndex != 0) cm.Parameters.AddWithValue("@UnitIndex", unitIndex);
cm.CommandTimeout = 0;
cm.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
throw new DbCslaException("Error in ChangeBarAuditHistory.AddAudit: ", ex);
}
}
#endregion
#region Get Change Bar Audit History
public static DataTable GetChangeBarAuditHistory(int itemID)
{
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "GetChangeBarAuditHistoryByItem";
cm.Parameters.AddWithValue("@ItemID", itemID);
cm.CommandTimeout = Database.DefaultTimeout;
using (SqlDataAdapter da = new SqlDataAdapter(cm))
{
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
}
}
catch (Exception ex)
{
throw new DbCslaException("Error in ChangeBarAuditHistory.GetChangeBarAuditHistoryByItem: retrieving data failed", ex);
}
}
#endregion
}
}
@@ -86,38 +86,7 @@ namespace VEPROMS.CSLA.Library
throw new DbCslaException("Error in vesp_GetOtherActiveSessions: retrieving data failed", ex); throw new DbCslaException("Error in vesp_GetOtherActiveSessions: retrieving data failed", ex);
} }
} }
#endregion #endregion
#region Get Docs by Unit }
//C2026-007 Get Missing Docs by Unit
// for Generating/Regenerating Pdf table
// can be ran overnight to assist with Printing when RO Updates
// and large Word Sections conatining ROs
public static DataTable GetMissingDocsByUnit()
{
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "GetMissingDocsByUnit";
cm.CommandTimeout = Database.DefaultTimeout;
using (SqlDataAdapter da = new SqlDataAdapter(cm))
{
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
}
}
catch (Exception ex)
{
throw new DbCslaException("Error in GetMissingDocsByUnit: retrieving data failed", ex);
}
}
#endregion
}
} }
@@ -1,53 +0,0 @@
using Csla.Data;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
//CSM - C2026-009 - Minimal Class for Getting Revision Data
namespace VEPROMS.CSLA.Library
{
public static class RevisionData
{
#region Check Data
//Check if Data Has Units
public static bool HasUnits(DataTable dt) => dt.AsEnumerable().Any(x => x.Field<int?>("UnitID") > 0);
//Get Maximum Date Time Stamp
public static DateTime MaxDTS(DataTable dt) => dt.AsEnumerable().Max(x => x.Field<DateTime>("DTS"));
#endregion
#region Get Revision Data
//CSM - C2026-009 Get Current Revision Data by Unit
public static DataTable GetRevisionDataByUnit(int itemID)
{
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "GetCurrentApprovedRevisions";
cm.CommandTimeout = Database.DefaultTimeout;
cm.Parameters.AddWithValue("@ItemID", itemID);
using (SqlDataAdapter da = new SqlDataAdapter(cm))
{
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
}
}
catch (Exception ex)
{
throw new DbCslaException("Error in GetRevisionDataByUnit: retrieving data failed", ex);
}
}
#endregion
}
}
@@ -389,10 +389,8 @@
<Compile Include="Generated\ZTransition.cs" /> <Compile Include="Generated\ZTransition.cs" />
<Compile Include="Generated\ZTransitionInfo.cs" /> <Compile Include="Generated\ZTransitionInfo.cs" />
<Compile Include="Minimal\AnnotationstypeSections.cs" /> <Compile Include="Minimal\AnnotationstypeSections.cs" />
<Compile Include="Minimal\ChangeBarAuditHistory.cs" />
<Compile Include="Minimal\Maintenance.cs" /> <Compile Include="Minimal\Maintenance.cs" />
<Compile Include="Minimal\GeneralReports.cs" /> <Compile Include="Minimal\GeneralReports.cs" />
<Compile Include="Minimal\RevisionData.cs" />
<Compile Include="Minimal\UserReports.cs" /> <Compile Include="Minimal\UserReports.cs" />
<Compile Include="Minimal\UserSettings.cs" /> <Compile Include="Minimal\UserSettings.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
@@ -1,17 +1,16 @@
using JR.Utils.GUI.Forms;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Data;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Base.Library; using Volian.Base.Library;
using Volian.Pipe.Library; using Volian.Pipe.Library;
using System.Xml;
using System.Diagnostics;
using JR.Utils.GUI.Forms;
namespace Volian.Controls.Library namespace Volian.Controls.Library
{ {
@@ -221,10 +220,7 @@ namespace Volian.Controls.Library
{ {
if (!DesignMode) // B2019-043 need to check if we are just saving changes to the user interface if (!DesignMode) // B2019-043 need to check if we are just saving changes to the user interface
{ {
if (value != null) rtxbComment.Text = value;
{
rtxbComment.Text = Regex.Replace(value, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString());
}
if (rtxbComment.Text != string.Empty) if (rtxbComment.Text != string.Empty)
rtxbComment.SelectionStart = rtxbComment.TextLength; // position cursor to end of text rtxbComment.SelectionStart = rtxbComment.TextLength; // position cursor to end of text
} }
-121
View File
@@ -1,121 +0,0 @@
namespace Volian.Controls.Library
{
partial class CustomMessageBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.btn1 = new System.Windows.Forms.Button();
this.btn2 = new System.Windows.Forms.Button();
this.lblMessage = new System.Windows.Forms.Label();
this.tableLP1 = new System.Windows.Forms.TableLayoutPanel();
this.tableLP1.SuspendLayout();
this.SuspendLayout();
//
// btn1
//
this.btn1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btn1.AutoSize = true;
this.btn1.Location = new System.Drawing.Point(18, 102);
this.btn1.Margin = new System.Windows.Forms.Padding(10);
this.btn1.MinimumSize = new System.Drawing.Size(60, 20);
this.btn1.Name = "btn1";
this.btn1.Size = new System.Drawing.Size(60, 20);
this.btn1.TabIndex = 0;
this.btn1.UseVisualStyleBackColor = true;
this.btn1.Click += new System.EventHandler(this.Btn1_Click);
//
// btn2
//
this.btn2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btn2.AutoSize = true;
this.btn2.Location = new System.Drawing.Point(335, 102);
this.btn2.Margin = new System.Windows.Forms.Padding(10);
this.btn2.MinimumSize = new System.Drawing.Size(60, 20);
this.btn2.Name = "btn2";
this.btn2.Size = new System.Drawing.Size(60, 20);
this.btn2.TabIndex = 1;
this.btn2.UseVisualStyleBackColor = true;
this.btn2.Click += new System.EventHandler(this.Btn2_Click);
//
// lblMessage
//
this.lblMessage.AutoSize = true;
this.tableLP1.SetColumnSpan(this.lblMessage, 2);
this.lblMessage.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblMessage.Location = new System.Drawing.Point(11, 8);
this.lblMessage.MaximumSize = new System.Drawing.Size(413, 0);
this.lblMessage.Name = "lblMessage";
this.lblMessage.Size = new System.Drawing.Size(391, 84);
this.lblMessage.TabIndex = 2;
this.lblMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// tableLP1
//
this.tableLP1.AutoSize = true;
this.tableLP1.ColumnCount = 2;
this.tableLP1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLP1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLP1.Controls.Add(this.lblMessage, 0, 0);
this.tableLP1.Controls.Add(this.btn1);
this.tableLP1.Controls.Add(this.btn2);
this.tableLP1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLP1.Location = new System.Drawing.Point(0, 0);
this.tableLP1.MaximumSize = new System.Drawing.Size(413, 0);
this.tableLP1.MinimumSize = new System.Drawing.Size(413, 130);
this.tableLP1.Name = "tableLP1";
this.tableLP1.Padding = new System.Windows.Forms.Padding(8);
this.tableLP1.RowCount = 2;
this.tableLP1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLP1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLP1.Size = new System.Drawing.Size(413, 130);
this.tableLP1.TabIndex = 0;
//
// CustomMessageBox
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.ClientSize = new System.Drawing.Size(419, 130);
this.Controls.Add(this.tableLP1);
this.Name = "CustomMessageBox";
this.ShowIcon = false;
this.Text = "CustomMessageBox";
this.tableLP1.ResumeLayout(false);
this.tableLP1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btn1;
private System.Windows.Forms.Button btn2;
private System.Windows.Forms.Label lblMessage;
private System.Windows.Forms.TableLayoutPanel tableLP1;
}
}
@@ -1,62 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Volian.Controls.Library
{
public partial class CustomMessageBox : Form
{
//Custome Message Box Class to allow renaming of buttons
// originally devleoped for use with
// C2025-062 When Search clicked - Load the Incoming transitions for the Active Procedure
// in order to allow the user to decide if they wanted to search on the selected step or the selected procedure
public CustomMessageBox(string message, string title, string button1Text = "OK", string button2Text = "")
{
InitializeComponent();
this.Text = title;
lblMessage.Text = message;
btn1.Text = button1Text;
if (!string.IsNullOrEmpty(button2Text))
{
btn2.Text = button2Text;
btn2.Visible = true;
//make buttons uniform
btn1.Height = btn2.Height = btn1.Height > btn2.Height ? btn1.Height : btn2.Height;
btn1.Width = btn2.Width = btn1.Width > btn2.Width ? btn1.Width : btn2.Width;
}
else
{
btn2.Visible = false;
}
}
private void Btn1_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Yes;
Close();
}
private void Btn2_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.No;
Close();
}
//static method for calling custommessagebox directly
public static DialogResult Show(string message, string title, string button1Text = "OK", string button2Text = "")
{
using (var messageBox = new CustomMessageBox(message, title, button1Text, button2Text))
{
return messageBox.ShowDialog();
}
}
}
}
@@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
File diff suppressed because it is too large Load Diff
+14 -44
View File
@@ -1,6 +1,3 @@
using System.Security.Cryptography;
using VEPROMS.CSLA.Library;
namespace Volian.Controls.Library namespace Volian.Controls.Library
{ {
partial class DisplayApplicability partial class DisplayApplicability
@@ -33,40 +30,19 @@ namespace Volian.Controls.Library
{ {
this.gpMode = new DevComponents.DotNetBar.Controls.GroupPanel(); this.gpMode = new DevComponents.DotNetBar.Controls.GroupPanel();
this.gpItem = new DevComponents.DotNetBar.Controls.GroupPanel(); this.gpItem = new DevComponents.DotNetBar.Controls.GroupPanel();
this.btnApplicabilitychg = new DevComponents.DotNetBar.ButtonX();
this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip();
this.gpItem.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// btnApplicabilitychg
//
this.btnApplicabilitychg.Location = new System.Drawing.Point(90, 8);
this.btnApplicabilitychg.Margin = new System.Windows.Forms.Padding(4);
this.btnApplicabilitychg.BackColor = System.Drawing.SystemColors.Control;
this.btnApplicabilitychg.Name = "btnApplicabilitychg";
this.btnApplicabilitychg.Size = new System.Drawing.Size(87, 22);
this.btnApplicabilitychg.Margin = new System.Windows.Forms.Padding(2);
this.btnApplicabilitychg.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.superTooltip1.SetSuperTooltip(this.btnApplicabilitychg, new DevComponents.DotNetBar.SuperTooltipInfo("Set All at Level", "", "When clicked, all steps at that level of the current step will be set to the selected applicability. Note that the Set All at Level button is disabled for RNO step types unless they are substeps off of a RNO step.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); // C2026-034 fix tool tip text.
this.btnApplicabilitychg.TabIndex = 0;
this.btnApplicabilitychg.Text = "Set All at Level";
this.btnApplicabilitychg.ColorTable = DevComponents.DotNetBar.eButtonColor.BlueOrb;
this.btnApplicabilitychg.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnApplicabilitychg.Click += new System.EventHandler(this.BtnApplicabilitychg_Click);
//
// gpMode // gpMode
// //
this.gpMode.AutoSize = true; this.gpMode.AutoSize = true;
this.gpMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gpMode.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.gpMode.CanvasColor = System.Drawing.SystemColors.Control; this.gpMode.CanvasColor = System.Drawing.SystemColors.Control;
this.gpMode.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007; this.gpMode.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007;
this.gpMode.DisabledBackColor = System.Drawing.Color.Empty;
this.gpMode.Dock = System.Windows.Forms.DockStyle.Top; this.gpMode.Dock = System.Windows.Forms.DockStyle.Top;
this.gpMode.Location = new System.Drawing.Point(0, 0); this.gpMode.Location = new System.Drawing.Point(0, 0);
this.gpMode.Margin = new System.Windows.Forms.Padding(4);
this.gpMode.Name = "gpMode"; this.gpMode.Name = "gpMode";
this.gpMode.Padding = new System.Windows.Forms.Padding(13, 12, 13, 37); this.gpMode.Padding = new System.Windows.Forms.Padding(10, 10, 10, 30);
this.gpMode.Size = new System.Drawing.Size(432, 49); this.gpMode.Size = new System.Drawing.Size(324, 40);
// //
// //
// //
@@ -82,6 +58,7 @@ namespace Volian.Controls.Library
this.gpMode.Style.BorderRightWidth = 1; this.gpMode.Style.BorderRightWidth = 1;
this.gpMode.Style.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; this.gpMode.Style.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid;
this.gpMode.Style.BorderTopWidth = 1; this.gpMode.Style.BorderTopWidth = 1;
this.gpMode.Style.Class = "";
this.gpMode.Style.CornerDiameter = 4; this.gpMode.Style.CornerDiameter = 4;
this.gpMode.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; this.gpMode.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded;
this.gpMode.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; this.gpMode.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center;
@@ -90,10 +67,12 @@ namespace Volian.Controls.Library
// //
// //
// //
this.gpMode.StyleMouseDown.Class = "";
this.gpMode.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.gpMode.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square;
// //
// //
// //
this.gpMode.StyleMouseOver.Class = "";
this.gpMode.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.gpMode.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.gpMode.TabIndex = 0; this.gpMode.TabIndex = 0;
this.gpMode.Text = "Viewing Mode"; this.gpMode.Text = "Viewing Mode";
@@ -104,13 +83,11 @@ namespace Volian.Controls.Library
this.gpItem.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.gpItem.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.gpItem.CanvasColor = System.Drawing.SystemColors.Control; this.gpItem.CanvasColor = System.Drawing.SystemColors.Control;
this.gpItem.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007; this.gpItem.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007;
this.gpItem.DisabledBackColor = System.Drawing.Color.Empty;
this.gpItem.Dock = System.Windows.Forms.DockStyle.Top; this.gpItem.Dock = System.Windows.Forms.DockStyle.Top;
this.gpItem.Location = new System.Drawing.Point(0, 49); this.gpItem.Location = new System.Drawing.Point(0, 40);
this.gpItem.Margin = new System.Windows.Forms.Padding(4);
this.gpItem.Name = "gpItem"; this.gpItem.Name = "gpItem";
this.gpItem.Padding = new System.Windows.Forms.Padding(0, 20, 0, 0); this.gpItem.Padding = new System.Windows.Forms.Padding(10, 10, 10, 30);
this.gpItem.Size = new System.Drawing.Size(432, 85); this.gpItem.Size = new System.Drawing.Size(324, 40);
// //
// //
// //
@@ -126,6 +103,7 @@ namespace Volian.Controls.Library
this.gpItem.Style.BorderRightWidth = 1; this.gpItem.Style.BorderRightWidth = 1;
this.gpItem.Style.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; this.gpItem.Style.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid;
this.gpItem.Style.BorderTopWidth = 1; this.gpItem.Style.BorderTopWidth = 1;
this.gpItem.Style.Class = "";
this.gpItem.Style.CornerDiameter = 4; this.gpItem.Style.CornerDiameter = 4;
this.gpItem.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; this.gpItem.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded;
this.gpItem.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; this.gpItem.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center;
@@ -134,31 +112,26 @@ namespace Volian.Controls.Library
// //
// //
// //
this.gpItem.StyleMouseDown.Class = "";
this.gpItem.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.gpItem.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square;
// //
// //
// //
this.gpItem.StyleMouseOver.Class = "";
this.gpItem.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.gpItem.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.gpItem.TabIndex = 1; this.gpItem.TabIndex = 1;
this.gpItem.Text = "Item Mode"; this.gpItem.Text = "Item Mode";
// //
// DisplayApplicability // DisplayApplicability
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.gpItem); this.Controls.Add(this.gpItem);
this.Controls.Add(this.gpMode); this.Controls.Add(this.gpMode);
this.Margin = new System.Windows.Forms.Padding(4);
this.Name = "DisplayApplicability"; this.Name = "DisplayApplicability";
this.Size = new System.Drawing.Size(432, 807); this.Size = new System.Drawing.Size(324, 656);
this.gpItem.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
//
// superTooltip1
//
this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray);
this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F";
} }
@@ -166,9 +139,6 @@ namespace Volian.Controls.Library
private DevComponents.DotNetBar.Controls.GroupPanel gpMode; private DevComponents.DotNetBar.Controls.GroupPanel gpMode;
private DevComponents.DotNetBar.Controls.GroupPanel gpItem; private DevComponents.DotNetBar.Controls.GroupPanel gpItem;
private DevComponents.DotNetBar.ButtonX btnApplicabilitychg;
private DevComponents.DotNetBar.SuperTooltip superTooltip1;
} }
} }
@@ -1,14 +1,12 @@
using JR.Utils.GUI.Forms;
using log4net.Util;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Data;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using JR.Utils.GUI.Forms;
namespace Volian.Controls.Library namespace Volian.Controls.Library
{ {
@@ -21,24 +19,20 @@ namespace Volian.Controls.Library
if (ApplicabilityViewModeChanged != null) if (ApplicabilityViewModeChanged != null)
ApplicabilityViewModeChanged(this, new EventArgs()); ApplicabilityViewModeChanged(this, new EventArgs());
} }
private DisplayTabItem _MyDisplayTabItem = null; private DisplayTabItem _MyDisplayTabItem = null;
public DisplayTabItem MyDisplayTabItem public DisplayTabItem MyDisplayTabItem
{ {
get { return _MyDisplayTabItem; } get { return _MyDisplayTabItem; }
set set
{ {
if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface
_MyDisplayTabItem = value; _MyDisplayTabItem = value;
gpMode.Controls.Clear(); gpMode.Controls.Clear();
gpItem.Controls.Clear(); gpItem.Controls.Clear();
MyCheckBoxes.Clear(); MyCheckBoxes.Clear();
if (_MyDisplayTabItem != null) if (_MyDisplayTabItem != null)
{ {
//B2026-043 Fix "Set All At Level" button. DocVersionConfig dcfg = _MyDisplayTabItem.MyItemInfo.MyDocVersion.MyConfig as DocVersionConfig;
DevComponents.DotNetBar.Controls.GroupPanel gpSubItem = InitializegpSubItem();
DocVersionConfig dcfg = _MyDisplayTabItem.MyItemInfo.MyDocVersion.MyConfig as DocVersionConfig;
List<string> names = new List<string>(); List<string> names = new List<string>();
for (int n = 1; n <= dcfg.Unit_Count; n++) for (int n = 1; n <= dcfg.Unit_Count; n++)
{ {
@@ -46,6 +40,7 @@ namespace Volian.Controls.Library
names.Add(dcfg.Unit_Name); names.Add(dcfg.Unit_Name);
} }
dcfg.SelectedSlave = 0; dcfg.SelectedSlave = 0;
// string[] names = dcfg.Unit_Name.Split(',');
int apple = -1; int apple = -1;
if(_MyDisplayTabItem.MyStepTabPanel != null) if(_MyDisplayTabItem.MyStepTabPanel != null)
apple = _MyDisplayTabItem.MyStepTabPanel.MyStepPanel.ApplDisplayMode; apple = _MyDisplayTabItem.MyStepTabPanel.MyStepPanel.ApplDisplayMode;
@@ -54,26 +49,17 @@ namespace Volian.Controls.Library
foreach (string name in names) foreach (string name in names)
{ {
i++; i++;
AddViewMode($"{name.Trim()} (View Only)", i.ToString(), apple == i); AddViewMode(name.Trim(), i.ToString(), apple == i);
} }
AddItemMode("All", "-1");
AddItemMode("All", "-1", ref gpSubItem);
i = 0; i = 0;
foreach (string name in names) foreach (string name in names)
AddItemMode(name.Trim(), (++i).ToString(), ref gpSubItem); AddItemMode(name.Trim(), (++i).ToString());
AddItemMode("None", "0", ref gpSubItem); AddItemMode("None", "0");
gpItem.Controls.Add(gpSubItem);
gpSubItem.BringToFront();
gpItem.Controls.Add(btnApplicabilitychg);
btnApplicabilitychg.BringToFront();
if (_MyDisplayTabItem.MyStepTabPanel != null) if (_MyDisplayTabItem.MyStepTabPanel != null)
{
MyItemInfo = _MyDisplayTabItem.MyStepTabPanel.MyStepPanel.SelectedItemInfo; MyItemInfo = _MyDisplayTabItem.MyStepTabPanel.MyStepPanel.SelectedItemInfo;
}
else else
{
MyItemInfo = _MyDisplayTabItem.MyItemInfo; MyItemInfo = _MyDisplayTabItem.MyItemInfo;
}
} }
} }
} }
@@ -90,34 +76,6 @@ namespace Volian.Controls.Library
return 0; return 0;
} }
} }
private DevComponents.DotNetBar.Controls.GroupPanel InitializegpSubItem() //B2026-043 Fix "Set All At Level" button.
{
DevComponents.DotNetBar.Controls.GroupPanel gpSubItem;
gpSubItem = new DevComponents.DotNetBar.Controls.GroupPanel
{
AutoSize = true,
AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink,
CanvasColor = System.Drawing.SystemColors.Control,
ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007,
DisabledBackColor = System.Drawing.Color.Empty,
Dock = System.Windows.Forms.DockStyle.Top,
Location = new System.Drawing.Point(0, 49),
Margin = new System.Windows.Forms.Padding(4),
Name = "gpSubItem",
Padding = new System.Windows.Forms.Padding(13, 12, 13, 37)
};
gpSubItem.BackColor = Color.Transparent;
gpSubItem.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center;
gpSubItem.Style.TextColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText;
gpSubItem.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near;
gpSubItem.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square;
gpSubItem.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square;
gpSubItem.TabIndex = 1;
gpSubItem.Text = "";
gpSubItem.Location = new System.Drawing.Point(0, 49);
gpSubItem.Size = new System.Drawing.Size(400, 250);
return gpSubItem;
}
private Dictionary<int, CheckBox> MyCheckBoxes = new Dictionary<int, CheckBox>(); private Dictionary<int, CheckBox> MyCheckBoxes = new Dictionary<int, CheckBox>();
private string _MyApplicability = string.Empty; private string _MyApplicability = string.Empty;
public string MyApplicability public string MyApplicability
@@ -126,29 +84,55 @@ namespace Volian.Controls.Library
set { _MyApplicability = value; } set { _MyApplicability = value; }
} }
//C2026-021 Expand Functionality of Viewing Mode //private ProcedureInfo _MyProcedureInfo;
public bool ShowItemSelection = true; //public ProcedureInfo MyProcedureInfo
public void SetEnableDisableItemSelection(bool value) => gpItem.Enabled = ShowItemSelection = value; //{
//get { return _MyProcedureInfo; }
private void AddItemMode(string name, string value, ref DevComponents.DotNetBar.Controls.GroupPanel gpSubItem) //set
//{
// _MyProcedureInfo = value;
// if (_MyProcedureInfo != null && _MyProcedureInfo.IsProcedure)
// {
// DocVersionConfig cfg = new DocVersionConfig(_MyProcedureInfo.MyDocVersion);
// if (cfg.Unit_Name == string.Empty)
// this.Visible = false;
// else
// {
// string[] names = cfg.Unit_Name.Split(',');
// gpMode.Controls.Clear();
// gpItem.Controls.Clear();
// MyCheckBoxes.Clear();
// AddViewMode("Master", "-1", true);
// int i = 0;
// foreach (string name in names)
// {
// AddViewMode(name.Trim(), (++i).ToString());
// }
// AddItemMode("All", "-1");
// i = 0;
// foreach (string name in names)
// AddItemMode(name.Trim(), (++i).ToString());
// AddItemMode("None", "0");
// //if(!this.Visible)
// // this.Visible = true;
// }
// }
//}
//}
private void AddItemMode(string name, string value)
{ {
CheckBox cb = new CheckBox(); CheckBox cb = new CheckBox();
cb.BackColor = Color.Transparent; cb.BackColor = Color.Transparent;
cb.Height = 24;
cb.Width = 75;
cb.AutoSize = true;
cb.Text = name; cb.Text = name;
cb.Tag = value; cb.Tag = value;
cb.Dock = DockStyle.Top; cb.Dock = DockStyle.Top;
gpSubItem.Controls.Add(cb); gpItem.Controls.Add(cb);
cb.BringToFront(); cb.BringToFront();
cb.CheckedChanged += new EventHandler(cb_CheckedChanged); cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
MyCheckBoxes.Add(value == null ? -1 : int.Parse(value), cb); MyCheckBoxes.Add(value == null ? -1 : int.Parse(value), cb);
} }
private void cb_CheckedChanged(object sender, EventArgs e) private void cb_CheckedChanged(object sender, EventArgs e)
{ {
EditItem ei = MyDisplayTabItem.MyStepTabPanel.SelectedEditItem;
ei.SaveCurrentAndContents(); // C2026-035 save unsaved step text.
UnwireCheckboxes(false); UnwireCheckboxes(false);
CheckBox cb = sender as CheckBox; CheckBox cb = sender as CheckBox;
CheckState cs = cb.CheckState; CheckState cs = cb.CheckState;
@@ -191,8 +175,7 @@ namespace Volian.Controls.Library
} }
break; break;
} }
WireCheckboxes();
WireCheckboxes();
MyApplicability = string.Empty; MyApplicability = string.Empty;
string sep = string.Empty; string sep = string.Empty;
foreach (int i in MyCheckBoxes.Keys) foreach (int i in MyCheckBoxes.Keys)
@@ -216,13 +199,25 @@ namespace Volian.Controls.Library
} }
} }
} }
//IItemConfig cfg = MyItemInfo.MyConfig as IItemConfig;
//cfg.MasterSlave_Applicability.SetFlags(MyApplicability);
//Content c = Content.Get(MyItemInfo.MyContent.ContentID);
//c.Save();
//foreach (TransitionInfo ti in MyItemInfo.ItemTransitions_ToID)
//{
// if (!ti.MyItemToID.IsApplicable(MyApplicability))
// {
// MessageBox.Show("you can't do this");
// return;
// }
//}
List<InvalidTransition> invalidTrans = WillTransitionsBeValidCommand.Execute(MyItemInfo.ItemID, MyApplicability); List<InvalidTransition> invalidTrans = WillTransitionsBeValidCommand.Execute(MyItemInfo.ItemID, MyApplicability);
// B2021-149: for Procedure level PC/PC, continue processing if all 'invalid' transitions are internal (query used // B2021-149: for Procedure level PC/PC, continue processing if all 'invalid' transitions are internal (query used
// return internal and external for the procedure level) // return internal and external for the procedure level)
if ((!MyItemInfo.IsProcedure && invalidTrans.Count == 0) || IsProcWithNoExternalTrans(MyItemInfo, invalidTrans)) if ((!MyItemInfo.IsProcedure && invalidTrans.Count == 0) || IsProcWithNoExternalTrans(MyItemInfo, invalidTrans))
{ {
// C2021 - 027: Procedure level PC/PC // C2021 - 027: Procedure level PC/PC
if (MyItemInfo.IsProcedure && MyItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ProcAppl) if (MyItemInfo.IsProcedure && MyItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ProcAppl)
{ {
ProcedureConfig sc = MyItemInfo.MyConfig as ProcedureConfig; ProcedureConfig sc = MyItemInfo.MyConfig as ProcedureConfig;
sc.MasterSlave_Applicability = Volian.Base.Library.BigNum.MakeBigNum(MyApplicability); sc.MasterSlave_Applicability = Volian.Base.Library.BigNum.MakeBigNum(MyApplicability);
@@ -260,66 +255,23 @@ namespace Volian.Controls.Library
// C2021 - 027: Procedure level PC/PC - checkbox for applicability changed, fix ribbon's menus // C2021 - 027: Procedure level PC/PC - checkbox for applicability changed, fix ribbon's menus
if (MyItemInfo.IsProcedure) _MyDisplayTabItem.MyStepTabPanel.MyStepTabRibbon.SetParentChildCreatePDFButton(MyItemInfo.MyDocVersion.UnitNames, MyItemInfo); if (MyItemInfo.IsProcedure) _MyDisplayTabItem.MyStepTabPanel.MyStepTabRibbon.SetParentChildCreatePDFButton(MyItemInfo.MyDocVersion.UnitNames, MyItemInfo);
//using (Content cnt = Content.Get(MyItemInfo.MyContent.ContentID))
//{
// cnt.DTS = DateTime.Now;
// cnt.UserID = Volian.Base.Library.VlnSettings.UserID;
// //cnt.Save();
//}
//using (Step s = Step.Get(MyItemInfo.ItemID))
//{
// IItemConfig cfg = new StepConfig(s);
// cfg.MasterSlave_Applicability = new Volian.Base.Library.BigNum(MyApplicability);
// s.MyContent.Config = cfg.ToString();
// s.Save();
//}
} }
private void BtnApplicabilitychg_Click(object sender, System.EventArgs e) // B2021-149: for procedure, only consider external transitions as invalid
{ private bool IsProcWithNoExternalTrans(ItemInfo ii, List<InvalidTransition> invalidTrans)
Volian.Base.Library.BigNum MasterSlave_ApplicabilityTmp;
StepConfig sc = MyItemInfo.MyConfig as StepConfig;
MasterSlave_ApplicabilityTmp = sc.MasterSlave_Applicability;
StringBuilder sb = new StringBuilder();
EditItem ei = MyDisplayTabItem.MyStepTabPanel.SelectedEditItem;
ei.SaveCurrentAndContents(); // C2026-035 save unsaved step text.
ItemInfo startitm = MyItemInfo.FirstSibling;
while (startitm != null)
{
// C2026-023: Check for Transitions when setting Applicability to all for a level
List<InvalidTransition> invalidTrans = WillTransitionsBeValidCommand.Execute(startitm.ItemID, MasterSlave_ApplicabilityTmp.ToString());
if (IsProcWithNoExternalTrans(startitm, invalidTrans))
{
StepConfig sc2 = startitm.MyConfig as StepConfig;
using (Content cnt = Content.Get(startitm.MyContent.ContentID))
{
sc2.MasterSlave_Applicability = (MasterSlave_ApplicabilityTmp);
cnt.Config = sc2.ToString();
cnt.Save();
}
}
else
{
if (sb.Length == 0)
{
sb.AppendLine("The applicability for some Step(s) cannot be changed due to transition links.");
sb.AppendLine("Applicability settings for these steps will return to original settings when OK is selected.");
sb.AppendLine("Changing the applicability for would invalidate a transition in the following steps:");
sb.AppendLine();
}
foreach (InvalidTransition inv in invalidTrans.Where(x => !x.TgtStep.StartsWith(x.SrcStep)))
{
sb.AppendLine(string.Format("{0} : From {1} to {2}.", startitm.MyTab.CleanTextNoSymbols.Trim(), inv.TgtStep, inv.SrcStep));
}
invalidTrans.Clear();
}
startitm = startitm.GetNext();
}
_MyDisplayTabItem.MyStepTabPanel.MyStepTabRibbon.RefreshProcedure();
if (sb.Length > 0)
FlexibleMessageBox.Show(sb.ToString(), "Transitions Affected By Applicability Change");
}
// B2021-149: for procedure, only consider external transitions as invalid
private bool IsProcWithNoExternalTrans(ItemInfo ii, List<InvalidTransition> invalidTrans)
{ {
if (invalidTrans.Count == 0) return true; if (invalidTrans.Count == 0) return true;
foreach (InvalidTransition iT in invalidTrans) foreach (InvalidTransition iT in invalidTrans)
@@ -375,18 +327,10 @@ namespace Volian.Controls.Library
} }
} }
} }
_MyItemInfo = value; _MyItemInfo = value;
if (_MyItemInfo != null) if (_MyItemInfo != null)
{ {
if (this.Visible == false) return; if (this.Visible == false) return;
if (_MyItemInfo.IsRNOPart == true) // Check if step is an RNO disable "Set All To Level" button.
{
btnApplicabilitychg.Enabled = false;
}
else
{
btnApplicabilitychg.Enabled = true;
}
IItemConfig cfg = _MyItemInfo.MyConfig as IItemConfig; IItemConfig cfg = _MyItemInfo.MyConfig as IItemConfig;
List<int> apples = cfg.MasterSlave_Applicability.GetFlags(); List<int> apples = cfg.MasterSlave_Applicability.GetFlags();
UnwireCheckboxes(true); UnwireCheckboxes(true);
@@ -482,15 +426,14 @@ namespace Volian.Controls.Library
public DisplayApplicability() public DisplayApplicability()
{ {
InitializeComponent(); //B2026-043 Fix "Set All At Level" button. InitializeComponent();
this.VisibleChanged += new EventHandler(DisplayApplicability_VisibleChanged); this.VisibleChanged += new EventHandler(DisplayApplicability_VisibleChanged);
} }
void DisplayApplicability_VisibleChanged(object sender, EventArgs e) void DisplayApplicability_VisibleChanged(object sender, EventArgs e)
{ {
MyItemInfo = MyItemInfo; MyItemInfo = MyItemInfo;
gpItem.Enabled = ShowItemSelection && UserInfo.CanEdit(MyUserInfo,(MyItemInfo == null) ? null : MyItemInfo.MyDocVersion); //Can Change Applicability gpItem.Enabled = UserInfo.CanEdit(MyUserInfo,(MyItemInfo == null) ? null : MyItemInfo.MyDocVersion); //Can Change Applicability
} }
} }
} }
@@ -11,7 +11,7 @@ using System.Text.RegularExpressions;
using JR.Utils.GUI.Forms; using JR.Utils.GUI.Forms;
using Volian.Base.Library; using Volian.Base.Library;
using System.Linq; using System.Linq;
namespace Volian.Controls.Library namespace Volian.Controls.Library
{ {
public partial class DisplayHistory : UserControl public partial class DisplayHistory : UserControl
@@ -56,20 +56,7 @@ namespace Volian.Controls.Library
set set
{ {
if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface
if (value is ProcedureInfo && _MyProcedureInfo is ProcedureInfo && value.ItemID == _MyProcedureInfo.ItemID)
//CSM - C2026-010 - Set/Show Change Bar Audit History
if (value != null)
{
lbChangeBarHistory.DataSource = ChangeBarAuditHistory.GetChangeBarAuditHistory(value.ItemID);
lbChangeBarHistory.ValueMember = "AuditID";
lbChangeBarHistory.DisplayMember = "Text";
}
else
{
lbChangeBarHistory.DataSource = null;
}
if (value is ProcedureInfo && _MyProcedureInfo is ProcedureInfo && value.ItemID == _MyProcedureInfo.ItemID)
return; return;
_MyProcedureInfo = value; _MyProcedureInfo = value;
if (value == null) return; if (value == null) return;
@@ -197,15 +184,6 @@ namespace Volian.Controls.Library
InitializeComponent(); InitializeComponent();
myRTB.FormatFont = null; myRTB.FormatFont = null;
RefreshRequired = true; RefreshRequired = true;
if (MyProcedureInfo != null)
{
lbChangeBarHistory.DataSource = ChangeBarAuditHistory.GetChangeBarAuditHistory(MyProcedureInfo.ItemID);
}
else
{
lbChangeBarHistory.DataSource = null;
}
} }
private void lbChanges_VisibleChanged(object sender, System.EventArgs e) private void lbChanges_VisibleChanged(object sender, System.EventArgs e)
@@ -1097,25 +1075,7 @@ namespace Volian.Controls.Library
{ {
tvAudits.Height = ((tcpDetail.Height - btnRestore.Height) / 4) * 3; tvAudits.Height = ((tcpDetail.Height - btnRestore.Height) / 4) * 3;
} }
public void RefreshChangeList()
//CSM - C2026-010 - Set/Show Change Bar Audit History
//Display a Tooltip for what was in the list
private void LbChangeBarHistory_MouseMove(object sender, MouseEventArgs e)
{
// Just use the item's value for the tooltip.
int index = lbChangeBarHistory.IndexFromPoint(e.Location);
if (index != ListBox.NoMatches)
{
DataRow rw = (lbChangeBarHistory.Items[index] as DataRowView)?.Row;
// Display the item's value as a tooltip.
if (tipCBHistory.GetToolTip(lbChangeBarHistory) != rw["Text"].ToString())
tipCBHistory.SetToolTip(lbChangeBarHistory, rw["Text"].ToString());
}
}
public void RefreshChangeList()
{ {
myTimer.Enabled = false; myTimer.Enabled = false;
myTimer.Enabled = true; myTimer.Enabled = true;
Binary file not shown.
@@ -112,13 +112,13 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="myVFG.MyBorderDetailString" xml:space="preserve"> <data name="myVFG.MyBorderDetailString" xml:space="preserve">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt; <value>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;VlnBorders Rows="4" Columns="3"&gt; &lt;VlnBorders Rows="4" Columns="3"&gt;
&lt;VerticalLines Rows="4" Columns="4"&gt; &lt;VerticalLines Rows="4" Columns="4"&gt;
&lt;Lines&gt; &lt;Lines&gt;
@@ -160,35 +160,8 @@
&lt;/Lines&gt; &lt;/Lines&gt;
&lt;/HorizontalLines&gt; &lt;/HorizontalLines&gt;
&lt;/VlnBorders&gt;</value> &lt;/VlnBorders&gt;</value>
</data>
<data name="myVFG.MyShadingDetailString" xml:space="preserve">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;VlnGridCellShading Rows="4" Columns="3"&gt;
&lt;TableShadingInfo Rows="4" Columns="3"&gt;
&lt;CellShadingColor&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;string&gt;[A=255, R=255, G=255, B=255]&lt;/string&gt;
&lt;/CellShadingColor&gt;
&lt;/TableShadingInfo&gt;
&lt;/VlnGridCellShading&gt;</value>
</data> </data>
<data name="myVFG.StyleInfo" xml:space="preserve"> <data name="myVFG.StyleInfo" xml:space="preserve">
<value>Normal{Font:Microsoft Sans Serif, 8.25pt;BackColor:White;TextAlign:LeftTop;Border:Flat,1,Black,Both;} Alternate{BackColor:White;} Fixed{BackColor:Control;ForeColor:ControlText;Border:Flat,1,ControlDark,Both;BackgroundImageLayout:Hide;} Highlight{BackColor:LightCyan;ForeColor:Black;} Focus{BackColor:LightCyan;} Editor{} Search{BackColor:Highlight;ForeColor:HighlightText;} Frozen{BackColor:Beige;} FrozenAlternate{} NewRow{ForeColor:GrayText;} EmptyArea{BackColor:Transparent;Border:None,1,Black,Both;} SelectedColumnHeader{} SelectedRowHeader{} GrandTotal{BackColor:Black;ForeColor:White;} Subtotal0{BackColor:ControlDarkDark;ForeColor:White;} Subtotal1{BackColor:ControlDarkDark;ForeColor:White;} Subtotal2{BackColor:ControlDarkDark;ForeColor:White;} Subtotal3{BackColor:ControlDarkDark;ForeColor:White;} Subtotal4{BackColor:ControlDarkDark;ForeColor:White;} Subtotal5{BackColor:ControlDarkDark;ForeColor:White;} FilterEditor{} FirstCustomStyle{} </value> <value>Normal{Font:Microsoft Sans Serif, 8.25pt;BackColor:White;TextAlign:LeftTop;Border:Flat,1,Black,Both;} Alternate{BackColor:White;} Fixed{BackColor:Control;ForeColor:ControlText;Border:Flat,1,ControlDark,Both;BackgroundImageLayout:Hide;} Highlight{BackColor:LightCyan;ForeColor:Black;} Focus{BackColor:LightCyan;} Editor{} Search{BackColor:Highlight;ForeColor:HighlightText;} Frozen{BackColor:Beige;} NewRow{ForeColor:GrayText;} EmptyArea{BackColor:Transparent;Border:None,1,Black,Both;} SelectedColumnHeader{} SelectedRowHeader{} GrandTotal{BackColor:Black;ForeColor:White;} Subtotal0{BackColor:ControlDarkDark;ForeColor:White;} Subtotal1{BackColor:ControlDarkDark;ForeColor:White;} Subtotal2{BackColor:ControlDarkDark;ForeColor:White;} Subtotal3{BackColor:ControlDarkDark;ForeColor:White;} Subtotal4{BackColor:ControlDarkDark;ForeColor:White;} Subtotal5{BackColor:ControlDarkDark;ForeColor:White;} FilterEditor{} FirstCustomStyle{} </value>
</data> </data>
<metadata name="myTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="tipCBHistory.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>119, 17</value>
</metadata>
</root> </root>
+4 -5
View File
@@ -81,7 +81,7 @@ namespace Volian.Controls.Library
this.lbROId.Dock = System.Windows.Forms.DockStyle.Left; this.lbROId.Dock = System.Windows.Forms.DockStyle.Left;
this.lbROId.ForeColor = System.Drawing.SystemColors.Highlight; this.lbROId.ForeColor = System.Drawing.SystemColors.Highlight;
this.lbROId.Location = new System.Drawing.Point(48, 24); this.lbROId.Location = new System.Drawing.Point(48, 24);
this.lbROId.Margin = new System.Windows.Forms.Padding(2); this.lbROId.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.lbROId.Name = "lbROId"; this.lbROId.Name = "lbROId";
this.lbROId.Size = new System.Drawing.Size(183, 33); this.lbROId.Size = new System.Drawing.Size(183, 33);
this.superTooltip1.SetSuperTooltip(this.lbROId, new DevComponents.DotNetBar.SuperTooltipInfo("RO ID", "", "The RO ID for the selected RO Value will be displayed here. Double-Click to open" + this.superTooltip1.SetSuperTooltip(this.lbROId, new DevComponents.DotNetBar.SuperTooltipInfo("RO ID", "", "The RO ID for the selected RO Value will be displayed here. Double-Click to open" +
@@ -97,7 +97,7 @@ namespace Volian.Controls.Library
this.lblROID.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.lblROID.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.lblROID.Dock = System.Windows.Forms.DockStyle.Left; this.lblROID.Dock = System.Windows.Forms.DockStyle.Left;
this.lblROID.Location = new System.Drawing.Point(0, 24); this.lblROID.Location = new System.Drawing.Point(0, 24);
this.lblROID.Margin = new System.Windows.Forms.Padding(2); this.lblROID.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.lblROID.Name = "lblROID"; this.lblROID.Name = "lblROID";
this.lblROID.Size = new System.Drawing.Size(48, 33); this.lblROID.Size = new System.Drawing.Size(48, 33);
this.superTooltip1.SetSuperTooltip(this.lblROID, new DevComponents.DotNetBar.SuperTooltipInfo("RO ID", "", "The RO ID for the selected RO Value will be displayed here.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(150, 80))); this.superTooltip1.SetSuperTooltip(this.lblROID, new DevComponents.DotNetBar.SuperTooltipInfo("RO ID", "", "The RO ID for the selected RO Value will be displayed here.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(150, 80)));
@@ -139,7 +139,7 @@ namespace Volian.Controls.Library
this.btnGoToRO.Dock = System.Windows.Forms.DockStyle.Top; this.btnGoToRO.Dock = System.Windows.Forms.DockStyle.Top;
this.btnGoToRO.Enabled = false; this.btnGoToRO.Enabled = false;
this.btnGoToRO.Location = new System.Drawing.Point(0, 55); this.btnGoToRO.Location = new System.Drawing.Point(0, 55);
this.btnGoToRO.Margin = new System.Windows.Forms.Padding(2); this.btnGoToRO.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnGoToRO.Name = "btnGoToRO"; this.btnGoToRO.Name = "btnGoToRO";
this.btnGoToRO.Size = new System.Drawing.Size(233, 18); this.btnGoToRO.Size = new System.Drawing.Size(233, 18);
this.btnGoToRO.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnGoToRO.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
@@ -155,7 +155,7 @@ namespace Volian.Controls.Library
this.btnPreviewRO.Dock = System.Windows.Forms.DockStyle.Top; this.btnPreviewRO.Dock = System.Windows.Forms.DockStyle.Top;
this.btnPreviewRO.Enabled = false; this.btnPreviewRO.Enabled = false;
this.btnPreviewRO.Location = new System.Drawing.Point(0, 37); this.btnPreviewRO.Location = new System.Drawing.Point(0, 37);
this.btnPreviewRO.Margin = new System.Windows.Forms.Padding(2); this.btnPreviewRO.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnPreviewRO.Name = "btnPreviewRO"; this.btnPreviewRO.Name = "btnPreviewRO";
this.btnPreviewRO.Size = new System.Drawing.Size(233, 18); this.btnPreviewRO.Size = new System.Drawing.Size(233, 18);
this.superTooltip1.SetSuperTooltip(this.btnPreviewRO, new DevComponents.DotNetBar.SuperTooltipInfo("Preview", "", "This will Preview the selected RO Table, X/Y Plot, or Image.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(150, 80))); this.superTooltip1.SetSuperTooltip(this.btnPreviewRO, new DevComponents.DotNetBar.SuperTooltipInfo("Preview", "", "This will Preview the selected RO Table, X/Y Plot, or Image.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(150, 80)));
@@ -263,7 +263,6 @@ namespace Volian.Controls.Library
this.Controls.Add(this.tvROFST); this.Controls.Add(this.tvROFST);
this.Controls.Add(this.lbFound); this.Controls.Add(this.lbFound);
this.Controls.Add(this.panelValue); this.Controls.Add(this.panelValue);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Name = "DisplayRO"; this.Name = "DisplayRO";
this.Size = new System.Drawing.Size(233, 507); this.Size = new System.Drawing.Size(233, 507);
this.panelValue.ResumeLayout(false); this.panelValue.ResumeLayout(false);
+97 -203
View File
@@ -1,18 +1,18 @@
using DevComponents.DotNetBar;
using JR.Utils.GUI.Forms;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data;
using System.Drawing; using System.Drawing;
using System.IO; using System.Data;
using System.Linq;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Base.Library;
using XYPlots; using XYPlots;
using DevComponents.DotNetBar;
using System.Text.RegularExpressions;
using Volian.Base.Library;
using JR.Utils.GUI.Forms;
using System.Linq;
namespace Volian.Controls.Library namespace Volian.Controls.Library
{ {
@@ -59,11 +59,11 @@ namespace Volian.Controls.Library
private DisplayTags displayTags; private DisplayTags displayTags;
#endregion #endregion
#region Properties #region Properties
public ProgressBarItem ProgressBar public ProgressBarItem ProgressBar
{ {
get { return _progressBar; } get { return _progressBar; }
set { _progressBar = value; } set { _progressBar = value; }
@@ -89,10 +89,7 @@ namespace Volian.Controls.Library
(_myRTB != null && (_myRTB.IsRoTable != lastRTBwasROTable || _myRTB.IsRoFigure != lastRTBwasROFigure)); } (_myRTB != null && (_myRTB.IsRoTable != lastRTBwasROTable || _myRTB.IsRoFigure != lastRTBwasROFigure)); }
} }
//This flag will be set when the docversion gets updated to let it know that the full tree needs a refresh public ROFstInfo MyROFST
private bool changedDocVersion = false;
public ROFstInfo MyROFST
{ {
get { return _myROFST; } get { return _myROFST; }
set set
@@ -131,22 +128,16 @@ namespace Volian.Controls.Library
// B2022-135 Submitted for Admin Tools (Check RO Links tool) // B2022-135 Submitted for Admin Tools (Check RO Links tool)
if (_docVersionInfo == null || _docVersionInfo != value || _docVersionInfo.VersionID != value.VersionID) if (_docVersionInfo == null || _docVersionInfo != value || _docVersionInfo.VersionID != value.VersionID)
{ {
//Set flag for modified the docversion - should check for new ROs _docVersionInfo = value;
if (_docVersionInfo?.VersionID != value?.VersionID)
{
changedDocVersion = true;
}
_docVersionInfo = value;
if (_myRTB != null && (_docVersionInfo == null || _docVersionInfo.VersionID != _myRTB.MyDVI.VersionID)) if (_myRTB != null && (_docVersionInfo == null || _docVersionInfo.VersionID != _myRTB.MyDVI.VersionID))
{ {
_docVersionInfo = _myRTB.MyDVI; _docVersionInfo = _myRTB.MyDVI;
} }
} }
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures. // B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures.
_currDocVersionID = (_docVersionInfo != null) ? (int?)_docVersionInfo.VersionID : null; _currDocVersionID = (_docVersionInfo != null) ? (int?)_docVersionInfo.VersionID : null;
} }
} }
@@ -210,11 +201,7 @@ namespace Volian.Controls.Library
// B2022-098: [JPR] ROs not being resolved in Word Sections // B2022-098: [JPR] ROs not being resolved in Word Sections
CurROLink = null; CurROLink = null;
_savCurROLink = null; _savCurROLink = null;
}
//Clear flag for modified the docversion (if should check for new ROs)
//clearing this flag here prevents it from checking twice
changedDocVersion = false;
}
else if(_myRTB != value) else if(_myRTB != value)
{ {
if (_myRTB != null) if (_myRTB != null)
@@ -234,9 +221,9 @@ namespace Volian.Controls.Library
CurROLink = null; CurROLink = null;
_savCurROLink = null; _savCurROLink = null;
} }
// B2023-004 assign the doc version info associated with the current RTB (rich text box) // B2023-004 assign the doc version info associated with the current RTB (rich text box)
// this fixes an issue where unit designators could not be linked in the step edit (BNPP data) // this fixes an issue where unit designators could not be linked in the step edit (BNPP data)
MyDvi = _myRTB.MyItemInfo.MyDocVersion; MyDvi = _myRTB.MyItemInfo.MyDocVersion;
MyROFST = (_myRTB.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0) ? _myRTB.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst : null; MyROFST = (_myRTB.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0) ? _myRTB.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst : null;
} }
@@ -264,13 +251,11 @@ namespace Volian.Controls.Library
set { _myUserInfo = value; } set { _myUserInfo = value; }
} }
public SessionInfo MySessionInfo { get; set; } #endregion
#endregion #region Constructors
#region Constructors public DisplayRO()
public DisplayRO()
{ {
InitializeComponent(); InitializeComponent();
@@ -292,62 +277,48 @@ namespace Volian.Controls.Library
// Initialize the DisplayTags object // Initialize the DisplayTags object
displayTags = new DisplayTags(); displayTags = new DisplayTags();
_progressBar = null;
} }
#endregion #endregion
#region Event Handlers
#region (Progress Bar)
private string InitialProgressBarMessage #region Event Handlers
{
set
{
if (ProgressBar == null) return;
ProgressBar.Value = 0;
ProgressBar.Maximum = 100;
ProgressBar.Text = value;
Application.DoEvents();
}
}
private string FinalProgressBarMessage
{
set
{
if (ProgressBar == null) return;
ProgressBar.Text = value;
ProgressBar.Maximum = 100;
ProgressBar.Value = 100;
Application.DoEvents();
}
}
private void DoProgressBarRefresh(int value, int max, string text)
{
if (ProgressBar == null) return;
ProgressBar.Maximum = max;
ProgressBar.Value = value;
ProgressBar.Text = text;
Application.DoEvents();
}
#endregion #region (Progress Bar)
#region (RTB) private void ProgressBar_Initialize(int max, string desc)
{
if (_progressBar != null)
{
_progressBar.Maximum = max;
_progressBar.Text = desc;
_progressBar.TextVisible = true;
}
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time private void ProgressBar_SetValue(int curval)
// DisplayTab was changed {
// need to clear the RTB selected if (_progressBar != null)
// without resetting the DVI or FST {
// (those will be set manually / individually) _progressBar.Value = curval;
// this will prevent DVI and FST from changing to null then back again }
// which will trigger reloads }
public void ClearRTB()
{
_myRTB = null;
CurROLink = null;
_savCurROLink = null;
}
public void MyRTB_LinkChanged(object sender, StepPanelLinkEventArgs args) private void ProgressBar_Clear()
{
if (_progressBar != null)
{
_progressBar.Text = string.Empty;
_progressBar.Maximum = 0;
_progressBar.Value = 0;
}
}
#endregion
#region (RTB)
public void MyRTB_LinkChanged(object sender, StepPanelLinkEventArgs args)
{ {
CurROLink = null; CurROLink = null;
if (MyRTB.MyLinkText != null) CurROLink = args.MyLinkText.MyRoUsageInfo; if (MyRTB.MyLinkText != null) CurROLink = args.MyLinkText.MyRoUsageInfo;
@@ -408,7 +379,6 @@ namespace Volian.Controls.Library
if (chld.value != null) if (chld.value != null)
{ {
chld.value = Regex.Replace(chld.value, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : "");
RoUsageInfo SavROLink = null; RoUsageInfo SavROLink = null;
if (_savCurROLink != null) SavROLink = _savCurROLink; if (_savCurROLink != null) SavROLink = _savCurROLink;
@@ -594,106 +564,55 @@ namespace Volian.Controls.Library
} }
} }
private void lbFound_SelectedValueChanged(object sender, EventArgs e) private void lbFound_SelectedValueChanged(object sender, EventArgs e)
{
if (lbFound.Visible && lbFound.SelectedIndex >= 0 && lbFound.SelectedValue != null)
{
ExpandNode(Convert.ToString(lbFound.SelectedValue));
}
}
#endregion
#region (ROUpdate)
public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
{
return VlnFlexGrid.ROTableUpdate(sender, args);
}
#endregion
#endregion
#region Public Methods
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// changed to return true if the RO FST got updated
public bool LoadTree(bool forceReload = false)
{ {
bool updatedROs = false; if (lbFound.Visible && lbFound.SelectedIndex >= 0 && lbFound.SelectedValue != null)
{
ExpandNode(Convert.ToString(lbFound.SelectedValue));
}
}
#endregion
#endregion
#region Public Methods
public void LoadTree(bool forceReload = false)
{
if (MyROFST == null) if (MyROFST == null)
{ {
tvROFST.Nodes.Clear(); tvROFST.Nodes.Clear();
lbFound.Visible = false; lbFound.Visible = false;
return updatedROs; return;
} }
if (changedDocVersion || forceReload || RoTreeNeedsReloaded || tvROFST.Nodes == null || tvROFST.Nodes.Count <= 0) if (forceReload || RoTreeNeedsReloaded || tvROFST.Nodes == null || tvROFST.Nodes.Count <= 0)
{ {
//C2026-008 Re-Architect RO.FST to include RO Modification date/time //B2025-008
//check if newer data - if there is, check if user wants to update data //in cases where a RO table is clicked on
int fstid = MyROFSTLookup.GetNewerFSTID(); //it will refresh the list
int origfstid = MyROFSTLookup.RofstID; //temp store what the ROID was before the list refreshes
//so can go to it after the refresh
string tmpROID = CurROLink?.ROID;
if (_docVersionInfo != null && fstid != -1 && fstid != MyROFSTLookup.RofstID) ROFSTLookup.rodbi[] dbs = MyROFSTLookup.GetRODatabaseList(true);
{
string message = string.Empty;
if (_progressBar?.Text != "Cannot check-out Working Draft" && !MySessionInfo.CanCheckOutItem(_docVersionInfo.VersionID, CheckOutType.DocVersion, ref message))
{
FlexibleMessageBox.Show(this, message, "Working Draft Has Items Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
FinalProgressBarMessage = "Cannot check-out Working Draft";
}
else if (!MySessionInfo.CanCheckOutItem(_docVersionInfo.VersionID, CheckOutType.DocVersion, ref message))
{
//do nothing - is still checked out
}
else if (changedDocVersion && MessageBox.Show($"There exists a newer ROFST for this RO database that was loaded for other sets.\r\n\r\nDo you want to update this set's ROs to be consistent/use the latest loaded ROFST?", "Load ROs", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
InitialProgressBarMessage = "Updating ROs";
ROFstInfo roFstInfo = ROFstInfo.Get(fstid);
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ROFstInfo.RefreshROFstAtItemLevel(_docVersionInfo, DoProgressBarRefresh, null, roFstInfo, origfstid, fstid);
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
Application.DoEvents();
FinalProgressBarMessage = "ROs values updated";
MyROFST = roFstInfo;
updatedROs = true;
}
}
//B2025-008
//in cases where a RO table is clicked on
//it will refresh the list
//temp store what the ROID was before the list refreshes
//so can go to it after the refresh
string tmpROID = CurROLink?.ROID;
ROFSTLookup.rodbi[] dbs = MyROFSTLookup?.GetRODatabaseList(true);
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures. // B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures.
// Added optional parameter "forceReload" and cleared out any existing nodes before reloading the tree // Added optional parameter "forceReload" and cleared out any existing nodes before reloading the tree
// the clear nodes code below has to be after the GetRODatabaseList database call because of races conditions in the code // the clear nodes code below has to be after the GetRODatabaseList database call because of races conditions in the code
tvROFST.Nodes.Clear(); tvROFST.Nodes.Clear();
ResetSearch(); //B2023-050 need to reset the SaveRO, and any RO info that was selected last time the tree was loaded ResetSearch(); //B2023-050 need to reset the SaveRO, and any RO info that was selected last time the tree was loaded
if (dbs != null) for (int i = 0; i < dbs.Length; i++)
{ {
for (int i = 0; i < dbs.Length; i++) ROFSTLookup.rodbi db = dbs[i];
{
ROFSTLookup.rodbi db = dbs[i];
TreeNode tn = new TreeNode(db.dbiTitle); TreeNode tn = new TreeNode(db.dbiTitle);
tn.Tag = db; tn.Tag = db;
tvROFST.Nodes.Add(tn); tvROFST.Nodes.Add(tn);
AddDummyGroup(db, tn); AddDummyGroup(db, tn);
} }
}
_currRofstID = (IsRofstValid) ? (int?)_myROFST.ROFstID : null; _currRofstID = (IsRofstValid) ? (int?)_myROFST.ROFstID : null;
_currDocVersionID = null; _currDocVersionID = null;
@@ -701,20 +620,14 @@ namespace Volian.Controls.Library
if(_docVersionInfo != null) _currDocVersionID = (int?)_docVersionInfo.VersionID; if(_docVersionInfo != null) _currDocVersionID = (int?)_docVersionInfo.VersionID;
if (tmpROID != null) ExpandNode(ROFSTLookup.FormatRoidKey(tmpROID, true)); if (tmpROID != null) ExpandNode(ROFSTLookup.FormatRoidKey(tmpROID, true));
}
//doc version would have updated (if needed) so reset flag
if (_progressBar?.Text != "Cannot check-out Working Draft")
{
changedDocVersion = false;
}
}
var unitInfoNode = tvROFST.Nodes.Cast<TreeNode>().Where(x => x.Text == "Unit Information").FirstOrDefault(); var unitInfoNode = tvROFST.Nodes.Cast<TreeNode>().Where(x => x.Text == "Unit Information").FirstOrDefault();
if ((ROTypeFilter == E_ROValueType.Text || ROTypeFilter == E_ROValueType.All) && this.MyDvi != null && this.MyDvi.MultiUnitCount > 1) if ((ROTypeFilter == E_ROValueType.Text || ROTypeFilter == E_ROValueType.All) && this.MyDvi != null && this.MyDvi.MultiUnitCount > 1)
{ {
// Add Unit Information Database if it doesn't exist // Add Unit Information Database if it doesn't exist
if (unitInfoNode == null && MyROFSTLookup != null) if (unitInfoNode == null)
{ {
TreeNode tnn = tvROFST.Nodes.Add("Unit Information"); TreeNode tnn = tvROFST.Nodes.Add("Unit Information");
TreeNode cn = null; TreeNode cn = null;
@@ -758,9 +671,7 @@ namespace Volian.Controls.Library
} }
_curROTypeFilter = _roTypeFilter; _curROTypeFilter = _roTypeFilter;
}
return updatedROs;
}
public void SetFindDocROButton(bool enabled) public void SetFindDocROButton(bool enabled)
{ {
@@ -859,15 +770,9 @@ namespace Volian.Controls.Library
} }
else else
{ {
tmp = new TreeNode(roc.title); tmp = new TreeNode(roc.title);
tmp.Tag = roc; tmp.Tag = roc;
if (tmp.Text.IndexOf("\\u") > -1) // RO Editor add symbols C2022 - 003
{
tmp.Text = Regex.Replace(tmp.Text, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString());
}
if (roc.roid.Length == 16) if (roc.roid.Length == 16)
{ {
tn.Nodes.Add(tmp); tn.Nodes.Add(tmp);
@@ -1016,12 +921,11 @@ namespace Volian.Controls.Library
// Pad to 16 to store in the RoUsage table. // Pad to 16 to store in the RoUsage table.
string padroid = ROFSTLookup.FormatRoidKey(roc.roid, true); string padroid = ROFSTLookup.FormatRoidKey(roc.roid, true);
string linktxt = string.Format(@"#Link:ReferencedObject:<NewID> {0} {1}", padroid, MyROFST.RODbID); string linktxt = string.Format(@"#Link:ReferencedObject:<NewID> {0} {1}", padroid, MyROFST.RODbID);
// Resolve symbols and scientific notation in the RO return value
string valtxt = MyROFSTLookup.GetTranslatedRoValue(padroid, MyRTB.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta, MyRTB.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseTildaPoundCharsForSuperSubScriptInROValues, false, MyRTB.MyItemInfo);
// Resolve symbols and scientific notation in the RO return value MyRTB.OnRoInsert(this, new StepRTBRoEventArgs(valtxt, selectedChld.value, linktxt, padroid, MyROFST.RODbID));
string valtxt = MyROFSTLookup.GetTranslatedRoValue(padroid, MyRTB.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta, MyRTB.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseTildaPoundCharsForSuperSubScriptInROValues, false, MyRTB.MyItemInfo);
MyRTB.OnRoInsert(this, new StepRTBRoEventArgs(valtxt, selectedChld.value, linktxt, padroid, MyROFST.RODbID));
} }
} }
@@ -1252,23 +1156,13 @@ namespace Volian.Controls.Library
tbROValue.Text = null; tbROValue.Text = null;
lbROId.Text = string.Empty; lbROId.Text = string.Empty;
// Disable all buttons by default // Disable all buttons by default
btnGoToRO.Enabled = false;
btnSaveRO.Enabled = false; btnSaveRO.Enabled = false;
btnCancelRO.Enabled = false; btnCancelRO.Enabled = false;
btnPreviewRO.Enabled = false; btnPreviewRO.Enabled = false;
}
//B2026-030 GoTo sometimes requires being pressed twice
if (MyUserInfo != null && MyDvi != null && selectedChld.value != null)
{
btnGoToRO.Enabled = UserInfo.CanEditROs(MyUserInfo, MyDvi); // Writers and Reviewers cannot edit ROs (run the RO Editor)
}
else
{
btnGoToRO.Enabled = false;
}
}
#endregion #endregion
} }
} }
+11 -3
View File
@@ -112,12 +112,20 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="superTooltip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="superTooltip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<data name="btnSaveRO.SuperTooltip" xml:space="preserve">
<value>For Step Editor sections:
- This will place the selected RO at the cursor position.
- This will replace an RO with the selected RO.
For Word sections
- This will place the needed RO ID on the clipboard.</value>
</data>
</root> </root>
+15 -53
View File
@@ -414,15 +414,6 @@ namespace Volian.Controls.Library
lbSrchResults.Visible = true; lbSrchResults.Visible = true;
lbSrchResultsIncTrans.Visible = false; lbSrchResultsIncTrans.Visible = false;
cbxRnoOnly.Visible = true; cbxRnoOnly.Visible = true;
// C2025-062 When Search clicked - Load the Incoming transitions for the Active Procedure
//don't allow changing the Style for Incoming Transitions
//but allow them to change it if there are search results and it is another tab
if (_SearchResults != null && _SearchResults.Count > 0)
{
cmbResultsStyle.Enabled = true;
}
if (e.NewTab == tabIncTrans) // C2020-033: Incoming transitions if (e.NewTab == tabIncTrans) // C2020-033: Incoming transitions
{ {
xpSetToSearch.Enabled = false; xpSetToSearch.Enabled = false;
@@ -431,7 +422,7 @@ namespace Volian.Controls.Library
lbSrchResultsIncTrans.Visible = true; lbSrchResultsIncTrans.Visible = true;
lbSrchResultsIncTrans.CheckBoxesVisible = true; lbSrchResultsIncTrans.CheckBoxesVisible = true;
lbSrchResultsIncTrans.AutoScroll = true; lbSrchResultsIncTrans.AutoScroll = true;
cmbResultsStyle.Enabled = false; btnSearch.Enabled = false; // C2021 - 002: disable search button - no functionality for Incoming Transitions
cbxRnoOnly.Visible = false; cbxRnoOnly.Visible = false;
} }
else if (e.NewTab == tabROSearch) else if (e.NewTab == tabROSearch)
@@ -657,6 +648,7 @@ namespace Volian.Controls.Library
} }
btnTranCvtAllToTxt.Enabled = IncTransCvtAllToTextPerm(); btnTranCvtAllToTxt.Enabled = IncTransCvtAllToTextPerm();
btnTranCvtSelToTxt.Enabled = false; btnTranCvtSelToTxt.Enabled = false;
btnSearch.Enabled = false; // C2021 - 002: disable search button - no functionality for Incoming Transitions
} }
public bool IncTranCvtPerm() public bool IncTranCvtPerm()
@@ -1773,8 +1765,7 @@ namespace Volian.Controls.Library
btnClearSearchResults.Enabled = true; btnClearSearchResults.Enabled = true;
btnCopySearchResults.Enabled = true; btnCopySearchResults.Enabled = true;
btnSaveSearchResults.Enabled = true; btnSaveSearchResults.Enabled = true;
if (tabSearchTypes.SelectedTab != tabIncTrans) cmbResultsStyle.Enabled = true;
cmbResultsStyle.Enabled = true;
} }
else else
{ {
@@ -2197,39 +2188,21 @@ namespace Volian.Controls.Library
// C2019-001: Search in RNO steps only // C2019-001: Search in RNO steps only
if (cbxRnoOnlyTrans.Checked) GetInRNOResults(); if (cbxRnoOnlyTrans.Checked) GetInRNOResults();
} }
else if (tabSearchTypes.SelectedTab == tabIncTrans) else if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[4])
{ {
// C2025-062 When Search clicked - Load the Incoming transitions for the Active Procedure // C2020-033: Incoming Transitions: Make an iteminfolist from the list returned from
// GetExternalTransitionsToChildren (also gets transitions to the item itself)
if (_TabControl?.MyEditItem?.MyItemInfo?.MyProcedure != null) // B2021-010: Use IncomingTranGetMergedTranList to get a complete list of incoming transitions (transitions to procedure
// were only included if there were NO transitions to items within procedure)
ReportTitle = string.Format("Search For Incoming Transitions to {0}: ", SearchIncTransII.Path);
SearchResults = IncomingTranGetMergedTranList();
cmbResultsStyleIndex = 1; //display step locations in results
if (SearchResults == null || SearchResults.Count == 0)
{ {
FlexibleMessageBox.Show("No Matches Found.", "Search");
if (_TabControl?.MyEditItem?.MyItemInfo?.MyProcedure.ItemID == _TabControl?.MyEditItem?.MyItemInfo?.ItemID)
{
_ = _TabControl.OnSearchIncTrans(this, new vlnTreeItemInfoEventArgs(_TabControl?.MyEditItem?.MyItemInfo?.MyProcedure));
}
else
{
//if on a step, check if the user wants to load incoming transitions for that step or the entire procedure
switch (CustomMessageBox.Show("Would you like to load incoming transitions for this procedure or this step?", "Load Incoming Transitions", "This Procedure", "This Step"))
{
case DialogResult.Yes:
_ = _TabControl.OnSearchIncTrans(this, new vlnTreeItemInfoEventArgs(_TabControl?.MyEditItem?.MyItemInfo?.MyProcedure));
break;
case DialogResult.No:
_ = _TabControl.OnSearchIncTrans(this, new vlnTreeItemInfoEventArgs(_TabControl?.MyEditItem?.MyItemInfo));
break;
default: //Cancel was pressed
break;
}
}
}
else
{
FlexibleMessageBox.Show("Please open a procedure before selecting this option to load incoming transitions for that procedure.", "Search");
} }
} }
if (SearchResults != null && tabSearchTypes.SelectedTab != tabIncTrans) if (SearchResults != null)
{ {
AddMessageForEmptyAnnotations(); AddMessageForEmptyAnnotations();
if (cmbResultsStyleIndex == 3 && cmbResultsStyle.Items.Count == 3) cmbResultsStyleIndex--; if (cmbResultsStyleIndex == 3 && cmbResultsStyle.Items.Count == 3) cmbResultsStyleIndex--;
@@ -2330,18 +2303,7 @@ namespace Volian.Controls.Library
cmbResultsStyle.Items.Add(comboItem2); cmbResultsStyle.Items.Add(comboItem2);
if (hasAnnot) cmbResultsStyle.Items.Add(comboItem3); if (hasAnnot) cmbResultsStyle.Items.Add(comboItem3);
cmbResultsStyle.Items.Add(comboItem4); cmbResultsStyle.Items.Add(comboItem4);
}
// C2025-062 When Search clicked - Load the Incoming transitions for the Active Procedure
if (tabSearchTypes.SelectedTab == tabIncTrans)
{
cmbResultsStyle.SelectedIndex = -1;
cmbResultsStyle.Enabled = false;
}
else
{
cmbResultsStyle.Enabled = true;
}
}
private void cbxTextSearchText_Leave(object sender, EventArgs e) private void cbxTextSearchText_Leave(object sender, EventArgs e)
{ {
@@ -145,6 +145,12 @@ namespace Volian.Controls.Library
return (verIdList.Count > 1); return (verIdList.Count > 1);
} }
} }
//public event ItemSelectedChangedEvent OpenEnhancedDocument;
//public void OnOpenEnhancedDocument(ItemSelectedChangedEventArgs args)
//{
// if (OpenEnhancedDocument != null)
// OpenEnhancedDocument(this, args);
//}
public event ItemSelectedChangedEvent OpenInSeparateWindow; public event ItemSelectedChangedEvent OpenInSeparateWindow;
public void OnOpenInSeparateWindow(ItemSelectedChangedEventArgs args) public void OnOpenInSeparateWindow(ItemSelectedChangedEventArgs args)
{ {
@@ -188,15 +194,15 @@ namespace Volian.Controls.Library
CopyStepSelected(this, args); CopyStepSelected(this, args);
} }
#region Private Fields #region Private Fields
/// <summary> /// <summary>
/// This is a lookup table for all of the DisplayTabItems that are currently open /// This is a lookup table for all of the DisplayTabItems that are currently open
/// The key is: /// The key is:
/// "Item - " + Procedure ItemID for step pages /// "Item - " + Procedure ItemID for step pages
/// "Doc - " + DocumentID for Word Documents /// "Doc - " + DocumentID for Word Documents
/// </summary> /// </summary>
public Dictionary<string, DisplayTabItem> _MyDisplayTabItems; public Dictionary<string, DisplayTabItem> _MyDisplayTabItems;
/// <summary> /// <summary>
/// When a Tab is closed it is added to this list. /// When a Tab is closed it is added to this list.
@@ -543,15 +549,7 @@ namespace Volian.Controls.Library
if (((Bar)sender).Items == null) return; if (((Bar)sender).Items == null) return;
if (((Bar)sender).Items.Count == 1)// Remove bar if last item is closed... if (((Bar)sender).Items.Count == 1)// Remove bar if last item is closed...
{ {
//B2026 - 048 View Only Mode freezes PROMS if last tab closed Bar bar = sender as Bar;
//if last item is closing, need to re-enable Step Properties
//so if closing in view only mode will not freeze when re-opening
if (MyEditItem != null && MyEditItem.MyStepPanel.VwMode == E_ViewMode.View)
{
OnEnableDisableStepProperties(new StepTabRibbonEventArgs(MyEditItem.MyItemInfo, 0, E_ViewMode.Edit));
}
Bar bar = sender as Bar;
if (bar != null) if (bar != null)
{ {
if (dotNetBarManager1.Bars.Contains(bar.Name)) if (dotNetBarManager1.Bars.Contains(bar.Name))
@@ -570,16 +568,9 @@ namespace Volian.Controls.Library
ActivateRemainingTab((Bar)sender); ActivateRemainingTab((Bar)sender);
} }
} }
#endregion
public event StepTabRibbonEvent EnableDisableStepProperties; #region Public Methods
private void OnEnableDisableStepProperties(StepTabRibbonEventArgs args) public void RefreshItem(ItemInfo myItemInfo)
{
if (EnableDisableStepProperties != null)
EnableDisableStepProperties(this, args);
}
#endregion
#region Public Methods
public void RefreshItem(ItemInfo myItemInfo)
{ {
ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item
string key = "Item - " + proc.ItemID.ToString(); string key = "Item - " + proc.ItemID.ToString();
@@ -896,18 +887,9 @@ namespace Volian.Controls.Library
Bar b = myTabItem.ContainerControl as Bar; Bar b = myTabItem.ContainerControl as Bar;
if (b != null) if (b != null)
{ {
try b.CloseDockTab(myTabItem);
{ //b.Items.Remove(myTabItem);
b.CloseDockTab(myTabItem); RemoveItem(myTabItem);
}
catch
{
//This is to work around a bug inside 3rd party DotNetBar
//The bug occurs when events happen out of order and it tries
//to remove a TabItem from the Collection the has already been removed
}
RemoveItem(myTabItem);
} }
} }
/// <summary> /// <summary>
+4 -4
View File
@@ -215,8 +215,7 @@ namespace Volian.Controls.Library
this.groupPanelCheckoff.CanvasColor = System.Drawing.SystemColors.Control; this.groupPanelCheckoff.CanvasColor = System.Drawing.SystemColors.Control;
this.groupPanelCheckoff.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007; this.groupPanelCheckoff.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007;
this.groupPanelCheckoff.Controls.Add(this.cmbCheckoff); this.groupPanelCheckoff.Controls.Add(this.cmbCheckoff);
this.groupPanelCheckoff.Controls.Add(this.cbInitialLine); this.groupPanelCheckoff.DisabledBackColor = System.Drawing.Color.Empty;
this.groupPanelCheckoff.DisabledBackColor = System.Drawing.Color.Empty;
this.groupPanelCheckoff.Dock = System.Windows.Forms.DockStyle.Top; this.groupPanelCheckoff.Dock = System.Windows.Forms.DockStyle.Top;
this.groupPanelCheckoff.Location = new System.Drawing.Point(0, 231); this.groupPanelCheckoff.Location = new System.Drawing.Point(0, 231);
this.groupPanelCheckoff.Margin = new System.Windows.Forms.Padding(2); this.groupPanelCheckoff.Margin = new System.Windows.Forms.Padding(2);
@@ -266,7 +265,8 @@ namespace Volian.Controls.Library
this.cbInitialLine.Margin = new System.Windows.Forms.Padding(2); this.cbInitialLine.Margin = new System.Windows.Forms.Padding(2);
this.cbInitialLine.Name = "cbInitialLine"; this.cbInitialLine.Name = "cbInitialLine";
this.cbInitialLine.Size = new System.Drawing.Size(112, 15); this.cbInitialLine.Size = new System.Drawing.Size(112, 15);
this.superTooltipTags.SetSuperTooltip(this.cbInitialLine, new DevComponents.DotNetBar.SuperTooltipInfo("Disable Initial Line", "", "When set, The initial line will be removed from this step.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.superTooltipTags.SetSuperTooltip(this.cbInitialLine, new DevComponents.DotNetBar.SuperTooltipInfo("Manual Page Break", "", "When set, starts this step at the top of a page.\r\n\r\nkeyboard command: <Ctrl><Ente" +
"r>", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
this.cbInitialLine.TabIndex = 1; this.cbInitialLine.TabIndex = 1;
this.cbInitialLine.Text = "Disable Initial Line"; this.cbInitialLine.Text = "Disable Initial Line";
this.cbInitialLine.Visible = false; this.cbInitialLine.Visible = false;
@@ -276,6 +276,7 @@ namespace Volian.Controls.Library
// //
this.groupPanelcmbShwRplWds.CanvasColor = System.Drawing.SystemColors.Control; this.groupPanelcmbShwRplWds.CanvasColor = System.Drawing.SystemColors.Control;
this.groupPanelcmbShwRplWds.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007; this.groupPanelcmbShwRplWds.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007;
this.groupPanelcmbShwRplWds.Controls.Add(this.cbInitialLine);
this.groupPanelcmbShwRplWds.Controls.Add(this.cmbShwRplWds); this.groupPanelcmbShwRplWds.Controls.Add(this.cmbShwRplWds);
this.groupPanelcmbShwRplWds.DisabledBackColor = System.Drawing.Color.Empty; this.groupPanelcmbShwRplWds.DisabledBackColor = System.Drawing.Color.Empty;
this.groupPanelcmbShwRplWds.Dock = System.Windows.Forms.DockStyle.Top; this.groupPanelcmbShwRplWds.Dock = System.Windows.Forms.DockStyle.Top;
@@ -879,4 +880,3 @@ namespace Volian.Controls.Library
private System.Windows.Forms.Button btnSaveChangeID; private System.Windows.Forms.Button btnSaveChangeID;
} }
} }
+3 -27
View File
@@ -245,20 +245,6 @@ namespace Volian.Controls.Library
} }
protected void MyContent_Changed(object sender) protected void MyContent_Changed(object sender)
{ {
//C2026-021 Expand Functionality of Viewing Mode
if (MyStepPanel.ApplDisplayMode > 0)
{
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = MyStepPanel.ApplDisplayMode;
MyItemInfo.MyProcedure.ProcedureConfig.SelectedSlave = MyStepPanel.ApplDisplayMode;
}
else
{
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
MyItemInfo.MyProcedure.ProcedureConfig.SelectedSlave = 0;
}
MyItemInfo.MyProcedure.ResetChangeBar();
// Update the text to reflect the content change // Update the text to reflect the content change
MyItemInfo.RefreshItemAnnotations(); MyItemInfo.RefreshItemAnnotations();
ChangeBar = MyItemInfo.HasChangeBar; ChangeBar = MyItemInfo.HasChangeBar;
@@ -4128,14 +4114,7 @@ namespace Volian.Controls.Library
} }
} }
} }
//// TIMING: DisplayItem.TimeIt("CSLARTB Parent"); //// TIMING: DisplayItem.TimeIt("CSLARTB Parent");
//C2026-021 Expand Functionality of Viewing Mode
if (MyStepPanel.ApplDisplayMode > 0)
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = MyStepPanel.ApplDisplayMode;
else
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
SetText(); SetText();
if (itemInfo.IsSupInfoPart) if (itemInfo.IsSupInfoPart)
{ {
@@ -4183,11 +4162,8 @@ namespace Volian.Controls.Library
} }
void MyConfig_PropertyChanged(object sender, PropertyChangedEventArgs e) void MyConfig_PropertyChanged(object sender, PropertyChangedEventArgs e)
{ {
//B2026-024 Change bars should not show when updating Applicability. SaveConfig();
if (e.PropertyName == "MasterSlave_Applicability") ChangeBarForConfigItemChange = false; }
SaveConfig();
if (e.PropertyName == "MasterSlave_Applicability") ChangeBarForConfigItemChange = true;
}
public void SaveConfig() public void SaveConfig()
{ {
if (!MyItemInfo.MyConfig.IsDirty) return; if (!MyItemInfo.MyConfig.IsDirty) return;
+11 -14
View File
@@ -537,10 +537,6 @@ namespace Volian.Controls.Library
// if it is a modify and there will be no usages if it is new (the usage gets created on the save) // if it is a modify and there will be no usages if it is new (the usage gets created on the save)
if (!MyFlexGrid.IsRoTable) if (!MyFlexGrid.IsRoTable)
{ {
// B2026-003 we where using a string.format on this inside the while loop - allocating memory each time
// so I move it outside the while loop and did a simple assigment of text
string lookForLinks = @"<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v '?{{}}~\\]+)*\\v(\\[^v \\]+)* #Link:(ReferencedObject|Transition[^:]*?):.*?\[END>";
while (r < h) while (r < h)
{ {
CellRange cr = MyFlexGrid.GetMergedRange(r, c); CellRange cr = MyFlexGrid.GetMergedRange(r, c);
@@ -550,7 +546,8 @@ namespace Volian.Controls.Library
{ {
// see if there are any links and save these so that any deleted ROs or transitions in the // see if there are any links and save these so that any deleted ROs or transitions in the
// steprtb can have associated usages/transitions records removed from the database. // steprtb can have associated usages/transitions records removed from the database.
MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookForLinks); string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v '?{{}}~\\]+)*\\v(\\[^v \\]+)* #Link:(ReferencedObject|Transition[^:]*?):.*?\[END>");
MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookFor);
for (int i = matches.Count - 1; i >= 0; i--) for (int i = matches.Count - 1; i >= 0; i--)
{ {
Match m = matches[i]; Match m = matches[i];
@@ -572,15 +569,15 @@ namespace Volian.Controls.Library
{ {
int tid = int.Parse(myMatch.Groups[2].Value); int tid = int.Parse(myMatch.Groups[2].Value);
RtfTransList.Add(tid); RtfTransList.Add(tid);
int myIndex = m.Groups[4].Index; int myIndex = m.Groups[4].Index;
int myLength = m.Groups[4].Length; int myLength = m.Groups[4].Length;
if (m.Groups[3].Value != " ") if (m.Groups[3].Value != " ")
{ {
myIndex = m.Groups[3].Index; myIndex = m.Groups[3].Index;
myLength += m.Groups[3].Length; myLength += m.Groups[3].Length;
} }
string gg = ((string)MyFlexGrid[r, c]).Substring(myIndex, myLength); string gg = ((string)MyFlexGrid[r, c]).Substring(myIndex, myLength);
if (gg.ToUpper().Contains("(PAGE ~)")) RtfTransPageNumList.Add(tid); // B2020-089, check for upper case Page ~ in case step was upper cased if (gg.ToUpper().Contains("(PAGE ~)")) RtfTransPageNumList.Add(tid); // B2020-089, check for upper case Page ~ in case step was upper cased
} }
} }
} }
+376 -94
View File
@@ -25,6 +25,7 @@ namespace Volian.Controls.Library
public delegate void StepRTBLocationEvent(object sender, StepRTBLocationEventArgs args); public delegate void StepRTBLocationEvent(object sender, StepRTBLocationEventArgs args);
public delegate void StepRTBMouseEvent(object sender, MouseEventArgs args); public delegate void StepRTBMouseEvent(object sender, MouseEventArgs args);
public delegate void StepRTBRoEvent(object sender, StepRTBRoEventArgs args); public delegate void StepRTBRoEvent(object sender, StepRTBRoEventArgs args);
//public delegate void StepRTBMouseWheelEvent(object sender, MouseEventArgs args);
public partial class StepRTB : RichTextBox // , IStepRTB public partial class StepRTB : RichTextBox // , IStepRTB
{ {
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
@@ -176,6 +177,18 @@ namespace Volian.Controls.Library
{ {
if (CursorMovement != null) CursorMovement(sender, args); if (CursorMovement != null) CursorMovement(sender, args);
} }
//public event StepRTBModeChangeEvent ModeChange;
//private void OnModeChange(object sender, StepRTBModeChangeEventArgs args)
//{
// //_MyModeChangeEventArgs = args;
// if (ModeChange != null) ModeChange(sender, args);
// else MessageBox.Show("StepRTB - no mode change defined");
//}
//public event StepRTBMouseWheelEvent MouseWheel;
//private void OnMouseWheel(object sender, MouseEventArgs args)
//{
// if (MouseWheel != null) MouseWheel(sender, args);
//}
/// <summary> /// <summary>
/// This event is not raised during all the in-between changes for link deletions /// This event is not raised during all the in-between changes for link deletions
@@ -279,6 +292,23 @@ namespace Volian.Controls.Library
} }
} }
} }
// use newer rich text box....
//[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
//static extern IntPtr LoadLibrary(string lpFileName);
//protected override CreateParams CreateParams
//{
// get
// {
// CreateParams prams = base.CreateParams;
// if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
// {
// //prams.ExStyle |= 0x020; // transparent
// prams.ClassName = "RICHEDIT50W";
// }
// return prams;
// }
//}
private E_FieldToEdit _FieldToEdit = E_FieldToEdit.StepText; private E_FieldToEdit _FieldToEdit = E_FieldToEdit.StepText;
public E_FieldToEdit FieldToEdit public E_FieldToEdit FieldToEdit
{ {
@@ -291,12 +321,14 @@ namespace Volian.Controls.Library
get get
{ {
//B2020-100 RHM Use SelectionFont rather than the font from the format file. //B2020-100 RHM Use SelectionFont rather than the font from the format file.
StringBuilder selectedRtfSB = new StringBuilder(); //if (_RtfPrefix == null)
//{
StringBuilder selectedRtfSB = new StringBuilder();
//AddFontTable(selectedRtfSB, FormatFont, FontIsFixed(FormatFont));
// B2021-100: if SelectionFont is null, use the FormatFont // B2021-100: if SelectionFont is null, use the FormatFont
AddFontTable(selectedRtfSB, SelectionFont==null?FormatFont:SelectionFont, FontIsFixed(FormatFont)); AddFontTable(selectedRtfSB, SelectionFont==null?FormatFont:SelectionFont, FontIsFixed(FormatFont));
_RtfPrefix = selectedRtfSB.ToString(); _RtfPrefix = selectedRtfSB.ToString();
//}
return _RtfPrefix + @"\f1\fs" + FormatFont.SizeInPoints * 2 + " "; return _RtfPrefix + @"\f1\fs" + FormatFont.SizeInPoints * 2 + " ";
} }
} }
@@ -343,6 +375,14 @@ namespace Volian.Controls.Library
get { if (_MyClassName == string.Empty)_MyClassName = CreateParams.ClassName; return _MyClassName; } get { if (_MyClassName == string.Empty)_MyClassName = CreateParams.ClassName; return _MyClassName; }
set { _MyClassName = value; } set { _MyClassName = value; }
} }
//private E_EditPrintMode _epMode = E_EditPrintMode.Edit;
//public E_EditPrintMode EpMode
//{
// get { return _epMode; }
// set {
// if (value == E_EditPrintMode.Print) Console.WriteLine("");
// _epMode = value; }
//}
private E_ViewMode _vwMode = E_ViewMode.Edit; private E_ViewMode _vwMode = E_ViewMode.Edit;
public E_ViewMode VwMode public E_ViewMode VwMode
{ {
@@ -450,63 +490,66 @@ namespace Volian.Controls.Library
ActiveMode = activeMode; ActiveMode = activeMode;
OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(true)); OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(true));
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 2");
_InitializingRTB = true; _InitializingRTB = true;
DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, VwMode, !ActiveMode, FieldToEdit, true,null, null,false);
//C2026-021 Expand Functionality of Viewing Mode //Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 3");
StepPanel pnl = (Parent as RTBItem)?.MyStepPanel; //if (_origDisplayText != null && vlntxt.StartText == _origDisplayText.StartText)
if (pnl?.ApplDisplayMode > 0) //{
{ // ReadOnly = !(EpMode == E_EditPrintMode.Edit && VwMode == E_ViewMode.Edit);
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = pnl.ApplDisplayMode; // if (!ReadOnly && !edit) ReadOnly = true;
} // return;
else //}
{ OrigDisplayText = vlntxt;
MyItemInfo.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
}
DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, VwMode, !ActiveMode, FieldToEdit, true,null, null,false);
if (pnl?.ApplDisplayMode > 0 && MyItemInfo.MyContent.ContentRoUsageCount > 0)
{
vlntxt.StartText = RefreshROsWithUnitStartText(vlntxt.StartText, pnl.ApplDisplayMode);
}
OrigDisplayText = vlntxt;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 4"); //Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 4");
// RHM 20101201 - Don't reset the text. Calculate the text and compare it with the existing text in AddRTFText // RHM 20101201 - Don't reset the text. Calculate the text and compare it with the existing text in AddRTFText
//Text = ""; // Initialize text before add text //Text = ""; // Initialize text before add text
// IMPORTANT: SetLineSpacing must be set before Links, otherwise it // IMPORTANT: SetLineSpacing must be set before Links, otherwise it
// was confusing the 'handle' of the rtf box. // was confusing the 'handle' of the rtf box.
//Console.WriteLine("'font',{0}", Font);
//if(Text == "")SelectionFont = Font; // Initialize SelectionFont
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "1");
if (FieldToEdit == E_FieldToEdit.StepText) if (FieldToEdit == E_FieldToEdit.StepText)
{ {
if (MyItemInfo != null) if (MyItemInfo != null)
{ {
//if (MyItemInfo.IsStep) Font = MyFontFamily == null ? MyItemInfo.FormatStepData.Font.WindowsFont : new Font(MyFontFamily, MyItemInfo.FormatStepData.Font.WindowsFont.Size, MyItemInfo.FormatStepData.Font.WindowsFont.Style);
//else Font = Font = MyFontFamily == null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont : new Font(MyFontFamily, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Size, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Style);
if (MyItemInfo.IsStep) if (MyItemInfo.IsStep)
{ {
if (MyFontFamily == null) if (MyFontFamily == null)
{ {
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before WindowsFont1");
System.Drawing.Font fnt = MyItemInfo.FormatStepData.Font.WindowsFont; System.Drawing.Font fnt = MyItemInfo.FormatStepData.Font.WindowsFont;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After WindowsFont1a");
Application.DoEvents(); Application.DoEvents();
if (FontKey(Font) != FontKey(fnt)) if (FontKey(Font) != FontKey(fnt))
Font = fnt; Font = fnt;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After WindowsFont1b");
} }
else else
Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.FormatStepData.Font.WindowsFont.Size, MyItemInfo.FormatStepData.Font.WindowsFont.Style); Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.FormatStepData.Font.WindowsFont.Size, MyItemInfo.FormatStepData.Font.WindowsFont.Style);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 4");
} }
else else
{ {
if (MyFontFamily == null) if (MyFontFamily == null)
{ {
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before WindowsFont2");
Font = MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont; Font = MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After WindowsFont2");
} }
else else
Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Size, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Style); Font = VE_Font.GetWinSysFont(MyFontFamily, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Size, MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font.WindowsFont.Style);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "RefreshDisplay 5");
} }
LastRtf = Rtf; LastRtf = Rtf;
} }
} }
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "StepRTB.RefreshDisplay Before SetLineSpacing");
RTBAPI.SetLineSpacing(this, RTBAPI.ParaSpacing.PFS_EXACT); RTBAPI.SetLineSpacing(this, RTBAPI.ParaSpacing.PFS_EXACT);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "StepRTB.RefreshDisplay After SetLineSpacing");
bool readOnlyStep = MyItemInfo == null || MyItemInfo.FormatStepData == null ? false : MyItemInfo.FormatStepData.ReadOnly; bool readOnlyStep = MyItemInfo == null || MyItemInfo.FormatStepData == null ? false : MyItemInfo.FormatStepData.ReadOnly;
if (!readOnlyStep) if (!readOnlyStep)
{ {
@@ -514,9 +557,10 @@ namespace Volian.Controls.Library
if (IsDerived(sc) && !MyItemInfo.EnhAllowMod()) readOnlyStep = true; if (IsDerived(sc) && !MyItemInfo.EnhAllowMod()) readOnlyStep = true;
} }
ReadOnly = readOnlyStep || VwMode == E_ViewMode.View || ActiveMode == false; ReadOnly = readOnlyStep || VwMode == E_ViewMode.View || ActiveMode == false;
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before AddRTFText");
AddRtfText(vlntxt.StartText); AddRtfText(vlntxt.StartText);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After AddRTFText");
//AddRtfStyles();
// set readonly based on initial modes, however, these may change if // set readonly based on initial modes, however, these may change if
// user selected view mode. // user selected view mode.
ClearUndo(); ClearUndo();
@@ -543,7 +587,10 @@ namespace Volian.Controls.Library
{ {
RemoveEventHandlers(); RemoveEventHandlers();
OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(false));// View Mode OnAdjustTableWidth(this, new StepRTBTableWidthEventArgs(false));// View Mode
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "Before SelectAll");
SelectAll(); SelectAll();
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After SelectAll");
//if (SelectionHangingIndent !=0) SelectionHangingIndent = 0;
int indchar = 0; int indchar = 0;
string indentToken = MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.IndentToken; string indentToken = MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.IndentToken;
if (indentToken == null || indentToken == "0") indentToken = "\x5"; if (indentToken == null || indentToken == "0") indentToken = "\x5";
@@ -551,6 +598,7 @@ namespace Volian.Controls.Library
// this line of code was moved before the find for the indent so that // this line of code was moved before the find for the indent so that
// the window gets resized if the indent changes the height, i.e. more line(s) in window. // the window gets resized if the indent changes the height, i.e. more line(s) in window.
AddEventHandlers(); AddEventHandlers();
//if (MyItemInfo.InList(186722)) Console.WriteLine("here");
if ((indchar = Find(indentToken, indchar, RichTextBoxFinds.None)) >= 0) if ((indchar = Find(indentToken, indchar, RichTextBoxFinds.None)) >= 0)
{ {
int nindents = 0; int nindents = 0;
@@ -604,51 +652,11 @@ namespace Volian.Controls.Library
_InitializingRTB = false; _InitializingRTB = false;
AdjustSizeForContents(!ActiveMode); AdjustSizeForContents(!ActiveMode);
//Volian.Base.Library.HWndCounter.GetWindowHandlesForCurrentProcess(this.Handle, "After RefreshDisplay");
Application.DoEvents(); Application.DoEvents();
} }
//C2026-021 Expand Functionality of Viewing Mode private bool IsDerived(StepConfig sc)
//regex for finding Referenced object links
private static Regex regRefObj = new Regex(@"\#Link\:ReferencedObject:([0-9]*) ([0-9a-zA-Z]*) ([0-9]*)", RegexOptions.Singleline);
//Replace the Default RO text with Unit Specific RO text
private string RefreshROsWithUnitStartText(string startText, int unitID)
{
ROFSTLookup lookup = MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyItemInfo.MyDocVersion);
MatchCollection mc = regRefObj.Matches(startText);
if (mc.Count == 0)
return startText;
StringBuilder sb = new StringBuilder();
int lastindex = 0;
foreach (Match match in mc)
{
//get where ther default text for the RO starts
int indx = startText.LastIndexOf(@"\v <START]\v0", match.Index) + 13;
//get the RO, value will be the unit related value
ROFSTLookup.rochild roc = lookup.GetRoChild(ROFSTLookup.FormatRoidKey(match.Groups[2].Value, true));
// append before tags up through the <START]\v0
//note if multiple tags this will also append the end up the previous tags
sb.Append(startText.Substring(lastindex, indx - lastindex));
//append the unit specific RO value (replacing where the default RO value was)
sb.Append($@"\cf1 {roc.value}\cf0\v");
lastindex = match.Index;
}
//append referenced object tag & text after tag
sb.Append(startText.Substring(lastindex));
return sb.ToString();
}
private bool IsDerived(StepConfig sc)
{ {
foreach (EnhancedDocument ed in sc.MyEnhancedDocuments) foreach (EnhancedDocument ed in sc.MyEnhancedDocuments)
if (ed.Type == 0) //New Design if (ed.Type == 0) //New Design
@@ -744,6 +752,8 @@ namespace Volian.Controls.Library
protected override void OnMouseWheel(MouseEventArgs e) protected override void OnMouseWheel(MouseEventArgs e)
{ {
OnDoMouseWheel(this, e); OnDoMouseWheel(this, e);
//MyRTBItem.MyStepPanel.MouseWheel(e);
//base.OnMouseWheel(e);
} }
// When a border style is changed, the richtextbox's handle is 'destroyed', so that the handleDestroyed // When a border style is changed, the richtextbox's handle is 'destroyed', so that the handleDestroyed
// event is done. This was causing the event handlers to be removed (RemoveEventHandler) so that the // event is done. This was causing the event handlers to be removed (RemoveEventHandler) so that the
@@ -886,6 +896,10 @@ namespace Volian.Controls.Library
{ {
_MouseDown = false; _MouseDown = false;
} }
//void MyConfig_PropertyChanged(object sender, PropertyChangedEventArgs e)
//{
// SaveConfig();
//}
private void StepRTB_Click(object sender, EventArgs e) private void StepRTB_Click(object sender, EventArgs e)
{ {
if (ReadOnly) return; if (ReadOnly) return;
@@ -943,6 +957,44 @@ namespace Volian.Controls.Library
} }
#endregion #endregion
#region ApplicationSupport #region ApplicationSupport
// Used in StepTabRibbon:
//public void ToggleEditView(E_ViewMode vwMode)
//{
// OnDoSaveContents(this, new EventArgs()); // SaveText();
// //ItemInfo tmp = MyItemInfo;
// //MyItemInfo = null;
// //ReadOnly = !ReadOnly;
// //EpMode = ReadOnly ? E_EditPrintMode.Print : E_EditPrintMode.Edit;
// VwMode = vwMode;
// ReadOnly = VwMode == E_ViewMode.View;
// ViewRTB = ReadOnly;
// Clear();
// RefreshDisplay(!ViewRTB);
// //MyItemInfo = tmp;
// SelectionStart = 0;
// SelectionLength = 0;
// //OnModeChange(this, new StepRTBModeChangeEventArgs(ViewRTB?E_ViewMode.View:E_ViewMode.Edit));
//}
//public string InsertSymbolInRO(string val)
//{
// string retval = val;
// C2019-043 convert a "->" to the Right Arrow symbol and a "<-" to the Left Arrow Symbol
// note that at the dash character gets convert to a non-breaking hyphen "\u8209?"
//if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue)
//{
// retval = retval.Replace("\\u8209?>", GetAddSymbolTextForROs(@"\u8594?")); // Right Arrow
// retval = retval.Replace("<\\u8209?", GetAddSymbolTextForROs(@"\u8592?")); // Left Arrow
//}
//// C2022-021 convert a "<=" to a less than or equal symbol, a ">=" to a greather than or equal symbol and +- to a
//// plus/minus symbol in ROs
//if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue)
//{
// retval = retval.Replace("<=", GetAddSymbolTextForROs(@"\u8804?")); // Less than or Equal
// retval = retval.Replace(">=", GetAddSymbolTextForROs(@"\u8805?")); // Greater than or Equal
// retval = retval.Replace("+\\u8209?", @"\'b1"); // plus/minus - note - is stored as \u8209 and plus/minus is < 256, i.e. handled differently
//}
// return retval;
//}
public void InsertRO(string value, string link) public void InsertRO(string value, string link)
{ {
// B2023-037: Remove code that saves the unicode characters for <=, >=, +-, <- and -> into the link text. The characters // B2023-037: Remove code that saves the unicode characters for <=, >=, +-, <- and -> into the link text. The characters
@@ -1120,6 +1172,8 @@ namespace Volian.Controls.Library
return; return;
} }
//Console.WriteLine("ItemID:{0}", MyItemInfo.ItemID); //Console.WriteLine("ItemID:{0}", MyItemInfo.ItemID);
//if(MyItemInfo.ItemID==10256)
// Volian.Base.Library.vlnStackTrace.ShowStackLocal("ItemID:{0}", MyItemInfo.ItemID.ToString());
StringBuilder selectedRtfSB = new StringBuilder(); StringBuilder selectedRtfSB = new StringBuilder();
AddFontTable(selectedRtfSB, FormatFont, FontIsFixed(FormatFont)); AddFontTable(selectedRtfSB, FormatFont, FontIsFixed(FormatFont));
_RtfPrefix = selectedRtfSB.ToString(); _RtfPrefix = selectedRtfSB.ToString();
@@ -1143,12 +1197,27 @@ namespace Volian.Controls.Library
} }
// B2017-048, B2017-052, B2017-055 ROs sometimes have two start tokens which make them uneditable. // B2017-048, B2017-052, B2017-055 ROs sometimes have two start tokens which make them uneditable.
newRtf = newRtf.Replace("<START]<START]", "<START]"); newRtf = newRtf.Replace("<START]<START]", "<START]");
//Point linkIssues = FindLinkIssues(newRtf);
//if (linkIssues.X != linkIssues.Y)
// newRtf = FixBadLinks(newRtf,linkIssues);
SelectedRtf = _LastRtf = newRtf; SelectedRtf = _LastRtf = newRtf;
_lastReadOnly = ReadOnly; _lastReadOnly = ReadOnly;
} }
FindAllLinks(); FindAllLinks();
if (txt == "") SelectionFont = FormatFont; if (txt == "") SelectionFont = FormatFont;
} }
//private string FixBadLinks(string newRtf, Point linkIssues)
//{
// Console.WriteLine("Bad Link rtf = Starts={0}, Ends={1}, \"{2}\"", linkIssues.X,linkIssues.Y, newRtf);
// //Volian.Base.Library.vlnStackTrace.ShowStack();
// return newRtf;
//}
//private static Point FindLinkIssues(string rtf)
//{
// MatchCollection mcStart = Regex.Matches(rtf, @"\<START\]");
// MatchCollection mcEnd = Regex.Matches(rtf, @"\[END\>");
// return new Point(mcStart.Count, mcEnd.Count);
//}
public void SetTableGridCellRTFPrefix(Font myfont) public void SetTableGridCellRTFPrefix(Font myfont)
{ {
if (_FormatFont == null) if (_FormatFont == null)
@@ -1213,7 +1282,7 @@ namespace Volian.Controls.Library
sbbeg.Append(@"\i"); sbbeg.Append(@"\i");
sbend.Insert(0, @"\i0"); sbend.Insert(0, @"\i0");
} }
selectedRtfSB.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset2 " + myFont.FontFamily.Name + @";}"); selectedRtfSB.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset2 " + myFont.FontFamily.Name + @";}"); //}\f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}}";
if (!isFixed) if (!isFixed)
selectedRtfSB.Append(@"{\f1\fnil\fcharset0 " + Volian.Base.Library.vlnFont.ProportionalSymbolFont + @";}}{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}"); // C2017-036 get best available proportional font for symbols - B2025-039 add Blue for Colored Replace Words selectedRtfSB.Append(@"{\f1\fnil\fcharset0 " + Volian.Base.Library.vlnFont.ProportionalSymbolFont + @";}}{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}"); // C2017-036 get best available proportional font for symbols - B2025-039 add Blue for Colored Replace Words
else else
@@ -1222,7 +1291,7 @@ namespace Volian.Controls.Library
// use styles to construct rtf commands to insert into next line (where \b, etc is) // use styles to construct rtf commands to insert into next line (where \b, etc is)
// B2015-134 Hanging Indent with Hard Returns was not being saved- removed \sl-240\slmult0 // B2015-134 Hanging Indent with Hard Returns was not being saved- removed \sl-240\slmult0
selectedRtfSB.Append(@"\viewkind4\uc1\pard" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}"; selectedRtfSB.Append(@"\viewkind4\uc1\pard" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}";
//selectedRtfSB.Append(@"\viewkind4\uc1\pard\sl-240\slmult0" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" "); // \f0\fs" + this.Font.SizeInPoints * 2 + @" " + myDisplayTextElement.Text + @"}";
} }
private bool FontIsFixed(Font myFont) private bool FontIsFixed(Font myFont)
@@ -1327,28 +1396,15 @@ namespace Volian.Controls.Library
{ {
string fonttab = FontTable; string fonttab = FontTable;
string fontsize = FontSize; string fontsize = FontSize;
//if (this.DetectUrls) this.DetectUrls = false;
if (SelectionLength > 0)HandleDeleteKeyWithSelectedText(new KeyEventArgs(Keys.None), null); if (SelectionLength > 0)HandleDeleteKeyWithSelectedText(new KeyEventArgs(Keys.None), null);
int position = SelectionStart; int position = SelectionStart;
SelectionLength = 0; SelectionLength = 0;
// B2026-036 fixed issue where numbers after a dash character (in an RO return value) were trucated linkValue = linkValue.Replace("\\u8209?", "\\f1\\u8209?\\f0 ");
// Needed to add a space after the \f0 in the string replace below. RTF was getting confused linkValue = linkValue.Replace("\\u9586?", "\\f1\\u9586?\\f0 "); // backslash symbol
// when there are number right after the \f0. Note also remove the space charcter after linkValue = linkValue.Replace("\\u916?", "\\f1\\u916?\\f0 ");
// the \f1 command, as it is not needed since the \u commdn follows it.
// Here is the old code prior to when the foreach loop was added to handle symbols in RO value:
//
// linkValue = linkValue.Replace("\\u8209?", "\\f1\\u8209?\\f0 "); // dash character
// linkValue = linkValue.Replace("\\u9586?", "\\f1\\u9586?\\f0 "); // backslash symbol
// linkValue = linkValue.Replace("\\u916?", "\\f1\\u916?\\f0 "); // delta symbol
var pattern = @"\\u([0-9]{1,4})\?"; // RO Editor add symbols C2022 - 003
foreach (Match match in Regex.Matches(linkValue, pattern, RegexOptions.IgnoreCase))
{
linkValue = linkValue.Replace(match.Value, "\\f1" + match.Value + "\\f0 ");
}
linkValue = linkValue.Replace(@"{", @"\{"); linkValue = linkValue.Replace(@"{", @"\{");
linkValue = linkValue.Replace(@"}", @"\}"); linkValue = linkValue.Replace(@"}", @"\}");
SelectedRtf = @"{\rtf1\ansi" + FontTable + @"{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}\v" + FontSize + @" <START]\v0\cf1 " + linkValue + @"\cf0\v " + linkUrl + @"[END>\v0 }"; SelectedRtf = @"{\rtf1\ansi" + FontTable + @"{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}\v" + FontSize + @" <START]\v0\cf1 " + linkValue + @"\cf0\v " + linkUrl + @"[END>\v0 }";
this.SelectionLength = 0; this.SelectionLength = 0;
this.SelectionStart = position; this.SelectionStart = position;
@@ -1356,6 +1412,7 @@ namespace Volian.Controls.Library
} }
private void AddLink50(string linkValue, string linkUrl) private void AddLink50(string linkValue, string linkUrl)
{ {
//this.DetectUrls = false;
int position = SelectionStart; int position = SelectionStart;
SelectionLength = 0; SelectionLength = 0;
SelectedRtf = string.Format(@"{{\rtf\field{{\*\fldinst{{HYPERLINK ""www.volian.com #{0}"" }}}}{{\fldrslt{{\cf2\ul {1}}}}}}}", linkUrl, linkValue); SelectedRtf = string.Format(@"{{\rtf\field{{\*\fldinst{{HYPERLINK ""www.volian.com #{0}"" }}}}{{\fldrslt{{\cf2\ul {1}}}}}}}", linkUrl, linkValue);
@@ -1408,6 +1465,9 @@ namespace Volian.Controls.Library
{ {
Size offset = Size - ClientSize; Size offset = Size - ClientSize;
int widthNew = (this is TableCellEditor) ? Width : (ContentsSize.Width + offset.Width + AdjustSize.Width); int widthNew = (this is TableCellEditor) ? Width : (ContentsSize.Width + offset.Width + AdjustSize.Width);
//int widthNew = Width;
//if (!(this is TableCellEditor))
// widthNew = ContentsSize.Width + offset.Width + AdjustSize.Width;
int heightNew = ContentsSize.Height + offset.Height + AdjustSize.Height; int heightNew = ContentsSize.Height + offset.Height + AdjustSize.Height;
// Don't make the window narrower unless it has text - RHM - 20100107 // Don't make the window narrower unless it has text - RHM - 20100107
Size szNew = new Size(((Text != "" && adjustWidth) ? widthNew : (widthNew > Width ? widthNew : Width)), heightNew); Size szNew = new Size(((Text != "" && adjustWidth) ? widthNew : (widthNew > Width ? widthNew : Width)), heightNew);
@@ -1545,6 +1605,22 @@ namespace Volian.Controls.Library
} }
#endregion #endregion
#region ColorSupport - Not currently used. #region ColorSupport - Not currently used.
//private void SetBackGroundColor(ItemInfo itemInfo)
//{
// string backcolor = null;
// int type = (int)itemInfo.MyContent.Type;
// FormatInfo formatinfo = itemInfo.ActiveFormat;
// if (type == (int)E_FromType.Procedure)
// backcolor = formatinfo.PlantFormat.FormatData.ProcData.BackColor;
// else if (type == (int)E_FromType.Section)
// backcolor = formatinfo.PlantFormat.FormatData.SectData.BackColor;
// else
// {
// int typindx = (int)itemInfo.MyContent.Type - 20000; // what to do for other types rather than steps
// backcolor = formatinfo.PlantFormat.FormatData.StepDataList[typindx].StepLayoutData.BackColor;
// }
// BackColor = Color.FromName(backcolor);
//}
#endregion #endregion
#region EventSupport #region EventSupport
#region LinkEvents #region LinkEvents
@@ -1577,6 +1653,8 @@ namespace Volian.Controls.Library
#region TextAndContentsEvents #region TextAndContentsEvents
void StepRTB_TextChanged(object sender, EventArgs e) void StepRTB_TextChanged(object sender, EventArgs e)
{ {
//if (Rtf.Contains("<START]<START]"))
// Volian.Base.Library.vlnStackTrace.ShowStackLocal(2, 10, "Start Start ItemID={0}", MyItemInfo.ItemID);
if (_InitializingRTB || _IsExperimenting) return; if (_InitializingRTB || _IsExperimenting) return;
// Was setting _IsDirty to true here, but this was getting called from // Was setting _IsDirty to true here, but this was getting called from
// 'dotnetbar' when text was NOT Changed. So _IsDirty was made into // 'dotnetbar' when text was NOT Changed. So _IsDirty was made into
@@ -1612,6 +1690,7 @@ namespace Volian.Controls.Library
private void HandleLocalSelectionChange() private void HandleLocalSelectionChange()
{ {
if (this.MyItemInfo != null && this.MyItemInfo.IsRtfRaw) return; // B2017-023 null reference check for empty workdraft set information dialog if (this.MyItemInfo != null && this.MyItemInfo.IsRtfRaw) return; // B2017-023 null reference check for empty workdraft set information dialog
//if (MyRTBItem != null && MyRTBItem.MyStepPanel.SelectedStepRTB != this)
if (OnIsNotCurrentSelection(this, new EventArgs())) if (OnIsNotCurrentSelection(this, new EventArgs()))
return; return;
@@ -1627,6 +1706,8 @@ namespace Volian.Controls.Library
SelectAll(); SelectAll();
_HandlingCtrlA = false; _HandlingCtrlA = false;
} }
//HandleOverWrite();
//vlnStackTrace.ShowStackLocal("HandleSelectionChangeStack", 1, 10);
bool startingValue = _AdjustingSelection; bool startingValue = _AdjustingSelection;
if (_IdentifyingLinks || _ProcessingDelete) return; if (_IdentifyingLinks || _ProcessingDelete) return;
// If the cursor is beyond the end of the line then move the cursor back one character // If the cursor is beyond the end of the line then move the cursor back one character
@@ -1736,6 +1817,14 @@ namespace Volian.Controls.Library
return false; return false;
} }
//private void HandleOverWrite()
//{
// if (!_OverWrite) return;
// if (SelectionLength > 0) return;
// if (SelectionStart == TextLength) return;
// Console.WriteLine("Handle Overwrite, SelectionStart = {0}, SelectionLength = {1}", SelectionStart, SelectionLength);
// SelectionLength = 1;
//}
private bool _CheckSelection = false; private bool _CheckSelection = false;
#endregion #endregion
#region Delete Handlers #region Delete Handlers
@@ -1754,7 +1843,7 @@ namespace Volian.Controls.Library
DeleteCurrentSelection(keychars); DeleteCurrentSelection(keychars);
e.SuppressKeyPress = true; e.SuppressKeyPress = true;
break; break;
case RangeStatus.Before_Between: case RangeStatus.Before_Between: //myRTB1.SelectedText.EndsWith(@"[END><START]")
DeleteEndBetweenLinks(keychars); DeleteEndBetweenLinks(keychars);
e.SuppressKeyPress = true; e.SuppressKeyPress = true;
break; break;
@@ -1824,15 +1913,19 @@ namespace Volian.Controls.Library
/// <param name="setSelect"></param> /// <param name="setSelect"></param>
private void InsertCharBetweenLinks(LinkLocation ll, char charToAdd, bool setSelect) private void InsertCharBetweenLinks(LinkLocation ll, char charToAdd, bool setSelect)
{ {
//_InsertingSpaceBetweenLinks = true;
DebugPrint("ICBLvvvvvvvvvvvvvvv>>>"); DebugPrint("ICBLvvvvvvvvvvvvvvv>>>");
Rtf = Rtf.Substring(0, ll.StartRtf) + @"\v0 " + charToAdd.ToString() + @"\v " + Rtf.Substring(ll.StartRtf); Rtf = Rtf.Substring(0, ll.StartRtf) + @"\v0 " + charToAdd.ToString() + @"\v " + Rtf.Substring(ll.StartRtf);
//_InsertingSpaceBetweenLinks = false;
if (setSelect) if (setSelect)
SelectionStart = ll.Start - 6; // account for <START] - 1 for the character typed SelectionStart = ll.Start - 6; // account for <START] - 1 for the character typed
DebugPrint("ICBL^^^^^^^^^^^^^^^>>>"); DebugPrint("ICBL^^^^^^^^^^^^^^^>>>");
} }
private void ExpandSelectionToIncludeStart() private void ExpandSelectionToIncludeStart()
{ {
//_AdjustingSelection = true;
SetSelection(SelectionStart - 7, SelectionLength + 7); // Expand selection to include start SetSelection(SelectionStart - 7, SelectionLength + 7); // Expand selection to include start
//_AdjustingSelection = false;
} }
public string GetSelectionForClipBoard() public string GetSelectionForClipBoard()
{ {
@@ -1879,6 +1972,7 @@ namespace Volian.Controls.Library
{ {
_SendBackSpace = true; _SendBackSpace = true;
RtbSendKeys("{BS}"); // remove X RtbSendKeys("{BS}"); // remove X
//this.ClearUndo(); // undo was redisplay 'X' and then deleted text
Application.DoEvents(); Application.DoEvents();
DebugSelection("After BS"); DebugSelection("After BS");
} }
@@ -1897,7 +1991,9 @@ namespace Volian.Controls.Library
int slen = SelectionLength + 1 - 7; int slen = SelectionLength + 1 - 7;
// This puts a space at the link that starts at the end of the selection // This puts a space at the link that starts at the end of the selection
InsertCharBetweenLinks(_RangeEndLink.NextLink); InsertCharBetweenLinks(_RangeEndLink.NextLink);
//_AdjustingSelection = true;
DeleteSelection(sstart, slen, keychars); DeleteSelection(sstart, slen, keychars);
//_AdjustingSelection = false;
_ProcessingKeys--; _ProcessingKeys--;
} }
private void DeleteStartBetweenLinks(string keychars) private void DeleteStartBetweenLinks(string keychars)
@@ -1906,6 +2002,7 @@ namespace Volian.Controls.Library
DebugSelection("DeleteStartBetweenLinks"); DebugSelection("DeleteStartBetweenLinks");
int slen = SelectionLength + 8; int slen = SelectionLength + 8;
int sstart = SelectionStart - 7; int sstart = SelectionStart - 7;
//LinkLocation ll = FindBetweenLinks(SelectionStart);
InsertCharBetweenLinks(_RangeStartLink); InsertCharBetweenLinks(_RangeStartLink);
DeleteSelection(sstart, slen, keychars); DeleteSelection(sstart, slen, keychars);
_ProcessingKeys--; _ProcessingKeys--;
@@ -1916,6 +2013,7 @@ namespace Volian.Controls.Library
DebugSelection("DeleteFromStartOfBox"); DebugSelection("DeleteFromStartOfBox");
int slen = SelectionLength; int slen = SelectionLength;
SetSelection(0, 0); SetSelection(0, 0);
//RtbSendKeys(" "); // open for space between links which separates END/START tokens
SelectedText = " "; SelectedText = " ";
DeleteSelection(0, slen + 8, keychars); DeleteSelection(0, slen + 8, keychars);
_ProcessingKeys--; _ProcessingKeys--;
@@ -1926,8 +2024,12 @@ namespace Volian.Controls.Library
DebugSelection("DeleteFromStartOfBoxEndBetweenLinks"); DebugSelection("DeleteFromStartOfBoxEndBetweenLinks");
// This puts a space at the link that starts at the end of the selection // This puts a space at the link that starts at the end of the selection
int sLen = SelectionStart + SelectionLength - 7 + 2;// -7 for <START] + 2 for the spaces that are added int sLen = SelectionStart + SelectionLength - 7 + 2;// -7 for <START] + 2 for the spaces that are added
//LinkLocation ll = FindBetweenLinks(SelectionStart + SelectionLength);
InsertCharBetweenLinks(_RangeEndLink.NextLink); InsertCharBetweenLinks(_RangeEndLink.NextLink);
//RtbSendKeys("{RIGHT} "); // open for space between links which separates END/START tokens
//int sLen = myRTB1.SelectionStart;
SetSelection(0, 0); SetSelection(0, 0);
//RtbSendKeys(" "); // open for space between links which separates END/START tokens
SelectedText = " "; // open for space between links which separates END/START tokens SelectedText = " "; // open for space between links which separates END/START tokens
DeleteSelection(0, sLen, keychars); DeleteSelection(0, sLen, keychars);
_ProcessingKeys--; _ProcessingKeys--;
@@ -2034,7 +2136,7 @@ namespace Volian.Controls.Library
srtb.Rtf = this.SelectedRtf.Replace(@"\u8209?", "-"); srtb.Rtf = this.SelectedRtf.Replace(@"\u8209?", "-");
srtb.Rtf = srtb.Rtf.Replace(@"\u9586?", @"\\"); srtb.Rtf = srtb.Rtf.Replace(@"\u9586?", @"\\");
string rtnstr = ""; string rtnstr = "";
string ctxt = srtb.Text; string ctxt = srtb.Text;//this.SelectedText;
if (ctxt.EndsWith("<START]")) if (ctxt.EndsWith("<START]"))
ctxt = ctxt.Substring(0, ctxt.Length - 7); ctxt = ctxt.Substring(0, ctxt.Length - 7);
int idx = 0; int idx = 0;
@@ -2163,6 +2265,7 @@ namespace Volian.Controls.Library
if (MyItemInfo != null && MyItemInfo.IsRtfRaw && MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION") && !hasEquation) if (MyItemInfo != null && MyItemInfo.IsRtfRaw && MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION") && !hasEquation)
{ {
FlexibleMessageBox.Show("Cannot paste non-equation data into an equation step type.", "Invalid data", MessageBoxButtons.OK); FlexibleMessageBox.Show("Cannot paste non-equation data into an equation step type.", "Invalid data", MessageBoxButtons.OK);
//richTextBox1.Dispose();
e.Handled = true; e.Handled = true;
return; return;
} }
@@ -2170,6 +2273,7 @@ namespace Volian.Controls.Library
else if (hasEquation && (MyItemInfo == null || (MyItemInfo != null && !MyItemInfo.IsRtfRaw && !MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION")))) else if (hasEquation && (MyItemInfo == null || (MyItemInfo != null && !MyItemInfo.IsRtfRaw && !MyItemInfo.FormatStepData.Type.ToUpper().Contains("EQUATION"))))
{ {
FlexibleMessageBox.Show("Cannot paste equation data into an non-equation step type.", "Invalid data", MessageBoxButtons.OK); FlexibleMessageBox.Show("Cannot paste equation data into an non-equation step type.", "Invalid data", MessageBoxButtons.OK);
//richTextBox1.Dispose();
e.Handled = true; e.Handled = true;
return; return;
} }
@@ -2428,6 +2532,16 @@ namespace Volian.Controls.Library
if (SelectionLength > 0) HandleDeleteKeyWithSelectedText(e, null); if (SelectionLength > 0) HandleDeleteKeyWithSelectedText(e, null);
break; break;
case Keys.Insert: case Keys.Insert:
//_OverWrite = !_OverWrite;
//if (_OverWrite)
//{
// HandleSelectionChange();
//}
//else
//{
// SelectionLength = 0;
// HandleSelectionChange();
//}
// For now, don't allow for toggling between insert/overwrite mode - see // For now, don't allow for toggling between insert/overwrite mode - see
// comment on _OverWrite // comment on _OverWrite
e.Handled = true; e.Handled = true;
@@ -2441,11 +2555,21 @@ namespace Volian.Controls.Library
if (e.Shift) if (e.Shift)
{ {
e.Handled = true; e.Handled = true;
ItemInfo myCopyStep = (this.Parent.Parent.Parent as StepTabPanel).MyDisplayTabControl.MyCopyStep; ItemInfo myCopyStep = (this.Parent.Parent.Parent as StepTabPanel).MyDisplayTabControl.MyCopyStep;
if (myCopyStep != null) if (myCopyStep != null)
{ {
OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste")); // commented out as part of bug fix B2016-148 to fix the <Shift><F5> not popping up the paste options
} //if (this.MyItemInfo.IsSection && myCopyStep.IsSection)
// OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
//if (this.MyItemInfo.IsStep && myCopyStep.IsStep)
//{
// if ((this.MyItemInfo.IsHigh && myCopyStep.IsHigh) || (!this.MyItemInfo.IsHigh && !myCopyStep.IsHigh))
// OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
//}
OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
}
//if (!OnCheckClipboard(this, new EventArgs())) return; // check if 'clipboard' contains a step.
//OnSetMenu(this, new StepRTBMenuEventArgs("StepPaste"));
} }
else if (!e.Control && !e.Alt) else if (!e.Control && !e.Alt)
{ {
@@ -2650,6 +2774,7 @@ namespace Volian.Controls.Library
} }
if (Text == "" && Parent != null && Parent is VlnFlexGrid) if (Text == "" && Parent != null && Parent is VlnFlexGrid)
{ {
//ShowMyParentsFonts();
SelectionFont = Parent.Font; SelectionFont = Parent.Font;
} }
// add the character with its font depending on the char.... // add the character with its font depending on the char....
@@ -2903,6 +3028,7 @@ namespace Volian.Controls.Library
_AdjustingSelection = true; _AdjustingSelection = true;
PushSelection(); PushSelection();
FindLinks(); FindLinks();
//IdentifyLinks();
PopSelection(); PopSelection();
LinkLocation llx = FindLinkLocation(); LinkLocation llx = FindLinkLocation();
if (_CheckSelection) if (_CheckSelection)
@@ -3117,6 +3243,98 @@ namespace Volian.Controls.Library
Select(locStart, locLength); Select(locStart, locLength);
} }
#endregion #endregion
//#region FontAndStylesSupport
//private void ToggleFontStyle(FontStyle style, bool att_on)
//{
// int start = SelectionStart;
// int len = SelectionLength;
// System.Drawing.Font currentFont;
// FontStyle fs;
// for (int i = 0; i < len; ++i)
// {
// Select(start + i, 1);
// currentFont = SelectionFont;
// fs = currentFont.Style;
// //add or remove style
// if (!att_on)fs = fs | style;
// else fs = fs & ~style;
// SelectionFont = new Font(
// currentFont.FontFamily,
// currentFont.Size,
// fs
// );
// }
//}
/// <summary>
/// Returns a Font with:
/// 1) The font applying to the entire selection, if none is the default font.
/// 2) The font size applying to the entire selection, if none is the size of the default font.
/// 3) A style containing the attributes that are common to the entire selection, default regular.
/// </summary>
///
//public Font GetFontDetails()
//{
// //This method should handle cases that occur when multiple fonts/styles are selected
// int start = SelectionStart;
// int len = SelectionLength;
// int TempStart = 0;
// if (len <= 1)
// {
// // Return the selection or default font
// if (SelectionFont != null)
// return SelectionFont;
// else
// return Font; // should be default from format.
// }
// // Step through the selected text one char at a time
// // after setting defaults from first char
// _rtbTemp.Rtf = SelectedRtf;
// //Turn everything on so we can turn it off one by one
// FontStyle replystyle =
// FontStyle.Bold | FontStyle.Italic | FontStyle.Underline;
// // Set reply font, size and style to that of first char in selection.
// _rtbTemp.Select(TempStart, 1);
// string replyfont = _rtbTemp.SelectionFont.Name;
// float replyfontsize = _rtbTemp.SelectionFont.Size;
// replystyle = replystyle & _rtbTemp.SelectionFont.Style;
// // Search the rest of the selection
// for (int i = 1; i < len; ++i)
// {
// _rtbTemp.Select(TempStart + i, 1);
// // Check reply for different style
// replystyle = replystyle & _rtbTemp.SelectionFont.Style;
// // Check font
// if (replyfont != _rtbTemp.SelectionFont.FontFamily.Name)
// replyfont = "";
// // Check font size
// if (replyfontsize != _rtbTemp.SelectionFont.Size)
// replyfontsize = (float)0.0;
// }
// // Now set font and size if more than one font or font size was selected
// if (replyfont == "")
// replyfont = _rtbTemp.Font.FontFamily.Name;
// if (replyfontsize == 0.0)
// replyfontsize = _rtbTemp.Font.Size;
// // generate reply font
// Font reply
// = new Font(replyfont, replyfontsize, replystyle);
// return reply;
//}
//#endregion
#region EnumsSelectionRange #region EnumsSelectionRange
private enum StartStatus : int private enum StartStatus : int
{ {
@@ -3193,6 +3411,12 @@ namespace Volian.Controls.Library
DebugPrint("SelectionStart {0}, SelectionEnd {1}, TextLength {2}", DebugPrint("SelectionStart {0}, SelectionEnd {1}, TextLength {2}",
SelectionStart, SelectionStart + SelectionLength, SelectionStart, SelectionStart + SelectionLength,
TextLength); TextLength);
//if (_RangeStartLink != null)
// _RangeStartLink.Show("startLink");
//if (_RangeEndLink != null)
// _RangeEndLink.Show("endLink");
//if (foundLink != null)
// foundLink.Show("foundLink");
if (foundLink == null) if (foundLink == null)
return RTBRangeStatus = RangeStatus.NoContainedLinks; return RTBRangeStatus = RangeStatus.NoContainedLinks;
@@ -3511,6 +3735,7 @@ namespace Volian.Controls.Library
static void tsi_Click(object sender, EventArgs e) static void tsi_Click(object sender, EventArgs e)
{ {
ToolStripMenuItem tsmi = sender as ToolStripMenuItem; ToolStripMenuItem tsmi = sender as ToolStripMenuItem;
//_ContextMenuStepRTB.MyRTBItem.MyStepPanel.MyStepTabPanel.MyStepTabRibbon.OpenContextMenu(tsmi.Owner.Location);
_ContextMenuStepRTB.OnOpenContextMenu(sender, new StepRTBLocationEventArgs(tsmi.Owner.Location)); _ContextMenuStepRTB.OnOpenContextMenu(sender, new StepRTBLocationEventArgs(tsmi.Owner.Location));
} }
// This is our customized Spell Check dialog // This is our customized Spell Check dialog
@@ -3905,6 +4130,63 @@ namespace Volian.Controls.Library
if (NextLink != null) if (NextLink != null)
Console.WriteLine("LinkLocation: {0}.NextLink {1}", str, NextLink); Console.WriteLine("LinkLocation: {0}.NextLink {1}", str, NextLink);
} }
// #region ClipboardHandler
// private const int WM_CUT = 0x0300;
// private const int WM_COPY = 0x0301;
// private const int WM_PASTE = 0x0302;
// public delegate void ClipboardEventHandler(object sender, ClipboardEventArgs e);
// [Category("Clipboard")]
// public event ClipboardEventHandler CutText;
// [Category("Clipboard")]
// public event ClipboardEventHandler CopiedText;
// [Category("Clipboard")]
// public event ClipboardEventHandler PastedText;
// protected override void WndProc(ref Message m)
// {
// if (m.Msg == WM_CUT)
// {
// if (CutText != null)
// CutText(this, new ClipboardEventArgs(this.SelectedText));
// }
// else if (m.Msg == WM_COPY)
// {
// if (CopiedText != null)
// CopiedText(this, new ClipboardEventArgs(this.SelectedText));
// }
// else if (m.Msg == WM_PASTE)
// {
// if (PastedText != null)
// PastedText(this, new ClipboardEventArgs(Clipboard.GetText()));
// }
// base.WndProc(ref m);
// }
//}
//public class ClipboardEventArgs : EventArgs
//{
// private string clipboardText;
// public string ClipboardText
// {
// get
// {
// return clipboardText;
// }
// set
// {
// clipboardText = value;
// }
// }
// public ClipboardEventArgs(string clipboardText)
// {
// this.clipboardText = clipboardText;
// }
// #endregion
} }
#endregion #endregion
+10 -41
View File
@@ -1669,7 +1669,7 @@ namespace Volian.Controls.Library
Clipboard.Clear(); Clipboard.Clear();
Clipboard.SetDataObject(myDO); // this saves the cleaned up information to the Windows clipboard Clipboard.SetDataObject(myDO); // this saves the cleaned up information to the Windows clipboard
} }
iData = Clipboard.GetDataObject(); iData = Clipboard.GetDataObject();
bool noEquationData = true; bool noEquationData = true;
// part of bug B2017-117 we were running out of window handles when printing, found this similar use of // part of bug B2017-117 we were running out of window handles when printing, found this similar use of
@@ -3367,14 +3367,7 @@ namespace Volian.Controls.Library
MessageBox.Show(this, message, "Procedure Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning); MessageBox.Show(this, message, "Procedure Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; return;
} }
//C2026-021 Expand Functionality of Viewing Mode else if (MyEditItem.MyStepPanel.VwMode == E_ViewMode.View)
if (MyEditItem.MyStepPanel.VwMode == E_ViewMode.View && MyEditItem.MyStepPanel.ApplDisplayMode > 0)
{
//Procedure Viewing Mode is set to a specific Unit - so cannot exit vie only mode
MessageBox.Show(this, "Procedures with multiple units are only editable when the Viewing Mode is set to Master. To change out of View Only Mode, first open the Step Propeties panel->Applicability tab and change the Viewing Mode to be Master. Then you can disable View Only Mode.", "Procedure Viewing Mode Incompatiple with Edits", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else if (MyEditItem.MyStepPanel.VwMode == E_ViewMode.View)
{ {
//swapping into edit mode, so check out procedure and Setup Security //swapping into edit mode, so check out procedure and Setup Security
(this.Parent as StepTabPanel).MyDisplayTabItem.OwnerID = MySessionInfo.CheckOutItem(MyEditItem.MyItemInfo.MyProcedure.ItemID, 0); (this.Parent as StepTabPanel).MyDisplayTabItem.OwnerID = MySessionInfo.CheckOutItem(MyEditItem.MyItemInfo.MyProcedure.ItemID, 0);
@@ -3563,10 +3556,7 @@ namespace Volian.Controls.Library
MyEditItem.SaveContents(); MyEditItem.SaveContents();
using (DocVersion dv = DocVersion.Get(Mydvi.VersionID)) using (DocVersion dv = DocVersion.Get(Mydvi.VersionID))
{ {
//must get id before ROFST gets updated so know what to refresh later swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(Mydvi));
int origfstid = roFstInfo.ROFstID;
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(Mydvi));
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo // B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed
{ {
@@ -3574,30 +3564,10 @@ namespace Volian.Controls.Library
ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh); ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh);
roFstInfo = Mydvi.DocVersionAssociations[0].MyROFst; roFstInfo = Mydvi.DocVersionAssociations[0].MyROFst;
} }
else if (!dv.ROfstLastCompleted && origfstid == roFstInfo.ROFstID)
{
//Handle issue where load failed without completing update
//previous RO FST did not load, get last loaded ID
//if none, use -1 which will check all ROs in the Working Draft
string cfg = dv.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
if (dv.DocVersionAssociations[0]?.MyROFst != null)
{
if (!int.TryParse(ac.ROUpdate_PrevROFSTID, out origfstid))
{
origfstid = -1;
}
}
else
{
origfstid = -1;
}
}
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, roFstInfo, origfstid, roFstInfo.ROFstID); ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, null);
swROUpdate.Close(); swROUpdate.Close();
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange; ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
StepPanelTabDisplayEventArgs args = new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST"); StepPanelTabDisplayEventArgs args = new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST");
@@ -3605,7 +3575,7 @@ namespace Volian.Controls.Library
} }
Cursor = Cursors.Default; Cursor = Cursors.Default;
FinalProgressBarMessage = "ROs values updated"; FinalProgressBarMessage = "ROs values updated";
} }
private System.IO.StreamWriter swROUpdate; private System.IO.StreamWriter swROUpdate;
// write the RO reference changes to a text file, include the old/new text, location, and the itemid of the step element // write the RO reference changes to a text file, include the old/new text, location, and the itemid of the step element
void ContentInfo_StaticContentInfoChange(object sender, StaticContentInfoEventArgs args) void ContentInfo_StaticContentInfoChange(object sender, StaticContentInfoEventArgs args)
@@ -3645,11 +3615,10 @@ namespace Volian.Controls.Library
set set
{ {
if (ProgressBar == null) return; if (ProgressBar == null) return;
ProgressBar.Value = 100;
ProgressBar.Text = value; ProgressBar.Maximum = 100;
ProgressBar.Maximum = 100; ProgressBar.Text = value;
ProgressBar.Value = 100; Application.DoEvents();
Application.DoEvents();
} }
} }
+11 -25
View File
@@ -272,24 +272,21 @@ namespace Volian.Controls.Library
for (int i = 0; i < rows * cols; i++) for (int i = 0; i < rows * cols; i++)
datum.Add("|"); datum.Add("|");
XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data"); XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data");
// B2026-003 use StringBuilder a "using" statement around the RichTextBox for better mememory management string data = string.Empty;
StringBuilder data = new StringBuilder();
foreach (XmlNode xn in nl) foreach (XmlNode xn in nl)
{ {
using (RichTextBox rtb = new RichTextBox()) RichTextBox rtb = new RichTextBox();
{ rtb.Rtf = xn.InnerText;
rtb.Rtf = xn.InnerText; XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute;
XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute; string[] rc = xa.InnerText.Split(',');
string[] rc = xa.InnerText.Split(','); int r = int.Parse(rc[0]);
int r = int.Parse(rc[0]); int c = int.Parse(rc[1]);
int c = int.Parse(rc[1]); int index = r * cols + c;
int index = r * cols + c; datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text);
datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text);
}
} }
foreach (string s in datum) foreach (string s in datum)
data.Append(s); data += s;
return data.ToString(); return data;
} }
private string GetCellFormatString(XmlDocument xd) private string GetCellFormatString(XmlDocument xd)
{ {
@@ -2473,17 +2470,6 @@ namespace Volian.Controls.Library
private string ConvertTableText(string str) private string ConvertTableText(string str)
{ {
string rtn = str; string rtn = str;
string pattern = @"\\u([0-9]{1,4})\?";
string mValue, mValue2 = "";
foreach (Match match in Regex.Matches(rtn, pattern, RegexOptions.IgnoreCase))
{
mValue = match.Value;
mValue2 = $"\\f1 {mValue}\\f0";
rtn = rtn.Replace(match.Value, mValue2);
}
//ShowRawString(str, "ConvertTableText IN"); //ShowRawString(str, "ConvertTableText IN");
rtn = rtn.Replace(@"START]\v0", @"START]\cf1\v0"); rtn = rtn.Replace(@"START]\v0", @"START]\cf1\v0");
rtn = rtn.Replace(@"\v #Link:", @"\cf0\v #Link:"); rtn = rtn.Replace(@"\v #Link:", @"\cf0\v #Link:");
@@ -154,12 +154,6 @@
<Compile Include="ConvertTable.cs"> <Compile Include="ConvertTable.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="CustomMessageBox.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="CustomMessageBox.Designer.cs">
<DependentUpon>CustomMessageBox.cs</DependentUpon>
</Compile>
<Compile Include="DisplayApplicability.cs"> <Compile Include="DisplayApplicability.cs">
<SubType>UserControl</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
@@ -460,17 +454,12 @@
<DependentUpon>AnnotationSearch.cs</DependentUpon> <DependentUpon>AnnotationSearch.cs</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="CustomMessageBox.resx">
<DependentUpon>CustomMessageBox.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DisplayBookMarks.resx"> <EmbeddedResource Include="DisplayBookMarks.resx">
<DependentUpon>DisplayBookMarks.cs</DependentUpon> <DependentUpon>DisplayBookMarks.cs</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="DisplayHistory.resx"> <EmbeddedResource Include="DisplayHistory.resx">
<DependentUpon>DisplayHistory.cs</DependentUpon> <DependentUpon>DisplayHistory.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="DisplayLibDocs.resx"> <EmbeddedResource Include="DisplayLibDocs.resx">
<DependentUpon>DisplayLibDocs.cs</DependentUpon> <DependentUpon>DisplayLibDocs.cs</DependentUpon>
+12 -40
View File
@@ -1601,11 +1601,12 @@ namespace Volian.Controls.Library
//B2024-024 create import file for parent/child procedure set //B2024-024 create import file for parent/child procedure set
void MultiUnitImportProcedure_Click(object sender, EventArgs e) void MultiUnitImportProcedure_Click(object sender, EventArgs e)
{ {
//RevisionInfo ri = (sender as MenuItem).Tag as RevisionInfo;
RevisionInfo ri = RevisionInfo.Get(int.Parse((sender as MenuItem).Tag.ToString())); RevisionInfo ri = RevisionInfo.Get(int.Parse((sender as MenuItem).Tag.ToString()));
RevisionConfig rc = ri.MyConfig as RevisionConfig; RevisionConfig rc = ri.MyConfig as RevisionConfig;
// bug fix: B2016-183 - add the child's name (ex Unit 1) to the export file name for Parent/Child procedures. // bug fix: B2016-183 - add the child's name (ex Unit 1) to the export file name for Parent/Child procedures.
int applIdx = rc.Applicability_Index; int applIdx = rc.Applicability_Index;
string str = (applIdx > 0) ? _currentPri.MyDocVersion.UnitNames[applIdx - 1] + "_" : ""; // if parent/child get the defined child name to include the export filename string str = (applIdx > 0) ? _currentPri.MyDocVersion.UnitNames[applIdx - 1] + "_" : ""; // if parent/child get the defined child name to inlcude the export filename
System.Xml.XmlDocument xd = new System.Xml.XmlDocument(); System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
xd.LoadXml(ri.LatestVersion.ApprovedXML); xd.LoadXml(ri.LatestVersion.ApprovedXML);
string PEIPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\PEI_" + Database.VEPROMS_SqlConnection.Database; string PEIPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\PEI_" + Database.VEPROMS_SqlConnection.Database;
@@ -1614,13 +1615,8 @@ namespace Volian.Controls.Library
// B2022-048: Crash when creating Procedure to Import from versions. Couldn't handle '/' in proc number. // B2022-048: Crash when creating Procedure to Import from versions. Couldn't handle '/' in proc number.
string fNametmp = xd.SelectSingleNode("procedure/content/@number").InnerText.Replace(" ", "_").Replace(@"\u8209?", "-").Replace(@"\u9586?", "_").Replace("/", "-") + ".pxml"; string fNametmp = xd.SelectSingleNode("procedure/content/@number").InnerText.Replace(" ", "_").Replace(@"\u8209?", "-").Replace(@"\u9586?", "_").Replace("/", "-") + ".pxml";
// B2022-112: If applicability, need to resolve the '<' and '>' characters. Just use the UnitNames, i.e. str, from above. // B2022-112: If applicability, need to resolve the '<' and '>' characters. Just use the UnitNames, i.e. str, from above.
if (applIdx > 0) if (applIdx > 0) fNametmp = Regex.Replace(fNametmp, @"\<U-ID\>", str, RegexOptions.IgnoreCase);
{ string fileName = PEIPath + "\\" + str + "Approved_Rev_" + ri.RevisionNumber.Replace(" ", "_").Replace("\\", "-").Replace("/", "-") + "_" + fNametmp;
fNametmp = Regex.Replace(fNametmp, @"\<U-ID\>", str, RegexOptions.IgnoreCase);
fNametmp = Regex.Replace(fNametmp, @"\<U-NAME\>", str, RegexOptions.IgnoreCase);
}
string fileName = PEIPath + "\\" + str + "Approved_Rev_" + ri.RevisionNumber.Replace(" ", "_").Replace("\\", "-").Replace("/", "-") + "_" + fNametmp;
xd.Save(fileName); xd.Save(fileName);
FlexibleMessageBox.Show("Approved procedure saved to import file " + fileName, "Creating Export of Approved Procedure", MessageBoxButtons.OK, MessageBoxIcon.Information); FlexibleMessageBox.Show("Approved procedure saved to import file " + fileName, "Creating Export of Approved Procedure", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
@@ -2465,11 +2461,7 @@ namespace Volian.Controls.Library
} }
Cursor = Cursors.WaitCursor; // C2023-002: move wait cursor after check out error Cursor = Cursors.WaitCursor; // C2023-002: move wait cursor after check out error
int ownerid = MySessionInfo.CheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion); int ownerid = MySessionInfo.CheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion);
using (DocVersion dv = DocVersion.Get(MyDVI.VersionID))
//must get id before ROFST gets updated so know what to refresh later
int origfstid = roFstInfo.ROFstID;
using (DocVersion dv = DocVersion.Get(MyDVI.VersionID))
{ {
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(MyDVI)); // RO changes placed in file in the Documents\VEPROMS folder swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(MyDVI)); // RO changes placed in file in the Documents\VEPROMS folder
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo // B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
@@ -2479,30 +2471,10 @@ namespace Volian.Controls.Library
ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh); ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh);
roFstInfo = MyDVI.DocVersionAssociations[0].MyROFst; roFstInfo = MyDVI.DocVersionAssociations[0].MyROFst;
} }
else if (!dv.ROfstLastCompleted && origfstid == roFstInfo.ROFstID) roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
{
//Handle issue where load failed without completing update
//previous RO FST did not load, get last loaded ID
//if none, use -1 which will check all ROs in the Working Draft
string cfg = dv.DocVersionAssociations[0].Config;
AssociationConfig ac = new AssociationConfig((cfg == null || cfg.Length == 0) ? "<Config />" : cfg);
if (dv.DocVersionAssociations[0]?.MyROFst != null)
{
if (!int.TryParse(ac.ROUpdate_PrevROFSTID, out origfstid))
{
origfstid = -1;
}
}
else
{
origfstid = -1;
}
}
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, roFstInfo, origfstid, roFstInfo.ROFstID); ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, null);
swROUpdate.Close(); swROUpdate.Close();
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange; ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
OnTabDisplay(this, new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST")); OnTabDisplay(this, new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST"));
@@ -2550,10 +2522,10 @@ namespace Volian.Controls.Library
set set
{ {
if (ProgressBar == null) return; if (ProgressBar == null) return;
ProgressBar.Text = value; ProgressBar.Value = 100;
ProgressBar.Maximum = 100; ProgressBar.Maximum = 100;
ProgressBar.Value = 100; ProgressBar.Text = value;
Application.DoEvents(); Application.DoEvents();
} }
} }
public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args) public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
+1 -3
View File
@@ -960,9 +960,7 @@ namespace Volian.Print.Library
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage); OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
if (myProcedure.Sections == null) if (myProcedure.Sections == null)
{ {
// C2026-033 if we are running baselines, don't display the empty procedure message box, instead continue on as if OK was pressed. MessageBox.Show("This procedure has no content and will not be printed.", "Empty Procedure", MessageBoxButtons.OK, MessageBoxIcon.Information);
if (!BaselineTesting)
MessageBox.Show("This procedure has no content and will not be printed.", "Empty Procedure", MessageBoxButtons.OK, MessageBoxIcon.Information);
ProfileTimer.Pop(profileDepth); ProfileTimer.Pop(profileDepth);
// B2024-062 Added check for EmptyProcedure. This is to prevent the Try Again message // B2024-062 Added check for EmptyProcedure. This is to prevent the Try Again message
// from appearing after the user clicks on the OK button from the Empty Procedure message // from appearing after the user clicks on the OK button from the Empty Procedure message
-3
View File
@@ -491,12 +491,10 @@ namespace XYPlots
// remove an extra spaces between >< // remove an extra spaces between ><
//Buff = Regex.Replace(Buff, @"[ ]+<", "<"); //Buff = Regex.Replace(Buff, @"[ ]+<", "<");
Buff = Buff.Replace(">\r ", ">\r\n "); Buff = Buff.Replace(">\r ", ">\r\n ");
Buff = Buff.Replace(">\n ", ">\r\n "); // C2022-003 if RO has symbols
Buff = Regex.Replace(Buff, @"[ ]+<", "<"); Buff = Regex.Replace(Buff, @"[ ]+<", "<");
// some data only had carriage return, replace these with cr/nl so that following code // some data only had carriage return, replace these with cr/nl so that following code
// will work // will work
Buff = Buff.Replace(">\r<", ">\r\n<"); Buff = Buff.Replace(">\r<", ">\r\n<");
Buff = Buff.Replace(">\n<", ">\r\n<"); // C2022-003 if RO has symbols
Buff = Buff.Replace("><", ">\r\n<"); Buff = Buff.Replace("><", ">\r\n<");
// some data had cr/cr/nl, change to cr/nl // some data had cr/cr/nl, change to cr/nl
Buff = Buff.Replace("\r\r\n", "\r\n"); Buff = Buff.Replace("\r\r\n", "\r\n");
@@ -522,7 +520,6 @@ namespace XYPlots
Buff = Buff.Substring(0, Buff.Length - 2) + " \r\n\0x00"; // needs to end with null Buff = Buff.Substring(0, Buff.Length - 2) + " \r\n\0x00"; // needs to end with null
else if (Buff.EndsWith(">")) // doesn't end with return chars... else if (Buff.EndsWith(">")) // doesn't end with return chars...
Buff = Buff.Substring(0, Buff.Length - 1) + " \r\n\0x00"; // needs to end with null Buff = Buff.Substring(0, Buff.Length - 1) + " \r\n\0x00"; // needs to end with null
Buff = Regex.Replace(Buff, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : ""); // C2022-003 RO Symbols. Convert unicode to character.
Buff = Regex.Replace(Buff, @"([0-9])\r\n([0-9])", "$1 $2"); Buff = Regex.Replace(Buff, @"([0-9])\r\n([0-9])", "$1 $2");
} }
private void CloseGraph() private void CloseGraph()
+3 -8
View File
@@ -2,14 +2,13 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Printing; using System.Drawing.Printing;
using System.IO; using System.Drawing.Imaging;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms; using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using VG; using VG;
//using XYPlots; //using XYPlots;
@@ -22,10 +21,6 @@ namespace XYPlots
public frmXYPlot(string title,string xyPlot) public frmXYPlot(string title,string xyPlot)
{ {
InitializeComponent(); InitializeComponent();
title = Regex.Replace(title, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : ""); // C2022-003 RO Symbols. Convert unicode to character.
xyPlot = Regex.Replace(xyPlot, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : ""); // C2022-003 RO Symbols. Convert unicode to character.
int pstart = xyPlot.IndexOf("<<G"); // find the starting Plot Command int pstart = xyPlot.IndexOf("<<G"); // find the starting Plot Command
xyPlot = xyPlot.Substring(pstart); // set val to the start of the plot commands xyPlot = xyPlot.Substring(pstart); // set val to the start of the plot commands
_XYPlot =xyPlot; _XYPlot =xyPlot;