Compare commits

...

121 Commits

Author SHA1 Message Date
mschill 06c3136566 Merge branch 'Development' into C2026-043-Tech-Debt_v1 2026-07-21 10:38:53 -04:00
jjenko abaf55e9b1 Merge pull request 'C2026-046 - Decrease check if need to update ROs.' (#793) from C2026-046 into Development
good for testing
2026-07-21 10:32:30 -04:00
mschill 3a2dd0b0aa C2026-046 - Decrease check if need to update ROs. 2026-07-21 10:24:46 -04:00
mschill 9486b37300 C2026-043-Tech-Debt_v1 - Stash 1 2026-07-21 06:49:28 -04:00
jjenko 0fed1acfd8 Merge pull request 'F2026-017 Blank line was sometimes missing after the Note and Caution text. This was a 64-bit build difference that affected the text width calculations.' (#792) from F2026-017_SummerCautionNoteAdj into Development
Format only change - good for testing phase
2026-07-17 10:11:25 -04:00
jjenko d7c2300021 F2026-017 Blank line was sometimes missing after the Note and Caution text. This was a 64-bit build difference that affected the text width calculations. 2026-07-17 10:11:43 -04:00
jjenko fca333299d Merge pull request 'C2026 044' (#791) from C2026-044 into Development
good for testing phase
2026-07-16 08:53:54 -04:00
mschill a13b03a136 C2026-044 – ve_GetParentItem Performance Improvement
Added Included columns to Index
2026-07-16 08:48:11 -04:00
mschill 48054f5bf1 C2026-044 – ve_GetParentItem Performance Improvement 2026-07-16 08:26:52 -04:00
mschill 51f2897a33 C2026-044 – ve_GetParentItem Performance Improvement 2026-07-16 08:26:07 -04:00
jjenko 7c3cfca86c Merge pull request 'B2026-055 – Transition Search Improvements' (#790) from B2026-055 into Development
good for testing
2026-07-15 13:54:03 -04:00
mschill 352af15984 B2026-055 – Transition Search Improvements 2026-07-15 12:43:38 -04:00
jjenko 2c42933d58 Merge pull request 'F2026-016 Robinson- created a new sub-format for a Foldout section that uses a smaller font size.' (#789) from F2026-016_Robinson_Foldout_Format into Development
format only change. good for testing
2026-07-10 09:57:15 -04:00
jjenko 2e68362836 F2026-016 Robinson- created a new sub-format for a Foldout section that uses a smaller font size. 2026-07-10 09:56:58 -04:00
jjenko c6736db7ea Merge pull request 'B2026-065 Adjusted the Callaway Two Column format for the position of RNO tables.' (#788) from B2026-065_RNO_TablePositionAdjustment into Development
format only change.  Good for testing
2026-07-09 10:41:42 -04:00
jjenko c005f03af8 B2026-065 Adjusted the Callaway Two Column format for the position of RNO tables. 2026-07-09 10:41:46 -04:00
jjenko 459aabcc86 Merge pull request 'B2026-064 – Updating ROs from Display ROs should not error' (#787) from B2026-064 into Development
good for testing
2026-07-07 11:01:30 -04:00
mschill ad33097d5e B2026-064 – Updating ROs from Display ROs should not error 2026-07-07 10:59:51 -04:00
jjenko 8d7735735e Merge pull request 'F2026_015 Moved the change bar position to the right one space to accommodate the wider Caution and Note boxes' (#786) from F2026-015_SouthTexas_ChgBars into Development
format only change.  Ready for testing
2026-07-01 09:15:24 -04:00
jjenko 25bbc46925 F2026_015 Moved the change bar position to the right one space to accommodate the wider Caution and Note boxes 2026-07-01 09:17:23 -04:00
jjenko 5a26b0ee35 Merge pull request 'B2026-054 - When performing a Transition search, the Formats dropdown list is repeating several times.' (#785) from B2026-054 into Development
good for testing phase
2026-07-01 08:19:38 -04:00
mschill 09a397bed2 B2026-054 - When performing a Transition search, the Formats dropdown list is repeating several times. 2026-07-01 07:21:25 -04:00
jjenko a33039bcae Merge pull request 'F2026-014 South Texas EOP format – adjusted the Caution and Note box width. Also remove the extra space between bullets and multiple Caution/Note text' (#784) from F2026-014_SouthTexas_Caution_Box_Width into Development
format only changes - ready for testing
2026-06-30 14:34:22 -04:00
jjenko 0ebd125266 F2026-014 South Texas EOP format – adjusted the Caution and Note box width. Also remove the extra space between bullets and multiple Caution/Note text 2026-06-30 14:35:28 -04:00
jjenko fd16a6b6c3 Merge pull request 'B2026-063 - Issue Deleting Steps with Grids' (#783) from B2026-063 into Development
good for testing
2026-06-30 13:50:22 -04:00
mschill cf19f764c7 Copy / Paste Error when updating Revision Comment 2026-06-30 13:49:37 -04:00
jjenko 88850d6c25 Merge pull request 'B2026-063 - Issue Deleting Steps with Grids' (#782) from B2026-063 into Development
good for testing phase
2026-06-30 09:28:28 -04:00
mschill b173c61575 B2026-063 - Issue Deleting Steps with Grids 2026-06-30 09:11:43 -04:00
jjenko 3b866f0952 Merge pull request 'B2026-057 - Issue when ROs are out of date and swapping between sets – sometimes asked if want to update ROs twice if said no the first time.' (#781) from B2026-057 into Development
good for testing phase
2026-06-29 10:00:42 -04:00
mschill 94db524a11 B2026-057 - Issue when ROs are out of date and swapping between sets – sometimes asked if want to update ROs twice if said no the first time. 2026-06-29 09:51:48 -04:00
jjenko f27616ce1f Merge pull request 'B2026-052 - Issue when parens inside a Hardspaced Multi-RO Return Values.' (#780) from B2026-052 into Development
good for testing phase
2026-06-29 08:47:11 -04:00
mschill 7f75af7119 B2026-052 - Issue when parens inside a Hardspaced Multi-RO Return Values.
PROMS crashes when doing an update ROFst.
2026-06-25 15:46:25 -04:00
mschill 38e42723af Merge pull request 'B2026-060, B2026-061, Fixed issue where change bars were printing when they should not have been.' (#778) from B2026-60_B2026-61 into Development
Looks Good. Ready for QA!
2026-06-18 14:18:24 -04:00
jjenko f4ec60c9e0 B2026-060, B2026-061, Fixed issue where change bars were printing when they should not have been. 2026-06-18 14:06:30 -04:00
jjenko 01394b1978 Merge pull request 'B2026 058' (#777) from B2026-058 into Development
good for testing
2026-06-12 15:15:39 -04:00
mschill 9b7db08fcf update unicode 2026-06-12 15:02:01 -04:00
mschill 6d7cdef223 B2026-058 – If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit. 2026-06-12 14:57:42 -04:00
jjenko d9c35fe02a Merge pull request 'C2026 021 b2026 048' (#775) from C2026-021_B2026-048 into Development
good for testing
2026-05-29 09:47:07 -04:00
mschill 250b3fa406 Remove commented out code 2026-05-29 06:33:37 -04:00
mschill a5a3f16177 C2026-021_B2026-048 Expand Functionality of Viewing Mode 2026-05-29 06:06:58 -04:00
jjenko ffa7e21c18 Merge pull request 'B2026-050 Problem when Approval with Duplicate Rev Numbers' (#773) from B2026-050 into Development
good for testing phase
2026-05-26 08:38:20 -04:00
mschill 4608c05df0 B2026-050 Problem when Approval with Duplicate Rev Numbers 2026-05-26 07:01:43 -04:00
jjenko 56ff5a0213 Merge pull request 'B2026-051 Fix Error loading Display Ros when cannot find RO lookup' (#772) from B2026-051 into Development
good for testing phase
2026-05-22 11:34:31 -04:00
mschill 014fde301c B2026-051 Fix Error loading Display Ros when cannot find RO lookup 2026-05-22 11:07:57 -04:00
jjenko 0080a42423 Merge pull request 'C2026-008 - Re-Architect RO.FST to include RO Modification date/time and use those when updating ROs from the RO.FST' (#756) from C2026-008 into Development
Reviewed-on: #756
Reviewed-by: John Jenko <jjenko@volian.com>

This was pre-tested prior to  this merge.
2026-05-19 09:24:09 -04:00
mschill 2035a4c855 Merge branch 'Development' into C2026-008 2026-05-19 08:59:34 -04:00
jjenko 4dc6a190fa Merge pull request 'C2026-037 Change History Deleted Items to 24-hour clock' (#771) from C2026-037 into Development
good for testing
2026-05-19 08:56:47 -04:00
mschill e0db322262 C2026-037 Change History Deleted Items to 24-hour clock 2026-05-19 06:56:31 -04:00
mschill 8f1bb45e42 C2026-008 - Re-Architect RO.FST to include RO Modification date/time and use those when updating ROs from the RO.FST
--Fix for Blank popup box when completes updating ROs through Admin Tool & fix for updating ROs when fails part way through (if network error, etc…)
2026-05-15 07:09:21 -04:00
mschill f39aefd28f Merge branch 'Development' into C2026-008 2026-05-14 10:40:00 -04:00
jjenko 2cfc43dbfd Merge pull request 'B2026-045 Issue with Refreshing Changebars when Approval is done multiple times in a row on Multi-unit. Printing was ok but the UI required leaving PROMS and going back in.' (#769) from B2026-045 into Development
good for testing
2026-05-13 15:38:26 -04:00
mschill f4168b5202 B2026-045 Issue with Refreshing Changebars when Approval is done multiple times in a row on Multi-unit. Printing was ok but the UI required leaving PROMS and going back in. 2026-05-13 15:02:52 -04:00
jjenko 2d93b652e8 Merge pull request 'B2026-046-RO-symbols-and-Annotations' (#768) from B2026-046-RO-symbols-and-Annotations into Development
good for testing
2026-05-13 13:43:12 -04:00
plarsen 70782cd655 B2026-046-RO-symbols-and-Annotations 2026-05-13 13:37:12 -04:00
mschill 768fcc4f05 Fix Bug in Dotnet Bar related to multiple events and closing display tabs 2026-05-12 08:54:26 -04:00
mschill 727491f99b Merge branch 'C2026-008' of https://git.volian.com/Volian/SourceCode into C2026-008 2026-05-11 14:43:49 -04:00
mschill c5f1c3a340 C2026-008 - Re-Architect RO.FST to include RO Modification date/time and use those when updating ROs from the RO.FST
Update ProgressBar & fix Already Checked out popup multiple times
2026-05-11 14:42:48 -04:00
mschill a78311104a Merge branch 'Development' into C2026-008 2026-05-11 14:41:01 -04:00
plarsen 4b5b06210c B2026-046-RO-symbols-and-Annotations 2026-05-08 23:20:38 -04:00
jjenko 333645b044 Merge pull request 'F2026_013 Fixed typo in Vogtle format title' (#767) from F2026-013_Vogtle_3_4_Format into Development
format only change - good for testing phase
2026-05-07 15:23:01 -04:00
jjenko 23173074aa F2026_013 Fixed typo in Vogtle format title 2026-05-07 15:21:48 -04:00
jjenko be8bb9c4e1 Merge pull request 'B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function' (#765) from B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function into Development
good for testing phase
2026-05-07 15:07:27 -04:00
plarsen d07e132216 B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function 2026-05-07 14:55:44 -04:00
plarsen 401fa12851 B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function 2026-05-07 13:29:55 -04:00
plarsen 194ca84d38 B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function 2026-05-07 11:34:16 -04:00
plarsen 7bbf62d735 B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function 2026-05-07 11:27:36 -04:00
plarsen 3924e2fca5 B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function 2026-05-06 07:54:39 -04:00
plarsen 2e39102e7c Merge branch 'Development' into B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function 2026-05-05 22:26:21 -04:00
plarsen 2a0849fae5 B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function 2026-05-05 22:08:27 -04:00
jjenko 9f4e8f6eef Merge pull request 'C2026-014 Set Changebar date with multi-unit' (#766) from C2026-014 into Development
good for testing
2026-05-05 09:05:23 -04:00
mschill d0fe36f86e C2026-014 Set Changebar date with multi-unit 2026-05-05 08:50:39 -04:00
jjenko 10da22cd77 Merge pull request 'C2026-015 Set overall Changebar date when approving multi-unit' (#764) from C2026-015 into Development
good for testing
2026-05-05 08:44:47 -04:00
mschill 6dacc2d515 Merge branch 'Development' into C2026-015 2026-05-05 06:08:19 -04:00
mschill 7baa9628d6 C2026-015 Set overall Changebar date when approving multi-unit 2026-05-05 06:00:43 -04:00
plarsen ec5229101f B2026-043-Fix-Error-for-Set_At_AAll_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function 2026-05-04 17:00:42 -04:00
plarsen a0e0b1e788 B2026-043-Fix-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-when-clicked-executes-function 2026-05-04 16:33:08 -04:00
jjenko f1e04396de Merge pull request 'B2026-042-Fix-Null-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-4' (#762) from B2026-042-Fix-Null-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-4 into Development
good for testing
2026-05-04 09:11:33 -04:00
plarsen d0cae8c2fc B2026-042-Fix-Null-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-4 2026-05-04 08:48:51 -04:00
plarsen 90c215d4c1 B2026-042-Fix-Null-Error-for-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-4 2026-05-01 16:26:04 -04:00
plarsen 1b1dc78548 C2026-027-New-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-4 2026-04-30 16:37:10 -04:00
jjenko a112163f85 Merge pull request 'C2026-015 Set overall Changebar date when approving multi-unit' (#761) from C2026-015 into Development
ready for testing
2026-04-30 14:01:58 -04:00
mschill 2a9f2e188d C2026-015 Set overall Changebar date when approving multi-unit 2026-04-30 13:53:02 -04:00
jjenko 652e0cb06f Merge pull request 'C2026-027-New-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-3' (#760) from C2026-027-New-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-3 into Development
ready for testing
2026-04-30 08:41:01 -04:00
plarsen 123b1b08c2 C2026-027-New-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-3 2026-04-30 08:20:41 -04:00
plarsen b321bc354b C2026-027-New-Set_At_All_Level-in-the-Applicability-tab-evaluate-having-the-button-grayed-out-for-the-RNO-column-3 2026-04-28 18:09:15 -04:00
plarsen 03d7397242 Merge remote-tracking branch 'origin/Development' into Development 2026-04-28 14:39:52 -04:00
mschill 45e78ef184 Merge branch 'Development' into C2026-008 2026-04-28 13:43:35 -04:00
jjenko fe7c5893bb Merge pull request 'B2026-040 - Signoff/Checkoffs not printing unless set to Section Default' (#758) from B2026-040 into Development
good for testing
2026-04-28 11:11:45 -04:00
mschill 2b57c552d1 B2026-040 - Signoff/Checkoffs not printing unless set to Section Default 2026-04-28 11:03:04 -04:00
mschill 7f0d39b684 C2026-008 - Re-Architect RO.FST to include RO Modification date/time and use those when updating ROs from the RO.FST 2026-04-28 09:13:17 -04:00
plarsen 7273a8b13b Development 2026-04-27 15:43:38 -04:00
jjenko a544a5cd4f Merge pull request 'B2026-037 - Remove Fix Symbol Font' (#755) from B2026-037 into Development
good for testing phase
2026-04-16 14:02:42 -04:00
mschill ff9ade75d4 B2026-037 - Remove Fix Symbol Font 2026-04-16 09:32:02 -04:00
mschill cfd5498521 Merge pull request 'C2026-033 Added logic to not display the Empty Procedure message box if we are printing via baseline print testing.' (#754) from C2026-033_Baseline_Printing into Development
Looks Good. Ready for QA.
2026-04-15 11:55:19 -04:00
jjenko 9b7c30e1cd C2026-033 Added logic to not display the Empty Procedure message box if we are printing via baseline print testing. 2026-04-15 11:28:21 -04:00
mschill 670e5d7fa9 Merge pull request 'Baseline Application fixes' (#753) from baseline into Development
Looks good. Ready for QA.
2026-04-13 11:13:50 -04:00
jjenko 8258235611 Baseline Application fixes 2026-04-13 11:06:50 -04:00
jjenko 4d97f29943 Merge pull request 'B2026-035_fix_RO_Preview_for_X_Y_Plots' (#751) from B2026-035_fix_RO_Preview_for_X_Y_Plots into Development
good for testing
2026-03-31 08:53:49 -04:00
plarsen ab8d59eb2d Merge branch 'Development' into B2026-035_fix_RO_Preview_for_X_Y_Plots 2026-03-31 08:48:01 -04:00
plarsen c324fa69b2 B2026-035_fix_RO_Preview_for_X_Y_Plots 2026-03-31 08:47:43 -04:00
plarsen 1cdb9b4cc2 Development 2026-03-31 08:43:41 -04:00
plarsen f47fa49b80 B2026-035_fix_RO_Preview_for_X_Y_Plots 2026-03-30 16:12:37 -04:00
plarsen 6ade96c7ef B2026-035_fix_RO_Preview_for_X_Y_Plots 2026-03-30 13:41:03 -04:00
plarsen 61d31a3c67 Merge branch 'Development' of https://git.volian.com/Volian/SourceCode into Development 2026-03-30 13:05:08 -04:00
mschill 014509ea30 Merge pull request 'B2026-036 Fixed issue where if a RO return value and a dash followed by numbers, the numbers following the dash would be truncated when inserting in step editor text.' (#750) from General_Debugging into Development
Looks Good. Ready for QA.
2026-03-27 15:32:54 -04:00
jjenko 1ce1a45ca6 B2026-036 Fixed issue where if a RO return value and a dash followed by numbers, the numbers following the dash would be truncated when inserting in step editor text. 2026-03-27 15:26:06 -04:00
plarsen b6da13a653 Development 2026-03-26 11:49:54 -04:00
jjenko 604b4d1751 Merge pull request 'C2026-031 - BNPP Cover Page Consolidation' (#748) from BNPP_CoverPage_Consolidation into Development
good for testing phase
2026-03-26 09:28:07 -04:00
mschill 874aaf2857 Merge branch 'Development' into BNPP_CoverPage_Consolidation 2026-03-26 09:15:23 -04:00
mschill 17a28def4e Update Copyright date 2026-03-26 09:17:13 -04:00
jjenko e72a1aa9e7 Merge pull request 'B2026-018_The_Disable_Initial_Line_check_box' (#747) from B2026-018_The_Disable_Initial_Line_check_box into Development
good for testing phase
2026-03-26 09:11:20 -04:00
mschill 7b96ef1b4c BNPP Cover Page Consolidation 2026-03-26 09:02:14 -04:00
plarsen ea048e6d82 B2026-018_The_Disable_Initial_Line_check_box 2026-03-26 07:55:27 -04:00
plarsen 109abfb4ad Merge branch 'Development' into B2026-018_The_Disable_Initial_Line_check_box 2026-03-26 07:53:21 -04:00
plarsen 3f662ab19d B2026-018_The_Disable_Initial_Line_check_box 2026-03-25 22:55:52 -04:00
jjenko b0de38909a Merge pull request 'B2026-023-Adding-RO-Editor-symbols-to-RO-X_Y_plots' (#746) from B2026-023-Adding-RO-Editor-symbols-to-RO-X_Y_plots into Development
good for testing phase
2026-03-25 13:26:02 -04:00
plarsen 267de44103 Merge branch 'Development' into B2026-023-Adding-RO-Editor-symbols-to-RO-X_Y_plots 2026-03-25 11:54:12 -04:00
plarsen b7b0e55d94 B2026-023-Adding-RO-Editor-symbols-to-RO-X_Y_plots 2026-03-25 11:41:39 -04:00
plarsen c0d12f5721 B2026-023-Adding-RO-Editor-symbols-to-RO-X_Y_plots 2026-03-25 11:34:58 -04:00
mschill 27a945485f Merge pull request 'B2026-034 Fixed issue where import of procedure set failed when it was deleting the temporary folders that are created during the process, preventing the importing code to try and fix transitions and foldout information (link).' (#745) from B2026-034 into Development
Looks Good. Ready for QA.
2026-03-25 06:04:23 -04:00
plarsen 7b649c4a62 B2026-018_The_Disable_Initial_Line_check_box 2026-03-10 08:24:28 -04:00
108 changed files with 9543 additions and 14974 deletions
+109 -31
View File
@@ -456,7 +456,7 @@ namespace Baseline
switch (myLast)
{
case LastWas.Pagination:
line = OpenPDF(line);
OpenPDF(line);
break;
case LastWas.Baseline: // TODO: Need to add code here to open matching file
OpenOnePDF(myLine,1);
@@ -479,7 +479,7 @@ namespace Baseline
switch (myLast)
{
case LastWas.Pagination:
line = OpenPDF(line);
OpenPDF(line);
break;
case LastWas.Baseline: // TODO: Need to add code here to open matching file
OpenOnePDF(myLine,2);
@@ -491,34 +491,99 @@ namespace Baseline
break;
}
}
string exePath;
private string OpenPDF(string line)
/// <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)
{
int page = int.Parse(line.Substring(0, 6));
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.
line = line.Substring(8, line.IndexOf(".S") - 8).Replace("/", "_").Replace("\\", "_");
rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_");
return rtnstr;
}
string exePath;
private void OpenPDF(string line)
{
int pageNum = int.Parse(line.Substring(0, 6));
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
string ProcNum = ParseOutProcedureNumberFromLine(line);
string procPatern = string.Format("*{0}*.pdf", string.IsNullOrEmpty(line) ? "noProcNumber" : ProcNum);
FindFile ff = lbDifferent.SelectedItem as FindFile;
FileInfo fi1 = new FileInfo(ff.File1);
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 (exePath == null)
{
System.Diagnostics.Process p = System.Diagnostics.Process.Start(fi1.DirectoryName + "\\" + line + ".pdf");
try
{
System.Diagnostics.Process p = System.Diagnostics.Process.Start(PDFfileName1);
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
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", page) + fi1.DirectoryName + "\\" + line + ".pdf ");
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format(" /A \"page={0}\" \"{1}\" ", pageNum,PDFfileName1));
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
// Move the PDF Reader window to 0,0
MoveProcess(p1, 0, 0);
// Open the first PDF on a Specific Page
System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", page) + fi2.DirectoryName + "\\" + line + ".pdf ");
// Open the second PDF on a Specific Page
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);
// Move the PDF Reader window to 960,0
// TODO: This Offset could be a Setting
MoveProcess(p2, 960, 0);
return line;
return;
}
/// <summary>
/// Try to get the location of the PDF Reader executable
@@ -594,41 +659,53 @@ namespace Baseline
/// <param name="list"></param>
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.
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;
FindFile ff = lbDifferent.SelectedItem as FindFile;
FileInfo fi1 = new FileInfo(ff.File1);
FileInfo fi2 = new FileInfo(ff.File2);
if (exePath == null)
string PDFfileName = null;
if (list == 1)
{
System.Diagnostics.Process p = System.Diagnostics.Process.Start(fi1.DirectoryName + "\\" + proc + ".pdf");
while (exePath == null)
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)
{
try
{
exePath = p.MainModule.FileName;
System.Diagnostics.Process tp = System.Diagnostics.Process.Start(PDFfileName);
exePath = TryToGetPath(tp);
tp.Kill();
}
catch (Exception ex)
{
Application.DoEvents();
Console.WriteLine("{0} - {1}", ex.GetType().Name, ex.Message);
string msg = string.Format("{0} - {1}", ex.GetType().Name, ex.Message);
Console.WriteLine(msg);
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 ");
// 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);
}
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);
}
}
/// <summary>
/// Perform Debug Meta file comparison for all of the folders within the automated testing folders
/// </summary>
@@ -709,11 +786,12 @@ namespace Baseline
private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e)
{
//Initialize Results List Box
lbResults1.Items.Clear();
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
Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title);
// Build the results ListBox for the left window
lbResults1.Items.Clear();
if (myProc1 != null)
{
foreach (Page myPage in myProc1.MyPages)
+1
View File
@@ -179,6 +179,7 @@
<Content Include="fmtall\CPL_00all.xml" />
<Content Include="fmtall\CPL_01all.xml" />
<Content Include="fmtall\CPL_02all.xml" />
<Content Include="fmtall\CPL_04all.xml" />
<Content Include="fmtall\CPL_03all.xml" />
<Content Include="fmtall\CPSAMGDataall.xml" />
<Content Include="fmtall\CPSAMGDEVall.xml" />
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.
-252
View File
@@ -422,150 +422,6 @@ namespace LBWordLibrary
return true;
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>
/// Checks to see if the document contains symbol characters
@@ -601,86 +457,7 @@ namespace LBWordLibrary
}
}
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>
/// Get the Range Text with error handling. myRange.Text sometimes will get a null reference exception.
/// </summary>
@@ -737,35 +514,6 @@ namespace LBWordLibrary
return myRange.Start - problem.Index;
}
/// <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
/// </summary>
/// <param name="str"></param>
@@ -2844,6 +2844,7 @@ namespace ROEditor
}
else
{
mnutitle = Regex.Replace(mnutitle, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString()); // RO Editor add symbols C2022
newt =null;
success = myrodb.RODB_WriteRO((VlnXmlElement)roTreeView.SelectedNode.Tag);
if (success==true && mnutitle != "") roTreeView.SelectedNode.Text = mnutitle; //B2021-077 make sure mnutitle has text or it will clear the node's title in the tree
@@ -844,6 +844,10 @@ namespace ROEditor
AccPageID = " ";
WriteString(AccPageID);
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
string moddt = ROdatabase.RODB_GetModDateTime(elem.GetAttribute("RecID"), elem.GetAttribute("Table"));
if (!string.IsNullOrEmpty(moddt)) WriteString(moddt);
// Save the ID and offset entry for the current ID
IdsAndOffsets.Add(RORecID, startFST);
@@ -355,6 +355,7 @@ namespace RODBInterface
public abstract string RODB_GetDBServerForAbout();
public abstract string RODB_HasBeenConverted();
public abstract bool RODB_WriteSqlConnectToAccess(string newConectStr);
public abstract string RODB_GetModDateTime(string Recid, string table);
#endregion
public RODB()
@@ -3082,6 +3083,27 @@ namespace RODBInterface
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();
}
}
}
}
}
@@ -2653,6 +2653,34 @@ namespace RODBInterface
}
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 (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)
{
@@ -0,0 +1,147 @@
/*****************************************************************************
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
@@ -0,0 +1,263 @@
-- =============================================
-- 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;
+1 -1
View File
@@ -1817,7 +1817,7 @@ ALTER trigger [dbo].[tr_Contents_Delete] on [dbo].[Contents] instead of delete a
select ii.ContentID,ii.Number,ii.Text,ii.Type,ii.FormatID,ii.Config,ii.DTS,ii.UserID,ii.DeleteStatus,ii.ActionDTS
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
where ii.DeleteStatus > 0
update ga set ga.contentauditid = (select max(auditid) from contentaudits where contentid = ga.contentid and deletestatus = ga.deletestatus)
update ga set ga.contentauditid = (select ISNULL(max(auditid),0) from contentaudits where contentid = ga.contentid and deletestatus = ga.deletestatus)
from gridaudits ga join deleted dd on ga.contentid = dd.contentid where ga.contentauditid = 0
end
go
+303 -45
View File
@@ -5227,7 +5227,7 @@ CREATE PROCEDURE [dbo].[getRevisionByItemIDandRevisionNumberAndUnitID]
WITH EXECUTE AS OWNER
AS
declare @RevisionID int
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)
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)
SELECT
[RevisionID],
[ItemID],
@@ -5547,6 +5547,12 @@ ELSE PRINT 'Function: ve_GetItemDerivedApplicability Error on Creation'
GO
-------
-- =============================================
-- Author: Matthew Schill
-- Modify date: 07/14/2026
-- Description: Reworked ve_GetParentItem for Performance improvement
-- =============================================
/****** Object: UserDefinedFunction [dbo].[vefn_GetParentItem] Script Date: 03/28/2012 17:58:48 ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[ve_GetParentItem]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1)
DROP FUNCTION [ve_GetParentItem];
@@ -5555,35 +5561,46 @@ GO
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
CREATE FUNCTION [dbo].[ve_GetParentItem] (@ItemID int) RETURNS int
CREATE OR ALTER FUNCTION [dbo].[ve_GetParentItem] (@ItemID int) RETURNS int
WITH EXECUTE AS OWNER
AS
BEGIN
DECLARE @ParentID int;
WITH Itemz([ItemID],[IsFound]) as
WITH Itemz([ItemID]) as
(
select ii.itemid,0 from items ii where ii.itemid = @ItemID
select ii.itemid from items ii WITH (NOLOCK) where ii.itemid = @ItemID
union all
select ii.previousid,0 from items ii
select ii.previousid from items ii WITH (NOLOCK)
join itemz zz on ii.itemid = zz.itemid
where ii.previousid is not null
and zz.isfound = 0
union all
select ii.itemid,1
from parts pp
join itemz zz on pp.itemid = zz.itemid
join items ii on ii.contentid = pp.contentid
)
select top 1 @ParentID = itemid from itemz
where isfound = 1 OPTION (MAXRECURSION 10000)
select top 1 @ParentID = ii.itemid
from itemz
inner join parts pp WITH (NOLOCK) on pp.itemid = itemz.itemid
inner join items ii WITH (NOLOCK) on ii.contentid = pp.contentid
OPTION (MAXRECURSION 10000)
RETURN @ParentID
END
GO
IF (@@Error = 0) PRINT 'ScalerFunction [vefn_GetParentItem] Succeeded'
ELSE PRINT 'ScalerFunction [vefn_GetParentItem] Error on Creation'
go
IF EXISTS (SELECT * FROM dbo.sysIndexes WHERE name like 'IX_PartsItemID')
DROP INDEX [IX_PartsItemID] ON [dbo].[tblParts];
GO
CREATE NONCLUSTERED INDEX IX_PartsItemID
ON [dbo].[tblParts] ([ItemID] ASC)
INCLUDE([ContentID],[DeleteStatus],[FromType]) 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]
GO
PRINT 'Added IX_PartsItemID Index. Speeds up Getting Parent Items'
GO
/****** Object: UserDefinedFunction [dbo].[vefn_CanTransitionBeCreated] Script Date: 10/14/2012 02:03:30 ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_CanTransitionBeCreated]') AND OBJECTPROPERTY(id,N'IsScalarFunction') = 1)
DROP FUNCTION [vefn_CanTransitionBeCreated];
@@ -13541,34 +13558,6 @@ IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteAllDocVers
DROP PROCEDURE [deleteAllDocVersionPdfs];
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] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[addFiguresByROFstIDandImageIDs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [addFiguresByROFstIDandImageIDs];
@@ -17169,6 +17158,7 @@ GO
[roid] [varchar](50) NOT NULL,
[appid] [varchar](max) NULL,
[value] [varchar](max) NULL,
[moddatetime] [datetime] NULL,
CONSTRAINT [PK_RofstChild] PRIMARY KEY CLUSTERED
(
[RofstChildID] ASC
@@ -17303,6 +17293,23 @@ GO
End -- Rofst Tables
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
/*
----------------------------------------------------------------------------------
@@ -19705,6 +19712,7 @@ GO
@roid VarChar(50),
@appid VarChar(Max) = null,
@value VarChar(Max) = null,
@ModDateTime DateTime = null,
@missingDefaultValue VarChar(Max) = null
)
With Execute as Owner
@@ -19722,8 +19730,8 @@ GO
Set @missingDefaultValue = '[TBD]';
-- Create Rofst Child/Group Record --> [Roid = (12) Digits]
Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, [value])
Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, REPLACE(REPLACE(@value, '&123;', '{'), '&125;', '}'));
Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, moddatetime, [value])
Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, @ModDateTime, REPLACE(REPLACE(@value, '&123;', '{'), '&125;', '}'));
-- Check for appid, if exists, then insert the default value for each return type if multi-value
@@ -24777,6 +24785,256 @@ 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
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 06/29/2026
Description: Added an ISNULL check when setting GridAudits.contentauditid.
Was Causing Deletion of some Grids to fail.
==========================================================================================================
*/
/****** Object: Trigger [tr_Contents_Delete] ******/
ALTER trigger [dbo].[tr_Contents_Delete] on [dbo].[Contents] instead of delete as
begin
update ii set DeleteStatus = (select max(DeleteID) from DeleteLog where SPID = @@spid), ActionDTS = getdate(),
UserID = (select top 1 UserID from DeleteLog where SPID = @@spid order by deleteid desc)
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
insert into ContentAudits(ContentID,Number,Text,Type,FormatID,Config,DTS,UserID,DeleteStatus,ActionDTS)
select ii.ContentID,ii.Number,ii.Text,ii.Type,ii.FormatID,ii.Config,ii.DTS,ii.UserID,ii.DeleteStatus,ii.ActionDTS
from tblContents ii inner join deleted dd on dd.ContentID = ii.ContentID
where ii.DeleteStatus > 0
update ga set ga.contentauditid = (select ISNULL(max(auditid),0) from contentaudits where contentid = ga.contentid and deletestatus = ga.deletestatus)
from gridaudits ga join deleted dd on ga.contentid = dd.contentid where ga.contentauditid = 0
end
go
-- Display the status of Trigger alter
IF (@@Error = 0) PRINT 'Trigger Alteration: tr_Contents_Delete Succeeded'
ELSE PRINT 'Trigger Alteration: tr_Contents_Delete Error on Creation'
GO
/*
---------------------------------------------------------------------------
| ADD New Code Before this Block |
@@ -24810,8 +25068,8 @@ BEGIN TRY -- Try Block
DECLARE @RevDate varchar(255)
DECLARE @RevDescription varchar(255)
set @RevDate = '03/13/2026 7:00 AM'
set @RevDescription = 'Added Get Missing Docs by Unit for Generating Pdf table'
set @RevDate = '07/16/2026 8:30 AM'
set @RevDescription = 'Reworked ve_GetParentItem for Performance improvement'
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
@@ -67,6 +67,7 @@ namespace VEPROMS
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing
ApplicabilityIndex = myDocVersion.DocVersionConfig.SelectedSlave;
_MyApproval.SavedSlave = ApplicabilityIndex;
this.ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
this.ConsistencyPrintRequest += new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
_MyDocVersion = myDocVersion;
@@ -292,6 +293,7 @@ namespace VEPROMS
expAddProcConChk.Expanded = true;
_initializing = true;
ApplicabilityIndex = myDocVersion.DocVersionConfig.SelectedSlave;
_MyApproval.SavedSlave = ApplicabilityIndex;
InitializePanelApprove();
InitializePanelSelect();
_initializing = false;
@@ -306,6 +308,7 @@ namespace VEPROMS
_MyDocVersion = myProcedure.MyDocVersion;
_MyDocVersion.ResetProcedures(); // B2021-035: Pasted, modified number and deleted procedures not refreshed so missing from list
ApplicabilityIndex = _MyDocVersion.DocVersionConfig.SelectedSlave; // B2022-033 set the child being approved or workflow so other procedure list can populate
_MyApproval.SavedSlave = ApplicabilityIndex;
InitializeComponent();
FlexGridAddEvents();
SetupComboBoxes();
@@ -914,6 +917,11 @@ namespace VEPROMS
get { return _MyProcedures; }
//set { _MyProcedures = value; }
}
//B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit.
// this will save the SectedSlave in case a refresh causes it to get lost
public int SavedSlave { get; set; } = 0;
public ApprovalInfo(frmVEPROMS myFrmVEPROMS)
{
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
@@ -1173,6 +1181,11 @@ namespace VEPROMS
string pdfPath = string.Format(@"{0}\{1}", VlnSettings.TemporaryFolder, pdfTmp);
if (!TryToDelete(summaryPDF, "Change Summary")) break;
if (!TryToDelete(pdfPath,revisionStage)) break;
if (SavedSlave > 0 && ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave < 1)
{
//B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit.
ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave = SavedSlave;
}
procsApproved.Add(ap.ProcInfo.DisplayNumber + " " + ap.ProcInfo.DisplayText);
RevisionInfo ric = pi.MyDocVersion.DocVersionConfig.SelectedSlave > 0 ? RevisionInfo.GetCurrentByItemIDandUnitID(pi.ItemID, pi.MyDocVersion.DocVersionConfig.SelectedSlave) : RevisionInfo.GetCurrentByItemID(pi.ItemID);
// RevisionInfo rip = RevisionInfo.GetPreviousByItemID(pi.ItemID);
@@ -1343,6 +1356,8 @@ namespace VEPROMS
//// so change bars update
//// 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);
if (dti != null)
@@ -1350,19 +1365,9 @@ namespace VEPROMS
if (!dti.MyStepTabPanel.MyStepPanel.ContainsFocus)
dti.MyStepTabPanel.MyStepPanel.Focus();
foreach (EditItem eitm in dti.MyStepTabPanel.MyStepPanel.Controls.OfType<EditItem>())
{
eitm.ChangeBar = eitm.MyItemInfo.HasChangeBar;
}
dti.MyStepTabPanel.MyStepTabRibbon.RefreshProcedure();
Application.DoEvents();
newproc = ProcedureInfo.Get(pi.ItemID);
}
else
{
newproc = ItemInfo.ResetProcedure(pi.ItemID);
}
//since in a separate form, need to update the tree view
@@ -1478,19 +1483,34 @@ namespace VEPROMS
{
ProcedureConfig pc = procedureInfo.MyConfig as ProcedureConfig;
if (pc == null) return;
pc.SelectedSlave = selectedSlave;
pc.Print_Rev = revNumber;
//AppRevDate Change
pc.Print_RevDate = revDate.ToString("MM/dd/yyyy");
pc.Print_ChangeBarDate = dts.ToString("MM/dd/yyyy HH:mm:ss");
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 itm = Item.Get(procedureInfo.ItemID))
{
itm.MyContent.Config = pc.ToString();
//itm.DTS = dts;
itm.UserID = Volian.Base.Library.VlnSettings.UserID;
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
@@ -70,6 +70,24 @@ namespace VEPROMS
//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;
}
}
@@ -107,9 +125,12 @@ namespace VEPROMS
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).");
@@ -121,12 +142,14 @@ namespace VEPROMS
//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;
@@ -1036,6 +1036,9 @@ namespace VEPROMS
ROFstInfo roFstInfo = dq.DocVersionAssociations[0].MyROFst;
string rofstPath = roFstInfo.MyRODb.FolderPath + @"\ro.fst";
//must get id before ROFST gets updated so know what to refresh later
int origfstid = roFstInfo.ROFstID;
//if (!pathExists(rofstPath))
if (!File.Exists(rofstPath))
{
@@ -1063,8 +1066,28 @@ namespace VEPROMS
ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv, roFstInfo, DoProgressBarRefresh);
roFstInfo = dq.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);
ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, txtProcess);
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, txtProcess, roFstInfo, origfstid, roFstInfo.ROFstID);
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
}
@@ -1316,9 +1339,9 @@ namespace VEPROMS
{
if (ProgressBar == null) return;
ProgressBar.Value = 100;
ProgressBar.Maximum = 100;
ProgressBar.Text = value;
ProgressBar.Maximum = 100;
ProgressBar.Value = 100;
txtProcess.AppendText(value);
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine);
+1 -12
View File
@@ -83,7 +83,6 @@ namespace VEPROMS
this.lblUser = new DevComponents.DotNetBar.LabelItem();
this.lblLastChange = new DevComponents.DotNetBar.LabelItem();
this.btnStepRTF = new DevComponents.DotNetBar.ButtonItem();
this.btnFixMSWord = new DevComponents.DotNetBar.ButtonItem();
this.epAnnotations = new DevComponents.DotNetBar.ExpandablePanel();
this.ctrlAnnotationDetails = new Volian.Controls.Library.AnnotationDetails();
this.btnAnnoDetailsPushPin = new DevComponents.DotNetBar.ButtonX();
@@ -541,8 +540,7 @@ namespace VEPROMS
this.btnEditItem,
this.lblUser,
this.lblLastChange,
this.btnStepRTF,
this.btnFixMSWord});
this.btnStepRTF});
this.bottomBar.Location = new System.Drawing.Point(5, 573);
this.bottomBar.Name = "bottomBar";
this.bottomBar.Size = new System.Drawing.Size(1185, 25);
@@ -728,14 +726,6 @@ namespace VEPROMS
this.btnStepRTF.Text = "Step RTF";
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
//
this.epAnnotations.CanvasColor = System.Drawing.SystemColors.Control;
@@ -1775,7 +1765,6 @@ namespace VEPROMS
private DevComponents.DotNetBar.ButtonItem btnItemInfo;
private DevComponents.DotNetBar.ButtonItem btnFilter;
private DevComponents.DotNetBar.TextBoxItem txtFilter;
private DevComponents.DotNetBar.ButtonItem btnFixMSWord;
private Volian.Controls.Library.DisplayBookMarks displayBookMarks;
//private DevComponents.DotNetBar.LabelItem lblLocked;
private DevComponents.DotNetBar.ButtonItem btnShortCuts;
+82 -29
View File
@@ -246,6 +246,10 @@ namespace VEPROMS
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
}
@@ -352,6 +356,7 @@ 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
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.
if (VlnSettings.DebugMode)
@@ -964,7 +969,18 @@ namespace VEPROMS
{
pnl.ApplDisplayMode = displayApplicability.ViewMode;
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)
@@ -1594,7 +1610,7 @@ namespace VEPROMS
displayRO.MyROFST = SelectedROFst;
// B2023-021: force Load of Step Prop/RO panel RO tree by passing in
// true to LoadTree
displayRO.LoadTree(true);
if (!_WeAreExitingPROMS) displayRO.LoadTree(true);
}
}
@@ -2395,6 +2411,7 @@ namespace VEPROMS
tv.MySessionInfo = MySessionInfo;
tv.MyUserInfo = MyUserInfo;
StepTabRibbon.MySessionInfo = MySessionInfo;
displayRO.MySessionInfo = MySessionInfo;
// Initialize Caption with Server name and Database name.
SetCaption(tv.TopNode as VETreeNode);
@@ -4482,7 +4499,6 @@ namespace VEPROMS
{
infoPanel.Expanded = true;
infoTabs.SelectedTab = infotabTags;
displayTags.HighlightChangeStep();
}
else if (args.PanelTabName == "Change Image Size")
{
@@ -4553,6 +4569,15 @@ namespace VEPROMS
SetCaption(tv.SelectedNode as VETreeNode);
displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem;
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// 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;
@@ -4562,9 +4587,24 @@ namespace VEPROMS
displayRO.MyROFST = null;
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// set the DocVersionInfo so that the FST and docversion are in sync
SelectedDVI = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion;
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)
displayRO.LoadTree(true);
//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;
@@ -4579,7 +4619,7 @@ namespace VEPROMS
// also change the text on the buttons to read either Find or Find/Replace
// also toggle the Replace tab on the dialog based on the user's accessibility to the procedure
bool isReviewer = !MyUserInfo.IsAllowedToEdit(tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion);
pnl.MyStepTabPanel.MyStepTabRibbon.SetButtonAndMenuEnabling(true);
pnl.MyStepTabPanel.MyStepTabRibbon.SetButtonAndMenuEnabling();
this.dlgFindReplace.ToggleReplaceTab(isReviewer ? E_ViewMode.View : E_ViewMode.Edit);
pnl.MyStepTabPanel.MyStepTabRibbon.ToggleFindReplaceToolTip(isReviewer);
}
@@ -4628,8 +4668,6 @@ namespace VEPROMS
if (args != null && args.MyEditItem != null && !args.MyEditItem.MyStepPanel.ContainsFocus)
return;
btnFixMSWord.Visible = (args != null && (args.MyItemInfo != null && args.MyEditItem == null));
if (_LastStepRTB != null && !_LastStepRTB.Disposing && !_LastStepRTB.Closed)
_LastStepRTB.EditModeChanged -= new StepRTBEvent(_LastStepRTB_EditModeChanged);
@@ -4767,7 +4805,13 @@ namespace VEPROMS
// B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.ProgressBar = bottomProgBar;
displayRO.MyRTB = args.MyEditItem.MyStepRTB;
displayRO.LoadTree();
//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())
{
SelectedROFst = displayRO.MyROFST;
}
displayBookMarks.MyEditItem = args.MyEditItem;
displayHistory.MyEditItem = args.MyEditItem;
@@ -4797,7 +4841,7 @@ namespace VEPROMS
// B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.SetFindDocROButton(false);
displayRO.LoadTree();
if (!_WeAreExitingPROMS) displayRO.LoadTree();
//C2019-036 View Only mode work with Checked Out Procedures
//In View Only Mode - Step Properties should be disabled
@@ -4838,15 +4882,31 @@ namespace VEPROMS
//In View Only Mode - Step Properties should be disabled
public void EnableDisableStepProperties(object sender, StepTabRibbonEventArgs args)
{
if (args.ViewMode == E_ViewMode.View && (infoTabs.Enabled || infoTabs.SelectedTab != infotabTags))
//C2026 - 021 Expand Functionality of Viewing Mode
//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.Enabled = false;
}
else if (args.ViewMode != E_ViewMode.View && !infoTabs.Enabled)
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)
{
infoTabs.Enabled = true;
infotabControlPanelTags.Enabled = true;
infotabControlPanelRO.Enabled = true;
infotabControlPanelTransitions.Enabled = true;
tabControlPanel1.Enabled = true;
displayApplicability.SetEnableDisableItemSelection(true);
tcpFoldoutMaint.Enabled = true;
}
}
@@ -4931,7 +4991,13 @@ namespace VEPROMS
displayRO.CurROLink = args.MyLinkText.MyRoUsageInfo;
// B2022-026 RO Memory reduction coding (Jakes Merge)
displayRO.LoadTree();
//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 (displayRO.LoadTree())
{
SelectedROFst = displayRO.MyROFST;
}
}
#endregion
@@ -5199,8 +5265,8 @@ namespace VEPROMS
{
if (SelectedDVI != null)
displayReports.Mydocversion = SelectedDVI;
displayReports.advTreeProcSetsFillIn(reportFocus);
displayReports.advTreeROFillIn(reportFocus);
displayReports.advTreeProcSetsFillIn();
displayReports.advTreeROFillIn();
displayReports.SelectReferencedObjectTab(); // to enable RO selection
}
}
@@ -5241,19 +5307,6 @@ namespace VEPROMS
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)
{
@@ -899,9 +899,9 @@ namespace VEPROMS
set
{
if (ProgressBar == null) return;
ProgressBar.Text = value;
ProgressBar.Maximum = 100;
ProgressBar.Value = 100;
ProgressBar.Text = value;
Application.DoEvents();
}
}
@@ -1527,6 +1527,9 @@ namespace VEPROMS
Cursor = Cursors.WaitCursor;
//must get id before ROFST gets updated so know what to refresh later
int origfstid = SelectedROFst.ROFstID;
// RO changes placed in file in the Documents\VEPROMS folder
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(_DocVersionConfig.MyDocVersion.MyDocVersionInfo));
DocVersion dv = _DocVersionConfig.MyDocVersion;
@@ -1536,11 +1539,30 @@ namespace VEPROMS
ROFstInfo.UpdateRoFst(SelectedROFst.MyRODb, dv, SelectedROFst, DoProgressBarRefresh);
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
SelectedROFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
ROFst newrofst = ROFstInfo.RefreshROFst(_DocVersionConfig.MyDocVersion, SelectedROFst, DoProgressBarRefresh, null);
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, SelectedROFst, origfstid, SelectedROFst.ROFstID);
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
SelectedROFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
@@ -124,6 +124,23 @@ namespace VEPROMS.CSLA.Library
_Xp["ROUpdate", "LoadingFigures"] = value; // save selected value
}
}
[Category("RO Update")]
[DisplayName("Previous ROFSTID")]
[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()
+169 -95
View File
@@ -8,7 +8,6 @@ using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using static System.Net.Mime.MediaTypeNames;
namespace VEPROMS.CSLA.Library
@@ -61,6 +60,7 @@ namespace VEPROMS.CSLA.Library
#region Structs / Internal Classes
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct roHdr
{
public int hSize;
@@ -78,6 +78,7 @@ namespace VEPROMS.CSLA.Library
};
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct rodbi
{
public int dbiID;
@@ -91,16 +92,19 @@ namespace VEPROMS.CSLA.Library
};
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct rogrp
{
public string value;
public string appid;
public int ID;
public int ParentID;
public DateTime? ModDateTime; //C2026-008 Re-Architect RO.FST to include RO Modification date/time
public rochild[] children;
};
[Serializable]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Keep Older Pre-existing naming conventions")]
public struct rochild
{
public int ID;
@@ -110,6 +114,7 @@ namespace VEPROMS.CSLA.Library
public string roid; // roid unique identifier
public string appid; // accessory page id - user specified unique id
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;
};
@@ -131,7 +136,7 @@ namespace VEPROMS.CSLA.Library
private List<string> _baseAccPageKeys;
// RofstLookup/Conversion Variables
private int _rofstID;
private readonly int _rofstID;
private DocVersionInfo _myDocVersionInfo;
private int _selectedSlave;
private string _otherChild = string.Empty;
@@ -147,7 +152,7 @@ namespace VEPROMS.CSLA.Library
// B2022-107: Display Progress Bar Messages/Statuses when a new ROFST binary file is loaded into the database
private frmRofstLoadStatus _frmRofstLoadStatus = null;
private Dictionary<int, int> _dicRoCounts = null;
private bool _showLoadingStatus = true;
private readonly bool _showLoadingStatus = true;
private int _curRoCnt = 0;
private int _dbRoCnt = 0;
@@ -412,7 +417,6 @@ namespace VEPROMS.CSLA.Library
ROFSTLookup.rochild rc = RofstDataGetChildByAccPageID(_rofstID, accPageBase);
//if (rc.ID >=0 && rc.roid.Length < 16 && Regex.IsMatch(accPageKey, @".*\.[A-Z]") && rc.children != null && rc.children.Count() > 0)
if (rc.ID >= 0 && rc.roid.Length < 16 && !string.IsNullOrEmpty(accPageExt) && rc.children != null && rc.children.Count() > 0)
{
// Check if AccPageID/Key has a return value specific extension. Try to find the RoChild record with the specific return value type,
@@ -505,8 +509,6 @@ namespace VEPROMS.CSLA.Library
// B2023-037: Handle <=, >=, +-, -> and <- symbols. Convert to unicode for output, i.e. print and edit/view (when editing
// step, will show as 2 characters, not unicode, unless ro inserted when code replaced link text with unicode.
//(_MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue ||
// _MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue))
bool arrows1 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.UseDashGreaterLessThenForArrowsInROValue;
bool arrows2 = myiteminfo.ActiveFormat.PlantFormat.FormatData.SectData.ConvertGTELTEPMinROValue;
@@ -679,13 +681,16 @@ namespace VEPROMS.CSLA.Library
if (minutes > 0) duration = string.Format("{0} min(s) ", minutes.ToString("n0"));
if (secs < 0) secs = 0.00;
duration = duration + string.Format("{0,10:#####0.00} sec(s)", secs).Trim();
duration += string.Format("{0,10:#####0.00} sec(s)", secs).Trim();
return duration;
//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
//return new ROFstID if there is a newer ID that matches the same ROFSTDB
public int GetNewerFSTID() => RofstGetLatestID(RofstID);
#endregion
#endregion
@@ -888,7 +893,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)
private void RofstChildInsert(int rofstID, int id, int parentID, int dbiID, int type, string title, string roid, string appid, string value, DateTime? dt = null)
{
try
{
@@ -917,6 +922,9 @@ namespace VEPROMS.CSLA.Library
if (!string.IsNullOrEmpty(this.RoMissingDefaultValue))
cmd.Parameters.Add(new SqlParameter("@missingDefaultValue", SqlDbType.VarChar)).Value = this.RoMissingDefaultValue;
if (dt != null)
cmd.Parameters.Add(new SqlParameter("@ModDateTime", SqlDbType.DateTime)).Value = dt;
cmd.ExecuteNonQuery();
}
}
@@ -1299,6 +1307,32 @@ namespace VEPROMS.CSLA.Library
}
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
//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;
return (int) cmd.ExecuteScalar();
}
}
}
catch (Exception ex)
{
throw new DbCslaException("RofstData.RofstGetLatestID", ex);
}
}
#endregion
#region (Core/Base logic for RO Values & UnitInfo RO Values)
@@ -1440,19 +1474,20 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.roHdr ConvertFst2Objects(byte[] ab)
{
ROFSTLookup.roHdr roh = new ROFSTLookup.roHdr();
roh.hSize = BitConverter.ToInt32(ab, 0);
roh.hYear = BitConverter.ToInt16(ab, 4);
roh.hMonth = ab[6];
roh.hDay = ab[7];
roh.hcYear = BitConverter.ToInt16(ab, 8);
roh.hcMonth = ab[10];
roh.hcDay = ab[11];
roh.hcHour = ab[12];
roh.hcMin = ab[13];
roh.hcSec = ab[14];
roh.hcHund = ab[15];
ROFSTLookup.roHdr roh = new ROFSTLookup.roHdr
{
hSize = BitConverter.ToInt32(ab, 0),
hYear = BitConverter.ToInt16(ab, 4),
hMonth = ab[6],
hDay = ab[7],
hcYear = BitConverter.ToInt16(ab, 8),
hcMonth = ab[10],
hcDay = ab[11],
hcHour = ab[12],
hcMin = ab[13],
hcSec = ab[14],
hcHund = ab[15]
};
int hdrOffset = BitConverter.ToInt32(ab, 16);
int dbs = BitConverter.ToInt16(ab, hdrOffset + 4);
@@ -1490,10 +1525,11 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rogrp LoadGroup(byte[] ab, int offset, int tableID)
{
ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp();
myGrp.ID = BitConverter.ToInt32(ab, offset);
myGrp.ParentID = BitConverter.ToInt32(ab, offset + 4);
ROFSTLookup.rogrp myGrp = new ROFSTLookup.rogrp
{
ID = BitConverter.ToInt32(ab, offset),
ParentID = BitConverter.ToInt32(ab, offset + 4)
};
int numChildren = BitConverter.ToInt16(ab, offset + 8);
@@ -1523,6 +1559,10 @@ namespace VEPROMS.CSLA.Library
tmp.appid = tmpg.appid;
tmp.roid = tableID.ToString("X4") + tmp.ID.ToString("X8");
tmp.children = tmpg.children;
if (tmpg.ModDateTime != null)
{
tmp.ModDateTime = tmpg.ModDateTime;
}
int j;
@@ -1542,6 +1582,12 @@ namespace VEPROMS.CSLA.Library
int slen2 = StringLength(ab, offset + 13 + slen);
myGrp.appid = Encoding.Default.GetString(ab, offset + 13 + slen, slen2);
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
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++;
}
@@ -1615,7 +1661,7 @@ namespace VEPROMS.CSLA.Library
}
// Update Progress Bar Accordingly
if (_totalRoCnt > 0) _pctComplete = _pctComplete + ((Convert.ToDouble(_dbRoCnt) / Convert.ToDouble(_totalRoCnt)) * 80.0);
if (_totalRoCnt > 0) _pctComplete += ((Convert.ToDouble(_dbRoCnt) / Convert.ToDouble(_totalRoCnt)) * 80.0);
OnProgressChanged(displayText, Convert.ToInt32(_pctComplete), 100);
}
@@ -1655,7 +1701,7 @@ namespace VEPROMS.CSLA.Library
private void LoadChild(int rofstID, int dbiID, ROFSTLookup.rochild child)
{
//Insert Rofst Child
RofstChildInsert(rofstID, child.ID, child.ParentID, dbiID, child.type, child.title, child.roid, child.appid, child.value);
RofstChildInsert(rofstID, child.ID, child.ParentID, dbiID, child.type, child.title, child.roid, child.appid, child.value, child.ModDateTime);
//Increment RO Count if RoChild has a return value
if (!string.IsNullOrEmpty(child.value)) _curRoCnt++;
@@ -1675,15 +1721,13 @@ namespace VEPROMS.CSLA.Library
protected virtual void OnProgressChanged(string title, string displayText, int curVal = 0, int maxVal = 100)
{
// If frmRofstLoadStatus is not null then call Update Progress Method
if (_frmRofstLoadStatus != null)
_frmRofstLoadStatus.UpdateProgress(title, displayText, curVal, maxVal);
_frmRofstLoadStatus?.UpdateProgress(title, displayText, curVal, maxVal);
}
protected virtual void OnProgressChanged(string displayText, int curVal = 0, int maxVal = 100)
{
// If frmRofstLoadStatus is not null then call Update Progress Method
if (_frmRofstLoadStatus != null)
_frmRofstLoadStatus.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal);
_frmRofstLoadStatus?.UpdateProgress(_frmRofstLoadStatus.Title, displayText, curVal, maxVal);
}
#endregion
@@ -1694,19 +1738,20 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.roHdr ConvertToRoHdrObject(SafeDataReader dr, bool loadChildren)
{
ROFSTLookup.roHdr rh = new ROFSTLookup.roHdr();
rh.hSize = (int)dr.GetValue("hSize");
rh.hYear = (int)dr.GetValue("hYear");
rh.hMonth = (byte)dr.GetValue("hMonth");
rh.hDay = (byte)dr.GetValue("hDay");
rh.hcYear = (int)dr.GetValue("hcYear");
rh.hcMonth = (byte)dr.GetValue("hcMonth");
rh.hcDay = (byte)dr.GetValue("hcDay");
rh.hcHour = (byte)dr.GetValue("hcHour");
rh.hcMin = (byte)dr.GetValue("hcMin");
rh.hcSec = (byte)dr.GetValue("hcSec");
rh.hcHund = (byte)dr.GetValue("hcHund");
ROFSTLookup.roHdr rh = new ROFSTLookup.roHdr
{
hSize = (int)dr.GetValue("hSize"),
hYear = (int)dr.GetValue("hYear"),
hMonth = (byte)dr.GetValue("hMonth"),
hDay = (byte)dr.GetValue("hDay"),
hcYear = (int)dr.GetValue("hcYear"),
hcMonth = (byte)dr.GetValue("hcMonth"),
hcDay = (byte)dr.GetValue("hcDay"),
hcHour = (byte)dr.GetValue("hcHour"),
hcMin = (byte)dr.GetValue("hcMin"),
hcSec = (byte)dr.GetValue("hcSec"),
hcHund = (byte)dr.GetValue("hcHund")
};
if (loadChildren)
{
@@ -1718,15 +1763,16 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rodbi ConvertToRodbiObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
{
ROFSTLookup.rodbi rd = new ROFSTLookup.rodbi();
rd.dbiID = (int)dr.GetValue("dbiID");
rd.dbiType = (int)dr.GetValue("dbiType");
rd.dbiAW = (int)dr.GetValue("dbiAW");
rd.dbiAP = (string)dr.GetValue("dbiAP");
rd.dbiTitle = (string)dr.GetValue("dbiTitle");
rd.ID = (int)dr.GetValue("ID");
rd.ParentID = (int)dr.GetValue("ParentID");
ROFSTLookup.rodbi rd = new ROFSTLookup.rodbi
{
dbiID = (int)dr.GetValue("dbiID"),
dbiType = (int)dr.GetValue("dbiType"),
dbiAW = (int)dr.GetValue("dbiAW"),
dbiAP = (string)dr.GetValue("dbiAP"),
dbiTitle = (string)dr.GetValue("dbiTitle"),
ID = (int)dr.GetValue("ID"),
ParentID = (int)dr.GetValue("ParentID")
};
if (loadChildren || loadAllChildren)
{
@@ -1738,13 +1784,14 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.rochild ConvertToRochildObject(SafeDataReader dr, bool loadChildren, bool loadAllChildren)
{
ROFSTLookup.rochild rc = new ROFSTLookup.rochild();
rc.ID = (int)dr.GetValue("ID");
rc.ParentID = (int)dr.GetValue("ParentID");
rc.type = (int)dr.GetValue("type");
rc.title = (string)dr.GetValue("title");
rc.roid = (string)dr.GetValue("roid");
ROFSTLookup.rochild rc = new ROFSTLookup.rochild
{
ID = (int)dr.GetValue("ID"),
ParentID = (int)dr.GetValue("ParentID"),
type = (int)dr.GetValue("type"),
title = (string)dr.GetValue("title"),
roid = (string)dr.GetValue("roid")
};
if (!string.IsNullOrEmpty((string)dr.GetValue("appid")))
{
@@ -1766,11 +1813,12 @@ namespace VEPROMS.CSLA.Library
private ROFSTLookup.RoExtension ConvertToRoExtensionObject(SafeDataReader dr)
{
ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension();
re.Offset = (int)dr.GetValue("Offset");
re.RoidExt = (string)dr.GetValue("RoidExt");
re.AccPageExt = (string)dr.GetValue("AccPageExt");
ROFSTLookup.RoExtension re = new ROFSTLookup.RoExtension
{
Offset = (int)dr.GetValue("Offset"),
RoidExt = (string)dr.GetValue("RoidExt"),
AccPageExt = (string)dr.GetValue("AccPageExt")
};
return re;
}
@@ -1830,7 +1878,6 @@ namespace VEPROMS.CSLA.Library
// Instead of returning the RoChildBase object with a single RoReturnVal object attached, just return the single Ro ReturnValue object.
var roRetVal = child.children.First();
//child.title = roRetVal.title;
child.appid = roRetVal.appid;
child.roid = roRetVal.roid;
child.value = roRetVal.value;
@@ -2084,41 +2131,68 @@ namespace VEPROMS.CSLA.Library
return ProcessRO(match, multiRtnVal);
}
private string ProcessMacros(string str)
{
// Takes the RO text value and sees if a macro has been used.
// If so it will perform the macro operation on the substring in the text value
// Note** Right now the only macro is @HSP(), where every space between the "(" and ")" will be replaced with a hard space
private static string ProcessMacros(string str)
{
if (string.IsNullOrEmpty(str))
if (string.IsNullOrEmpty(str) || str.ToUpper().IndexOf("@HSP(") < 0)
return str;
string rtnstr = str;
int indx;
while ((indx = rtnstr.ToUpper().IndexOf("@HSP(")) > -1)
{
string resstr = rtnstr.Substring(0, indx);
int endHsp = rtnstr.IndexOf(")", indx);
string processingstr = str; //holds current string being processed
int indx; //current position of @HSP( in string
int endpos = 0; //end of last parens
//B2026 - 002 handle if parens inside a HSP
int startpos = indx + 5;
while (rtnstr.Substring(startpos, endHsp - startpos).Contains("("))
StringBuilder sb = new StringBuilder();
Stack<char> endparens = new Stack<char>();
while ((indx = processingstr.ToUpper().IndexOf("@HSP(")) > -1)
{
startpos = rtnstr.IndexOf("(", startpos + 1, endHsp - startpos) + 1;
endHsp = rtnstr.IndexOf(")", endHsp + 1);
sb.Append(processingstr.Substring(0, indx)); // initial string before @HSP(
for (int i = indx + 5; i < processingstr.Length; i++)
{
char ch = processingstr[i];
if (ch == '(')
{
//if opening paren inside HSP add it to the stack to look for a closing parens
endparens.Push(ch);
}
else if (ch == ')' && endparens.Count > 0)
{
//if cloing parens and it matches an opening parens inside of HSP, remove a level
_ = endparens.Pop();
}
else if (ch == ')' && endparens.Count == 0)
{
//if closing parens and at same level as HSP, break out since found correct closing parens
endpos = i;
break;
}
else if (i == processingstr.Length - 1)
{
//if hit the end of the string and no matching closing parens found, take to the end of the string
endpos = processingstr.Length;
}
}
string tmpstr = rtnstr.Substring(indx + 5, endHsp - indx - 5);
//Add the text inside the @HSP(...)
string tmpstr = processingstr.Substring(indx + 5, endpos - indx - 5);
// B2017-012 Don't convert space to hard spaces for XY Plots.
if (!tmpstr.Contains("<<G")) tmpstr = tmpstr.Replace(" ", @"\u160?");
sb.Append(tmpstr);
resstr = resstr + tmpstr;
rtnstr = resstr + rtnstr.Substring(endHsp + 1);
//Set the processing string to after the ending parens found in case multiple @HSP
processingstr = endpos + 1 >= processingstr.Length ? "" : processingstr.Substring(endpos + 1);
}
return rtnstr;
//add text after last end parens
sb.Append(processingstr);
return sb.ToString();
}
private int StringLength(byte[] ab, int offset)
@@ -2230,7 +2304,7 @@ namespace VEPROMS.CSLA.Library
{
rc.roid = FormatRoidKey(roid).Substring(0, 12);
DocVersionConfig dvc = (_myDocVersionInfo != null) ? _myDocVersionInfo.DocVersionConfig : null;
DocVersionConfig dvc = _myDocVersionInfo?.DocVersionConfig;
if (dvc != null) dvc.SelectedSlave = this.SelectedSlave;
switch (rc.roid)
@@ -2238,49 +2312,49 @@ namespace VEPROMS.CSLA.Library
case "FFFF00000001":
rc.title = "Number";
rc.appid = "U-NUMBER";
rc.value = (dvc != null) ? dvc.Unit_Number : null;
rc.value = dvc?.Unit_Number;
break;
case "FFFF00000002":
rc.title = "Other Number";
rc.appid = "U-OTHERNUMBER";
rc.value = (dvc != null) ? dvc.Other_Unit_Number : null;
rc.value = dvc?.Other_Unit_Number;
break;
case "FFFF00000003":
rc.title = "Text";
rc.appid = "U-TEXT";
rc.value = (dvc != null) ? dvc.Unit_Text : null;
rc.value = dvc?.Unit_Text;
break;
case "FFFF00000004":
rc.title = "Other Text";
rc.appid = "U-OTHERTEXT";
rc.value = (dvc != null) ? dvc.Other_Unit_Text : null;
rc.value = dvc?.Other_Unit_Text;
break;
case "FFFF00000005":
rc.title = "ID";
rc.appid = "U-ID";
rc.value = (dvc != null) ? dvc.Unit_ID : null;
rc.value = dvc?.Unit_ID;
break;
case "FFFF00000006":
rc.title = "Other ID";
rc.appid = "U-OTHERID";
rc.value = (dvc != null) ? dvc.Other_Unit_ID : null;
rc.value = dvc?.Other_Unit_ID;
break;
case "FFFF00000007":
rc.title = "Name";
rc.appid = "U-NAME";
rc.value = (dvc != null) ? dvc.Unit_Name : null;
rc.value = dvc?.Unit_Name;
break;
case "FFFF00000008":
rc.title = "Other Name";
rc.appid = "U-OTHERNAME";
rc.value = (dvc != null) ? dvc.Other_Unit_Name : null;
rc.value = dvc?.Other_Unit_Name;
break;
}
@@ -90,7 +90,7 @@ namespace VEPROMS.CSLA.Library
{
string itemTitle = Regex.Replace(this.Path, "^..+?\\u0007", "");
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.ToShortTimeString() : this.ActionWhen.ToShortTimeString(), 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.ToString("HH:mm:ss") : this.ActionWhen.ToString("HH:mm:ss"), 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} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted");
}
@@ -177,7 +177,7 @@ namespace VEPROMS.CSLA.Library
public override string ToString()
{
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("{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("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("Level: {3}, {0} - {1} {2}", this.UserID, this.DTS, this.DeleteStatus == 0 ? "" : "Deleted", this.Level.ToString());
@@ -1093,6 +1093,15 @@ namespace VEPROMS.CSLA.Library
}
}
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
//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)
{
@@ -1219,6 +1228,22 @@ namespace VEPROMS.CSLA.Library
return true;
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
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)
{
using (ItemInfo itm = Get((int)r["ItemID"]))
{
lst.Add(itm);
}
}
return lst;
}
#region Debug Code
//private static void ShowDifference(string oldText, string newText)
@@ -1890,6 +1915,40 @@ namespace VEPROMS.CSLA.Library
foreach (ItemInfo itemInfo in partInfo.MyItems)
itemInfo.SpinThroughChildren();
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
private static DataTable Data_GetItemsWithChangedROs(int docversionid, int origfstid, int newfstid)
{
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
@@ -4054,6 +4113,9 @@ 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
// that with the Content datetime, otherwise we proceed as before.
DateTime? viewableStartingDateTime = (MyProcedure.MyConfig as ProcedureConfig).Print_ViewableStartingChangeBarDate;
// B2026-060 & B2026-061 removed the check of SelectedSlave (aka the selected child) from the IF statement,
// This was causing some step to print with change bars when there should not have been - because of the use of
// the Show Change Bars After date. The logic we need is built into the get of ChangeBarDate and Print_ViewableStartingChangeBarDate.
if (viewableStartingDateTime != null && viewableStartingDateTime > MyProcedure.ChangeBarDate)
return (MyContent.DTS > viewableStartingDateTime);
return (MyContent.DTS > MyProcedure.ChangeBarDate);
@@ -6215,6 +6277,11 @@ namespace VEPROMS.CSLA.Library
if (!SectionHasCheckOffs()) return null;
int stpCoIndx = CheckOffIndex(); // this step has a checkoff defined
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.
if (sectCoIndx == -1) return null;
@@ -8059,6 +8126,10 @@ namespace VEPROMS.CSLA.Library
}
set { _ChangeBarDate = value; }
}
//C2026-021 Expand Functionality of Viewing Mode
public void ResetChangeBar() => _ChangeBarDate = null;
public Dictionary<int, ItemInfo> MyLookup = null;
public override void SetupTags()
{
+12 -22
View File
@@ -61,35 +61,25 @@ namespace VEPROMS.CSLA.Library
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 DeleteAllDocVersion(int versionID)
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
{
DataPortal.Delete(new VersionIDCriteria(versionID));
DeleteWithNewROs(versionID, origfstid, newfstid);
}
catch (Exception ex)
{
throw new DbCslaException("Error on Pdf.DeleteAllDocVersion", ex);
}
}
[Serializable()]
protected class VersionIDCriteria
static private void DeleteWithNewROs(int docversionID, int origfstid, int newfstid)
{
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)
@@ -98,20 +88,20 @@ namespace VEPROMS.CSLA.Library
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandTimeout = Database.SQLTimeout;
cm.CommandText = "deleteAllDocVersionPdfs";
cm.Parameters.AddWithValue("@VersionID", criteria.VersionID);
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.DataPortal_Delete", ex);
_ErrorMessage = ex.Message;
throw new DbCslaException("Pdf.DataPortal_Delete", ex);
if (_MyLog.IsErrorEnabled) _MyLog.Error("Pdf.DeleteWithNewROs", ex);
throw new DbCslaException("Pdf.DeleteWithNewROs", ex);
}
}
}
public partial class PdfInfo
{
+55 -221
View File
@@ -225,38 +225,59 @@ namespace VEPROMS.CSLA.Library
}
}
// B2022-026 RO Memory Reduction code - pass in the ROFstInfo
public static int RefreshROFst(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo origROFst)
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// Refresh at item level
public static int RefreshROFstAtItemLevel(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo localROFst, int origfstid, int newfstid)
{
int fixedROs = 0;
if (dvi.DocVersionConfig.SelectedSlave <= 0)
{
myProgressBarRefresh(1, 100, "Update MS Word ROs");
// remove word section PDFs to force update of RO values when printed
myProgressBarRefresh(1, 100, "Updating MS Word ROs In Progress");
Pdf.DeleteDocVersionPDFsWithNewROs(dvi.VersionID, origfstid, newfstid);
Pdf.DeleteAllDocVersion(dvi.VersionID); // remove word section PDFs to force update of RO values when printed
//Loop Through ROs in this docversion that are different than the previous fst
myProgressBarRefresh(50, 100, "Updating ROs In PROMS Steps In Progress");
int i = 0;
foreach (ProcedureInfo proc in dvi.Procedures)
List<ItemInfo> list = ItemInfo.GetItemInfoWithChangedROs(dvi.VersionID, origfstid, newfstid);
foreach (ItemInfo itm in list)
{
DateTime start = DateTime.Now;
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;
ItemInfo.ResetROCounters();
myProgressBarRefresh(++i, list.Count, string.Format("{0} ({1}/{2} ROs {3})", itm.MyProcedure.DisplayNumber, i, list.Count, fixedROs));
ItemInfo.RefreshReferenceObjects(itm, localROFst);
fixedROs += ItemInfo.ROFixCount;
TimeSpan ts = DateTime.Now - start;
if (tbStatus != null)
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));
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
using (DocVersion dv = DocVersion.Get(dvi.VersionID))
{
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
// 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
//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)
@@ -291,34 +312,6 @@ 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");
}
// 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>
/// Updates an ro.fst into a sql database.
/// </summary>
@@ -333,8 +326,12 @@ namespace VEPROMS.CSLA.Library
// all of the calls aways set the flags to not update the RO values
public static ROFst UpdateRoFst(RODbInfo rdi, DocVersion docver, ROFstInfo origROFst, ROFstInfoProgressBarRefresh myProgressBarRefresh)
{
ROWorkingDraftAsk.ClearWorkingDrafts();
if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Starting Update");
int origFSTid = origROFst.ROFstID;
DirectoryInfo di = new DirectoryInfo(rdi.FolderPath);
string rofstfilepath = rdi.FolderPath + @"\ro.fst";
FileStream fsIn = new FileStream(rofstfilepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
@@ -361,6 +358,7 @@ namespace VEPROMS.CSLA.Library
docver.DocVersionAssociations[0].MyROFst = rofst;
SetAssociationLastCompleted(docver, string.Empty);
SetPrevFSTID(docver, origFSTid); // //C2026-008 Re-Architect RO.FST to include RO Modification date/time
return rofst;
}
@@ -384,6 +382,9 @@ namespace VEPROMS.CSLA.Library
// Keep a list of ROIDs for Images that have changed.
List<string> MyChangedFigureROIDs = UpdateROFigures(rdi, myProgressBarRefresh, rofst, rodb, myLookup, docver);
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
SetPrevFSTID(docver, origFSTid);
return rofst;
}
}
@@ -484,6 +485,20 @@ namespace VEPROMS.CSLA.Library
docver.Save();
}
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// Place the previous ROFSTID in the config in case network error or computer crashes while updating RO Values
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)
{
@@ -670,187 +685,6 @@ namespace VEPROMS.CSLA.Library
return sb.ToString();
}
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;
@@ -0,0 +1,18 @@

using System.Collections.Generic;
namespace VEPROMS.CSLA.Library
{
public static class ROWorkingDraftAsk
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private static List<int> WorkingDrafts = new List<int>();
public static void AddWorkingDrafts(int wd) => WorkingDrafts.Add(wd);
public static void ClearWorkingDrafts() => WorkingDrafts.Clear();
public static bool ContainsWorkingDraft(int wd) => WorkingDrafts.Contains(wd);
}
}
@@ -396,6 +396,7 @@
<Compile Include="Minimal\UserReports.cs" />
<Compile Include="Minimal\UserSettings.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Session\ROWorkingDraftAsk.cs" />
<Compile Include="VEObjects\VEDrillDown.cs" />
<Compile Include="VEObjects\VETreeNode.cs" />
</ItemGroup>
@@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Volian.Controls.Library
{
class AlphabeticalNumbering
{
//private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private static string Letter(int number)
{
char c = (char)(number + 64);
return c.ToString();
}
public static string Convert(int number)
{
string retval=string.Empty;
if (number > 26) retval += Letter((number-1) / 26);
retval += Letter(1 + ((number-1) % 26));
return retval;
}
//private static int[] _TestLetters = new int[] {
// 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,
// 52,53,78,79,104,105
// };
//public static void ShowLetters()
//{
// for (int i = 0; i < _TestLetters.Length; i++)
// {
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", _TestLetters[i], Convert(_TestLetters[i]));
// }
//}
}
}
@@ -1,16 +1,12 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using Volian.Base.Library;
using Volian.Pipe.Library;
using System.Xml;
using System.Diagnostics;
using JR.Utils.GUI.Forms;
using System;
using System.Diagnostics;
using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Xml;
using VEPROMS.CSLA.Library;
using Volian.Pipe.Library;
namespace Volian.Controls.Library
{
@@ -63,14 +59,14 @@ namespace Volian.Controls.Library
AddAttribute(xe, "Text", myItemInfo.DisplayText);
_ProcList.DocumentElement.AppendChild(xe);
if (myItemInfo.Cautions != null) foreach (StepInfo caui in myItemInfo.Cautions) AddItem(myItemInfo.ItemID, caui);
if (myItemInfo.Notes != null) foreach (StepInfo noti in myItemInfo.Notes) AddItem(myItemInfo.ItemID, noti);
if (myItemInfo.RNOs != null) foreach (StepInfo rnoi in myItemInfo.RNOs) AddItem(myItemInfo.ItemID, rnoi);
if (myItemInfo.Sections != null) foreach (SectionInfo seci in myItemInfo.Sections) AddItem(myItemInfo.ItemID, seci);
if (myItemInfo.Cautions != null) foreach (StepInfo caui in myItemInfo.Cautions.OfType<StepInfo>()) AddItem(myItemInfo.ItemID, caui);
if (myItemInfo.Notes != null) foreach (StepInfo noti in myItemInfo.Notes.OfType<StepInfo>()) AddItem(myItemInfo.ItemID, noti);
if (myItemInfo.RNOs != null) foreach (StepInfo rnoi in myItemInfo.RNOs.OfType<StepInfo>()) AddItem(myItemInfo.ItemID, rnoi);
if (myItemInfo.Sections != null) foreach (SectionInfo seci in myItemInfo.Sections.OfType<SectionInfo>()) AddItem(myItemInfo.ItemID, seci);
if (myItemInfo.Steps != null)
{
if(myItemInfo.IsSection || (myItemInfo.IsHigh && SubStepHasRNOs(myItemInfo.Steps)))
foreach (StepInfo stpi in myItemInfo.Steps) AddItem(myItemInfo.ItemID, stpi);
foreach (StepInfo stpi in myItemInfo.Steps.OfType<StepInfo>()) AddItem(myItemInfo.ItemID, stpi);
}
}
}
@@ -101,7 +97,6 @@ namespace Volian.Controls.Library
{
_CurrentItem = value;
SetupCurrentItemValues();
SetupConfigEdit();
// B2017-126 Only turn-on NamedPipe if Command Line parameter /NamedPipe is used.
// This eliminates waiting for the Pipe if the command line parameter is not used.
if (ExeType > 0 && Volian.Base.Library.VlnSettings.GetCommandFlag("NamedPipe")) SendPromsAnnotationData();
@@ -129,10 +124,7 @@ namespace Volian.Controls.Library
if (ai.TypeID == ExeType) return ai;
return null;
}
private void SetupConfigEdit()
{
//if (ExeType == 0) ; // initialize ExeType
}
private string _ExePath;
private string _PipeOut;
private string _PipeIn;
@@ -220,7 +212,10 @@ namespace Volian.Controls.Library
{
if (!DesignMode) // B2019-043 need to check if we are just saving changes to the user interface
{
rtxbComment.Text = value;
if (value != null)
{
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)
rtxbComment.SelectionStart = rtxbComment.TextLength; // position cursor to end of text
}
@@ -252,9 +247,6 @@ namespace Volian.Controls.Library
public AnnotationDetails()
{
InitializeComponent();
//#if(DEBUG)
//Resize+=new EventHandler(AnnotationDetails_Resize); // Debug the resize event
//#endif
Resize += AnnotationDetails_Resize;
}
@@ -280,17 +272,12 @@ namespace Volian.Controls.Library
// CSM B2024-068 / B2024-069 - check if current annotation is not selected before removal of annotation
if (CurrentAnnotation != null)
{
//using (Annotation annotation = CurrentAnnotation.Get())
//{
// annotation.Delete();
_AnnotationSearch.LoadingList = true;
Annotation.DeleteAnnotation(CurrentAnnotation);
// annotation.Save();
_AnnotationSearch.LoadingList = false;
CurrentAnnotation = null;
UpdateAnnotationGrid();
_AnnotationSearch.UpdateAnnotationSearchResults(); // B2019-004: update search results list when an annotation is removed.
//}
}
else
{
@@ -421,14 +408,6 @@ namespace Volian.Controls.Library
}
}
private void CheckClientProcess()
{
if (ClientProcess.HasExited)
{
ClientProcess = null;
StartClientProcess();
}
}
void ClientProcess_Exited(object sender, EventArgs e)
{
ClientProcess = null;
@@ -473,7 +452,6 @@ namespace Volian.Controls.Library
{
XmlDocument xdConfig = new XmlDocument();
xdConfig.LoadXml(ai.Config);
ProcedureInfo currentProc = CurrentItem.MyProcedure;
XmlNode nd = xdMessage.DocumentElement.SelectSingleNode("//PromsAnnotationConfig");
nd.AppendChild(xdMessage.ImportNode(xdConfig.DocumentElement, true));
}
@@ -591,7 +569,7 @@ namespace Volian.Controls.Library
}
private XmlNode GetNode(XmlDocument xd, string nodeName)
{
return xd.DocumentElement.SelectSingleNode("//" + nodeName);
return xd.DocumentElement.SelectSingleNode($"//{nodeName}");
}
private string GetAttribute(XmlDocument xd, string nodeName, string attrName)
{
@@ -666,7 +644,7 @@ namespace Volian.Controls.Library
if (!_LoadingGrid && (dgAnnotations.FirstDisplayedScrollingRowIndex != -1))
dgAnnotations.FirstDisplayedScrollingRowIndex = row;
}
catch (Exception ex)
catch (Exception)
{
_MyLog.InfoFormat("Trying to open an annotation which has been removed");
}
@@ -688,8 +666,6 @@ namespace Volian.Controls.Library
using (Annotation annotation = Annotation.MakeAnnotation(myItem, annotationType, rtxbComment.Rtf, rtxbComment.Text, ""))
{
CurrentAnnotation = AnnotationInfo.Get(annotation.AnnotationID);
//annotation.DTS = DateTime.Now;
//annotation.Save();
}
}
}
@@ -720,7 +696,7 @@ namespace Volian.Controls.Library
private void btnEPAnnotation_Click(object sender, EventArgs e)
{
frmEPAnnotationDetails EPfrm = new frmEPAnnotationDetails(CurrentAnnotation);
DialogResult dr = EPfrm.ShowDialog(this);
_ = EPfrm.ShowDialog(this);
}
}
}
+4 -32
View File
@@ -1,8 +1,5 @@
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
@@ -11,17 +8,9 @@ namespace Volian.Controls.Library
public partial class BorderListBox : ListBox
{
#region Properties
public GridLinePattern SelectedLinePattern
{
get { return (Items[SelectedIndex] as GridLBItem).LinePattern; }
}
public GridLinePattern SelectedLinePattern => (Items[SelectedIndex] as GridLBItem).LinePattern;
#endregion
#region ctor
public BorderListBox()
{
InitializeComponent();
SetupOptions();
}
public BorderListBox(IContainer container)
{
container.Add(this);
@@ -31,9 +20,7 @@ namespace Volian.Controls.Library
private void SetupOptions()
{
this.DrawMode = DrawMode.OwnerDrawFixed;
//this.Font.Size;
DrawItem += new DrawItemEventHandler(BorderListBox_DrawItem);
//MeasureItem += new MeasureItemEventHandler(BorderListBox_MeasureItem);
Items.Add(new GridLBItem(GridLinePattern.None));
Items.Add(new GridLBItem(GridLinePattern.Single));
Items.Add(new GridLBItem(GridLinePattern.Double));
@@ -55,10 +42,6 @@ namespace Volian.Controls.Library
}
#endregion
#region Event Handlers
//void BorderListBox_MeasureItem(object sender, MeasureItemEventArgs e)
//{
// e.ItemHeight = 22;
//}
private int _MaxLabelWidth = 0;
private int MaxLabelWidth(Graphics gr)
{
@@ -103,24 +86,13 @@ namespace Volian.Controls.Library
public class GridLBItem
{
#region Properties
private GridLinePattern _LinePattern;
public GridLinePattern LinePattern
{
get { return _LinePattern; }
set { _LinePattern = value; }
}
public GridLinePattern LinePattern { get; set; }
#endregion
#region ctor
public GridLBItem(GridLinePattern linePattern)
{
LinePattern = linePattern;
}
public GridLBItem(GridLinePattern linePattern) => LinePattern = linePattern;
#endregion
#region Public Methods
public override string ToString()
{
return LinePattern.ToString();
}
public override string ToString() => LinePattern.ToString();
#endregion
}
}
@@ -1,8 +1,5 @@
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using C1.Win.C1FlexGrid;
@@ -16,7 +13,7 @@ namespace Volian.Controls.Library
public event BorderSelectionPanelEvent BordersChanged;
private void OnBordersChanged(object sender, EventArgs args)
{
if (BordersChanged != null) BordersChanged(sender, args);
BordersChanged?.Invoke(sender, args);
}
#endregion
#region Properties
@@ -155,8 +152,6 @@ namespace Volian.Controls.Library
}
public void InitializeBorder(VlnFlexGrid myFlexGrid, CellRange myRange)
{
//if (myRange.r1 == 0 && myRange.c1 == 0 && myRange.r2 == 2 && myRange.c2 == 2)
//Console.WriteLine("here");
_TopBorder = GridLinePattern.Unknown;
_InsideHorizontalBorder = GridLinePattern.Unknown;
_BottomBorder = GridLinePattern.Unknown;
@@ -249,18 +244,11 @@ namespace Volian.Controls.Library
DrawBackground(e, x1, y1, x2, y2, w1, h1, w2, h2, offset, HasRows, HasColumns);
DrawBorder(e, x1, y1, x2, y2);
}
#pragma warning disable IDE0060 // Remove unused parameter
private static void DrawBackground(PaintEventArgs e, int x1, int y1, int x2, int y2, int w1, int h1, int w2, int h2, int offset,bool hasRows, bool hasColumns)
#pragma warning restore IDE0060 // Remove unused parameter
{
e.Graphics.FillRectangle(Brushes.White, offset, offset, w2 - 2* offset, h2 - 2* offset);
// Old Backgound - Shows corners
//e.Graphics.DrawLine(Pens.LightBlue, x1, offset, x1, y1);
//e.Graphics.DrawLine(Pens.LightBlue, x2, offset, x2, y1);
//e.Graphics.DrawLine(Pens.LightBlue, x1, y2, x1, h2 - offset);
//e.Graphics.DrawLine(Pens.LightBlue, x2, y2, x2, h2 - offset);
//e.Graphics.DrawLine(Pens.LightBlue, offset, y1, x1, y1);
//e.Graphics.DrawLine(Pens.LightBlue, x2, y1, w2 - offset, y1);
//e.Graphics.DrawLine(Pens.LightBlue, offset, y2, x1, y2);
//e.Graphics.DrawLine(Pens.LightBlue, x2, y2, w2 - offset, y2);
// Horizontal Lines
e.Graphics.DrawLine(Pens.LightBlue, offset, y1, w2 - offset, y1);
if (hasRows) e.Graphics.DrawLine(Pens.LightBlue, x1 + offset, (y1 + y2) / 2, x2 - offset , (y1 + y2) / 2);
@@ -287,8 +275,8 @@ namespace Volian.Controls.Library
if (LineWidth(linePattern) == 3)
{
dxo2 = dxo1 = -1;
dyi2 = dyo1 = LineWidth(startPattern) == 3 ? -1 : 0;
dyi1 =dyo2 = LineWidth(endPattern) == 3 ? 1 : 0;
dyo1 = LineWidth(startPattern) == 3 ? -1 : 0;
dyo2 = LineWidth(endPattern) == 3 ? 1 : 0;
dxi1 = -dxo1; dxi2 = -dxo2; dyi1 = -dyo1; dyi2 = -dyo2;
if (linePattern == GridLinePattern.Thick) dyo2++; // Fix for bug in Graphics. Seems to happen when line is thick.
}
@@ -303,8 +291,8 @@ namespace Volian.Controls.Library
if (LineWidth(linePattern) == 3)
{
dyo2 = dyo1 = 1;
dxi2 = dxo1 = LineWidth(startPattern) == 3 ? -1 : 0;
dxi1 = dxo2 = LineWidth(endPattern) == 3 ? 1 : 0;
dxo1 = LineWidth(startPattern) == 3 ? -1 : 0;
dxo2 = LineWidth(endPattern) == 3 ? 1 : 0;
dxi1 = -dxo1;dxi2 = -dxo2;dyi1 = -dyo1;dyi2 = -dyo2;
if (linePattern == GridLinePattern.Thick) dxo2++; // Fix for bug in Graphics. Seems to happen when line is thick.
}
@@ -347,7 +335,7 @@ namespace Volian.Controls.Library
{
if (linePattern == GridLinePattern.None) return;
int dyi1 = 0; int dyi2 = 0; int dxi1 = 0; int dxi2 = 0;
int dyo1 = 0; int dyo2 = 0; int dxo1 = 0; int dxo2 = 0;
int dyo1; int dyo2; int dxo1 = 0; int dxo2 = 0;
if (LineWidth(linePattern) == 3)
{
dxo2 = dxo1 = 1;
@@ -368,7 +356,7 @@ namespace Volian.Controls.Library
{
if (linePattern == GridLinePattern.None) return;
int dyi1 = 0; int dyi2 = 0; int dxi1 = 0; int dxi2 = 0;
int dyo1 = 0; int dyo2 = 0; int dxo1 = 0; int dxo2 = 0;
int dyo1 = 0; int dyo2 = 0; int dxo1; int dxo2;
if (LineWidth(linePattern) == 3)
{
dyo2 = dyo1 = -1;
+14 -54
View File
@@ -1,33 +1,24 @@
using C1.Win.C1FlexGrid;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using VEPROMS.CSLA.Library;
using Volian.Controls.Library;
namespace Volian.Controls.Library
{
public partial class frmImportWordContents : Form
{
private static string GetTableText()
{
return TblFlexGrid.GetSearchableText();
}
private static VlnFlexGrid _TblFlexGrid = null;
public static VlnFlexGrid TblFlexGrid
{
get {
if (_TblFlexGrid == null) _TblFlexGrid = new VlnFlexGrid();
return frmImportWordContents._TblFlexGrid;
return _TblFlexGrid;
}
set { frmImportWordContents._TblFlexGrid = value; }
set { _TblFlexGrid = value; }
}
private static void LoadTable2(XmlNode xn)
@@ -54,15 +45,7 @@ namespace Volian.Controls.Library
fg.BringToFront();
fg.Invalidate();
Application.DoEvents();
//ShowColumnWidths(fg);
fg.MakeRTFcells(false);
//ShowMergedCells(fg);
//ShowColumnWidths(fg);
//Well, Can I save the table
//using (Step step = MakeCSLAStep(mySteps, mySteps.Count, null, {TableContent}, 20008, E_FromType.Table))
//{
// Grid.MakeGrid(step.MyContent, fg.GetXMLData(), "");
//}
}
public static VlnFlexGrid _MyFlexGrid = null;
private static void AddTableRow(XmlNode xr, VlnFlexGrid fg, int rows)
@@ -73,14 +56,7 @@ namespace Volian.Controls.Library
foreach (XmlNode xc in xr.ChildNodes)
{
++cols;
//if (xc.InnerText.Contains("RC-V200"))
// Console.WriteLine(xc.InnerText);
//if (xc.InnerText.Contains("RC-V121"))
// Console.WriteLine(xc.InnerText);
//if (xc.InnerXml.Contains("AB 137") || xc.InnerXml.Contains("3013N01"))
// Console.WriteLine("here");
CellRange cr2 = GetMyMergedRange(fg, rows - 1, cols - 1);
//Console.WriteLine("Check {0}", cr2);
while (cr2.c1 != cols - 1 || cr2.r1 != rows - 1)
{
cols++;
@@ -123,7 +99,6 @@ namespace Volian.Controls.Library
break;
}
}
//ShowMergedCells(fg);
if (xc.Name == "td")
{
AddTableColumn(xc, fg, rows, cols);
@@ -131,26 +106,9 @@ namespace Volian.Controls.Library
}
}
//private static void ShowColumnWidths(VlnFlexGrid fg)
//{
// foreach (Column c in fg.Cols)
// Console.WriteLine("Width[{0}]={1}", c.Index, c.Width);
//}
private static void ShowMergedCells(VlnFlexGrid fg)
{
for (int r = 0; r < fg.Rows.Count; r++)
{
for (int c = 0; c < fg.Cols.Count; c++)
{
CellRange cr3 = GetMyMergedRange(fg, r, c);
if (fg.MergedRanges.Contains(cr3))
Console.WriteLine("cr3 r={0},c={1},rng={2}", r, c, cr3);
}
}
}
private static int GetSpan(string span)
{
int retval = int.Parse("0" + (span ?? ""));
int retval = int.Parse($"0{span ?? ""}");
if (retval == 0) return 0;
return retval - 1;
}
@@ -175,11 +133,13 @@ namespace Volian.Controls.Library
if (r2 > fg.Rows.Count) fg.Rows.Count = r2;
int c2 = c1 + GetSpan(colspan);
if (c2 > fg.Cols.Count) fg.Cols.Count = c2;
CellRange cr = new CellRange();
cr.r1 = r1 - 1;
cr.r2 = r2 - 1;
cr.c1 = c1 - 1;
cr.c2 = c2 - 1;
CellRange cr = new CellRange
{
r1 = r1 - 1,
r2 = r2 - 1,
c1 = c1 - 1,
c2 = c2 - 1
};
fg.MergedRanges.Add(cr);
//Console.WriteLine("Merged {0}", cr);
}
@@ -194,7 +154,7 @@ namespace Volian.Controls.Library
}
return fg.GetMergedRange(r, c);
}
private static Regex regNumber = new Regex("^[0-9]+$", RegexOptions.Compiled);
private static readonly Regex regNumber = new Regex("^[0-9]+$", RegexOptions.Compiled);
private static void AddTableColumn(XmlNode xc, VlnFlexGrid fg, int rows, int cols)
{
//Console.WriteLine("Rows {0}, Cols {1}", rows, cols);
@@ -218,7 +178,7 @@ namespace Volian.Controls.Library
{
if (xn.Name == "p")
{
sb.Append(prefix + xn.InnerText);
sb.Append($"{prefix}{xn.InnerText}");
}
if (xn.Name == "ul")
{
@@ -226,11 +186,11 @@ namespace Volian.Controls.Library
{
if (xn2.Name == "li")
{
sb.Append(prefix + "*" + xn.InnerText);
sb.Append($"{prefix}*{xn.InnerText}");
}
if (xn2.Name == "p")
{
sb.Append(prefix + xn.InnerText);
sb.Append($"{prefix}{xn.InnerText}");
}
}
}
@@ -1,11 +1,4 @@
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
+25 -214
View File
@@ -1,12 +1,7 @@
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using Volian.Controls.Library;
using System.Reflection;
using LBWordLibrary;
using JR.Utils.GUI.Forms;
@@ -17,7 +12,7 @@ namespace Volian.Controls.Library
public partial class DSOTabPanel : DevComponents.DotNetBar.PanelDockContainer
{
#region Private Fields
private DisplayTabControl _MyDisplayTabControl;
private readonly DisplayTabControl _MyDisplayTabControl;
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private AxEDWordLib.AxEDWord _MyEdWord; // B2017-133 Edraw DSO Framer Replacement
public AxEDWordLib.AxEDWord MyEdWord
@@ -26,9 +21,7 @@ namespace Volian.Controls.Library
set { _MyEdWord = value; }
}
private TransparentPanel _MyTransparentPanel;
private static int _Count = 0;
private DocumentInfo _MyDocumentInfo;
private int _MyCount;
private readonly DocumentInfo _MyDocumentInfo;
private DisplayTabItem _MyDisplayTabItem;
private DSOFile _DSOFile;
public static int MSWordLimit = 10;
@@ -43,11 +36,7 @@ namespace Volian.Controls.Library
/// <summary>
/// Count of DSO Pages open. Limited to 18 in DisplayTabControl
/// </summary>
public static int Count
{
get { return _Count; }
set { _Count = value; }
}
public static int Count { get; set; } = 0;
/// <summary>
/// Pointer to the related DisplayTabItem
/// </summary>
@@ -90,23 +79,17 @@ namespace Volian.Controls.Library
if (_MyEdWord == null) return false; // B2017-133 Edraw Is Dirty Property
// B2017-249 Recover Temporary File And AutoSave support for MSWord
return _MyEdWord.IsDirty() || MyDSOFile.ContentIsDirty;
//LBDocumentClass doc = new LBDocumentClass(_MyEdWord.ActiveDocument());
//return !doc.Saved;
}
}
private bool _OverrideClose = false;
public bool OverrideClose
{
get { return _OverrideClose; }
set { _OverrideClose = value; }
}
public bool OverrideClose { get; set; } = false;
public E_ViewMode PanelViewEditMode = E_ViewMode.Edit;
#endregion
//private frmPG _frm = null;
#region Constructors
private Timer _RefreshTimer;
private ItemInfo _ItemInfo;
private bool _AllowedToEdit;
private readonly Timer _RefreshTimer;
private readonly ItemInfo _ItemInfo;
private readonly bool _AllowedToEdit;
public DSOTabPanel(DocumentInfo documentInfo, DisplayTabControl myDisplayTabControl, ItemInfo itemInfo, bool allowedToEdit)
{
_MyDisplayTabControl = myDisplayTabControl;
@@ -117,8 +100,10 @@ namespace Volian.Controls.Library
_MyDocumentInfo = documentInfo;
SetupDSO();
if (_MyEdWord == null) return; //B2017-219 could not open the word attachment so just return
_RefreshTimer = new Timer(); // Enabled is false and interval is 1/10th of second.
_RefreshTimer.Interval = 500;// B2017-133 Edraw
_RefreshTimer = new Timer
{
Interval = 500// B2017-133 Edraw
}; // Enabled is false and interval is 1/10th of second.
ClientSizeChanged += new EventHandler(DSOTabPanel_ClientSizeChanged);
_RefreshTimer.Tick += new EventHandler(_RefreshTimer_Tick);
// B2018-070 Activate MS Word Panel
@@ -145,21 +130,14 @@ namespace Volian.Controls.Library
_MyEdWord.DisablePrintHotKey(true);
}
// B2019-161 When tracking timing time this action
private static VolianTimer _TimeActivity = new VolianTimer("DSOTabPanel.cs _RefreshTimer_Tick", 148);
private static readonly VolianTimer _TimeActivity = new VolianTimer("DSOTabPanel.cs _RefreshTimer_Tick", 148);
void _RefreshTimer_Tick(object sender, EventArgs e)
{
_TimeActivity.Open();
_RefreshTimer.Enabled = false;
if (_MyEdWord != null)// B2017-133 Edraw
{
// B2018-070 Activate MS Word Panel
_MyEdWord.GotoItem(EDWordLib.WdGoToItem.wdGoToObject, EDWordLib.WdGoToDirection.wdGoToNext, 0, null);
}
//else
//{
// _MyDisplayTabControl.CloseTabItem(_MyDisplayTabItem);
//}
_MyEdWord?.GotoItem(EDWordLib.WdGoToItem.wdGoToObject, EDWordLib.WdGoToDirection.wdGoToNext, 0, null);
_TimeActivity.Close();
}
@@ -180,8 +158,7 @@ namespace Volian.Controls.Library
}
private void SetupDSO()
{
_Count++; // Increment the count of open Word documents (Limit = MSWordLimit)
_MyCount = _Count;
Count++; // Increment the count of open Word documents (Limit = MSWordLimit)
this._MyTransparentPanel = new TransparentPanel();
this._MyEdWord = new AxEDWordLib.AxEDWord();// B2017-133 Edraw
_MyEdWord.BeginInit();
@@ -195,14 +172,8 @@ namespace Volian.Controls.Library
this._MyTransparentPanel.Font = new System.Drawing.Font("Tahoma", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this._MyTransparentPanel.ForeColor = System.Drawing.Color.Brown; // This is the color used to show InActive on the right side on the Word
// document menu line.
//this._MyTransPanel.Location = new System.Drawing.Point(0, 0);
//this._MyTransPanel.Name = "transPanel1";
//this._MyTransPanel.Size = new System.Drawing.Size(370, 423);
//this._MyTransPanel.TabIndex = 1;
this._MyTransparentPanel.Click += new EventHandler(_MyTransparentPanel_Click);
this._MyEdWord.Dock = System.Windows.Forms.DockStyle.Fill;
//System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WordDSOTab));
//this._DSOFramer.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("_FC.OcxState")));
_MyEdWord.EndInit();
LBDocumentClass doc;
try
@@ -215,18 +186,13 @@ namespace Volian.Controls.Library
this._MyEdWord.Open(MyDSOFile.MyFile.FullName);
doc = new LBDocumentClass(_MyEdWord.ActiveDocument());
}
catch (Exception ex)
catch (Exception)
{
// B2017-137 Restore Previous valid version if the current version cannot be opened,
using (DocumentAuditInfoList dail = DocumentAuditInfoList.Get(MyDocumentInfo.DocID))
{
if (dail.Count > 0)
{
//DocumentAuditInfo dai = dail[0];
//foreach (DocumentAuditInfo tmpa in dail)
//{
// if (tmpa.DTS > dai.DTS) dai = tmpa;
//}
if (MessageBox.Show("Do you want to revert to a previous version?", "Error in MS Word section",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
@@ -242,12 +208,6 @@ namespace Volian.Controls.Library
MyDSOFile.SaveFile(0, "", _ItemInfo, false, StatusChanged); // B2017-219 save the restored document to database
this._MyEdWord = null; // B2017-219 Set MyEdWord to null - we will check for this in the calling functions
return;
//_MyDocumentInfo = DocumentInfo.Get(MyDocumentInfo.DocID);
//DocumentInfo.Refresh(myDoc);
////_DSOFile = null;
//this._MyEdWord.Open(MyDSOFile.MyFile.FullName);
//doc = new LBDocumentClass(_MyEdWord.ActiveDocument());
//doc.Range(1, 1);
}
}
@@ -267,19 +227,16 @@ namespace Volian.Controls.Library
}
doc = new LBDocumentClass(_MyEdWord.ActiveDocument());
//Console.WriteLine("Version {0}", doc.Application.Version);
float ver;
if (!float.TryParse(doc.Application.Version, out ver))
if (!float.TryParse(doc.Application.Version, out float ver))
ver = 12.0F;
this.Enter += new EventHandler(DSOTabPanel_Enter);
// B2018-070 Use InDSOTabPanel to determine if the word panel should be activated - Activate MS Word Panel
this.Leave += DSOTabPanel_Leave;
Application.DoEvents();
// The following line corrects Symbol characters in MSWord Sections
// CheckForSymbolCharacters(doc);
InitializeWordDocument(doc);
FindSearchString();
}
catch (Exception ex)
catch (Exception)
{
//string message = ShowException(ex);
//Console.WriteLine("\r\n-------------\r\n{0}{1}{2}\r\n-------------\r\n", MyDSOFile.MyFile.FullName, ex.GetType().Name, message);
@@ -293,41 +250,6 @@ namespace Volian.Controls.Library
// B2018-070 Use InDSOTabPanel to determine if the word panel should be activated - Activate MS Word Panel
_InDSOTabPanel = false;
}
public void FixSymbolCharacters()
{
CheckForSymbolCharacters(new LBDocumentClass(_MyEdWord.ActiveDocument()));// B2017-133 Edraw
}
private void CheckForSymbolCharacters(LBDocumentClass doc)
{
string fontHasSymbolCharacters = doc.FontHasSymbolCharacters;
if (fontHasSymbolCharacters != null)
{
// do a string for the log message, depending if this is a libdoc.
string msg = null;
if (MyDocumentInfo.LibTitle == null || MyDocumentInfo.LibTitle == "")
{
if (MyDocumentInfo.DocumentEntryCount>0)
msg = string.Format("Procedure = {0}, Section {1}", MyDocumentInfo.DocumentEntries[0].MyContent.ContentItems[0].MyProcedure, MyDocumentInfo.DocumentEntries[0].MyContent.ContentItems[0].DisplayText);
else
msg = string.Format("Procedure and Section can't be determined");
}
else
msg = string.Format("Library Document: {0}", MyDocumentInfo.LibTitle);
if (doc.AttemptToFixASymbolCharacter()) // font is installed correctly, 'fix' this file.
{
//MessageBox.Show(string.Format("This document uses the font {0}, which previously had an error.\r\nThe program will attempt to fix the problem for this Word section.", fontHasSymbolCharacters),
// "Font Being Corrected", MessageBoxButtons.OK);
doc.FixSymbolCharacters();
_MyLog.Info(string.Format("Font problem being fixed in Font: {0}, {1}.",fontHasSymbolCharacters, msg));
}
else
{
MessageBox.Show(string.Format("This document uses the font {0}, which has an error.\r\n\r\nReinstall this font.", fontHasSymbolCharacters),
"Reinstall Font", MessageBoxButtons.OK);
_MyLog.Info(string.Format("Font problem found in Font: {0}, {1}.",fontHasSymbolCharacters, msg));
}
}
}
private void InitializeWordDocument(LBDocumentClass doc)
{
@@ -336,8 +258,6 @@ namespace Volian.Controls.Library
DocStyle ds = MyDocumentInfo.DocumentEntries[0].MyContent.ContentItems[0].MyDocStyle;
// this will cause an error and goto the Catch if the family or size is null,
// Westinghouse needs it to to this - at least for now
//if (ds.Font.Family != null) doc.Application.Selection.Font.Name = ds.Font.Family;
//if (ds.Font.Size != null) doc.Application.Selection.Font.Size = (float)ds.Font.Size;
doc.Application.Selection.Font.Name = ds.Font.Family;
doc.Application.Selection.Font.Size = (float)ds.Font.Size;
doc.Application.Selection.ParagraphFormat.SpaceBefore = 0;
@@ -349,12 +269,12 @@ namespace Volian.Controls.Library
if (doc.ActiveWindow.ActivePane.View.Zoom.Percentage < 40)
doc.ActiveWindow.ActivePane.View.Zoom.Percentage = 100;
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0059:Unnecessary assignment of a value", Justification = "found set for debugging purposes")]
public void FindSearchString()
{
if (SearchString == null) return;
// Get the Document
LBDocumentClass wordDoc = new LBDocumentClass(_MyEdWord.ActiveDocument());
//LBSelection sel = wordDoc.Application.Selection;
LBFind find = wordDoc.Application.Selection.Find;
find.ClearFormatting();
bool wildCards = SearchString.Contains("?") || SearchString.Contains("*");
@@ -385,51 +305,10 @@ namespace Volian.Controls.Library
if (sel.Start == sel.End) return null;
return sel.Text;
}
private string ShowException(Exception ex)
{
string sep = "\r\n ";
StringBuilder sb = new StringBuilder();
do
{
sb.Append(sep + ex.Message);
sep += " ";
ex = ex.InnerException;
} while (ex != null);
return sb.ToString();
}
//void _MyDSOFramer_Leave(object sender, EventArgs e)
//{
// vlnStackTrace.ShowStack("DSO Leave {0}", this.MyDocumentInfo.DocID);
//}
//void _MyDSOFramer_Enter(object sender, EventArgs e)
//{
// vlnStackTrace.ShowStack("DSO Enter {0}", this.MyDocumentInfo.DocID);
//}
//void _MyDSOFramer_GotFocus(object sender, EventArgs e)
//{
// vlnStackTrace.ShowStack("DSO Got Focus {0}",this.MyDocumentInfo.DocID);
//}
//void _MyDSOFramer_LostFocus(object sender, EventArgs e)
//{
// vlnStackTrace.ShowStack("DSO Lost Focus {0}", this.MyDocumentInfo.DocID);
//}
public void EnterPanel()
{
DSOTabPanel_Enter(this, new EventArgs());
}
//void DSOTabPanel_LostFocus(object sender, EventArgs e)
//{
// vlnStackTrace.ShowStack("DSOTabPanel_LostFocus {0} DocID {1} Index {2} {3}", _In_DSOTabPanel_Enter, this._MyDocumentInfo.DocID, _MyDisplayTabControl.MyBar.SelectedDockTab, sender.GetType().FullName);
//}
//void DSOTabPanel_GotFocus(object sender, EventArgs e)
//{
// vlnStackTrace.ShowStack("DSOTabPanel_GotFocus {0} DocID {1} Index {2} {3}", _In_DSOTabPanel_Enter, this._MyDocumentInfo.DocID, _MyDisplayTabControl.MyBar.SelectedDockTab, sender.GetType().FullName);
//}
#endregion
#region Event Handlers
/// <summary>
@@ -450,29 +329,16 @@ namespace Volian.Controls.Library
{
this.Select();
}
///// <summary>
///// If the user presses the save button, tell the file to save it's contents to the database
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//void _MyDSOFramer_OnSaveCompleted(object sender, AxDSOFramer._DFramerCtlEvents_OnSaveCompletedEvent e)
//{
// _MyLog.WarnFormat("_MyDSOFramer_OnSaveCompleted");
// Volian.Base.Library.vlnStackTrace.ShowStack("_MyDSOFramer_OnSaveCompleted");
// SaveDSO_Phase2();
//}
private void SaveDSO_Phase2()
{
// Unfortunately, the only way to handle view mode for DSO Framer is to not save.
if (PanelViewEditMode == E_ViewMode.View)
{
MessageBox.Show("Currently in VIEW mode,\r\n cannot Save " + _MyDisplayTabItem.Tooltip);
MessageBox.Show($"Currently in VIEW mode,\r\n cannot Save {_MyDisplayTabItem.Tooltip}");
return;
}
LBDocumentClass doc = new LBDocumentClass(_MyEdWord.ActiveDocument());
//while (doc.Saved = false)
// Application.DoEvents();
string tmp = GetReflectiveProperty(_MyEdWord.ActiveDocument(), "FullName");
if (System.IO.File.Exists(tmp))
MyDSOFile.FullName = tmp;
@@ -486,10 +352,7 @@ namespace Volian.Controls.Library
if (myei != null && myei.MyDocument != null && myei.MyDocument.LibTitle != null && myei.MyDocument.LibTitle != "")
{
// C2019-033 - make save options more clear with respect to library documents
string msgstr = "Save to Library Document?" +
"\n\n YES - Save for all usages of this Library Document." +
"\n\n NO - Unlink this Section from the Library Document and Save in this Word Section.\n\n" +
_MyDocumentInfo.LibraryDocumentUsageAll;
string msgstr = $"Save to Library Document?\n\n YES - Save for all usages of this Library Document.\n\n NO - Unlink this Section from the Library Document and Save in this Word Section.\n\n{_MyDocumentInfo.LibraryDocumentUsageAll}";
DialogResult ans = FlexibleMessageBox.Show(msgstr, "Document Save", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (ans == DialogResult.No) cvtLibDoc = true;
}
@@ -510,16 +373,6 @@ namespace Volian.Controls.Library
tc.ONStatusChanged(this, new DisplayTabControlStatusEventArgs(type, count, text));
}
}
///// <summary>
///// Before a document closes check to see if it's contents should be saved.
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//void _MyDSOFramer_BeforeDocumentClosed(object sender, AxDSOFramer._DFramerCtlEvents_BeforeDocumentClosedEvent e)
//{
// SaveDSOPhase1();
//}
private void SaveDSO_Phase1()
{
try
@@ -529,7 +382,6 @@ namespace Volian.Controls.Library
this.Enter -= new EventHandler(DSOTabPanel_Enter);
// B2018-070 Use InDSOTabPanel to determine if the word panel should be activated - Activate MS Word Panel
this.Leave -= DSOTabPanel_Leave;
// SaveDirty(); // SaveDirty happens in CloseDSO(bool)
}
catch (Exception ex)
{
@@ -549,11 +401,6 @@ namespace Volian.Controls.Library
bool stat = _MyEdWord.Save();// B2017-133 Edraw
//Console.WriteLine("Save = {0}", stat);
SaveDSO_Phase2();
//_MyDSOFramer_OnSaveCompleted(this, null);
// These are handled in the method above
//LBDocumentClass doc = new LBDocumentClass(_MyDSOFramer.ActiveDocument);
//MyDSOFile.FullName = GetReflectiveProperty(_MyDSOFramer.ActiveDocument, "FullName");
//MyDSOFile.SaveFile(doc.Length, doc.Ascii);
}
catch (Exception ex)
{
@@ -578,13 +425,12 @@ namespace Volian.Controls.Library
// Unfortunately, the only way to handle view mode for DSO Framer is to not save.
if (PanelViewEditMode == E_ViewMode.View || !_AllowedToEdit)
{
MessageBox.Show("Currently in VIEW mode,\r\n cannot Save " + _MyDisplayTabItem.Tooltip);
MessageBox.Show($"Currently in VIEW mode,\r\n cannot Save {_MyDisplayTabItem.Tooltip}");
return false;
}
//if (MessageBox.Show("Save changes to " + _MyDisplayTabItem.MyItemInfo.TabTitle + "\r\n" + _MyDisplayTabItem.MyItemInfo.TabToolTip, "Document has Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
// B2017-249 Recover Temporary File And AutoSave support for MSWord
// C2019-033 - make save options more clear with respect to library documents second dialog will appear if Yes is selected and it's a library document
string msgstr = "Save changes to " + (MyDSOFile.MyDocument.ContentIsDirty ? "Recovered Version of " : "") + _MyDisplayTabItem.Text;
string msgstr = $"Save changes to {(MyDSOFile.MyDocument.ContentIsDirty ? "Recovered Version of " : "")}{_MyDisplayTabItem.Text}";
if (FlexibleMessageBox.Show(msgstr, (IsDirty ? "Document has Changed" : "Previous Changes were not Saved"), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
return SaveDSO();
//Console.WriteLine("Delete {0}", MyDSOFile.MyFile.Name);
@@ -630,15 +476,6 @@ namespace Volian.Controls.Library
StepTabPanel stpanel = _MyDisplayTabControl.GetProcedureTabPanel(MyDisplayTabItem.MyItemInfo);
PanelViewEditMode = (stpanel == null) ? E_ViewMode.Edit : stpanel.MyStepPanel.VwMode;
}
try
{
//_MyDSOFramer.EventsEnabled = true;
//_MyEdWord.FrameHookPolicy = DSOFramer.dsoFrameHookPolicy.dsoResetNow;
}
catch (Exception ex)
{
if (_MyLog.IsErrorEnabled) _MyLog.ErrorFormat("DSOTabPage_Enter", ex);
}
if (_In_DSOTabPanel_Enter) return;
//vlnStackTrace.ShowStack("DSOTabPanel_Enter {0} DocID {1} Index {2} {3}",_In_DSOTabPanel_Enter, this._MyDocumentInfo.DocID, _MyDisplayTabControl.MyBar.SelectedDockTab, sender.GetType().FullName);
_In_DSOTabPanel_Enter = true;
@@ -663,15 +500,6 @@ namespace Volian.Controls.Library
/// </summary>
/// <returns></returns>
public bool CloseDSO()
{
return CloseDSO(false);
}
/// <summary>
/// Cleans-up the DSO Framer window
/// </summary>
/// <param name="force"></param>
/// <returns></returns>
public bool CloseDSO(bool force)
{
_MyLog.Debug("CloseDSO");
bool result = true;
@@ -687,38 +515,21 @@ namespace Volian.Controls.Library
_MyEdWord = null;
// B2017-249 Recover Temporary File And AutoSave support for MSWord
if (DeleteOnClose) MyDSOFile.MyFile.Delete();
_Count--;
Count--;
}
}
catch (Exception ex)
{
if (_MyLog.IsErrorEnabled) _MyLog.Error("SaveDSO - " + this.Name, ex);
if (_MyLog.IsErrorEnabled) _MyLog.Error($"SaveDSO - {this.Name}", ex);
result = false;
}
return result;
}
/// <summary>
/// Activates the current DSO Framer window (Word)
/// </summary>
public void Activate()
{
try
{
//this._MyEdWord.Activate();
//if (_MyCount <= MSWordLimit)
// this._MyEdWord.FrameHookPolicy = DSOFramer.dsoFrameHookPolicy.dsoResetNow;
}
catch (Exception ex)
{
if (_MyLog.IsErrorEnabled) _MyLog.Error("Activate", ex);
}
}
#endregion
#region DocumentProperties
private string GetReflectiveProperty(object objectToInspect, string propertyName)
{
string returnString = "";
//To use reflection on an object, you
// first need to get an instance
// of that object's type.
@@ -23,7 +23,6 @@ namespace Volian.Controls.Library
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
@@ -34,7 +33,6 @@ namespace Volian.Controls.Library
{
this.gpMode = new DevComponents.DotNetBar.Controls.GroupPanel();
this.gpItem = new DevComponents.DotNetBar.Controls.GroupPanel();
this.btnApplicabilitychg2 = new DevComponents.DotNetBar.ButtonItem();
this.btnApplicabilitychg = new DevComponents.DotNetBar.ButtonX();
this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip();
this.gpItem.SuspendLayout();
@@ -42,14 +40,14 @@ namespace Volian.Controls.Library
//
// btnApplicabilitychg
//
this.btnApplicabilitychg.Location = new System.Drawing.Point(60, 8);
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(80, 22);
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("Change applicability settings - All At Level", "", "When clicked, all steps at the level of the current step will have their applicability settings changed. Note that for two column procedures, the left column and right column are handled separately.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
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;
@@ -106,13 +104,12 @@ namespace Volian.Controls.Library
this.gpItem.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.gpItem.CanvasColor = System.Drawing.SystemColors.Control;
this.gpItem.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007;
//this.gpItem.Controls.Add(this.btnApplicabilitychg);
this.gpItem.DisabledBackColor = System.Drawing.Color.Empty;
this.gpItem.Dock = System.Windows.Forms.DockStyle.Top;
this.gpItem.Location = new System.Drawing.Point(0, 49);
this.gpItem.Margin = new System.Windows.Forms.Padding(4);
this.gpItem.Name = "gpItem";
this.gpItem.Padding = new System.Windows.Forms.Padding(13, 12, 13, 37);
this.gpItem.Padding = new System.Windows.Forms.Padding(0, 20, 0, 0);
this.gpItem.Size = new System.Drawing.Size(432, 85);
//
//
@@ -169,9 +166,9 @@ namespace Volian.Controls.Library
private DevComponents.DotNetBar.Controls.GroupPanel gpMode;
private DevComponents.DotNetBar.Controls.GroupPanel gpItem;
private DevComponents.DotNetBar.ButtonItem btnApplicabilitychg2;
private DevComponents.DotNetBar.ButtonX btnApplicabilitychg;
private DevComponents.DotNetBar.SuperTooltip superTooltip1;
}
}
@@ -1,8 +1,6 @@
using JR.Utils.GUI.Forms;
using log4net.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
@@ -18,9 +16,9 @@ namespace Volian.Controls.Library
public event DisplayApplicabilityEvent ApplicabilityViewModeChanged;
private void OnApplicabilityViewModeChanged()
{
if (ApplicabilityViewModeChanged != null)
ApplicabilityViewModeChanged(this, new EventArgs());
ApplicabilityViewModeChanged?.Invoke(this, new EventArgs());
}
private DisplayTabItem _MyDisplayTabItem = null;
public DisplayTabItem MyDisplayTabItem
{
@@ -34,6 +32,9 @@ namespace Volian.Controls.Library
MyCheckBoxes.Clear();
if (_MyDisplayTabItem != null)
{
//B2026-043 Fix "Set All At Level" button.
DevComponents.DotNetBar.Controls.GroupPanel gpSubItem = InitializegpSubItem();
DocVersionConfig dcfg = _MyDisplayTabItem.MyItemInfo.MyDocVersion.MyConfig as DocVersionConfig;
List<string> names = new List<string>();
for (int n = 1; n <= dcfg.Unit_Count; n++)
@@ -42,7 +43,6 @@ namespace Volian.Controls.Library
names.Add(dcfg.Unit_Name);
}
dcfg.SelectedSlave = 0;
// string[] names = dcfg.Unit_Name.Split(',');
int apple = -1;
if(_MyDisplayTabItem.MyStepTabPanel != null)
apple = _MyDisplayTabItem.MyStepTabPanel.MyStepPanel.ApplDisplayMode;
@@ -51,14 +51,16 @@ namespace Volian.Controls.Library
foreach (string name in names)
{
i++;
AddViewMode(name.Trim(), i.ToString(), apple == i);
AddViewMode($"{name.Trim()} (View Only)", i.ToString(), apple == i);
}
AddItemMode("All", "-1");
AddItemMode("All", "-1", ref gpSubItem);
i = 0;
foreach (string name in names)
AddItemMode(name.Trim(), (++i).ToString());
AddItemMode("None", "0");
AddItemMode(name.Trim(), (++i).ToString(), ref gpSubItem);
AddItemMode("None", "0", ref gpSubItem);
gpItem.Controls.Add(gpSubItem);
gpSubItem.BringToFront();
gpItem.Controls.Add(btnApplicabilitychg);
btnApplicabilitychg.BringToFront();
if (_MyDisplayTabItem.MyStepTabPanel != null)
@@ -85,7 +87,37 @@ namespace Volian.Controls.Library
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),
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;
}
#pragma warning disable IDE0044 // Add readonly modifier
private Dictionary<int, CheckBox> MyCheckBoxes = new Dictionary<int, CheckBox>();
#pragma warning restore IDE0044 // Add readonly modifier
private string _MyApplicability = string.Empty;
public string MyApplicability
{
@@ -93,55 +125,31 @@ namespace Volian.Controls.Library
set { _MyApplicability = value; }
}
//private ProcedureInfo _MyProcedureInfo;
//public ProcedureInfo MyProcedureInfo
//{
//get { return _MyProcedureInfo; }
//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)
//C2026-021 Expand Functionality of Viewing Mode
public bool ShowItemSelection = true;
public void SetEnableDisableItemSelection(bool value) => gpItem.Enabled = ShowItemSelection = value;
private void AddItemMode(string name, string value, ref DevComponents.DotNetBar.Controls.GroupPanel gpSubItem)
{
CheckBox cb = new CheckBox();
cb.BackColor = Color.Transparent;
cb.Text = name;
cb.Tag = value;
cb.Dock = DockStyle.Top;
gpItem.Controls.Add(cb);
CheckBox cb = new CheckBox
{
BackColor = Color.Transparent,
Height = 24,
Width = 75,
AutoSize = true,
Text = name,
Tag = value,
Dock = DockStyle.Top
};
gpSubItem.Controls.Add(cb);
cb.BringToFront();
cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
MyCheckBoxes.Add(value == null ? -1 : int.Parse(value), cb);
}
private void cb_CheckedChanged(object sender, EventArgs e)
{
EditItem ei = MyDisplayTabItem.MyStepTabPanel.SelectedEditItem;
ei.SaveCurrentAndContents(); // C2026-035 save unsaved step text.
UnwireCheckboxes(false);
CheckBox cb = sender as CheckBox;
CheckState cs = cb.CheckState;
@@ -209,22 +217,10 @@ 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);
// 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)
if ((!MyItemInfo.IsProcedure && invalidTrans.Count == 0) || IsProcWithNoExternalTrans(MyItemInfo, invalidTrans))
if ((!MyItemInfo.IsProcedure && invalidTrans.Count == 0) || IsProcWithNoExternalTrans(invalidTrans))
{
// C2021 - 027: Procedure level PC/PC
if (MyItemInfo.IsProcedure && MyItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ProcAppl)
@@ -265,20 +261,6 @@ namespace Volian.Controls.Library
// 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);
//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)
{
@@ -287,6 +269,10 @@ namespace Volian.Controls.Library
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)
@@ -294,7 +280,7 @@ namespace Volian.Controls.Library
// 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))
if (IsProcWithNoExternalTrans(invalidTrans))
{
StepConfig sc2 = startitm.MyConfig as StepConfig;
using (Content cnt = Content.Get(startitm.MyContent.ContentID))
@@ -334,7 +320,7 @@ namespace Volian.Controls.Library
}
// B2021-149: for procedure, only consider external transitions as invalid
private bool IsProcWithNoExternalTrans(ItemInfo ii, List<InvalidTransition> invalidTrans)
private bool IsProcWithNoExternalTrans(List<InvalidTransition> invalidTrans)
{
if (invalidTrans.Count == 0) return true;
foreach (InvalidTransition iT in invalidTrans)
@@ -394,6 +380,14 @@ namespace Volian.Controls.Library
if (_MyItemInfo != null)
{
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;
List<int> apples = cfg.MasterSlave_Applicability.GetFlags();
UnwireCheckboxes(true);
@@ -441,17 +435,16 @@ namespace Volian.Controls.Library
foreach (CheckBox cb in MyCheckBoxes.Values)
cb.Enabled = true;
}
private void AddViewMode(string name, string value)
{
AddViewMode(name, value, false);
}
private void AddViewMode(string name, string value, bool selected)
{
RadioButton rb = new RadioButton();
rb.BackColor = Color.Transparent;
rb.Text = name;
rb.Tag = value;
rb.Dock = DockStyle.Top;
RadioButton rb = new RadioButton
{
BackColor = Color.Transparent,
Text = name,
Tag = value,
Dock = DockStyle.Top
};
gpMode.Controls.Add(rb);
rb.BringToFront();
rb.Checked = selected;
@@ -476,7 +469,7 @@ namespace Volian.Controls.Library
// C2021 - 027: Procedure level PC/PC - handle procedure level too for viewing in editor
if (MyDisplayTabItem.MyStepTabPanel.SelectedItemInfo != null && MyDisplayTabItem.MyStepTabPanel.SelectedItemInfo.IsProcedure)
ei = MyDisplayTabItem.MyStepTabPanel.SelectedEditItem;
if (ei != null) ei.MyStepRTB.Focus();
ei?.MyStepRTB.Focus();
}
}
@@ -489,14 +482,15 @@ namespace Volian.Controls.Library
public DisplayApplicability()
{
InitializeComponent();
InitializeComponent(); //B2026-043 Fix "Set All At Level" button.
this.VisibleChanged += new EventHandler(DisplayApplicability_VisibleChanged);
}
void DisplayApplicability_VisibleChanged(object sender, EventArgs e)
{
MyItemInfo = MyItemInfo;
gpItem.Enabled = UserInfo.CanEdit(MyUserInfo,(MyItemInfo == null) ? null : MyItemInfo.MyDocVersion); //Can Change Applicability
gpItem.Enabled = ShowItemSelection && UserInfo.CanEdit(MyUserInfo,MyItemInfo?.MyDocVersion); //Can Change Applicability
}
}
}
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using JR.Utils.GUI.Forms;
@@ -18,8 +13,7 @@ namespace Volian.Controls.Library
public event ResetBookMarksInPROMSWindowsEvent ResetBookMarksInPROMSWindows;
private void OnResetBookMarksInPROMSWindows()
{
if (ResetBookMarksInPROMSWindows != null)
ResetBookMarksInPROMSWindows(this, new EventArgs());
ResetBookMarksInPROMSWindows?.Invoke(this, new EventArgs());
}
#endregion //delegates and Events
#region Properties
@@ -30,7 +24,6 @@ namespace Volian.Controls.Library
set { _MyBookMarks = value; }
}
private ItemInfo _CurItemInfo = null;
private bool _Initalizing = false;
private DisplayTabControl _MyDisplayTabControl;
public DisplayTabControl MyDisplayTabControl
{
@@ -53,24 +46,11 @@ namespace Volian.Controls.Library
_CurItemInfo = MyEditItem.MyItemInfo;
}
}
//private StepRTB _MyRTB;
//public StepRTB MyRTB
//{
// get { return _MyRTB; }
// set
// {
// if (value == null) return;
// if (_CurItemInfo != null && _CurItemInfo.ItemID == value.MyItemInfo.ItemID) return;
// _MyRTB = value;
// _CurItemInfo = MyRTB.MyItemInfo;
// }
//}
#endregion
#region Constructors
public DisplayBookMarks()
{
InitializeComponent();
//SetupBookMarks();
}
public void SetupBookMarks()
{
@@ -81,9 +61,6 @@ namespace Volian.Controls.Library
}
lbxBookMarks.SelectedValueChanged += new EventHandler(lbxBookMarks_SelectedValueChanged);
RefreshBookMarkData();
//btnPrevPos.Enabled = false;
//lbxBookMarks.Enabled = false;
//_PrevBookMark = null;
}
void _MyBookMarks_AfterRemove(object sender)
@@ -148,8 +125,7 @@ namespace Volian.Controls.Library
}
private void lbxBookMarks_Click(object sender, EventArgs e)
{
MostRecentItem itm = lbxBookMarks.SelectedValue as MostRecentItem;
if(itm != null)
if (lbxBookMarks.SelectedValue is MostRecentItem itm)
MyDisplayTabControl.OpenItem(itm.MyItemInfo);
}
#endregion
@@ -1,9 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
@@ -30,7 +26,7 @@ namespace Volian.Controls.Library
{
if (!DesignMode && _MainStepSection == null) // B2019-043 need to check if we are just saving changes to the user interface
{
foreach (SectionInfo si in MyItemInfo.MyProcedure.Sections)
foreach (SectionInfo si in MyItemInfo.MyProcedure.Sections.OfType<SectionInfo>())
{
SectionConfig sc = (SectionConfig)si.MyConfig;
if (sc.Section_OriginalSteps == "Y") _MainStepSection = si;
@@ -39,9 +35,6 @@ namespace Volian.Controls.Library
return _MainStepSection;
}
}
//private ItemInfo _firstStep;
//private ItemInfo _lastStep;
private bool _Initializing;
public DisplayFoldoutMaint()
{
@@ -56,11 +49,10 @@ namespace Volian.Controls.Library
if (MyItemInfo != null)
{
if (MyItemInfo.MyProcedure.Sections == null || MyItemInfo.MyProcedure.Sections.Count == 0) return;
_Initializing = true;
ProcedureInfo pi = MyItemInfo.MyProcedure;
listBoxFoldouts.Items.Clear();
lstCBSteps.Items.Clear();
foreach (SectionInfo si in pi.Sections)
foreach (SectionInfo si in pi.Sections.OfType<SectionInfo>())
if (si.DisplayText.ToUpper().StartsWith("FOLDOUT")) listBoxFoldouts.Items.Add(si);
if (listBoxFoldouts.Items.Count > 0) listBoxFoldouts.SelectedIndex = 0;
else
@@ -71,7 +63,6 @@ namespace Volian.Controls.Library
// find default step section & use its steps to fill in tree.
FillInSteps();
_Initializing = false;
}
}
private void FillInSteps()
@@ -80,8 +71,7 @@ namespace Volian.Controls.Library
ItemInfo startitm = MainStepSection.Steps != null && MainStepSection.Steps.Count > 0 ? MainStepSection.Steps[0] : null;
while (startitm != null)
{
StepConfig sc = startitm.MyConfig as StepConfig;
if (sc != null)
if (startitm.MyConfig is StepConfig sc)
{
if (sc.Step_FloatingFoldout == foldOutselected.ItemID)
{
@@ -102,8 +92,7 @@ namespace Volian.Controls.Library
for (int i = 0; i < lstCBSteps.Items.Count; i++)
{
ItemInfo startitm = lstCBSteps.Items[i] as ItemInfo;
StepConfig sc = startitm.MyConfig as StepConfig;
if (sc != null)
if (startitm.MyConfig is StepConfig sc)
lstCBSteps.SetItemChecked(itemInList, sc.Step_FloatingFoldout == foldOutselected.ItemID);
else
lstCBSteps.SetItemChecked(itemInList, false);
+11 -203
View File
@@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using System.IO;
@@ -21,29 +19,21 @@ namespace Volian.Controls.Library
public event DisplayHistoryReportEvent SummaryPrintRequest;
private void OnChronologyPrintRequest(DisplayHistoryReportEventArgs args)
{
if (ChronologyPrintRequest != null)
ChronologyPrintRequest(this, args);
ChronologyPrintRequest?.Invoke(this, args);
}
private void OnSummaryPrintRequest(DisplayHistoryReportEventArgs args)
{
if (SummaryPrintRequest != null)
SummaryPrintRequest(this, args);
SummaryPrintRequest?.Invoke(this, args);
}
public event DisplayHistoryEvent HistorySelectionChanged;
private void OnHistorySelectionChanged(DisplayHistoryEventArgs args)
{
if (HistorySelectionChanged != null)
HistorySelectionChanged(this, args);
}
public event ItemRestoredHandler ItemRestored;
private void OnItemRestored(ItemInfo restoredItemInfo)
{
if (ItemRestored != null) ItemRestored(restoredItemInfo);
HistorySelectionChanged?.Invoke(this, args);
}
public event AnnotationRestoredHandler AnnotationRestored;
private void OnAnnotationRestored(AnnotationInfo restoredAnnotationInfo, ItemInfo currentItem)
{
if (AnnotationRestored != null) AnnotationRestored(restoredAnnotationInfo, currentItem);
AnnotationRestored?.Invoke(restoredAnnotationInfo, currentItem);
}
#endregion
private ContentAuditInfoList _ChronologyAuditList;
@@ -176,10 +166,8 @@ namespace Volian.Controls.Library
SetRevDate(MyProcedureInfo.DTS);
else
{
DateTime revDate;
if (!DateTime.TryParse(cfg.Print_RevDate, out revDate)) revDate = MyProcedureInfo.ChangeBarDate; // DateTime.Now;
if (!DateTime.TryParse(cfg.Print_RevDate, out DateTime revDate)) revDate = MyProcedureInfo.ChangeBarDate; // DateTime.Now;
SetRevDate(revDate);
//SetRevDate(DateTime.Parse(cfg.Print_RevDate));
}
}
}
@@ -222,8 +210,7 @@ namespace Volian.Controls.Library
{
if (lbChanges.SelectedIndex > -1)
{
ContentAuditInfo cai = lbChanges.SelectedItem as ContentAuditInfo;
if (cai != null)
if (lbChanges.SelectedItem is ContentAuditInfo cai)
{
// The following line was incorrectly showing a message stating that the item was deleted when it was not.
//if (cai.DeleteStatus > 0 || (cai.DeleteStatus == 0 && cai.ActionWhen.Year == DateTime.MinValue.Year))
@@ -236,7 +223,7 @@ namespace Volian.Controls.Library
OnHistorySelectionChanged(new DisplayHistoryEventArgs(cai.ItemID));
}
// If the selected item is deleted display a message rather than crashing
catch (Exception ex)
catch (Exception)
{
FlexibleMessageBox.Show("This item has been deleted.", "Deleted Item", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
@@ -252,12 +239,10 @@ namespace Volian.Controls.Library
private void UpdateHistory()
{
this.Cursor = Cursors.WaitCursor;
//DateTime start = DateTime.Now;
//Console.WriteLine(start);
#region setup
btnRestore.Enabled = false;
myRTB.Clear();
//myRTB.LastRtf = string.Empty;
myVFG.Clear();
myPicBox.Image = null;
if (!tvAudits.IsDisposed) // fixes a crash that happend while debugging separate windows, have not been able to reproduce. left this IF check in just in case. - jsj 2-1-2018
@@ -269,8 +254,6 @@ namespace Volian.Controls.Library
}
MyItemInfo.RefreshItemAnnotations();
#endregion
//if (AnnotationOnly)
//{
#region annotation deleted
//annotation deleted by itemid
TreeNode annotationDeleted = null;
@@ -319,14 +302,11 @@ namespace Volian.Controls.Library
}
//end annotation change
#endregion
// return;
//}
#region content changes
//content changes
TreeNode contentHistory = null;
if (MyItemInfo == null) return;
ContentAuditInfoList cail = ContentAuditInfoList.Get(MyItemInfo.ContentID, MyItemInfo.MyProcedure.DTS);
// ContentAuditInfoList cail = ContentAuditInfoList.GetChronology(MyItemInfo.MyProcedure.ItemID, MyItemInfo.ItemID, false);
ContentInfo ci = ContentInfo.Get(MyItemInfo.ContentID);
foreach (ContentAuditInfo cai in cail)
{
@@ -378,155 +358,10 @@ namespace Volian.Controls.Library
#endregion
#region items
TreeNode deletedItems = null;
TreeNode previousItem = null;
TreeNode nextItem = null;
TreeNode procedurePart = null;
TreeNode sectionPart = null;
TreeNode cautionPart = null;
TreeNode notePart = null;
TreeNode rnoPart = null;
TreeNode stepPart = null;
TreeNode tablePart = null;
#endregion
ItemAuditInfoList iail = ItemAuditInfoList.Get(MyItemInfo.ItemID);
foreach (ItemAuditInfo iai in iail)
{
#region old style
// switch (iai.Level)
// {
// #region previous item
// case 0: //previous item
// {
// #region old style
// //if (previousItem == null)
// // previousItem = tvAudits.Nodes.Add("Deleted Previous Item"); //previousItem = tvAudits.Nodes.Add("Previous Item");
// //TreeNode tn = previousItem.Nodes.Add(iai.ToString());
// //tn.Tag = iai;
// #endregion
// #region new style
// if (deletedItems == null)
// deletedItems = tvAudits.Nodes.Add("Deleted Items");
// TreeNode tnn = deletedItems.Nodes.Add(iai.ToString());
// tnn.Tag = iai;
// #endregion
// break;
// }
// #endregion
// #region next item
// case 1: //next item
// {
// #region old style
// //if (nextItem == null)
// // nextItem = tvAudits.Nodes.Add("Deleted Next Item"); //nextItem = tvAudits.Nodes.Add("Next Item");
// //TreeNode tn = nextItem.Nodes.Add(iai.ToString());
// //tn.Tag = iai;
// #endregion
// #region new style
// if (deletedItems == null)
// deletedItems = tvAudits.Nodes.Add("Deleted Items");
// TreeNode tnn = deletedItems.Nodes.Add(iai.ToString());
// tnn.Tag = iai;
// #endregion
// break;
// }
// #endregion
// case 2: //parts
// {
// #region old style
// //PartAuditInfoList pail = null;
// //pail = PartAuditInfoList.GetByDeleteStatus(iai.DeleteStatus);
// //if (pail.Count == 0)
// // pail = PartAuditInfoList.GetByItemID(iai.ItemID);
// //foreach (PartAuditInfo pai in pail)
// //{
// // if (pai.ContentID == MyItemInfo.ContentID)
// // {
// // switch (pai.FromType)
// // {
// // #region procedure part
// // case 1: //procedures
// // {
// // if (procedurePart == null)
// // procedurePart = tvAudits.Nodes.Add("Deleted Procedures"); //procedurePart = tvAudits.Nodes.Add("Procedures");
// // TreeNode tn = procedurePart.Nodes.Add(iai.ToString());
// // tn.Tag = iai;
// // break;
// // }
// // #endregion
// // #region section part
// // case 2: //sections
// // {
// // if (sectionPart == null)
// // sectionPart = tvAudits.Nodes.Add("Deleted Sections"); //sectionPart = tvAudits.Nodes.Add("Sections");
// // TreeNode tn = sectionPart.Nodes.Add(iai.ToString());
// // tn.Tag = iai;
// // break;
// // }
// // #endregion
// // #region caution part
// // case 3: //cautions
// // {
// // if (cautionPart == null)
// // cautionPart = tvAudits.Nodes.Add("Deleted Cautions"); //cautionPart = tvAudits.Nodes.Add("Cautions");
// // TreeNode tn = cautionPart.Nodes.Add(iai.ToString());
// // tn.Tag = iai;
// // break;
// // }
// // #endregion
// // #region note part
// // case 4: //notes
// // {
// // if (notePart == null)
// // notePart = tvAudits.Nodes.Add("Deleted Notes"); //notePart = tvAudits.Nodes.Add("Notes");
// // TreeNode tn = notePart.Nodes.Add(iai.ToString());
// // tn.Tag = iai;
// // break;
// // }
// // #endregion
// // #region rno part
// // case 5: //rnos
// // {
// // if (rnoPart == null)
// // rnoPart = tvAudits.Nodes.Add("Deleted RNOs"); //rnoPart = tvAudits.Nodes.Add("RNOs");
// // TreeNode tn = rnoPart.Nodes.Add(iai.ToString());
// // tn.Tag = iai;
// // break;
// // }
// // #endregion
// // #region step part
// // case 6: //steps
// // {
// // if (stepPart == null)
// // stepPart = tvAudits.Nodes.Add("Deleted Steps"); //stepPart = tvAudits.Nodes.Add("Steps");
// // TreeNode tn = stepPart.Nodes.Add(iai.ToString());
// // tn.Tag = iai;
// // break;
// // }
// // #endregion
// // #region table part
// // case 7: //tables
// // {
// // if (tablePart == null)
// // tablePart = tvAudits.Nodes.Add("Deleted Tables"); //tablePart = tvAudits.Nodes.Add("Tables");
// // TreeNode tn = tablePart.Nodes.Add(iai.ToString());
// // tn.Tag = iai;
// // break;
// // }
// // #endregion
// // }
// // }
// //}
// #endregion
// #region new style
// if (deletedItems == null)
// deletedItems = tvAudits.Nodes.Add("Deleted Items");
// TreeNode tnn = deletedItems.Nodes.Add(iai.ToString());
// tnn.Tag = iai;
// #endregion
// break;
// }
//}
#endregion
#region new style
// B2023-117 if DeleteStatus is zero,don't try to get Audit Info List
if (iai.DeleteStatus == 0) continue;
@@ -552,7 +387,7 @@ namespace Volian.Controls.Library
}
}
}
TreeNode tnn = deletedItems.Nodes.Add(iai.ToString() + "; Reason: " + strR);
TreeNode tnn = deletedItems.Nodes.Add($"{iai}; Reason: {strR}");
tnn.Tag = iai;
#endregion
}
@@ -572,10 +407,8 @@ namespace Volian.Controls.Library
}
private void WalkProcedure()
{
//return;
this.ParentForm.Cursor = Cursors.WaitCursor;
Application.DoEvents();
//DateTime start = DateTime.Now;
//Console.WriteLine(start);
lbChanges.Items.Clear();
if (MyProcedureInfo == null)
@@ -611,7 +444,7 @@ namespace Volian.Controls.Library
// in the list box and should not be because some MyRevDate's did not have time included.
if (CompareDateOrDateTime(cai.DTS, MyRevDate) || cai.ActionWhen > MyRevDate)
{
string itemTitle = FixPath(cai.Path);
_ = FixPath(cai.Path);
lbChanges.Items.Add(cai);
}
}
@@ -630,7 +463,7 @@ namespace Volian.Controls.Library
{
ItemInfo iii = aai.MyItemInfo;
if (iii != null)
stepnum = FixPath(iii.SearchPath);
_ = FixPath(iii.SearchPath);
}
if (aai.DTS > MyRevDate)
lbChanges.Items.Add(aai);
@@ -650,25 +483,13 @@ namespace Volian.Controls.Library
private void btnViewChronologyReport_Click(object sender, EventArgs e)
{
RefreshList();
//if (lbChanges.Items.Count > 0)
//{
//jcb added 20120425 to suppress annotations in report
//jcb commented out 20130409 per bug C2012-022
//_AnnotationList = AnnotationAuditInfoList.GetChronology(0, 0, MyProcedureInfo.ChangeBarDate);
//added setting selected slave in order for reports to replace unit number,etc jcb 20101010
MyItemInfo.MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = ApplDisplayMode;
// OnChronologyPrintRequest(new DisplayHistoryReportEventArgs(Volian.Base.Library.VlnSettings.TemporaryFolder + @"\MyChronology.pdf", MyItemInfo.MyProcedure, _ChronologyAuditList, _AnnotationList));
OnChronologyPrintRequest(new DisplayHistoryReportEventArgs(string.Format(@"{0}\{1} Chronology of Changes.pdf", Volian.Base.Library.VlnSettings.TemporaryFolder, MyItemInfo.MyProcedure.PDFNumber), MyItemInfo.MyProcedure, _ChronologyAuditList, _AnnotationList));
//}
}
private void btnViewSummaryReport_Click(object sender, EventArgs e)
{
RefreshList();
//if (lbChanges.Items.Count > 0)
//{
//jcb added 20120425 to suppress annotations in report
//jcb commented out 20130409 per bug C2012-022
//_AnnotationList = AnnotationAuditInfoList.GetChronology(0, 0, MyProcedureInfo.ChangeBarDate);
//added setting selected slave in order for reports to replace unit number,etc jcb 20101010
MyItemInfo.MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = ApplDisplayMode;
@@ -676,7 +497,6 @@ namespace Volian.Controls.Library
//C2024- 038 - Summary of Changes report generation enhancements
//check if need to modify
// _SummaryAuditList
if (DT_SumAsOf.Checked)
dhr.AuditList = FilterSummaryByDate(_SummaryAuditList, DT_SumAsOf.Value);
else
@@ -685,7 +505,6 @@ namespace Volian.Controls.Library
//C2024- 038 - Summary of Changes report generation enhancements
// if Exclude Annotations Checked
// send an empty list instead of
//_AnnotationList
if (cbSumExcludeAnn.Checked)
dhr.AnnotationList = new AnnotationAuditInfoList(null);
else if (DT_SumAsOf.Checked)
@@ -799,11 +618,7 @@ namespace Volian.Controls.Library
if (myRoFst != null) myRoFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
ii = MyItemInfo.RestoreItem(iai, myRoFst);
if (myRoFst != null) myRoFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
//_MyEditItem.AddChild((E_FromType)fromtype, contenttype);
//ii.ItemParts[0].FromType
//ii.MyContent.Type
EditItem nextItem = MyEditItem.GetNextItem((E_FromType)ii.ItemParts[0].FromType, ii);
//MyEditItem.AddChild(ii.MyContent.Text, (E_FromType)ii.ItemParts[0].FromType, (int)ii.MyContent.Type, null);
if (ii.IsStep)
ii = StepInfo.Get(ii.ItemID);
else if (ii.IsSection)
@@ -1051,10 +866,6 @@ namespace Volian.Controls.Library
myRTB.Visible = true;
myRTB.BringToFront();
myVFG.Visible = false;
// myRTB.Font = new Font("Arial", 12, FontStyle.Regular);
// myRTB.Text = cai.Text;
//myRTB.SetupRichText("bozo", MyItemInfo.FormatStepData == null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font : MyItemInfo.FormatStepData.Font);
//myRTB.LastRtf = string.Empty;
myRTB.SetupRichText(cai.Text, MyItemInfo.FormatStepData == null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font : MyItemInfo.FormatStepData.Font);
}
}
@@ -1067,8 +878,6 @@ namespace Volian.Controls.Library
{
if (cai.DeleteStatus == iai.DeleteStatus)
{
//myRTB.Font = new Font("Arial", 12, FontStyle.Regular);
//myRTB.Text = cai.Text;
myRTB.SetupRichText(cai.Text, MyItemInfo.FormatStepData == null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font : MyItemInfo.FormatStepData.Font);
}
}
@@ -1079,7 +888,6 @@ namespace Volian.Controls.Library
AnnotationAuditInfo iai = tn.Tag as AnnotationAuditInfo;
myRTB.Font = new Font("Arial", 12, FontStyle.Regular);
myRTB.Rtf = iai.RtfText;
//myRTB.Rtf = iai.RtfText;
}
}
else
@@ -1121,7 +929,7 @@ namespace Volian.Controls.Library
myTimer.Enabled = true;
}
// B2019-161 When tracking timing time this action
private static VolianTimer _TimeActivity = new VolianTimer("DisplayHistory myTimer_Tick", 974);
private static readonly VolianTimer _TimeActivity = new VolianTimer("DisplayHistory myTimer_Tick", 974);
private void myTimer_Tick(object sender, System.EventArgs e)
{
+12 -37
View File
@@ -1,14 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO;
using AT.STO.UI.Win;
using VEPROMS.CSLA.Library;
namespace Volian.Controls.Library
@@ -30,7 +23,7 @@ namespace Volian.Controls.Library
get { return _LibDocList; }
set { _LibDocList = value; }
}
private Color saveGroupPanelUsages;
private readonly Color saveGroupPanelUsages;
#endregion
#region Constructors
public DisplayLibDocs()
@@ -76,8 +69,7 @@ namespace Volian.Controls.Library
public event DisplayLibDocEvent PrintRequest;
private void OnPrintRequest(DisplayLibDocEventArgs args)
{
if (PrintRequest != null)
PrintRequest(this, args);
PrintRequest?.Invoke(this, args);
}
private void listBoxLibDocs_Click(object sender, EventArgs e)
@@ -125,9 +117,9 @@ namespace Volian.Controls.Library
foreach (ItemInfo ii in dicnt.LibraryDocumentUsageList)
{
if (ii.MyDocVersion != null)
listBoxUsages.Items.Add(ii.MyProcedure.ToString() + " - " + ii.DisplayNumber + " " + ii.DisplayText);
listBoxUsages.Items.Add($"{ii.MyProcedure} - {ii.DisplayNumber} {ii.DisplayText}");
}
btnPrint.Enabled = listBoxLibDocs.Items.Count > 0 ? true : false;
btnPrint.Enabled = listBoxLibDocs.Items.Count > 0;
}
private void btnDelLibDoc_Click(object sender, EventArgs e)
{
@@ -139,7 +131,7 @@ namespace Volian.Controls.Library
}
catch (Exception ex)
{
Console.WriteLine("error deleting doc = " + ex.Message);
Console.WriteLine($"error deleting doc = {ex.Message}");
}
LibDocListFillIn(_DisplayTabControl);
}
@@ -203,12 +195,13 @@ namespace Volian.Controls.Library
private void btnImpLibDoc_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "c:\\";
openFileDialog1.Filter = "Word files (*.doc;*.rtf;*.docx)|*.doc;*.rtf;*.docx|All files (*.*)|*.*";
openFileDialog1.FilterIndex = 0;
openFileDialog1.RestoreDirectory = true;
OpenFileDialog openFileDialog1 = new OpenFileDialog
{
InitialDirectory = "c:\\",
Filter = "Word files (*.doc;*.rtf;*.docx)|*.doc;*.rtf;*.docx|All files (*.*)|*.*",
FilterIndex = 0,
RestoreDirectory = true
};
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
@@ -352,24 +345,6 @@ namespace Volian.Controls.Library
get { return _PaperSize; }
set { _PaperSize = value; }
}
//private string _SearchString = null;
//public string SearchString
//{
// get { return _SearchString; }
// set { _SearchString = value; }
//}
//private string _TypesSelected;
//public string TypesSelected
//{
// get { return _TypesSelected; }
// set { _TypesSelected = value; }
//}
//private ICollection<ItemInfo> _MyItemInfoList;
//public ICollection<ItemInfo> MyItemInfoList
//{
// get { return _MyItemInfoList; }
// set { _MyItemInfoList = value; }
//}
public DisplayLibDocEventArgs(string reportTitle, DocumentInfoList libDocList, string paperSize)
{
_ReportTitle = reportTitle;
+169 -89
View File
@@ -2,12 +2,10 @@ using DevComponents.DotNetBar;
using JR.Utils.GUI.Forms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
@@ -18,29 +16,22 @@ namespace Volian.Controls.Library
{
public partial class DisplayRO : UserControl
{
#region Log4Net
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
#region Fields
private const string DummyNodeText = "VLN_DUMMY_NODE";
private const int MaxNumSearchRecords = 1000;
// B2019-161 When tracking timing time this action
private static VolianTimer _timeActivity = new VolianTimer("DisplayRO MyRTB_SelectionChanged", 117);
private static Regex _regExGetNumber = new Regex(@"^ *[+-]?[.,0-9/]+(E[+-]?[0-9]+)?");
private static readonly VolianTimer _timeActivity = new VolianTimer("DisplayRO MyRTB_SelectionChanged", 117);
private static readonly Regex _regExGetNumber = new Regex(@"^ *[+-]?[.,0-9/]+(E[+-]?[0-9]+)?");
private static UserInfo _myUserInfo = null;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Timer Not ReadOnly")]
private Timer _searchTimer = null;
private string _lastSearchValue = string.Empty;
private ProgressBarItem _progressBar;
private DisplayTabControl _tabControl;
private StepRTB _myRTB;
private string _selectedRoidBeforeRoEditor = null;
private ROFstInfo _myROFST;
private DocVersionInfo _docVersionInfo;
@@ -52,12 +43,9 @@ namespace Volian.Controls.Library
private int? _currDocVersionID = null;
private RoUsageInfo _curROLink;
private E_ROValueType _curROTypeFilter = E_ROValueType.All;
private ROFSTLookup.rochild selectedChld;
private DisplayTags displayTags;
#endregion
@@ -89,6 +77,13 @@ namespace Volian.Controls.Library
(_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
private bool changedDocVersion = false;
//B2026-057 PROMS Crash when Closing Tabs
// this flag will prevent multiple asking in a row if should updste ROs
private static bool askedAboutchangedDocVersion = false;
public ROFstInfo MyROFST
{
get { return _myROFST; }
@@ -128,6 +123,13 @@ namespace Volian.Controls.Library
// B2022-135 Submitted for Admin Tools (Check RO Links tool)
if (_docVersionInfo == null || _docVersionInfo != value || _docVersionInfo.VersionID != value.VersionID)
{
//Set flag for modified the docversion - should check for new ROs
if (_docVersionInfo?.VersionID != value?.VersionID)
{
changedDocVersion = true;
askedAboutchangedDocVersion = false;
}
_docVersionInfo = value;
if (_myRTB != null && (_docVersionInfo == null || _docVersionInfo.VersionID != _myRTB.MyDVI.VersionID))
@@ -201,6 +203,10 @@ namespace Volian.Controls.Library
// B2022-098: [JPR] ROs not being resolved in Word Sections
CurROLink = 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)
{
@@ -251,6 +257,8 @@ namespace Volian.Controls.Library
set { _myUserInfo = value; }
}
public SessionInfo MySessionInfo { get; set; }
#endregion
#region Constructors
@@ -267,57 +275,73 @@ namespace Volian.Controls.Library
if (_searchTimer == null)
{
_searchTimer = new Timer();
_searchTimer.Interval = 1000;
_searchTimer = new Timer
{
Interval = 1000
};
_searchTimer.Tick += new EventHandler(SelectionTimer_Tick);
_searchTimer.Stop();
}
// Initialize the DisplayTags object
displayTags = new DisplayTags();
_ = new DisplayTags();
_progressBar = null;
}
#endregion
#region Event Handlers
#region (Progress Bar)
private void ProgressBar_Initialize(int max, string desc)
private string InitialProgressBarMessage
{
if (_progressBar != null)
set
{
_progressBar.Maximum = max;
_progressBar.Text = desc;
_progressBar.TextVisible = true;
if (ProgressBar == null) return;
ProgressBar.Value = 0;
ProgressBar.Maximum = 100;
ProgressBar.Text = value;
Application.DoEvents();
}
}
private void ProgressBar_SetValue(int curval)
private string FinalProgressBarMessage
{
if (_progressBar != null)
set
{
_progressBar.Value = curval;
if (ProgressBar == null) return;
ProgressBar.Text = value;
ProgressBar.Maximum = 100;
ProgressBar.Value = 100;
Application.DoEvents();
}
}
private void ProgressBar_Clear()
private void DoProgressBarRefresh(int value, int max, string text)
{
if (_progressBar != null)
{
_progressBar.Text = string.Empty;
_progressBar.Maximum = 0;
_progressBar.Value = 0;
}
if (ProgressBar == null) return;
ProgressBar.Maximum = max;
ProgressBar.Value = value;
ProgressBar.Text = text;
Application.DoEvents();
}
#endregion
#region (RTB)
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
// 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
public void ClearRTB()
{
_myRTB = null;
CurROLink = null;
_savCurROLink = null;
}
public void MyRTB_LinkChanged(object sender, StepPanelLinkEventArgs args)
{
CurROLink = null;
@@ -372,9 +396,8 @@ namespace Volian.Controls.Library
{
// B2022-088: [JPR] Find Doc Ro button not working in Word Sections
// B2022-098: [JPR] ROs not being resolved in Word Sections
if (e.Node.Tag is ROFSTLookup.rochild)
if (e.Node.Tag is ROFSTLookup.rochild chld)
{
ROFSTLookup.rochild chld = (ROFSTLookup.rochild)e.Node.Tag;
selectedChld = chld;
if (chld.value != null)
@@ -480,7 +503,7 @@ namespace Volian.Controls.Library
}
else if (selectedChld.type == 4) // x/y plot
{
frmXYPlot plot = new frmXYPlot(selectedChld.appid + " - " + selectedChld.title, selectedChld.value);
frmXYPlot plot = new frmXYPlot($"{selectedChld.appid} - {selectedChld.title}", selectedChld.value);
plot.Show();
}
}
@@ -494,7 +517,7 @@ namespace Volian.Controls.Library
private void btnFindDocRO_Click(object sender, EventArgs e)
{
// C2016-044: support click of the 'Find Doc RO' button:
DisplayTabItem dti = (_tabControl == null) ? null : _tabControl.SelectedDisplayTabItem;
DisplayTabItem dti = _tabControl?.SelectedDisplayTabItem;
if (dti != null && dti.MyDSOTabPanel != null)
{
@@ -534,15 +557,12 @@ namespace Volian.Controls.Library
string roapp = Volian.Base.Library.ExeInfo.GetROEditorPath(); // get the path to the RO Editor Executable
object obj = tvROFST.SelectedNode.Tag;
if (obj is ROFSTLookup.rochild)
if (obj is ROFSTLookup.rochild roch)
{
ROFSTLookup.rochild roch = (ROFSTLookup.rochild)obj;
_selectedRoidBeforeRoEditor = roch.roid;
string args = "\"" + MyROFST.MyRODb.FolderPath + "\" " + roch.roid.Substring(0,12).ToLower();
string args = $"\"{MyROFST.MyRODb.FolderPath}\" {roch.roid.Substring(0, 12).ToLower()}";
// C2017-003: ro data in sql server, check for sql connection string
if (MyROFST.MyRODb.DBConnectionString != "cstring") args = args + " \"" + MyROFST.MyRODb.DBConnectionString + "\"";
if (MyROFST.MyRODb.DBConnectionString != "cstring") args = $"{args} \"{MyROFST.MyRODb.DBConnectionString}\"";
// C2021-026 pass in Parent/Child information (list of the children)
// B2022-019 look at all DocVersions to find ParentChild information
@@ -556,7 +576,7 @@ namespace Volian.Controls.Library
DocVersionConfig dvc = dvi.DocVersionConfig;
if (dvc != null && dvc.Unit_Name != "" && dvc.Unit_Count > 1) // B2021-089 only pass in applicability info if defined for more than one unit
{
args += " \"PC=" + dvc.Unit_Name + "\"";
args += $" \"PC={dvc.Unit_Name}\"";
break;
}
}
@@ -575,21 +595,81 @@ namespace Volian.Controls.Library
#endregion
#region (ROUpdate)
public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
{
return VlnFlexGrid.ROTableUpdate(sender, args);
}
#endregion
#endregion
#region Public Methods
public void LoadTree(bool forceReload = false)
//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 (MyROFST == null)
{
tvROFST.Nodes.Clear();
lbFound.Visible = false;
return;
return updatedROs;
}
if (forceReload || RoTreeNeedsReloaded || tvROFST.Nodes == null || tvROFST.Nodes.Count <= 0)
if (changedDocVersion || forceReload || RoTreeNeedsReloaded || tvROFST.Nodes == null || tvROFST.Nodes.Count <= 0)
{
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
//check if newer data - if there is, check if user wants to update data
int fstid = MyROFSTLookup.GetNewerFSTID();
int origfstid = MyROFSTLookup.RofstID;
if (_docVersionInfo != null && fstid != -1 && fstid != MyROFSTLookup.RofstID)
{
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 && !askedAboutchangedDocVersion && !ROWorkingDraftAsk.ContainsWorkingDraft(_docVersionInfo.VersionID))
{
if (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;
askedAboutchangedDocVersion = false;
ROWorkingDraftAsk.ClearWorkingDrafts();
}
else
{
askedAboutchangedDocVersion = true;
if (!ROWorkingDraftAsk.ContainsWorkingDraft(_docVersionInfo.VersionID))
ROWorkingDraftAsk.AddWorkingDrafts(_docVersionInfo.VersionID);
}
}
}
//B2025-008
//in cases where a RO table is clicked on
//it will refresh the list
@@ -597,23 +677,28 @@ namespace Volian.Controls.Library
//so can go to it after the refresh
string tmpROID = CurROLink?.ROID;
ROFSTLookup.rodbi[] dbs = MyROFSTLookup.GetRODatabaseList(true);
ROFSTLookup.rodbi[] dbs = MyROFSTLookup?.GetRODatabaseList(true);
// 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
// the clear nodes code below has to be after the GetRODatabaseList database call because of races conditions in the code
tvROFST.Nodes.Clear();
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++)
{
ROFSTLookup.rodbi db = dbs[i];
TreeNode tn = new TreeNode(db.dbiTitle);
tn.Tag = db;
TreeNode tn = new TreeNode(db.dbiTitle)
{
Tag = db
};
tvROFST.Nodes.Add(tn);
AddDummyGroup(db, tn);
}
}
_currRofstID = (IsRofstValid) ? (int?)_myROFST.ROFstID : null;
_currDocVersionID = null;
@@ -621,6 +706,12 @@ namespace Volian.Controls.Library
if(_docVersionInfo != null) _currDocVersionID = (int?)_docVersionInfo.VersionID;
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();
@@ -628,7 +719,7 @@ namespace Volian.Controls.Library
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
if (unitInfoNode == null)
if (unitInfoNode == null && MyROFSTLookup != null)
{
TreeNode tnn = tvROFST.Nodes.Add("Unit Information");
TreeNode cn = null;
@@ -671,7 +762,7 @@ namespace Volian.Controls.Library
tvROFST.Nodes.Remove(unitInfoNode);
}
_curROTypeFilter = _roTypeFilter;
return updatedROs;
}
public void SetFindDocROButton(bool enabled)
@@ -686,11 +777,9 @@ namespace Volian.Controls.Library
if (match1.Success && !match1.Value.Contains("/") && match2.Success && !match2.Value.Contains("/")) // Compare the numeric value?
{
double dbl1;
double dbl2;
//B2017-232 changed from Parse to TryParse. AEP had figure title that had a number containing two periods which caused Parse to error?
if (double.TryParse(match1.ToString(), out dbl1) && double.TryParse(match2.ToString(), out dbl2))
if (double.TryParse(match1.ToString(), out double dbl1) && double.TryParse(match2.ToString(), out double dbl2))
{
if (dbl1 != dbl2) //B2021-144 if the numerical is identical default to the string comparison?
return dbl1 > dbl2;
@@ -713,15 +802,13 @@ namespace Volian.Controls.Library
//object tag = tn.Tag;
ROFSTLookup.rochild[] children = null;
if (tn.Tag is ROFSTLookup.rodbi)
if (tn.Tag is ROFSTLookup.rodbi db)
{
ROFSTLookup.rodbi db = (ROFSTLookup.rodbi)tn.Tag;
MyROFSTLookup.LoadChildren(ref db);
children = db.children;
}
else if (tn.Tag is ROFSTLookup.rochild)
else if (tn.Tag is ROFSTLookup.rochild ch)
{
ROFSTLookup.rochild ch = (ROFSTLookup.rochild)tn.Tag;
MyROFSTLookup.LoadChildren(ref ch);
children = ch.children;
}
@@ -760,8 +847,10 @@ namespace Volian.Controls.Library
if (roc.value == null)
{
tmp = new TreeNode(roc.title);
tmp.Tag = roc;
tmp = new TreeNode(roc.title)
{
Tag = roc
};
int index = FindIndex(tn.Nodes, tmp.Text);
tn.Nodes.Insert(index, tmp);
@@ -772,8 +861,10 @@ namespace Volian.Controls.Library
else
{
tmp = new TreeNode(roc.title);
tmp.Tag = roc;
tmp = new TreeNode(roc.title)
{
Tag = roc
};
if (tmp.Text.IndexOf("\\u") > -1) // RO Editor add symbols C2022 - 003
{
@@ -808,7 +899,7 @@ namespace Volian.Controls.Library
// Clean-up Roid if necessary
roid = ROFSTLookup.FormatRoidKey(roid);
bool multValSel = (roid.Length == 16) ? true : false;
bool multValSel = (roid.Length == 16);
string db = roid.Substring(0, 4);
int dbiID = MyROFSTLookup.GetRODatabaseTitleIndex(roid);
@@ -837,7 +928,7 @@ namespace Volian.Controls.Library
if (roid.StartsWith("FFFF"))
dbNode = tvROFST.Nodes.Cast<TreeNode>().Where(x => (x.Tag.Equals(null)) && (x.Text.Equals("Unit Information"))).FirstOrDefault();
else
dbNode = tvROFST.Nodes.Cast<TreeNode>().Where(x => (x.Tag is ROFSTLookup.rodbi) && ((ROFSTLookup.rodbi)x.Tag).dbiID == dbiID).FirstOrDefault();
dbNode = tvROFST.Nodes.Cast<TreeNode>().Where(x => (x.Tag is ROFSTLookup.rodbi rodbi) && rodbi.dbiID == dbiID).FirstOrDefault();
if (dbNode != null)
{
@@ -853,7 +944,7 @@ namespace Volian.Controls.Library
LoadChildren(tnExpand);
tnExpand.Expand();
TreeNode chldNode = tnExpand.Nodes.Cast<TreeNode>().Where(x => (x.Tag is ROFSTLookup.rochild) && ((ROFSTLookup.rochild)x.Tag).ID == citm).FirstOrDefault();
TreeNode chldNode = tnExpand.Nodes.Cast<TreeNode>().FirstOrDefault(x => (x.Tag is ROFSTLookup.rochild rochild) && rochild.ID == citm);
if (chldNode != null)
{
tnExpand = chldNode;
@@ -905,10 +996,9 @@ namespace Volian.Controls.Library
Object obj = tvROFST.SelectedNode.Tag;
if (obj is ROFSTLookup.rochild)
if (obj is ROFSTLookup.rochild roc)
{
ROFSTLookup.rochild roc = (ROFSTLookup.rochild)obj;
DisplayTabItem dti = TabControl.SelectedDisplayTabItem; //.OpenItem(_ItemInfo); // open the corresponding procedure text
DisplayTabItem dti = TabControl.SelectedDisplayTabItem;
if (dti.MyDSOTabPanel != null) // A Word Document tab is the active tab
{
@@ -916,10 +1006,7 @@ namespace Volian.Controls.Library
// Insert the RO text at the current cursor position in the word document
// NOTE: assuming any type of RO can be put in an Accessory (MSWord) Document
if (dti.MyDSOTabPanel != null)
{
dti.MyDSOTabPanel.InsertText(accPageID);
}
dti.MyDSOTabPanel?.InsertText(accPageID);
}
else if (MyRTB != null) // a Procedure Steps section tab is active
{
@@ -1021,12 +1108,9 @@ namespace Volian.Controls.Library
string roapp = Volian.Base.Library.ExeInfo.GetROEditorPath(); // get the path to the RO Editor Executable
Object obj = tvROFST.SelectedNode.Tag;
if (obj is ROFSTLookup.rochild)
if (obj is ROFSTLookup.rochild roc)
{
ROFSTLookup.rochild roc = (ROFSTLookup.rochild)obj;
_selectedRoidBeforeRoEditor = roc.roid;
string args = "\"" + _myROFST.MyRODb.FolderPath + "\" " + roc.roid.ToLower();
string args = $"\"{_myROFST.MyRODb.FolderPath}\" {roc.roid.ToLower()}";
if (!Directory.Exists(_myROFST.MyRODb.FolderPath))
{
@@ -1035,7 +1119,7 @@ namespace Volian.Controls.Library
}
// C2017-003: ro data in sql server, check for sql connection string
if (_myROFST.MyRODb.DBConnectionString != "cstring") args = args + " \"" + _myROFST.MyRODb.DBConnectionString + "\"";
if (_myROFST.MyRODb.DBConnectionString != "cstring") args = $"{args} \"{_myROFST.MyRODb.DBConnectionString}\"";
// C2021-026 pass in Parent/Child information (list of the children)
// B2022-019 look at all DocVersions to find ParentChild information
@@ -1049,7 +1133,7 @@ namespace Volian.Controls.Library
if (jdvc != null && jdvc.Unit_Name != "" && jdvc.Unit_Count > 1) // B2021-089 only pass in applicability info if defined for more than one unit
{
args += " \"PC=" + jdvc.Unit_Name + "\"";
args += $" \"PC={jdvc.Unit_Name}\"";
break;
}
}
@@ -1093,7 +1177,6 @@ namespace Volian.Controls.Library
lbFound.DataSource = null;
lbFound.Visible = false;
_lastSearchValue = searchValue;
}
else if (searchValue.Contains("#Link:ReferencedObject")) // RO Link (roid)
{
@@ -1115,7 +1198,6 @@ namespace Volian.Controls.Library
lbFound.DataSource = null;
lbFound.Visible = false;
_lastSearchValue = searchValue;
}
else // if (searchValue != _lastSearchValue)
{
@@ -1144,12 +1226,10 @@ namespace Volian.Controls.Library
lbFound.Visible = false;
}
_lastSearchValue = searchValue;
}
}
else
{
_lastSearchValue = string.Empty;
lbFound.DataSource = null;
lbFound.Visible = false;
}
+140 -253
View File
@@ -1,15 +1,11 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.IO;
using VEPROMS.CSLA.Library;
using DevComponents.DotNetBar;
using DevComponents.AdvTree;
using System.Text.RegularExpressions;
using Volian.Base.Library;
@@ -23,8 +19,7 @@ namespace Volian.Controls.Library
private void OnPrintRequest(DisplayReportsEventArgs args)
{
if (PrintRequest != null)
PrintRequest(this, args);
PrintRequest?.Invoke(this, args);
}
#endregion
@@ -34,16 +29,17 @@ namespace Volian.Controls.Library
// B2022-026 RO Memeory reduction logic change - defined dummy node text variable to ensure consistancy
private const string DummyNodeText = "VLN_DUMMY_NODE";
#pragma warning disable IDE0044 // Add readonly modifier
private List<DocVersionInfo> lstCheckedDocVersions = new List<DocVersionInfo>();
private List<object> lstCheckedROs = new List<object>();
private List<ItemInfoList> lstReportResults = new List<ItemInfoList>();
private List<string> ROList = new List<string>();
private List<object> lstROObj = new List<object>();
#pragma warning restore IDE0044 // Add readonly modifier
private int _MyRODbID;
private DocVersionInfo _MyDocVersion;
private ROFSTLookup _MyROFSTLookup;
private ItemInfoList _ReportResult;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private Dictionary<string, string> AccIDROIDdic = new Dictionary<string, string>();
static int blankKeyCnt = 0;
@@ -104,10 +100,8 @@ namespace Volian.Controls.Library
set
{
if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface
//if (!Visible) return; // don't reset anything if the form is invisible.
_MyROFSTLookup = value; // define the tree nodes based on this rofst
advTreeROFillIn(true);
//LoadROComboTree();
advTreeROFillIn();
}
}
@@ -154,7 +148,7 @@ namespace Volian.Controls.Library
tabROReports.PerformClick();
}
public void advTreeROFillIn(bool blSeachTabClicked)
public void advTreeROFillIn()
{
DevComponents.AdvTree.Node topnode = null;
advTreeRO.Nodes.Clear();
@@ -168,10 +162,12 @@ namespace Volian.Controls.Library
advTreeRO.AfterCollapse -= new AdvTreeNodeEventHandler(advTreeRO_AfterExpandorCollapse);
advTreeRO.AfterCollapse += new AdvTreeNodeEventHandler(advTreeRO_AfterExpandorCollapse);
topnode = new DevComponents.AdvTree.Node();
topnode.Text = "All Referenced Objects";
topnode.Tag = null;
topnode.CheckBoxVisible = true;
topnode = new DevComponents.AdvTree.Node
{
Text = "All Referenced Objects",
Tag = null,
CheckBoxVisible = true
};
advTreeRO.Nodes.Add(topnode);
@@ -194,7 +190,7 @@ namespace Volian.Controls.Library
}
}
public void advTreeProcSetsFillIn(bool blSeachTabClicked)
public void advTreeProcSetsFillIn()
{
DevComponents.AdvTree.Node topnode = null;
int cntnd = 0;
@@ -203,40 +199,28 @@ namespace Volian.Controls.Library
int fiCount = fi.ChildFolderCount;
advTreeProcSets.Nodes.Clear();
lstCheckedDocVersions.Clear();
topnode = new DevComponents.AdvTree.Node();
topnode.Text = "Available Procedure Sets";
topnode.Tag = fi;
topnode = new DevComponents.AdvTree.Node
{
Text = "Available Procedure Sets",
Tag = fi
};
advTreeProcSets.Nodes.Add(topnode);
//advTreeProcSets.AfterNodeInsert += new TreeNodeCollectionEventHandler(advTreeProcSets_AfterNodeInsert);
foreach (FolderInfo fic in fi.SortedChildFolders)
{
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
newnode.Text = fic.ToString();
newnode.Tag = fic;
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
{
Text = fic.ToString(),
Tag = fic
};
//int tmp;
//if (topnode == null)
//{
// newnode.Text = "Available Procedure Sets";
// tmp = advTreeProcSets.Nodes.Add(newnode);
// topnode = newnode;
//}
//else
//{
// newnode.Selectable = true;
// newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
// newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
// newnode.CheckBoxThreeState = false;
// newnode.CheckBoxVisible = true;
// tmp = topnode.Nodes.Add(newnode);
//}
cntnd++;
if (fic.ChildFolderCount > 0 || fic.FolderDocVersionCount > 0) // allow for '+' for tree expansion
{
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node();
tnt.Text = DummyNodeText;
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node
{
Text = DummyNodeText
};
newnode.Nodes.Add(tnt);
topnode.Nodes.Add(newnode);
}
@@ -247,8 +231,10 @@ namespace Volian.Controls.Library
{
cntnd++;
fi = Mydocversion.MyFolder;
topnode = new DevComponents.AdvTree.Node();
topnode.Text = fi.ToString();
topnode = new DevComponents.AdvTree.Node
{
Text = fi.ToString()
};
advTreeProcSets.Nodes.Add(topnode);
topnode.Tag = fi;
}
@@ -262,8 +248,6 @@ namespace Volian.Controls.Library
else
advTreeProcSets.Nodes[0].SelectedCell = advTreeProcSets.Nodes[0].Cells[0]; // select the first node - fixes cosmetic problem
//if (blSeachTabClicked)
// cbxTextSearchText.Focus(); // set initial focus to enter search text
}
#endregion
@@ -272,12 +256,8 @@ namespace Volian.Controls.Library
private void GenerateAccIDSortedROList()
{
//Dictionary<string, string> AccIDROIDdic = new Dictionary<string, string>();
List<string> AccPgIDsList = new List<string>();
AccIDROIDdic.Clear();
string rtnStr = "";
ROFSTLookup.rochild[] chld = null;
ROFSTLookup.rochild ch;
ROList.Clear();
@@ -287,7 +267,7 @@ namespace Volian.Controls.Library
{
foreach (ROFSTLookup.rodbi rodbi in _MyROFSTLookup.GetRODatabaseList(true))
{
rtnStr = _MyRODbID.ToString() + ":" + string.Format("{0}", rodbi.dbiID.ToString("X4"));
string rtnStr = $"{_MyRODbID}:{string.Format("{0}", rodbi.dbiID.ToString("X4"))}";
if (rodbi.children != null)
{
@@ -304,9 +284,8 @@ namespace Volian.Controls.Library
continue;
}
else if (rolkup is ROFSTLookup.rodbi)
else if (rolkup is ROFSTLookup.rodbi rodbi)
{
ROFSTLookup.rodbi rodbi = (ROFSTLookup.rodbi)rolkup;
//Try to lazy load the children - B2022-026 RO Memory Reduction code
if (rodbi.children == null || rodbi.children.Length <= 0)
@@ -321,13 +300,13 @@ namespace Volian.Controls.Library
}
else
{
ROList.Add(_MyRODbID.ToString() + ":" + string.Format("{0}", rodbi.dbiID.ToString("X4")));
ROList.Add($"{_MyRODbID}:{string.Format("{0}", rodbi.dbiID.ToString("X4"))}");
}
}
else if (rolkup is ROFSTLookup.rochild)
else if (rolkup is ROFSTLookup.rochild rochild)
{
ch = (ROFSTLookup.rochild)rolkup;
chld = ch.children;
ch = rochild;
ROFSTLookup.rochild[] chld = ch.children;
//Try to lazy load the children - B2022-026 RO Memory Reduction code
if (ch.children == null || ch.children.Length <= 0)
@@ -359,13 +338,13 @@ namespace Volian.Controls.Library
private void PutROChildrenInDictionary(string rodbidPrefix, object roObj)
{
ROFSTLookup.rochild chld = (ROFSTLookup.rochild)roObj;
string rtnstr = rodbidPrefix;// "";
string keystr = ((chld.appid == "") ? GetNextBlankKey() : chld.appid) + chld.roid.Substring(0, 4);
//Try to lazy load the children - B2022-026 RO Memory Reduction
if (chld.children == null || chld.children.Length <= 0)
chld.children = MyROFSTLookup.GetRoChildrenByRoid(chld.roid, true);
string rtnstr;
// If still no children - B2022-026 RO Memory Reduction code - check children length
if (chld.children == null || chld.children.Length <= 0) // get a single ROID
{
@@ -403,7 +382,7 @@ namespace Volian.Controls.Library
if (AccIDROIDdic.ContainsKey(keystr)) // For duplicates, append the parent title (B2017-011) so adding to dictionary doesn't crash.
{
keystr = keystr + "|" + chld.title;
keystr = $"{keystr}|{chld.title}";
}
AccIDROIDdic.Add(keystr, rtnstr);
@@ -416,7 +395,6 @@ namespace Volian.Controls.Library
private void GenerateROList()
{
string rtnStr = "";
ROFSTLookup.rochild[] chld = null;
ROFSTLookup.rochild ch;
ROList.Clear();
@@ -427,26 +405,26 @@ namespace Volian.Controls.Library
// B2022-026 RO Memory Reduction code - added flag to load all children
foreach (ROFSTLookup.rodbi rodbi in _MyROFSTLookup.GetRODatabaseList(true))
{
rtnStr = _MyRODbID.ToString() + ":" + string.Format("{0}", rodbi.dbiID.ToString("X4"));
rtnStr = $"{_MyRODbID}:{string.Format("{0}", rodbi.dbiID.ToString("X4"))}";
ROList.Add(rtnStr);
}
continue;
}
else if (rolkup is ROFSTLookup.rodbi)
else if (rolkup is ROFSTLookup.rodbi rodbi)
{
rtnStr = _MyRODbID.ToString() + ":" + string.Format("{0}", ((ROFSTLookup.rodbi)rolkup).dbiID.ToString("X4"));
rtnStr = $"{_MyRODbID}:{string.Format("{0}", rodbi.dbiID.ToString("X4"))}";
}
else if (rolkup is ROFSTLookup.rochild)
else if (rolkup is ROFSTLookup.rochild rochild)
{
ch = (ROFSTLookup.rochild)rolkup;
ch = rochild;
//Try to lazy load the children - B2022-026 RO Memory Reduction code
if (ch.children == null || ch.children.Length <= 0)
ch.children = MyROFSTLookup.GetRoChildrenByRoid(ch.roid, true);
chld = ch.children;
ROFSTLookup.rochild[] chld = ch.children;
rtnStr = _MyRODbID.ToString() + ":" + GetROChildren(rolkup).TrimEnd(','); // GetROChildren(rolkup).TrimEnd(',') grabs the children of the selected item
rtnStr = $"{_MyRODbID}:{GetROChildren(rolkup).TrimEnd(',')}"; // GetROChildren(rolkup).TrimEnd(',') grabs the children of the selected item
}
ROList.Add(rtnStr);
@@ -603,7 +581,7 @@ namespace Volian.Controls.Library
labelX1.Visible = cmbxROUsageSort.Visible = cbxROUsage.Checked;
// reset the RO tree and clear anything that was selected
advTreeROFillIn(true);
advTreeROFillIn();
lstCheckedROs.Clear();
cbxIncldMissingROs.Checked = false;// !cbxSummary.Checked;
@@ -689,7 +667,6 @@ namespace Volian.Controls.Library
return "";
}
//string roapp = Environment.GetEnvironmentVariable("roapp");
string roapp = Volian.Base.Library.ExeInfo.GetROEditorPath(); // get the path to the RO Editor Executable
if (roapp == null)
{
@@ -703,7 +680,6 @@ namespace Volian.Controls.Library
return "";
}
//string roloc = "\"" + MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath + "\" " + "\"" + ROList + "\"";
if (!Directory.Exists(MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath))
{
MessageBox.Show(string.Format("RO Database directory does not exist: {0}", MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath));
@@ -711,14 +687,14 @@ namespace Volian.Controls.Library
}
string cmpRptExePath = roapp.Substring(0, roapp.LastIndexOf("\\")) + "\\CmpRpt.exe ";
roDataFile = MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath + "\\" + roDataFile;
roDataFile = $"{MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath}\\{roDataFile}";
try
{
if (File.Exists(roDataFile)) File.Delete(roDataFile);
Application.DoEvents();
string fname = VlnSettings.TemporaryFolder + "\\ROCompleteRprt.txt";
string fname = $"{VlnSettings.TemporaryFolder}\\ROCompleteRprt.txt";
FileInfo fi = new FileInfo(fname);
using (StreamWriter sw = fi.CreateText())
{
@@ -726,9 +702,9 @@ namespace Volian.Controls.Library
sw.Close();
}
string roloc = "\"" + MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath + "\" \"/f=" + fname + "\"";
string roloc = $"\"{MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath}\" \"/f={fname}\"";
// C2017-003: ro data in sql server, check for sql connection string
if (MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.DBConnectionString != "cstring") roloc = roloc + " \"/sql=" + MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.DBConnectionString + "\"";
if (MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.DBConnectionString != "cstring") roloc = $"{roloc} \"/sql={MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.DBConnectionString}\"";
// C2021-026 pass in Parent/Child information (list of the children)
// B2022-019 look at all DocVersions to find ParentChild information
@@ -736,9 +712,8 @@ namespace Volian.Controls.Library
DocVersionInfoList dvil = DocVersionInfoList.Get();
foreach (DocVersionInfo dvi in dvil)
{
DocVersionConfig dvc = dvi.DocVersionConfig as DocVersionConfig;
if (dvc != null && dvc.Unit_Name != "" && dvc.Unit_Count > 1) // B2021-089 only pass in applicability info if defined for more than one unit
roloc += " \"/PC=" + dvc.Unit_Name + "\"";
if (dvi.DocVersionConfig is DocVersionConfig dvc && dvc.Unit_Name != "" && dvc.Unit_Count > 1) // B2021-089 only pass in applicability info if defined for more than one unit
roloc += $" \"/PC={dvc.Unit_Name}\"";
break;
}
@@ -752,7 +727,7 @@ namespace Volian.Controls.Library
while (ex.InnerException != null)
ex = ex.InnerException;
string tmpmsg = ex.Message;
MessageBox.Show(tmpmsg, "RO Report Error: " + ex.GetType().Name);
MessageBox.Show(tmpmsg, $"RO Report Error: {ex.GetType().Name}");
}
return roDataFile;
}
@@ -827,19 +802,6 @@ namespace Volian.Controls.Library
#region (Procedure List)
private DevComponents.AdvTree.Node NewAdvTreeNode(string nodetext, bool selectable, bool chxbxvisable)
{
DevComponents.AdvTree.Node newnode;
newnode = new DevComponents.AdvTree.Node();
newnode.Text = nodetext;
newnode.Selectable = selectable;
newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
newnode.CheckBoxThreeState = false;
newnode.CheckBoxVisible = chxbxvisable;
return newnode;
}
private void advTreeProcSets_BeforeExpand(object sender, DevComponents.AdvTree.AdvTreeNodeCancelEventArgs e)
{
DevComponents.AdvTree.Node par = e.Node;
@@ -856,14 +818,18 @@ namespace Volian.Controls.Library
{
foreach (FolderInfo fic in fi.SortedChildFolders)
{
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
newnode.Text = fic.ToString();
newnode.Tag = fic;
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
{
Text = fic.ToString(),
Tag = fic
};
par.Nodes.Add(newnode);
if (fic.HasChildren) // allow for '+' for tree expansion
{
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node();
tnt.Text = DummyNodeText;
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node
{
Text = DummyNodeText
};
newnode.Nodes.Add(tnt);
}
}
@@ -872,14 +838,16 @@ namespace Volian.Controls.Library
{
foreach (DocVersionInfo dv in fi.FolderDocVersions)
{
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
newnode.Text = dv.ToString();
newnode.Tag = dv;
newnode.Selectable = true;
newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
newnode.CheckBoxThreeState = false;
newnode.CheckBoxVisible = true;
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
{
Text = dv.ToString(),
Tag = dv,
Selectable = true,
CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter,
CheckBoxStyle = eCheckBoxStyle.CheckBox,
CheckBoxThreeState = false,
CheckBoxVisible = true
};
par.Nodes.Add(newnode);
}
}
@@ -913,30 +881,15 @@ namespace Volian.Controls.Library
{
if (lstCheckedDocVersions.Count == 0)
Mydocversion = null;
// do this if either none, or more than one procedure set selected
//advTreeStepTypes.Nodes.Clear();
//lstCheckedStepTypes.Clear();
//lstCheckedStepTypesStr.Clear();
//Node newnode = new DevComponents.AdvTree.Node();
//newnode.Text = "....select a procedure set for types to appear...";
//advTreeStepTypes.Nodes.Add(newnode);
//buildStepTypePannelTitle();
}
}
//// Enable the RO combo list only if at least one procedure set node
//// is selected
//cmboTreeROs.Enabled = (lstCheckedDocVersions.Count > 0);
//gpFindROs.Enabled = cmboTreeROs.Enabled;
//SetupContextMenu();
//buildSetToSearchPanelTitle();
EnableOrDisablePrintButton();
}
private void advTreeProcSets_AfterNodeSelect(object sender, AdvTreeNodeEventArgs e)
{
DevComponents.AdvTree.Node n = advTreeProcSets.SelectedNode;
_ = advTreeProcSets.SelectedNode;
}
private void advTreeProcSetsPreSelect()
@@ -998,8 +951,10 @@ namespace Volian.Controls.Library
{
if (rodbi.children != null && rodbi.children.Length > 0)
{
DevComponents.AdvTree.Node tmp = new DevComponents.AdvTree.Node();
tmp.Text = DummyNodeText;
DevComponents.AdvTree.Node tmp = new DevComponents.AdvTree.Node
{
Text = DummyNodeText
};
tn.Nodes.Add(tmp);
}
}
@@ -1015,12 +970,9 @@ namespace Volian.Controls.Library
if (tn.HasChildNodes && tn.Nodes[0].Text != DummyNodeText) return; // already loaded.
if (tn.HasChildNodes && tn.Nodes[0].Text == DummyNodeText) tn.Nodes[0].Remove();
object tag = tn.Tag;
ROFSTLookup.rochild[] chld = null;
if (tn.Tag is ROFSTLookup.rodbi)
ROFSTLookup.rochild[] chld;
if (tn.Tag is ROFSTLookup.rodbi db)
{
ROFSTLookup.rodbi db = (ROFSTLookup.rodbi)tn.Tag;
//Try to lazy load the children - B2022-026 RO Memory Reduction code
if (db.children == null || db.children.Length <= 0)
@@ -1028,9 +980,8 @@ namespace Volian.Controls.Library
chld = db.children;
}
else if (tn.Tag is ROFSTLookup.rochild)
else if (tn.Tag is ROFSTLookup.rochild ch)
{
ROFSTLookup.rochild ch = (ROFSTLookup.rochild)tn.Tag;
//Try to lazy load the children - B2022-026 RO Memory Reduction code
if (ch.children == null || ch.children.Length <= 0)
@@ -1048,16 +999,14 @@ namespace Volian.Controls.Library
// B2022-026 RO Memory Reduction code - check child length
if (chld != null && chld.Length > 0)
{
//ProgressBar_Initialize(chld.Length, tn.Text);
for (int i = 0; i < chld.Length; i++)
{
//ProgressBar_SetValue(i);
DevComponents.AdvTree.Node tmp = null;
// Try to Lazy Load children - B2022-026 RO Memory Reduction code
if (chld[i].children == null || chld[i].children.Length <= 0)
chld[i].children = MyROFSTLookup.GetRoChildrenByRoid(chld[i].roid, true);
Node tmp;
// if this is a group, i.e. type 0, add a dummy node
if (chld[i].type == 0 && chld[i].children == null)
{
@@ -1067,22 +1016,28 @@ namespace Volian.Controls.Library
// B2023-094: don't crash if chld[i].children count is 0, signals an empty group
else if (chld[i].value == null && (cbxROUsage.Checked || (chld[i].children != null && chld[i].children.Length > 0 && chld[i].children[0].ParentID != 0)))
{
tmp = new DevComponents.AdvTree.Node();
tmp.Text = chld[i].title;
tmp.Tag = chld[i];
tmp.CheckBoxVisible = true;
tmp = new DevComponents.AdvTree.Node
{
Text = chld[i].title,
Tag = chld[i],
CheckBoxVisible = true
};
int index = FindIndex(tn.Nodes, tmp.Text);
tn.Nodes.Insert(index, tmp);
DevComponents.AdvTree.Node sub = new DevComponents.AdvTree.Node();
sub.Text = DummyNodeText;
DevComponents.AdvTree.Node sub = new DevComponents.AdvTree.Node
{
Text = DummyNodeText
};
tmp.Nodes.Add(sub);
}
else
{
tmp = new DevComponents.AdvTree.Node();
tmp.Text = chld[i].title;
tmp.Tag = chld[i];
tmp.CheckBoxVisible = true;
tmp = new DevComponents.AdvTree.Node
{
Text = chld[i].title,
Tag = chld[i],
CheckBoxVisible = true
};
int index = FindIndex(tn.Nodes, tmp.Text);
tn.Nodes.Insert(index, tmp);
}
@@ -1093,12 +1048,11 @@ namespace Volian.Controls.Library
private void advTreeRO_AfterExpandorCollapse(object sender, AdvTreeNodeEventArgs e)
{
Node bottomNode = BottomTreeNode(advTreeRO.Nodes);
Node lastNode = advTreeRO.Nodes[advTreeRO.Nodes.Count - 1];
_ = advTreeRO.Nodes[advTreeRO.Nodes.Count - 1];
int top = advTreeRO.Nodes[0].Bounds.Top;
int bottom = bottomNode.Bounds.Bottom + 5;
int hScrollBarHeight = advTreeRO.HScrollBar != null ? advTreeRO.HScrollBar.Height : 0;
bottom = bottomNode.Bounds.Bottom + 5;
int bottom = bottomNode.Bounds.Bottom + 5;
advTreeRO.Size = new Size(advTreeRO.Size.Width, Math.Min(525, bottom - top + hScrollBarHeight));
if (advTreeRO.VScrollBar != null && bottom < advTreeRO.Size.Height)
@@ -1106,8 +1060,7 @@ namespace Volian.Controls.Library
int yLookFor = (bottom - advTreeRO.Size.Height) + 2 * hScrollBarHeight;
Node topNode = FindTreeNodeAt(advTreeRO.Nodes, yLookFor);
if (topNode != null)
topNode.EnsureVisible();
topNode?.EnsureVisible();
}
}
@@ -1166,94 +1119,35 @@ namespace Volian.Controls.Library
{
#region Fields
private string _ReportTitle;
private string _TypesSelected;
private ICollection<ItemInfo> _MyItemInfoList;
private bool _SortUsageByProcedure;
private string _RODataFile = "";
private bool _CompleteROReport = true;
private ROFSTLookup _rofstLookup;
private List<string> _ROListForReport;
private bool _IncludeMissingROs = true;
private bool _ConvertCaretToDelta = true;
private bool _IncludeEmptyROFields = true;
private string _PaperSize = "Letter";
#endregion
#region Properties
public string ReportTitle
{
get { return _ReportTitle; }
set { _ReportTitle = value; }
}
public string ReportTitle { get; set; }
public string TypesSelected
{
get { return _TypesSelected; }
set { _TypesSelected = value; }
}
public string TypesSelected { get; set; }
public ICollection<ItemInfo> MyItemInfoList
{
get { return _MyItemInfoList; }
set { _MyItemInfoList = value; }
}
public ICollection<ItemInfo> MyItemInfoList { get; set; }
public bool SortUsageByProcedure
{
get { return _SortUsageByProcedure; }
set { _SortUsageByProcedure = value; }
}
public bool SortUsageByProcedure { get; set; }
public string RODataFile
{
get { return _RODataFile; }
set { _RODataFile = value; }
}
public string RODataFile { get; set; } = "";
public bool CompleteROReport
{
get { return _CompleteROReport; }
set { _CompleteROReport = value; }
}
public bool CompleteROReport { get; set; } = true;
public ROFSTLookup RofstLookup
{
get { return _rofstLookup; }
set { _rofstLookup = value; }
}
public ROFSTLookup RofstLookup { get; set; }
public List<string> ROListForReport
{
get { return _ROListForReport; }
set { _ROListForReport = value; }
}
public List<string> ROListForReport { get; set; }
public bool IncludeMissingROs
{
get { return _IncludeMissingROs; }
set { _IncludeMissingROs = value; }
}
public bool IncludeMissingROs { get; set; } = true;
public bool ConvertCaretToDelta
{
get { return _ConvertCaretToDelta; }
set { _ConvertCaretToDelta = value; }
}
public bool ConvertCaretToDelta { get; set; } = true;
public bool IncludeEmptyROFields
{
get { return _IncludeEmptyROFields; }
set { _IncludeEmptyROFields = value; }
}
public bool IncludeEmptyROFields { get; set; } = true;
public string PaperSize // C2020-002 paper size is now set in the format files
{
get { return _PaperSize; }
set { _PaperSize = value; }
}
{ get; set; } = "Letter";
#endregion
@@ -1270,12 +1164,12 @@ namespace Volian.Controls.Library
/// <param name="paperSize"></param>
public DisplayReportsEventArgs(string reportTitle, string typesSelected, ICollection<ItemInfo> myItemInfoList, bool sortByProcedure, bool includeMissingROs, string paperSize)
{
_ReportTitle = reportTitle;
_TypesSelected = typesSelected;
_MyItemInfoList = myItemInfoList;
_SortUsageByProcedure = sortByProcedure;
_IncludeMissingROs = includeMissingROs;
_PaperSize = paperSize; // C2020-002 paper size is now set in the format files
ReportTitle = reportTitle;
TypesSelected = typesSelected;
MyItemInfoList = myItemInfoList;
SortUsageByProcedure = sortByProcedure;
IncludeMissingROs = includeMissingROs;
PaperSize = paperSize; // C2020-002 paper size is now set in the format files
}
/// <summary>
@@ -1291,14 +1185,14 @@ namespace Volian.Controls.Library
/// <param name="paperSize"></param>
public DisplayReportsEventArgs(string reportTitle, string typesSelected, string roDataFile, ROFSTLookup rofstLookUp, bool completeROReport, bool convertCaretToDelta, bool includeEmptyROFields, string paperSize)
{
_ReportTitle = reportTitle;
_TypesSelected = typesSelected;
_RODataFile = roDataFile;
_CompleteROReport = completeROReport;
_ConvertCaretToDelta = convertCaretToDelta;
_rofstLookup = rofstLookUp;
_IncludeEmptyROFields = includeEmptyROFields;
_PaperSize = paperSize; // C2020-002 paper size is now set in the format files
ReportTitle = reportTitle;
TypesSelected = typesSelected;
RODataFile = roDataFile;
CompleteROReport = completeROReport;
ConvertCaretToDelta = convertCaretToDelta;
RofstLookup = rofstLookUp;
IncludeEmptyROFields = includeEmptyROFields;
PaperSize = paperSize; // C2020-002 paper size is now set in the format files
}
/// <summary>
@@ -1311,11 +1205,11 @@ namespace Volian.Controls.Library
/// <param name="paperSize"></param>
public DisplayReportsEventArgs(string reportTitle, string typesSelected, ROFSTLookup rofstLookUp, List<string> roListForReport, string paperSize)
{
_ReportTitle = reportTitle;
_TypesSelected = typesSelected;
_rofstLookup = rofstLookUp;
_ROListForReport = roListForReport;
_PaperSize = paperSize; // C2020-002 paper size is now set in the format files
ReportTitle = reportTitle;
TypesSelected = typesSelected;
RofstLookup = rofstLookUp;
ROListForReport = roListForReport;
PaperSize = paperSize; // C2020-002 paper size is now set in the format files
}
#endregion
@@ -1334,13 +1228,13 @@ namespace Volian.Controls.Library
public List<string> GetList(string s1)
{
List<string> SB1 = new List<string>();
string st1, st2, st3;
string st1;
st1 = "";
bool flag = char.IsDigit(s1[0]);
foreach (char c in s1)
{
if (flag != char.IsDigit(c) || !(char.IsDigit(c) || char.IsLetter(c)))// || c == '\'')
if (flag != char.IsDigit(c) || !(char.IsDigit(c) || char.IsLetter(c)))
{
if (st1 != "")
SB1.Add(st1);
@@ -1376,10 +1270,6 @@ namespace Volian.Controls.Library
{
return 0;
}
int len1 = s1.Length;
int len2 = s2.Length;
int marker1 = 0;
int marker2 = 0;
// Walk through two the strings with two markers.
List<string> str1 = GetList(s1);
@@ -1395,18 +1285,16 @@ namespace Volian.Controls.Library
str2.Add("");
}
}
int x1 = 0; int res = 0; int x2 = 0; string y2 = "";
bool status = false;
string y1 = ""; bool s1Status = false; bool s2Status = false;
//s1status ==false then string ele int;
//s2status ==false then string ele int;
int x1 = 0; int x2 = 0;
bool s1Status; bool s2Status;
//s1status ==false then string else int;
//s2status ==false then string else int;
int result = 0;
for (int i = 0; i < str1.Count && i < str2.Count; i++)
{
status = int.TryParse(str1[i].ToString(), out res);
_ = int.TryParse(str1[i].ToString(), out int res);
if (res == 0)
{
y1 = str1[i].ToString();
s1Status = false;
}
else
@@ -1415,10 +1303,9 @@ namespace Volian.Controls.Library
s1Status = true;
}
status = int.TryParse(str2[i].ToString(), out res);
_ = int.TryParse(str2[i].ToString(), out res);
if (res == 0)
{
y2 = str2[i].ToString();
s2Status = false;
}
else
+222 -252
View File
@@ -15,6 +15,8 @@ using System.Linq;
namespace Volian.Controls.Library
{
#pragma warning disable IDE1006 // Naming Styles
#pragma warning disable IDE0044 // Add readonly modifier
public partial class DisplaySearch : UserControl
{
#region Public Events/Handlers
@@ -24,14 +26,12 @@ namespace Volian.Controls.Library
private void OnPrintRequest(DisplaySearchEventArgs args)
{
if (PrintRequest != null)
PrintRequest(this, args);
PrintRequest?.Invoke(this, args);
}
private void OnSearchComplete(DisplaySearchEventArgs args)
{
if (SearchComplete != null)
SearchComplete(this, args);
SearchComplete?.Invoke(this, args);
}
#endregion
@@ -218,8 +218,10 @@ namespace Volian.Controls.Library
{
if (_TmrRefresh == null)
{
_TmrRefresh = new Timer();
_TmrRefresh.Interval = 1000;
_TmrRefresh = new Timer
{
Interval = 1000
};
_TmrRefresh.Tick += _TmrRefresh_Tick;
}
return _TmrRefresh;
@@ -324,7 +326,6 @@ namespace Volian.Controls.Library
{
if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[2])
{ // RO Search
ROFSTLookup.rochild[] chld = null;
ROFSTLookup.rochild ch;
if (cmboTreeROs.SelectedNode != null)
{
@@ -336,18 +337,16 @@ namespace Volian.Controls.Library
}
else
{
if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rodbi)
if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rodbi db)
{
ROFSTLookup.rodbi db = (ROFSTLookup.rodbi)cmboTreeROs.SelectedNode.Tag;
return _MyRODbID.ToString() + ":" + string.Format("{0}", db.dbiID.ToString("X4"));
return $"{_MyRODbID.ToString()}:{string.Format("{0}", db.dbiID.ToString("X4"))}";
}
else if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rochild)
else if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rochild roch)
{
ch = (ROFSTLookup.rochild)cmboTreeROs.SelectedNode.Tag;
chld = ch.children;
ROFSTLookup.rochild[] chld = roch.children;
// build a list of ROs to search
// B2022-118: remove the ending comma otherwise query will fail
string strRtnStr = _MyRODbID.ToString() + ":" + GetROsToSearch(chld);
string strRtnStr = $"{_MyRODbID.ToString()}:{GetROsToSearch(chld)}";
if (strRtnStr.EndsWith(","))
strRtnStr = strRtnStr.Substring(0, strRtnStr.Length - 1);
return strRtnStr;
@@ -391,7 +390,6 @@ namespace Volian.Controls.Library
cmbResultsStyle.Enabled = false;
tabSearchTypes.SelectedTabChanged += new TabStrip.SelectedTabChangedEventHandler(tabSearchTypes_SelectedTabChanged);
// Don't do this here. If you do then the /DB parameter has not yet been set, which will cause the database menu to be displayed
//SetupContextMenu(); // so that the symbol list is available without selecting a procedure set or procedure
}
#endregion
@@ -447,20 +445,6 @@ namespace Volian.Controls.Library
}
btnSearch.Enabled = (cbxTranCategory.Items.Count > 0); // B2017-038 disable search button if no format selected
//enable-disable doc version nodes based on version type if selected
if (cbxTranVersion.SelectedIndex > -1)
{
if (dicExpandedFolderNodes.Count > 0)
{
foreach (DevComponents.AdvTree.Node n in dicExpandedFolderNodes.Keys)
{
DocVersionInfo dvi = (DocVersionInfo)n.Tag;
if (cbxTranVersion.Tag.ToString().Contains(dvi.VersionID.ToString()))
n.Enabled = true;
else
n.Enabled = false;
}
}
}
//setup transition format versions
this.Cursor = Cursors.WaitCursor;
if (myFormatVersionList == null)
@@ -468,15 +452,22 @@ namespace Volian.Controls.Library
this.Refresh();
myFormatVersionList = FormatVersionList.GetFormatVersions();
cbxTranVersion.DisplayMember = "Title";
int lastLastFormatID = 0;
foreach (FormatVersion fv in myFormatVersionList)
{
if (fv.FormatID != lastLastFormatID)
List<FormatVersion> fvlst = myFormatVersionList.GroupBy(x => x.FormatID).Select(group => new
FormatVersion(title: group.Max(x => x.Title),
formatID: group.Key,
versionID: group.Max(x => x.VersionID)
)).OrderBy(y => y.Title).ToList();
//B2026-055 Transition Search Improvements
//Added an All option to allow resetting of the enabling/disabling tree options
cbxTranVersion.Items.Add(new FormatVersion("All", -1, -1));
foreach (FormatVersion fv in fvlst)
{
cbxTranVersion.Items.Add(fv);
lastLastFormatID = fv.FormatID;
}
}
cbxTranVersion.SelectedIndexChanged -= new EventHandler(cbxTranVersion_SelectedIndexChanged);
cbxTranVersion.SelectedIndexChanged += new EventHandler(cbxTranVersion_SelectedIndexChanged);
cbxTranFormat.SelectedIndexChanged -= new EventHandler(cbxTranFormat_SelectedIndexChanged);
@@ -501,32 +492,6 @@ namespace Volian.Controls.Library
public void cbxTranFormat_SelectedIndexChanged(object sender, EventArgs e)
{
#region 1st cut
//if (cbxTranFormat.SelectedItem.ToString() == "All")
//{
// cbxTranCategory.Items.Clear();
// cbxTranCategory.Items.Add("All");
// cbxTranCategory.Items.Add("Internal");
// cbxTranCategory.Items.Add("External");
// cbxTranCategory.Items.Add("Outside");
// cbxTranCategory.SelectedIndex = 0;
//}
//else if (cbxTranFormat.SelectedItem.ToString().Contains("{Proc"))
//{
// cbxTranCategory.Items.Clear();
// cbxTranCategory.Items.Add("All");
// cbxTranCategory.Items.Add("External");
// cbxTranCategory.Items.Add("Outside");
// cbxTranCategory.SelectedIndex = 0;
//}
//else
//{
// cbxTranCategory.Items.Clear();
// cbxTranCategory.Items.Add("Internal");
// cbxTranCategory.SelectedIndex = 0;
//}
#endregion
#region 2nd cut
if (cbxTranFormat.SelectedItem.ToString().Contains("{Proc"))
{
@@ -556,41 +521,21 @@ namespace Volian.Controls.Library
string versionList = string.Empty;
string sep = string.Empty;
FormatVersion sfv = cbxTranVersion.SelectedItem as FormatVersion;
foreach (FormatVersion fv in myFormatVersionList)
{
if (fv.FormatID == sfv.FormatID)
{
versionList += sep + fv.VersionID;
sep = ",";
}
}
versionList = string.Join(",", myFormatVersionList.Where(x => x.FormatID == sfv?.FormatID).Select(y => y.VersionID));
cbxTranVersion.Tag = versionList;
cbxTranFormatFillIn(versionList);
if (dicExpandedFolderNodes.Count > 0)
{
foreach (DevComponents.AdvTree.Node n in dicExpandedFolderNodes.Keys)
{
FolderInfo fi = (FolderInfo)n.Tag;
// if this folder has a docversion, use its id:
string svid = null;
if (fi.FolderDocVersionCount > 0)
svid = fi.FolderDocVersions[0].VersionID.ToString();
if (cbxTranVersion.Tag.ToString().Contains(svid))
n.Enabled = true;
else
n.Enabled = false;
}
}
List<DevComponents.AdvTree.Node> uncheckNodes = new List<Node>();
List<DevComponents.AdvTree.Node> uncheckNodes = new List<DevComponents.AdvTree.Node>();
foreach (DevComponents.AdvTree.Node n in dicSelectedFolderNodes.Keys)
{
FolderInfo fi = (FolderInfo)n.Tag; // this was crashing in old version of code
FolderInfo fi = n.Tag as FolderInfo; // this was crashing in old version of code
// if this folder has a docversion, use its id:
string svid = null;
if (fi.FolderDocVersionCount > 0)
if (fi?.FolderDocVersionCount > 0)
svid = fi.FolderDocVersions[0].VersionID.ToString();
if (svid != null && !versionList.Contains(svid))
if (svid != null && !string.IsNullOrEmpty(versionList) && !versionList.Split(',').Contains(svid))
uncheckNodes.Add(n);
else
n.Enabled = true;
@@ -616,13 +561,17 @@ namespace Volian.Controls.Library
dicSelectedFolderNodes.Clear();
}
}
//B2026-055 Transition Search Improvements
//Update Enabling/Disabling of Tree Elements
TraverseTree(advTreeProcSets.Nodes[0], cbxTranVersion.Tag?.ToString().Split(','));
this.Cursor = Cursors.Default;
}
// C2020-033: Update the search panel for Incoming transitions. This gets called from the tree view & the ribbon
public void UpdateSearchIncTransResults()
{
//IncTransSelectedCount = 0;
tabSearchTypes.SelectedTab = tabSearchTypes.Tabs[4];
lbSrchResultsIncTrans.DataSource = null;
@@ -699,13 +648,6 @@ namespace Volian.Controls.Library
DevComponents.AdvTree.Node newnode;
advTreeStepTypes.Nodes.Clear();
// Add a dummy node for searching Word Sections (MS Word sections)
//newnode = new DevComponents.AdvTree.Node();
//newnode.Text = "Word Sections";
//newnode.Selectable = true;
//newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
//newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
//newnode.CheckBoxThreeState = false;
//newnode.CheckBoxVisible = true;
newnode = NewAdvTreeNode("WORD Sections", true, true); // C2020-010: Change Accessory Sections to Word Sections
wordSectionTreeNode = newnode;
// C2021-028: RNO Only search, disable Word section tree node
@@ -723,16 +665,6 @@ namespace Volian.Controls.Library
StepData sd = sdl[sdr.Index]; // get the step type record
string parentName = sd.ParentType; // this gets the parent of the this step/substep type
//Console.WriteLine("{0} {1} - {2}", parentName,sd.Type,sdr.Name);
//newnode = new DevComponents.AdvTree.Node();
//newnode.Text = sdr.Name;
//newnode.Name = sd.Type; // this needed for the FindNodeByName() function
//newnode.Tag = sd;
//newnode.Selectable = true;
//newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
//newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
//newnode.CheckBoxThreeState = false;
//newnode.CheckBoxVisible = true;
if (parentName.Equals("Base"))
{
newnode = NewAdvTreeNode(sdr.Name, true, true);
@@ -826,8 +758,7 @@ namespace Volian.Controls.Library
//C2023-010: Select all child nodes when a subtype is selected
private void pnode_selected(object sender, EventArgs e)
{
DevComponents.AdvTree.Node pnode = sender as DevComponents.AdvTree.Node;
if (pnode != null && pnode.HasChildNodes)
if (sender is DevComponents.AdvTree.Node pnode && pnode.HasChildNodes)
{
CheckTreeNodeChildren(pnode.Nodes);
}
@@ -842,18 +773,21 @@ namespace Volian.Controls.Library
int fiCount = fi.ChildFolderCount;
advTreeProcSets.Nodes.Clear();
lstCheckedDocVersions.Clear();
topnode = new DevComponents.AdvTree.Node();
topnode.Text = "Available Procedure Sets";
topnode.Tag = fi;
topnode.DataKey = fi.FolderID;
topnode = new DevComponents.AdvTree.Node
{
Text = "Available Procedure Sets",
Tag = fi,
DataKey = fi.FolderID
};
advTreeProcSets.Nodes.Add(topnode);
//advTreeProcSets.AfterNodeInsert += new TreeNodeCollectionEventHandler(advTreeProcSets_AfterNodeInsert);
//B2023-076: Adding option to select all procedure sets
DevComponents.AdvTree.Node selectAllNode = new Node();
selectAllNode.Text = SelectAllProcedureSetsText;
selectAllNode.Tag = SelectAllProcedureSetsText;
selectAllNode.CheckBoxVisible = true;
DevComponents.AdvTree.Node selectAllNode = new Node
{
Text = SelectAllProcedureSetsText,
Tag = SelectAllProcedureSetsText,
CheckBoxVisible = true
};
selectAllNode.NodeClick += new EventHandler(AllProcedureSets_clicked);
topnode.Nodes.Add(selectAllNode);
@@ -861,18 +795,22 @@ namespace Volian.Controls.Library
{
foreach (FolderInfo fic in fi.SortedChildFolders)
{
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
newnode.Text = fic.ToString();
newnode.Tag = fic;
newnode.DataKey = fi.FolderID;
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
{
Text = fic.ToString(),
Tag = fic,
DataKey = fi.FolderID
};
AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected.
cntnd++;
if (fic.ChildFolderCount > 0 || fic.FolderDocVersionCount > 0) // allow for '+' for tree expansion
{
if (fic.ChildFolderCount > 0) // B2017-176: Do not display the Working Draft node (don't create dummy for expander)
{
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node();
tnt.Text = DummyNodeText;
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node
{
Text = DummyNodeText
};
newnode.Nodes.Add(tnt);
}
topnode.Nodes.Add(newnode);
@@ -881,10 +819,12 @@ namespace Volian.Controls.Library
}
else
{
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
newnode.Text = fi.ToString();
newnode.Tag = fi;
newnode.DataKey = fi.FolderID;
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
{
Text = fi.ToString(),
Tag = fi,
DataKey = fi.FolderID
};
AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected.
topnode.Nodes.Add(newnode);
lstCheckedDocVersions.Add(Mydocversion);
@@ -895,8 +835,10 @@ namespace Volian.Controls.Library
{
cntnd++;
fi = Mydocversion.MyFolder;
topnode = new DevComponents.AdvTree.Node();
topnode.Text = fi.ToString();
topnode = new DevComponents.AdvTree.Node
{
Text = fi.ToString()
};
advTreeProcSets.Nodes.Add(topnode);
topnode.Tag = fi;
topnode.DataKey = fi.FolderID;
@@ -931,30 +873,35 @@ namespace Volian.Controls.Library
{
foreach (FolderInfo fic in fi.SortedChildFolders)
{
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
newnode.Text = fic.ToString();
newnode.Tag = fic;
newnode.DataKey = fic.FolderID;
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node
{
Text = fic.ToString(),
Tag = fic,
DataKey = fic.FolderID
};
par.Nodes.Add(newnode);
AddCheckBox(true, newnode);//C2016-045 Allow Folders to be selected.
newnode.Enabled = true;
if (fic.ChildFolderCount > 0) // B2017-176: Only expand if folder has folders (not working draft nodes)
{
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node();
tnt.Text = DummyNodeText;
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node
{
Text = DummyNodeText
};
newnode.Nodes.Add(tnt);
// B2017-176: Only expand if folder has folders (not working draft nodes): the following was moved from the code
// that would check if this should be enabled if seraching for transition types. The transition controls
// had a list of associated docversions, so needed to get the docversion in the folder:
if (tabSearchTypes.SelectedTab == tabTranSearch && !dicSelectedFolderNodes.ContainsKey(newnode))
dicSelectedFolderNodes.Add(newnode, false);
}
if (tabSearchTypes.SelectedTab == tabTranSearch)
{
if (!dicSelectedFolderNodes.ContainsKey(newnode)) dicSelectedFolderNodes.Add(newnode, false);
// get the docversion for this folder, if it has one and determine whether it is enabled for transitions:
string svid = null;
if (fic.FolderDocVersionCount > 0)
svid = fic.FolderDocVersions[0].VersionID.ToString();
newnode.Enabled = svid != null && cbxTranVersion.Tag != null ? cbxTranVersion.Tag.ToString().Contains(svid) : false;
}
//B2026-055 Transition Search Improvements
//Update Enabling/Disabling of Tree Elements
TraverseTree(advTreeProcSets.Nodes[0], cbxTranVersion.Tag?.ToString().Split(','));
}
}
}
@@ -964,10 +911,10 @@ namespace Volian.Controls.Library
public void AdvTree_AfterExpandorCollapse(object sender, AdvTreeNodeEventArgs e)
{
Node bottomNode = BottomTreeNode(cmboTreeROs.AdvTree.Nodes);
Node lastNode = cmboTreeROs.AdvTree.Nodes[cmboTreeROs.AdvTree.Nodes.Count - 1];
_ = cmboTreeROs.AdvTree.Nodes[cmboTreeROs.AdvTree.Nodes.Count - 1]; //LastNode
int top = cmboTreeROs.AdvTree.Nodes[0].Bounds.Top;
int bottom = bottomNode.Bounds.Bottom + 5;
int bottom;
int hScrollBarHeight = cmboTreeROs.AdvTree.HScrollBar != null ? cmboTreeROs.AdvTree.HScrollBar.Height : 0;
bottom = bottomNode.Bounds.Bottom + 5;
cmboTreeROs.AdvTree.Size = new Size(cmboTreeROs.AdvTree.Size.Width, Math.Min(525, bottom - top + hScrollBarHeight));
@@ -976,10 +923,7 @@ namespace Volian.Controls.Library
{
int yLookFor = (bottom - cmboTreeROs.AdvTree.Size.Height) + 2 * hScrollBarHeight;
Node topNode = FindTreeNodeAt(cmboTreeROs.AdvTree.Nodes, yLookFor);
if (topNode != null)
{
topNode.EnsureVisible();
}
topNode?.EnsureVisible();
}
}
@@ -990,8 +934,10 @@ namespace Volian.Controls.Library
public void SetupAnnotationSearch(AnnotationDetails annotationDetails, DisplayTabControl tc)
{
_AnnotationDetails = annotationDetails;
List<AnnotationTypeSearch> annoTypes = new List<AnnotationTypeSearch>();
annoTypes.Add(new AnnotationTypeSearch("All Annotations", string.Empty));
List<AnnotationTypeSearch> annoTypes = new List<AnnotationTypeSearch>
{
new AnnotationTypeSearch("All Annotations", string.Empty)
};
AnnotationTypeInfoList annoList = AnnotationTypeInfoList.Get();
foreach (AnnotationTypeInfo ati in annoList)
annoTypes.Add(new AnnotationTypeSearch(ati.Name, ati.TypeID.ToString()));
@@ -1058,14 +1004,15 @@ namespace Volian.Controls.Library
foreach (Symbol sym in sl)
{
DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem();
btnCM.Text = string.Format("{0}", (char)sym.Unicode);
DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem
{
Text = string.Format("{0}", (char)sym.Unicode),
// to name button use unicode rather than desc, desc may have spaces or odd chars
btnCM.Name = "btnCM" + sym.Unicode.ToString();
btnCM.Tooltip = sym.Desc;
btnCM.Tag = string.Format(@"{0}", sym.Unicode);
btnCM.FontBold = true;
Name = $"btnCM{sym.Unicode.ToString()}",
Tooltip = sym.Desc,
Tag = string.Format(@"{0}", sym.Unicode),
FontBold = true
};
btnCM.Click += new System.EventHandler(btnSym_Click);
galSymbols.SubItems.Add(btnCM);
}
@@ -1114,9 +1061,11 @@ namespace Volian.Controls.Library
private DevComponents.AdvTree.Node NewAdvTreeNode(string nodetext, bool selectable, bool chxbxvisable)
{
DevComponents.AdvTree.Node newnode;
newnode = new DevComponents.AdvTree.Node();
newnode.Text = nodetext;
newnode.Selectable = selectable;
newnode = new DevComponents.AdvTree.Node
{
Text = nodetext,
Selectable = selectable
};
AddCheckBox(chxbxvisable, newnode);//C2016-045 Allow Folders to be selected.
return newnode;
}
@@ -1163,7 +1112,7 @@ namespace Volian.Controls.Library
// folder properties dialog
bool allowNonAdmin = IncTranCvtPerm();
List<int> itmsEditable = new List<int>(); // return this list
int listCount = 0;
int listCount;
if (all) // Check all in list
{
listCount = _SearchResults.Count;
@@ -1187,14 +1136,13 @@ namespace Volian.Controls.Library
// not all can be converted to text. If count of itmsEditable & lbis are different some cannot be edited.
if (itmsEditable.Count == 0)
{
FlexibleMessageBox.Show("You do not have permission to edit any of the procedures, sections, and/or steps" + (all ? "." : " that are selected."),
FlexibleMessageBox.Show($"You do not have permission to edit any of the procedures, sections, and/or steps{(all ? "." : " that are selected.")}",
"Convert Transition to Text", MessageBoxButtons.OK, MessageBoxIcon.Information);
return null;
}
else if (itmsEditable.Count != listCount)
{
DialogResult ans = FlexibleMessageBox.Show("You only have permission to edit some of the procedures, sections, and/or steps that are selected.procedures, sections, and/or steps" + (all ? "." : " that are selected.") +
"\r\n\r\n Should the conversion of the transitions to text continue?",
DialogResult ans = FlexibleMessageBox.Show($"You only have permission to edit some of the procedures, sections, and/or steps that are selected.procedures, sections, and/or steps{(all ? "." : " that are selected.")}\r\n\r\n Should the conversion of the transitions to text continue?",
"Convert Transition to Text", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (ans == DialogResult.No) return null;
}
@@ -1215,7 +1163,7 @@ namespace Volian.Controls.Library
private void btnTranCvtSelToTxt_Click(object sender, EventArgs e)
{
// First see if all selected can be converted, i.e. user has permission to edit
List<ListBoxItem> lbis = lbSrchResultsIncTrans.CheckedItems;
_ = lbSrchResultsIncTrans.CheckedItems;
List<int> itmsEditable = TranCvtCheckPermission(false);
if (itmsEditable == null || itmsEditable.Count == 0) return;
TranCvtToTxt(itmsEditable);
@@ -1448,8 +1396,10 @@ namespace Volian.Controls.Library
{
ROFSTLookup.rodbi db = dbs[i];
DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node(db.dbiTitle);
tn.Tag = db;
DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node(db.dbiTitle)
{
Tag = db
};
cmboTreeROs.Nodes.Add(tn);
AddDummyGroup(db, tn);
@@ -1502,17 +1452,14 @@ namespace Volian.Controls.Library
if (tn.HasChildNodes && tn.Nodes[0].Text != DummyNodeText) return; // already loaded.
if (tn.HasChildNodes && tn.Nodes[0].Text == DummyNodeText) tn.Nodes[0].Remove();
ROFSTLookup.rochild[] chld = null;
if (tn.Tag is ROFSTLookup.rodbi)
ROFSTLookup.rochild[] chld;
if (tn.Tag is ROFSTLookup.rodbi db)
{
ROFSTLookup.rodbi db = (ROFSTLookup.rodbi)tn.Tag;
MyROFSTLookup.LoadChildren(ref db);
chld = db.children;
}
else if (tn.Tag is ROFSTLookup.rochild)
else if (tn.Tag is ROFSTLookup.rochild ch)
{
ROFSTLookup.rochild ch = (ROFSTLookup.rochild)tn.Tag;
MyROFSTLookup.LoadChildren(ref ch);
chld = ch.children;
}
@@ -1531,8 +1478,6 @@ namespace Volian.Controls.Library
for (int i = 0; i < chld.Length; i++)
{
ProgressBar_SetValue(i);
DevComponents.AdvTree.Node tmp = null;
ROFSTLookup.rochild roc = chld[i];
// if this is a group, i.e. type 0, add a dummy node
@@ -1556,10 +1501,13 @@ namespace Volian.Controls.Library
}
Node tmp;
if (roc.value == null)
{
tmp = new DevComponents.AdvTree.Node(roc.title);
tmp.Tag = roc;
tmp = new DevComponents.AdvTree.Node(roc.title)
{
Tag = roc
};
int index = FindIndex(tn.Nodes, tmp.Text);
tn.Nodes.Insert(index, tmp);
@@ -1569,8 +1517,10 @@ namespace Volian.Controls.Library
}
else
{
tmp = new DevComponents.AdvTree.Node(roc.title);
tmp.Tag = roc;
tmp = new DevComponents.AdvTree.Node(roc.title)
{
Tag = roc
};
if (roc.roid.Length == 16)
{
@@ -1610,9 +1560,8 @@ namespace Volian.Controls.Library
{
cbxFndUnLnkROVals.Enabled = false;
}
else if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rochild)
else if (cmboTreeROs.SelectedNode.Tag is ROFSTLookup.rochild ro)
{
ROFSTLookup.rochild ro = (ROFSTLookup.rochild)cmboTreeROs.SelectedNode.Tag;
// B2022-026 RO Memory Reduction code - check children length
cbxFndUnLnkROVals.Enabled = (ro.children == null || ro.children.Length <= 0);
}
@@ -1634,12 +1583,7 @@ namespace Volian.Controls.Library
bool keeplooking = true;
//build a stack (bread crumb trail) of where is procedure set came from within the tree.
Stack<string> crumbs = new Stack<string>();
//crumbs.Push(Mydocversion.Name); // ex: "working draft"
//crumbs.Push(Mydocversion.MyFolder.Name); // ex: "Emergency Procedures"
//crumbs.Push(Mydocversion.MyFolder.MyParent.Name); // ex: "STPNOC-South Texas"
//crumbs.Push(advTreeProcSets.Nodes[0].Text); //top node of my tree
//crumbs.Push(Mydocversion.Name); // ex: "working draft"
crumbs.Push(Mydocversion.MyFolder.Name); // ex: "Emergency Procedures"
FolderInfo fi = Mydocversion.MyFolder.MyParent;
while (fi != null)
@@ -1824,13 +1768,11 @@ namespace Volian.Controls.Library
// item to be clicked and to turn on/off the btnTranCvtSelToTxt button for converting selected to test.
private void lbSrchResultsIncTrans_ItemClicked(object sender, EventArgs e)
{
ListBoxItem lbi = sender as ListBoxItem;
if (lbi != null)
if (sender is ListBoxItem lbi)
{
ItemBindingData ibd = lbi.Tag as ItemBindingData;
ItemInfo ii = ibd.DataItem as ItemInfo;
bool allowNonAdmin = IncTranCvtPerm();
if (lbi.CheckState == CheckState.Checked && ii != null)
if (lbi.CheckState == CheckState.Checked && ibd.DataItem is ItemInfo ii)
{
if (!allowNonAdmin && !UserInfo.CanEdit(MyUserInfo, ii.MyDocVersion))
{
@@ -2041,11 +1983,8 @@ namespace Volian.Controls.Library
bool includeSpecialChars = (TextSearchString != @"\?"); // true;
// Build list of selected types that were searched
string typstr = null;
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : typstr + ", " + s;
TypesSelected = "Filtered By: " + ((typstr != null) ? typstr : "All Step Types");
//TypesSelected = "Step Types Searched: " + ((typstr != null) ? typstr : "all step types");
//TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "all step types");
//TypesSelected = (typstr != null) ? "Searched Step Types: " + typstr : "Searched All Step Types";
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : $"{typstr}, {s}";
TypesSelected = $"Filtered By: {typstr ?? "All Step Types"}";
string unitPrefix = string.Empty;
if (Mydocversion != null)
unitPrefix = Mydocversion.DocVersionConfig.Unit_ProcedureNumber;
@@ -2065,11 +2004,8 @@ namespace Volian.Controls.Library
}
else
{
//string typstr = null;
//foreach (string s in lstCheckedStepTypesStr) typstr = typstr==null?s:typstr + ", " + s;
//ReportTitle = "Search for Selected Types"; //"Proms - Search by Type: " + typstr;
ReportTitle = "Step Element Report"; //"Proms - Search by Type: " + typstr;
TypesSelected = "Filtered By: " + typstr;
TypesSelected = $"Filtered By: {typstr}";
SearchString = null;
// B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results.
SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, string.Empty, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Value, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty);
@@ -2078,14 +2014,6 @@ namespace Volian.Controls.Library
}
else
{
//if (textSearchString.Equals(string.Empty))
//{
// MessageBox.Show("Please enter some search text, then click the Search button", "No Search Text");
// cbxTextSearchText.Focus();
//}
//else
//{
//ReportTitle = string.Format("Proms - {0} Search for '{1}'", cbxBooleanTxtSrch.Checked ? "Boolean" : "Text", TextSearchString);
ReportTitle = string.Format("Search for '{0}'", TextSearchString);
// C2020-009: Search - Allow search 'By Word'.
@@ -2116,8 +2044,6 @@ namespace Volian.Controls.Library
}
}
SearchString = TextSearchString;
//TypesSelected = (typstr != null) ? "Searched Step Types: " + typstr : "Searched All Step Types";
//TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "All Step Types");
// B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results.
SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix);
@@ -2131,7 +2057,6 @@ namespace Volian.Controls.Library
{
LastSearchWasAnnotations = true; // B2019-119 only refresh annotation search results if an annotation search was done
SearchString = null;
//ReportTitle = string.Format("Proms - Annotation Search for '{0}'", cbxTextSearchAnnotation.Text);
if (cbxTextSearchAnnotation.Text == null || cbxTextSearchAnnotation.Text == string.Empty)
{
ReportTitle = string.Format("Find {0}{1}", cbxAnnoTypes.Text, (cbxAnnoTypes.SelectedIndex > 0) ? " Annotations" : string.Empty);
@@ -2140,14 +2065,8 @@ namespace Volian.Controls.Library
{
ReportTitle = string.Format("Search {0}{1} For '{2}'", cbxAnnoTypes.Text, (cbxAnnoTypes.SelectedIndex > 0) ? " Annotations" : string.Empty, cbxTextSearchAnnotation.Text);
}
//ReportTitle = string.Format("Search Annotations for '{0}'", cbxTextSearchAnnotation.Text);
//string srchStr = ConvertSpecialChars(cbxTextSearchAnnotation.Text);//cbxTextSearchAnnotation.Text;
//TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "All Step Types");
//SearchResults = ItemInfoList.GetListFromAnnotationSearch(dviSearchList, typeSearchList, textSearchString, srchStr, cbxCaseSensitiveAnnoText.Checked);
SearchResults = ItemInfoList.GetListFromAnnotationSearch(DVISearchList, TypeSearchList, AnnotationSearchType, cbxTextSearchAnnotation.Text, cbxCaseSensitiveAnnoText.Checked, unitPrefix);
//UpdateAnnotationSearchResults();
cmbResultsStyleIndex = 2; // display annotation text in results
// C2019-001: Search in RNO steps only
if (cbxRnoOnlyAnnot.Checked) GetInRNOResults();
@@ -2155,9 +2074,7 @@ namespace Volian.Controls.Library
else if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[2]) // RO Search
{
SearchString = null;
//ReportTitle = "Proms - Referenced Object Search";
ReportTitle = string.Format("Search For Referenced Object:\n{0}", cmboTreeROs.Text);
//TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "All Step Types");
if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked)
{
@@ -2177,22 +2094,37 @@ namespace Volian.Controls.Library
{
ReportTitle = string.Format("Search For Transitions: Transition Type: {0}, Transition Category: {1}", cbxTranFormat.SelectedItem, cbxTranCategory.SelectedItem);
string docVersionList = string.Empty;
bool bypassSearch = false;
if (lstCheckedDocVersions.Count == 0)
docVersionList = cbxTranVersion.Tag.ToString();
else
{
string sep = string.Empty;
foreach (DocVersionInfo dvi in lstCheckedDocVersions)
//B2026-055 Transition Search Improvements
//Changed matching to take Filtered Formats into account if both tree
//Items selected and Format dropdown filtered
if (string.IsNullOrEmpty(cbxTranVersion.Tag?.ToString()))
{
docVersionList += sep + dvi.VersionID.ToString();
sep = ",";
docVersionList = string.Join(",", lstCheckedDocVersions.Select(y => y.VersionID.ToString()));
}
else
{
var fromatversionslst = cbxTranVersion.Tag.ToString().Split(',').Select(int.Parse);
var selectedversionlst = lstCheckedDocVersions.Select(y => y.VersionID);
docVersionList = string.Join(",", fromatversionslst.Intersect(selectedversionlst));
if (string.IsNullOrEmpty(docVersionList))
{
bypassSearch = true;
FlexibleMessageBox.Show("No Matches Found.", "Search");
}
}
}
// B2018-134 to search specifically for Outside Transitions, set docVeronList to empty string so that all procedure sets are considered
if (cbxTranCategory.SelectedItem.ToString() == "Outside")
if (cbxTranCategory.SelectedItem?.ToString() == "Outside")
docVersionList = string.Empty;
// added TypeSearchList for bug fix B2015-055
SearchResults = ItemInfoList.GetListFromTransitionSearch(docVersionList, cbxTranFormat.SelectedIndex - 1, cbxTranCategory.SelectedItem.ToString() == "All" ? string.Empty : cbxTranCategory.SelectedItem.ToString(), TypeSearchList);
if (cbxTranFormat.SelectedIndex == -1) cbxTranFormatFillIn(docVersionList);
if (!bypassSearch) SearchResults = ItemInfoList.GetListFromTransitionSearch(docVersionList, cbxTranFormat.SelectedIndex - 1, cbxTranCategory.SelectedItem?.ToString() == "All" ? string.Empty : (cbxTranCategory.SelectedItem?.ToString() ?? string.Empty), TypeSearchList);
cmbResultsStyleIndex = 3; // display step text in results
// C2019-001: Search in RNO steps only
if (cbxRnoOnlyTrans.Checked) GetInRNOResults();
@@ -2249,16 +2181,13 @@ namespace Volian.Controls.Library
string tmpmsg = (cbxBooleanTxtSrch.Checked && ex.Message.Contains("Syntax error") && ex.Message.Contains("full-text search")) ?
"Place \"\" around words that you are searching for, so that parser can better understand what you are trying to find" :
ex.Message;
FlexibleMessageBox.Show(tmpmsg, "Search Error: " + ex.GetType().Name);
FlexibleMessageBox.Show(tmpmsg, $"Search Error: {ex.GetType().Name}");
}
finally
{
Cursor = savcursor;
}
//Console.WriteLine("{0} Milliseconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalMilliseconds);
OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks)));
//if (VlnSettings.DebugMode)
// MessageBox.Show(string.Format("{0} Milliseconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalMilliseconds));
}
private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click)
@@ -2319,7 +2248,7 @@ namespace Volian.Controls.Library
if (ii.SearchAnnotationText == null) ii.SearchAnnotationText = AnnotationInfo.Get(ii.ItemAnnotations[0].AnnotationID).SearchText;
}
if (ii.SearchAnnotationText == null) ii.SearchAnnotationText = "None - [" + ii.DisplayText + "]";
if (ii.SearchAnnotationText == null) ii.SearchAnnotationText = $"None - [{ii.DisplayText}]";
else
{
hasAnnot = true;
@@ -2469,7 +2398,7 @@ namespace Volian.Controls.Library
//C2025-005 Find Step Elements
//Need to refresh the Doc List and Available Step Types
//if All Procedure Sets was selected
if (n.Tag == SelectAllProcedureSetsText)
if (n.Tag is string txt && txt == SelectAllProcedureSetsText)
{
if (n.Checked)
{
@@ -2520,7 +2449,6 @@ namespace Volian.Controls.Library
{
if (tn.Checked)
{
//tn.Style = DevComponents.AdvTree.NodeStyles.Apple; // sets green background on selected folder(s)
//B2023-112: Don't crash if on top 'All' node (did not have associated folder)
FolderInfo fi = tn.Tag as FolderInfo;
// if this folder has a docversion, use its id:
@@ -2567,8 +2495,10 @@ namespace Volian.Controls.Library
lstCheckedStepTypesStr.Clear();
foreach (string str in strs)
{
Node newnode = new DevComponents.AdvTree.Node();
newnode.Text = str;
Node newnode = new DevComponents.AdvTree.Node
{
Text = str
};
advTreeStepTypes.Nodes.Add(newnode);
}
buildStepTypePannelTitle();
@@ -2657,16 +2587,23 @@ namespace Volian.Controls.Library
private void cbxTranFormatFillIn(string vid)
{
vid = vid.IndexOf(",") < 0 ? vid : vid.Substring(0, cbxTranVersion.Tag.ToString().IndexOf(","));
//B2026-055 Transition Search Improvements
//Change the order of items happening
//previous order was causing an error when clicked downdownlist to
//show all items and then didn't select an item in the list
cbxTranFormat.Items.Clear();
cbxTranFormat.Items.Add("All");
if (!string.IsNullOrEmpty(vid))
{
DocVersionInfo dvi = DocVersionInfo.Get(int.Parse(vid));
TransTypeList ttl = dvi.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList;
cbxTranFormat.Items.Clear();
cbxTranFormat.Items.Add("All");
for (int i = 0; i < ttl.MaxIndex; i++)
{
cbxTranFormat.Items.Add(new TransItem(ttl[i].TransMenu.Replace("?.", string.Empty), ttl[i].TransFormat.Replace("?.", string.Empty)));
}
}
cbxTranFormat.SelectedIndex = 0;
@@ -2717,9 +2654,9 @@ namespace Volian.Controls.Library
if (advTreeStepTypes.Nodes.Count == 1 && n.Checked)
{
if (n.Tag is DocVersionInfo) // Only set MyDocVersion if it is a DocVersion
if (n.Tag is DocVersionInfo info) // Only set MyDocVersion if it is a DocVersion
{
Mydocversion = (DocVersionInfo)n.Tag;
Mydocversion = info;
StartAdvTreeStepTypesFillIn();// B2016-258 Hang after selecting a procedure if the Step Type panel is open on the search panel
}
}
@@ -2744,8 +2681,6 @@ namespace Volian.Controls.Library
if (n.Checked)
{
//n.Style = DevComponents.AdvTree.NodeStyles.Apple; // B2023-112: coloring of proc set tree nodes was not working correctly
if (sd == null)
{
//C2023-010: Since the tag is null for Word Sections and HLS types, we need to determine which one has been selected. Word sections we need
@@ -2874,7 +2809,7 @@ namespace Volian.Controls.Library
xpStepTypes.TitleStyle.BackColor1.Color = saveXpStepTypeTitleColor;
}
else //lstCheckedStepTypes.Count > 0
else
{
// show how many selected whether panel is expanded or not
xpStepTypes.TitleText = string.Format("{0} Step Element{1} Selected", lstCheckedStepTypes.Count, (lstCheckedStepTypes.Count > 1) ? "s" : string.Empty); // B2018-132 changed second {0} to {1}
@@ -2946,7 +2881,6 @@ namespace Volian.Controls.Library
private bool OnlyWordSectTypeSel()
{
// B2021-100: Enable/disable the RNO Only checkbox & WORD Sections tree node in Step Elements to Search.
// lstCheckedStepTypes[x] = 0 for Word sections:
if (lstCheckedStepTypes != null && lstCheckedStepTypes.Count == 1 && lstCheckedStepTypes[0] == 0)
return true;
@@ -3145,11 +3079,6 @@ namespace Volian.Controls.Library
lbSrchResults.DataSource = null;
lbSrchResults.Items.Clear();
toolTip1.SetToolTip(lbSrchResults, null);
string unitPrefix = string.Empty;
if (Mydocversion != null)
unitPrefix = Mydocversion.DocVersionConfig.Unit_ProcedureNumber;
if (unitPrefix.EndsWith("#"))
unitPrefix = unitPrefix.Replace("#", string.Empty);
Cursor = Cursors.WaitCursor;
try // B2021-045: don't crash if xml file cannot be loaded.
@@ -3179,7 +3108,7 @@ namespace Volian.Controls.Library
Node tnode = advTreeProcSets.FindNodeByDataKey(folderID);
if (tnode != null) tnode.Checked = true;
}
Mydocversion = tmpdvi == null ? fromLoadFiledvi : tmpdvi;
Mydocversion = tmpdvi ?? fromLoadFiledvi;
}
AdvTreeStepTypesFillIn();
@@ -3202,10 +3131,10 @@ namespace Volian.Controls.Library
}
string typstr = null;
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : typstr + ", " + s;
TypesSelected = "Filtered By: " + ((typstr != null) ? typstr : "All Step Types");
foreach (string s in lstCheckedStepTypesStr) typstr = typstr == null ? s : $"{typstr}, {s}";
TypesSelected = $"Filtered By: {typstr ?? "All Step Types"}";
ReportTitle = "Step Element Report"; //"Proms - Search by Type: " + typstr;
TypesSelected = "Filtered By: " + typstr;
TypesSelected = $"Filtered By: {typstr}";
advTreeStepTypes.RefreshItems();
buildStepTypePannelTitle();
}
@@ -3298,7 +3227,7 @@ namespace Volian.Controls.Library
}
}
}
catch (Exception ex)
catch (Exception)
{
FlexibleMessageBox.Show("An error occurred while reading the xml file.\r\n\r\nThis can happen when the file selected for the Load is not saved\r\n" +
"from a PROMS Search or if some of the steps no longer exist.", "Search Load Failed", MessageBoxButtons.OK);
@@ -3478,6 +3407,46 @@ namespace Volian.Controls.Library
}
}
//B2026-055 Transition Search Improvements
//Update Enabling/Disabling of Tree Elements
public bool TraverseTree(DevComponents.AdvTree.Node node, string[] versions)
{
bool result = true;
int numhiddenchildnodes = 0;
// Recursively call this method for each child node
foreach (DevComponents.AdvTree.Node childNode in node.Nodes)
{
if (!TraverseTree(childNode, versions))
{
numhiddenchildnodes++;
}
}
// Process the current node (e.g., enable it if it is contained)
//Select all always shows
//also Enable Dummy Nodes by default
if (versions == null || (versions.Length == 1 && string.IsNullOrEmpty(versions[0])) || node.Tag == null || (node.Tag is string txt && txt == SelectAllProcedureSetsText))
{
node.Enabled = true;
return true;
}
//if all child nodes are hidden, hide the parent
else if (numhiddenchildnodes == node.Nodes.Count)
{
result = false;
}
FolderInfo fi = (FolderInfo)node.Tag;
if (fi.FolderDocVersionCount > 0)
{
result = versions.Contains(fi.FolderDocVersions[0].VersionID.ToString());
}
node.Enabled = result;
return result;
}
private void btnCopySearchResults_Click(object sender, EventArgs e)
{
ICollection<ItemInfo> myList = lbSrchResults.DataSource as ICollection<ItemInfo>;
@@ -3543,7 +3512,6 @@ namespace Volian.Controls.Library
private bool IncTransCvtAllToTextPerm()
{
if (_SearchResults == null) return false;
int cnt = 0;
bool allowNonAdmin = IncTranCvtPerm();
foreach (ItemInfo ii in _SearchResults)
{
@@ -3659,6 +3627,8 @@ namespace Volian.Controls.Library
}
}
}
#pragma warning restore IDE1006 // Naming Styles
#pragma warning restore IDE0044 // Add readonly modifier
#endregion
@@ -1,12 +1,9 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using Volian.Controls.Library;
using DevComponents.DotNetBar;
using JR.Utils.GUI.Forms;
using Volian.Base.Library;
@@ -59,13 +56,7 @@ namespace Volian.Controls.Library
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
private static bool _SyncronizeEnahnced = false;
public static bool SyncronizeEnhanced
{
get { return DisplayTabControl._SyncronizeEnahnced; }
set { DisplayTabControl._SyncronizeEnahnced = value; }
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private static Dictionary<int, DisplayTabControl> _AllDTCs = new Dictionary<int, DisplayTabControl>();
private int _VersionID = 0;
// zero tells us to PROMS just opened and no procedure was selected yet so use the main proms window
@@ -75,11 +66,11 @@ namespace Volian.Controls.Library
get { return _VersionID; }
set
{
if ((int)value != 0)
if (value != 0)
{
if (!_AllDTCs.ContainsKey((int)value))
{
_AllDTCs.Add((int)value, this);
_AllDTCs.Add(value, this);
if (_VersionID == 0)
_VersionID = value;
else
@@ -145,17 +136,10 @@ namespace Volian.Controls.Library
return (verIdList.Count > 1);
}
}
//public event ItemSelectedChangedEvent OpenEnhancedDocument;
//public void OnOpenEnhancedDocument(ItemSelectedChangedEventArgs args)
//{
// if (OpenEnhancedDocument != null)
// OpenEnhancedDocument(this, args);
//}
public event ItemSelectedChangedEvent OpenInSeparateWindow;
public void OnOpenInSeparateWindow(ItemSelectedChangedEventArgs args)
{
if (OpenInSeparateWindow != null)
OpenInSeparateWindow(this, args);
OpenInSeparateWindow?.Invoke(this, args);
}
// C2020-033: Provide way to expand/fill in Search/Incoming Transition panel
public event DisplayTabControlEditorSearchIncTransEvent SearchIncTrans;
@@ -167,31 +151,29 @@ namespace Volian.Controls.Library
public event ItemSelectedChangedEvent RefreshEnhancedDocument;
public void OnRefreshEnhancedDocument(ItemSelectedChangedEventArgs args)
{
if (RefreshEnhancedDocument != null)
RefreshEnhancedDocument(this, args);
RefreshEnhancedDocument?.Invoke(this, args);
}
public event DisplayTabControlStatusEvent StatusChanged;
public void ONStatusChanged(object Sender, DisplayTabControlStatusEventArgs args)
{
if (StatusChanged != null) StatusChanged(Sender, args);
StatusChanged?.Invoke(Sender, args);
}
public event DisplayTabControlEvent ToggleRibbonExpanded;
public void OnToggleRibbonExpanded(object sender, EventArgs args)
{
if (ToggleRibbonExpanded != null) ToggleRibbonExpanded(sender, args);
ToggleRibbonExpanded?.Invoke(sender, args);
}
public event DisplayTabControlEvent SelectedDisplayTabItemChanged;
public void OnSelectedDisplayTabItemChanged(object sender, EventArgs args)
{
if (SelectedDisplayTabItemChanged != null) SelectedDisplayTabItemChanged(sender, args);
SelectedDisplayTabItemChanged?.Invoke(sender, args);
}
// C2015-022 added copystep event to commuicate with child windows
public event ItemChangedEventHandler CopyStepSelected;
public void OnCopyStepSelected(ItemChangedEventArgs args)
{
if (CopyStepSelected != null)
CopyStepSelected(this, args);
CopyStepSelected?.Invoke(this, args);
}
#region Private Fields
@@ -234,6 +216,8 @@ namespace Volian.Controls.Library
}
private StepRTB _MyStepRTB = null;
private bool _RibbonExpanded = true;
//Keeping for possible future references
public StepRTB MyStepRTB
{
get { return _MyStepRTB; }
@@ -308,7 +292,7 @@ namespace Volian.Controls.Library
/// <param name="args"></param>
internal void OnItemClick(object sender, StepPanelEventArgs args)
{
if (ItemClick != null) ItemClick(sender, args);
ItemClick?.Invoke(sender, args);
}
/// <summary>
/// This occurs when the user moves onto or off of a link within a RichTextBox
@@ -414,7 +398,7 @@ namespace Volian.Controls.Library
_MyEditItem = null;
_MyStepRTB = null;
}
if (ItemSelectedChanged != null) ItemSelectedChanged(sender, args);
ItemSelectedChanged?.Invoke(sender, args);
}
void _MyStepRTB_Disposed(object sender, EventArgs e)
@@ -482,8 +466,7 @@ namespace Volian.Controls.Library
void DisplayTabControl_Resize(object sender, EventArgs e)
{
// If the currently selected Item is in a Step, then adjust the scroll as necessary to keep it visible
if (_MyEditItem != null)
_MyEditItem.ItemShow();
_MyEditItem?.ItemShow();
}
private void SetupBar(Bar myBar)
{
@@ -537,20 +520,23 @@ namespace Volian.Controls.Library
DisplayTabItem dti = e.DockContainerItem as DisplayTabItem;
if (dti != null && dti.MyStepTabPanel != null)
dti.MyStepTabPanel.MyStepPanel.Dispose();
DisplayTabItem myTabItem = e.DockContainerItem as DisplayTabItem;
if (myTabItem != null)
if (e.DockContainerItem is DisplayTabItem myTabItem)
{
if (myTabItem.MyDSOTabPanel != null)
{
myTabItem.MyDSOTabPanel.CloseDSO();
}
myTabItem.MyDSOTabPanel?.CloseDSO();
}
MySessionInfo.CheckInItem(dti.OwnerID);
if (((Bar)sender).Items == null) return;
if (((Bar)sender).Items.Count == 1)// Remove bar if last item is closed...
{
Bar bar = sender as Bar;
if (bar != null)
//B2026 - 048 View Only Mode freezes PROMS if last tab closed
//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));
}
if (sender is Bar bar)
{
if (dotNetBarManager1.Bars.Contains(bar.Name))
dotNetBarManager1.Bars.Remove(bar);
@@ -568,12 +554,18 @@ namespace Volian.Controls.Library
ActivateRemainingTab((Bar)sender);
}
}
public event StepTabRibbonEvent EnableDisableStepProperties;
private void OnEnableDisableStepProperties(StepTabRibbonEventArgs args)
{
EnableDisableStepProperties?.Invoke(this, args);
}
#endregion
#region Public Methods
public void RefreshItem(ItemInfo myItemInfo)
{
ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item
string key = "Item - " + proc.ItemID.ToString();
string key = $"Item - {proc.ItemID}";
if (_MyDisplayTabItems.ContainsKey(key)) // If procedure page open use it
{
@@ -708,9 +700,8 @@ namespace Volian.Controls.Library
if (EDOfficeViewerX == null || EDWordCtrl == null)
{
MessageBox.Show("Edraw needs to be installed or reinstalled on this device. " + Environment.NewLine + "" + Environment.NewLine +
"Please contact your IT Administrator to install and register Edraw that was provided with the PROMS Installation media. If additional support is needed, please contact Volian.", "Error in Word section",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
MessageBox.Show($"Edraw needs to be installed or reinstalled on this device. {Environment.NewLine}{Environment.NewLine}Please contact your IT Administrator to install and register Edraw that was provided with the PROMS Installation media. If additional support is needed, please contact Volian.",
"Error in Word section", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return null;
}
else
@@ -721,19 +712,13 @@ namespace Volian.Controls.Library
}
}
public T GetValue<T>(string registryKeyPath, string value, T defaultValue = default(T))
{
T retVal = default(T);
retVal = (T)Registry.GetValue(registryKeyPath, value, defaultValue);
return retVal;
}
public T GetValue<T>(string registryKeyPath, string value, T defaultValue = default) => (T)Registry.GetValue(registryKeyPath, value, defaultValue);
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "Keeping type for future usage")]
public bool PasteRTBItem(ItemInfo myItemInfo, int copyStartID, ItemInfo.EAddpingPart pasteType, int type)
{
CleanUpClosedItems();
ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item
string key = "Item - " + proc.ItemID.ToString();
string key = $"Item - {proc.ItemID}";
if (_MyDisplayTabItems.ContainsKey(key) && pasteType != ItemInfo.EAddpingPart.Replace) // If procedure page open use it unless replace
{
@@ -760,7 +745,7 @@ namespace Volian.Controls.Library
EditItem ei = edtitm.PasteReplace(copyStartID);
if (ei == null)
{
CloseTabItem(_MyDisplayTabItems["Item - " + myItemInfo.ItemID.ToString()]); //Grab itemID and set to close open tab.
CloseTabItem(_MyDisplayTabItems[$"Item - {myItemInfo.ItemID}"]); //Grab itemID and set to close open tab.
return false; //B2017-179 PasteReplace will return null if was aborted
}
@@ -779,7 +764,7 @@ namespace Volian.Controls.Library
else if (_MyDisplayTabItems.ContainsKey(key) && pasteType == ItemInfo.EAddpingPart.Replace)
{
// B2024-038: changed tab key to procedure (was item, which caused crash if section)
CloseTabItem(_MyDisplayTabItems["Item - " + proc.ItemID.ToString()]); //Grab itemID and set to close open tab.
CloseTabItem(_MyDisplayTabItems[$"Item - {proc.ItemID}"]); //Grab itemID and set to close open tab.
return false; //B2017-179 PasteReplace will return null if was aborted
}
return false;
@@ -791,7 +776,7 @@ namespace Volian.Controls.Library
//removeitem!
ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item
string key = "Item - " + proc.ItemID.ToString();
string key = $"Item - {proc.ItemID}";
if (_MyDisplayTabItems.ContainsKey(key)) // If procedure page open use it
{
@@ -817,7 +802,7 @@ namespace Volian.Controls.Library
{
CleanUpClosedItems();
ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item
string key = "Item - " + proc.ItemID.ToString();
string key = $"Item - {proc.ItemID}";
if (_MyDisplayTabItems.ContainsKey(key)) // If procedure page open use it
{
@@ -866,17 +851,16 @@ namespace Volian.Controls.Library
string key = "Doc - ";
// there is no entry if it is an auto table of contents:
if (myItemInfo.MyContent.MyEntry != null)
key = key + myItemInfo.MyContent.MyEntry.MyDocument.DocID.ToString();
key += myItemInfo.MyContent.MyEntry.MyDocument.DocID.ToString();
else
key = key + "0";
DisplayTabItem myTabItem = null;
key += "0";
if (_MyDisplayTabItems.ContainsKey(key)) // If page open, close it
{
myTabItem = _MyDisplayTabItems[key];
if (myTabItem.MyDSOTabPanel != null)
_ = _MyDisplayTabItems[key];
if (((DisplayTabItem)null).MyDSOTabPanel != null)
{
myTabItem.MyDSOTabPanel.IsBeingDeleted = isBeingDeleted;
CloseTabItem(myTabItem);
((DisplayTabItem)null).MyDSOTabPanel.IsBeingDeleted = isBeingDeleted;
CloseTabItem(null);
}
}
}
@@ -884,11 +868,19 @@ namespace Volian.Controls.Library
public void CloseTabItem(DisplayTabItem myTabItem)
{
if (myTabItem.ContainerControl == null) return;
Bar b = myTabItem.ContainerControl as Bar;
if (b != null)
if (myTabItem.ContainerControl is Bar b)
{
try
{
b.CloseDockTab(myTabItem);
//b.Items.Remove(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);
}
}
@@ -930,8 +922,7 @@ namespace Volian.Controls.Library
if (_RemovedDisplayTabItems.Contains(myBar.SelectedDockContainerItem as DisplayTabItem))
myBar.SelectedDockContainerItem = FindRemainingTab(myBar);
myBar.SelectedDockContainerItem.Selected = true;
StepTabPanel pnl = myBar.SelectedDockContainerItem.Control as StepTabPanel;
if (pnl != null)
if (myBar.SelectedDockContainerItem.Control is StepTabPanel pnl)
pnl.MyStepPanel.ItemShow();
}
}
@@ -1017,7 +1008,7 @@ namespace Volian.Controls.Library
PnlCaret.Visible = false;
}
// B2019-161 When tracking timing time this action
private static VolianTimer _TimeActivity = new VolianTimer("DisplayTabControl.cs tmrCaret_Tick", 881);
private static readonly VolianTimer _TimeActivity = new VolianTimer("DisplayTabControl.cs tmrCaret_Tick", 881);
private void tmrCaret_Tick(object sender, EventArgs e)
{
@@ -1027,22 +1018,6 @@ namespace Volian.Controls.Library
}
#endregion
#region Private Methods
///// <summary>
///// Gets and sets the SelectedDisplayTabItem (Active Tab)
///// </summary>
//public DisplayTabItem SelectedDisplayTabItem1
//{
// get { return (DisplayTabItem)_MyBar.SelectedDockContainerItem; }
// set
// {
// //Volian.Base.Library.vlnStackTrace.ShowStackLocal("SelectedDisplayTabItem");
// if (value != null)
// {
// value.Focus();
// value.Selected = true;
// }
// }
//}
public void SelectDisplayTabItem(DisplayTabItem myDisplayTabItem)
{
if (myDisplayTabItem != null)
@@ -1094,8 +1069,7 @@ namespace Volian.Controls.Library
if (myBar == null) myBar = b;// Remember the first available bar if a specific bar cannot be found
foreach (object itm in b.Items)
{
DisplayTabItem myTabItem = itm as DisplayTabItem;
if (myTabItem != null && myTabItem.MyStepTabPanel != null && myItemInfo != null)
if (itm is DisplayTabItem myTabItem && myTabItem.MyStepTabPanel != null && myItemInfo != null)
if (myTabItem.MyStepTabPanel.MyProcedureItemInfo.ItemID == myItemInfo.MyProcedure.ItemID)
return b;
}
@@ -1107,7 +1081,7 @@ namespace Volian.Controls.Library
_UniqueBarCount++;
myBar = BarUtilities.CreateDocumentBar();
myBar.DockTabClosing += new DockTabClosingEventHandler(myBar_DockTabClosing);
myBar.Name = "barDocuments" + _UniqueBarCount.ToString();
myBar.Name = $"barDocuments{_UniqueBarCount}";
fillDocDockSite.GetDocumentUIManager().Dock(myBar);
SetupBar(myBar);
}
@@ -1123,8 +1097,7 @@ namespace Volian.Controls.Library
if (myBar == null) myBar = b;// Remember the first available bar if a specific bar cannot be found
foreach (object itm in b.Items)
{
DisplayTabItem myTabItem = itm as DisplayTabItem;
if (myTabItem != null && myTabItem.MyStepTabPanel != null && myTabItem.MyStepTabPanel.MyProcedureItemInfo != null)
if (itm is DisplayTabItem myTabItem && myTabItem.MyStepTabPanel != null && myTabItem.MyStepTabPanel.MyProcedureItemInfo != null)
if (myTabItem.MyStepTabPanel.MyProcedureItemInfo.ItemID == myItemInfo.MyProcedure.ItemID)
return myTabItem.MyStepTabPanel;
}
@@ -1155,8 +1128,7 @@ namespace Volian.Controls.Library
if (stp != null)
{
EditItem ei = stp.SelectedEditItem;
if (ei != null)
ei.SaveCurrentAndContents();
ei?.SaveCurrentAndContents();
}
}
}
@@ -1164,40 +1136,16 @@ namespace Volian.Controls.Library
public DisplayTabItem GetProcDisplayTabItem(ItemInfo myItemInfo)
{
ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item
string key = "Item - " + proc.ItemID.ToString();
DisplayTabItem pg = null;
string key = $"Item - {proc.ItemID}";
if (_MyDisplayTabItems.ContainsKey(key)) // If procedure page open use it
return _MyDisplayTabItems[key];
return null;
}
/// <summary>
/// This opens a Step page based upon a ItemInfo.
///
/// </summary>
/// <param name="myItemInfo"></param>
/// <returns></returns>
//public bool IsItemInfoProcedureOpen(ItemInfo ii)
// if (ii == null) return false; //{
// ItemInfo proc = ii.MyProcedure; // Find procedure Item
// if (dicEnhancedDocuments.ContainsKey(ii.MyProcedure.MyDocVersion))
// {
// frmEnhanced frm = dicEnhancedDocuments[ii.MyProcedure.MyDocVersion];
// string key = "Item - " + proc.ItemID.ToString();
// if (frm.MyDisplayTabClntrol._MyDisplayTabItems.ContainsKey(key))
// return true;
// }
// // return true;
// //return false;
// return false;
//}
//public Dictionary<DocVersionInfo, frmEnhanced> dicEnhancedDocuments = new Dictionary<DocVersionInfo, frmEnhanced>();
private DisplayTabItem OpenStepTabPage(ItemInfo myItemInfo, bool setFocus, bool viewonlymode = false)
{
ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item
string key = "Item - " + proc.ItemID.ToString();
DisplayTabItem pg = null;
string key = $"Item - {proc.ItemID}";
DisplayTabItem pg;
if (_MyDisplayTabItems.ContainsKey(key)) // If procedure page open use it
{
pg = _MyDisplayTabItems[key];
@@ -1219,9 +1167,6 @@ namespace Volian.Controls.Library
HandleChangeId(myItemInfo, pg);
SelectDisplayTabItem(pg);
// If this is an enhanced document, check for refresh of text items:
//if (myItemInfo.IsProcedure)
//{
// make the myiteminfo into a procedureinfo (depending on where this is called from, just
// casting it crashed:
ProcedureInfo pi = ProcedureInfo.Get(myItemInfo.MyProcedure.ItemID);
@@ -1236,7 +1181,6 @@ namespace Volian.Controls.Library
pi.EnhancedProcedureRefreshTextDifferences(iil);
}
}
//}
}
pg.MyStepTabPanel.MyProcedureItemInfo = proc;
@@ -1251,11 +1195,6 @@ namespace Volian.Controls.Library
}
Application.DoEvents();
pg.SelectedItemInfo = myItemInfo; // Select the item
//StepConfig sc = new StepConfig(myItemInfo.MyContent.Config);
//if (sc.Step_SourceToBackground != null || sc.Step_SourceToDeviation != null)
// pg.MyStepTabPanel.MyStepTabRibbon.btnEnhancedDocSync.Visible = true;
//else
// pg.MyStepTabPanel.MyStepTabRibbon.btnEnhancedDocSync.Visible = false;
return pg;
}
private bool _SyncEnhancedDocuments;
@@ -1276,7 +1215,7 @@ namespace Volian.Controls.Library
{
if (!Volian.Base.Library.VlnSettings.GetCommandFlag("NOCHGID"))
{
dlgChgId dlgCI = new dlgChgId(this); //, null);
dlgChgId dlgCI = new dlgChgId(this);
dlgCI.ShowDialog(this);
}
ItemsChangeIds.Add(myItemInfo.MyProcedure.ItemID, ChgId);
@@ -1285,11 +1224,6 @@ namespace Volian.Controls.Library
private void SetChangeId(string chgid, DisplayTabItem pg, ItemInfo ii)
{
//if (pg == null || pg.MyStepTabPanel == null)
//{
// ChgId = null;
// return;
//}
if (pg != null && pg.MyStepTabPanel != null) pg.MyStepTabPanel.MyStepTabRibbon.SetChangeId(chgid, ii);
ChgId = chgid;
}
@@ -1297,7 +1231,7 @@ namespace Volian.Controls.Library
private bool LibDocAlreadyOpen(ItemInfo myItemInfo)
{
EntryInfo myEntry = myItemInfo.MyContent.MyEntry;
string key = "Doc - " + myEntry.DocID;
string key = $"Doc - {myEntry.DocID}";
DisplayTabItem pg = null;
return LibDocAlreadyOpen(myItemInfo, key, ref pg, false);
}
@@ -1341,7 +1275,7 @@ namespace Volian.Controls.Library
{
DisplayTabItem pg = null;
EntryInfo myEntry = myItemInfo.MyContent.MyEntry;
string key = "Doc - " + myEntry.DocID;
string key = $"Doc - {myEntry.DocID}";
bool libDocAlreadyOpen = LibDocAlreadyOpen(myItemInfo, key, ref pg, true);
if (!libDocAlreadyOpen && pg == null)
{
@@ -1350,8 +1284,6 @@ namespace Volian.Controls.Library
FlexibleMessageBox.Show("Too many Word Documents Open. Please close one of the Documents before attempting to open another");
return null;
}
//if ((myItemInfo.MyContent.MyEntry.MyDocument.LibTitle ?? "") != "")
// MessageBox.Show("WARNING: All edits made to this Library Document will be applied to all uses of the Document");
pg = new DisplayTabItem(this.components, this, myItemInfo, key); // Open a new document page
// B2917-219 if MyEdWord is null that means we had trouble opening the word attachment and either a blank document was created or a previous version was recovered
// so we now we want to open the now blank or recovered attachment
@@ -1373,8 +1305,8 @@ namespace Volian.Controls.Library
{
_MyBar = GetParentBar(null); // B2016-131 - allow open of a non-referenced library document
CleanUpClosedItems();
DisplayTabItem pg = null;
string key = "Doc - " + myDocumentInfo.DocID;
string key = $"Doc - {myDocumentInfo.DocID}";
DisplayTabItem pg;
if (_MyDisplayTabItems.ContainsKey(key)) // If document page open use it
pg = _MyDisplayTabItems[key];
else
@@ -1404,12 +1336,10 @@ namespace Volian.Controls.Library
_MyDisplayTabItems.Remove(myDisplayTabItem.MyKey);
// Dispose of the procedure tab panel
if (myDisplayTabItem.MyStepTabPanel != null)
myDisplayTabItem.MyStepTabPanel.Dispose();
myDisplayTabItem.MyStepTabPanel?.Dispose();
// Dispose of the MS Word Panel
if (myDisplayTabItem.MyDSOTabPanel != null)
myDisplayTabItem.MyDSOTabPanel.CloseDSO();
myDisplayTabItem.MyDSOTabPanel?.CloseDSO();
components.Remove(myDisplayTabItem);
myDisplayTabItem.Dispose();
+40 -123
View File
@@ -1,9 +1,5 @@
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Drawing;
using VEPROMS.CSLA.Library;
using JR.Utils.GUI.Forms;
@@ -12,12 +8,10 @@ namespace Volian.Controls.Library
public partial class DisplayTabItem : DevComponents.DotNetBar.DockContainerItem
{
#region Private Fields
private DisplayTabControl _MyDisplayTabControl;
private ItemInfo _MyItemInfo;
private StepTabPanel _MyStepTabPanel;
private string _MyKey;
private DSOTabPanel _MyDSOTabPanel;
private DocumentInfo _MyDocumentInfo;
private readonly DisplayTabControl _MyDisplayTabControl;
private readonly ItemInfo _MyItemInfo;
private readonly string _MyKey;
private readonly DocumentInfo _MyDocumentInfo;
#endregion
@@ -25,16 +19,10 @@ namespace Volian.Controls.Library
/// <summary>
/// ItemInfo associated with this DisplayTabItem
/// </summary>
private int _OwnerID;
public int OwnerID
{
get { return _OwnerID; }
set { _OwnerID = value; }
}
public int OwnerID { get; set; }
public ItemInfo MyItemInfo
{
get { return _MyItemInfo; }
//set { _MyItemInfo = value; }
}
/// <summary>
/// get Key Either:
@@ -48,31 +36,12 @@ namespace Volian.Controls.Library
/// <summary>
/// Related StepTabPanel for a Step page
/// </summary>
public StepTabPanel MyStepTabPanel
{
get { return _MyStepTabPanel; }
set { _MyStepTabPanel = value; }
}
public StepTabPanel MyStepTabPanel { get; set; }
/// <summary>
/// Related DSOTabPanle for a Word page
/// </summary>
public DSOTabPanel MyDSOTabPanel
{
get { return _MyDSOTabPanel; }
set { _MyDSOTabPanel = value; }
}
private string _MyUserRole;
public string MyUserRole
{
get { return _MyUserRole; }
set { _MyUserRole = value; }
}
private bool _Closed = false;
public bool Closed
{
get { return _Closed; }
set { _Closed = value; }
}
public DSOTabPanel MyDSOTabPanel { get; set; }
public string MyUserRole { get; set; }
/// <summary>
/// Current SelectedItemInfo for this page
/// </summary>
@@ -80,13 +49,13 @@ namespace Volian.Controls.Library
{
get
{
if (_MyStepTabPanel == null) return null;
return _MyStepTabPanel.SelectedItemInfo;
if (MyStepTabPanel == null) return null;
return MyStepTabPanel.SelectedItemInfo;
}
set
{// B2018-074 Don't crash if opening MSWord section from Tools window in Debug Mode
if (_MyStepTabPanel != null)
_MyStepTabPanel.SelectedItemInfo = value;
if (MyStepTabPanel != null)
MyStepTabPanel.SelectedItemInfo = value;
}
}
/// <summary>
@@ -121,14 +90,6 @@ namespace Volian.Controls.Library
else
SetupDSOTabPanel();
SetupSecurity(myItemInfo);
// B2022-055 assigning the Name caused a duplicate name error
// we found that the procedure tab control remained in the Control list after the procedure was closed
// later on we need to find out why it isn't removed when the procedure is closed
//if (MyDSOTabPanel == null || MyDSOTabPanel.MyEdWord != null) // B2017-219 check needed if we could not open a word attachment
//{
// //Name = string.Format("DisplayTabItem {0}", myItemInfo.ItemID);
//}
}
private bool MesssageShown = false;
public void SetupSecurity(ItemInfo myItem)
@@ -172,43 +133,37 @@ namespace Volian.Controls.Library
FlexibleMessageBox.Show("Security has not been defined for PROMS. All functionality has been defaulted to the lowest level for all users until security is defined.", "no security defined", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);
MesssageShown = true;
}
_MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
}
else if (ui.IsAdministrator())
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupAdminMode();
MyStepTabPanel?.MyStepTabRibbon.SetupAdminMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Administrator";
}
else if (ui.IsSetAdministrator(myItem.MyDocVersion))
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupSetAdminMode();
MyStepTabPanel?.MyStepTabRibbon.SetupSetAdminMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Set Administrator";
}
else if (ui.IsROEditor(myItem.MyDocVersion) && !ui.IsWriter(myItem.MyDocVersion))
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupROEditorMode();
MyStepTabPanel?.MyStepTabRibbon.SetupROEditorMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - RO Editor";
}
else if (ui.IsWriter(myItem.MyDocVersion))
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupWriterMode();
MyStepTabPanel?.MyStepTabRibbon.SetupWriterMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Writer";
}
else if (ui.IsReviewer(myItem.MyDocVersion))
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
MyStepTabPanel?.MyStepTabRibbon.SetupReviewerMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Reviewer";
}
else
{
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepTabRibbon.SetupReviewerMode();
MyStepTabPanel?.MyStepTabRibbon.SetupReviewerMode();
MyUserRole = Volian.Base.Library.VlnSettings.UserID + " - Reviewer";
}
}
@@ -222,42 +177,19 @@ namespace Volian.Controls.Library
InitializeComponent();
this.Click += new EventHandler(DisplayTabItem_Click);
SetupLibraryDocumentDSOTabPanel();
// B2022-055 assigning the Name caused a duplicate name error
// we found that the procedure tab control remained in the Control list after the procedure was closed
// later on we need to find out why it isn't removed when the procedure is closed
//Name = string.Format("DisplayTabLibraryDocument {0}", myDocumentInfo.DocID);
}
protected override void OnDisplayedChanged()
{
//Console.WriteLine("=>=>=>=> OnDisplayedChanged");
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepPanel.DisplayItemChanging = true;
if (MyStepTabPanel != null)
MyStepTabPanel.MyStepPanel.DisplayItemChanging = true;
base.OnDisplayedChanged();
if (_MyStepTabPanel != null)
_MyStepTabPanel.MyStepPanel.DisplayItemChanging = false;
if (MyStepTabPanel != null)
MyStepTabPanel.MyStepPanel.DisplayItemChanging = false;
//Console.WriteLine("<=<=<=<= OnDisplayedChanged");
}
//void DisplayTabItem_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
//{
// Console.WriteLine("DisplayTabItem_MouseUp");
//}
//void DisplayTabItem_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
//{
// Console.WriteLine("DisplayTabItem_MouseDown");
//}
//void DisplayTabItem_LostFocus(object sender, EventArgs e)
//{
// Console.WriteLine("DisplayTabItem_LostFocus");
//}
//void DisplayTabItem_GotFocus(object sender, EventArgs e)
//{
// Console.WriteLine("DisplayTabItem_GotFocus");
//}
#endregion
#region Event Handlers
/// <summary>
@@ -268,10 +200,8 @@ namespace Volian.Controls.Library
private void DisplayTabItem_Click(object sender, EventArgs e)
{
// Tell the TabControl that the ItemSelected has changed
DisplayTabItem myTabItem = sender as DisplayTabItem;
if (myTabItem == null) return;
StepTabPanel myTabPanel = myTabItem.MyStepTabPanel as StepTabPanel;
if (myTabPanel == null) return;
if (!(sender is DisplayTabItem myTabItem)) return;
if (!(myTabItem.MyStepTabPanel is StepTabPanel)) return;
if (MyStepTabPanel.SelectedEditItem == null) return;
MyStepTabPanel.MyDisplayTabControl.HandleChangeId(MyStepTabPanel.SelectedEditItem.MyItemInfo, myTabItem);
_MyDisplayTabControl.OnItemSelectedChanged(this, new ItemSelectedChangedEventArgs(MyStepTabPanel.SelectedEditItem));
@@ -285,32 +215,27 @@ namespace Volian.Controls.Library
{
((System.ComponentModel.ISupportInitialize)(_MyDisplayTabControl.MyBar)).BeginInit();
_MyDisplayTabControl.MyBar.SuspendLayout();
_MyStepTabPanel = new StepTabPanel(_MyDisplayTabControl);
MyStepTabPanel = new StepTabPanel(_MyDisplayTabControl);
//
// tabItem
//
Control = _MyStepTabPanel;
// B2022-055 assigning the Name caused a duplicate name error
// we found that the procedure tab control remained in the Control list after the procedure was closed
// later on we need to find out why it isn't removed when the procedure is closed
//Name = "tabItem Item " + _MyItemInfo.ItemID;
Control = MyStepTabPanel;
Text = _MyItemInfo.TabTitle;
_MyItemInfo.Changed += new ItemInfoEvent(_MyItemInfo_Changed);
Tooltip = _Tooltip = _MyItemInfo.TabToolTip.Replace("\u2011", "-").Replace(@"\u9586?", @"\");
MouseMove += new System.Windows.Forms.MouseEventHandler(DisplayTabItem_MouseMove);
LostFocus += new EventHandler(DisplayTabItem_LostFocus);
//
_MyDisplayTabControl.Controls.Add(_MyStepTabPanel);
_MyDisplayTabControl.Controls.Add(MyStepTabPanel);
_MyDisplayTabControl.MyBar.Items.Add(this);
_MyDisplayTabControl.MyBar.Width = 300; // This triggers the bar to resize itself
//
// tabPanel
//
_MyStepTabPanel.MyDisplayTabItem = this;
MyStepTabPanel.MyDisplayTabItem = this;
((System.ComponentModel.ISupportInitialize)(_MyDisplayTabControl.MyBar)).EndInit();
_MyDisplayTabControl.MyBar.ResumeLayout(false);
DocVersionInfo dvi = _MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo; //MyRTBItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo;
if (dvi == null) return;
if (!(_MyItemInfo.MyProcedure.ActiveParent is DocVersionInfo dvi)) return;
if (dvi.VersionType > 127 || viewonlymode)
MyStepTabPanel.MyStepPanel.VwMode = E_ViewMode.View;
// C2021 - 027: Procedure level PC/PC - add _MyIteminfo to argument list
@@ -345,21 +270,17 @@ namespace Volian.Controls.Library
{
EntryInfo myEntry = _MyItemInfo.MyContent.MyEntry;
UserInfo ui = UserInfo.GetByUserID(OwnerInfo.Get(OwnerID).SessionUserID);
_MyDSOTabPanel = new DSOTabPanel(myEntry.MyDocument, _MyDisplayTabControl, _MyItemInfo, UserInfo.CanEdit(ui, MyItemInfo.MyDocVersion));
if (_MyDSOTabPanel.MyEdWord == null) return; // B2017-219 if we could not open the word attachment just return
MyDSOTabPanel = new DSOTabPanel(myEntry.MyDocument, _MyDisplayTabControl, _MyItemInfo, UserInfo.CanEdit(ui, MyItemInfo.MyDocVersion));
if (MyDSOTabPanel.MyEdWord == null) return; // B2017-219 if we could not open the word attachment just return
//
// tabItem
//
Control = _MyDSOTabPanel;
// B2022-055 assigning the Name caused a duplicate name error
// we found that the procedure tab control remained in the Control list after the procedure was closed
// later on we need to find out why it isn't removed when the procedure is closed
//Name = "tabItem Item " + _MyItemInfo.ItemID;
Control = MyDSOTabPanel;
Text = _MyItemInfo.TabTitle;
Tooltip = _Tooltip = _MyItemInfo.TabToolTip.Replace("\u2011", "-").Replace(@"\u9586?", @"\");
MouseMove += new System.Windows.Forms.MouseEventHandler(DisplayTabItem_MouseMove);
LostFocus += new EventHandler(DisplayTabItem_LostFocus);
_MyDisplayTabControl.Controls.Add(_MyDSOTabPanel);
_MyDisplayTabControl.Controls.Add(MyDSOTabPanel);
DSOTabPanel.IgnoreEnter = true;
//Console.WriteLine("AddRange {0}", Name);
_MyDisplayTabControl.MyBar.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
@@ -368,7 +289,7 @@ namespace Volian.Controls.Library
// tabPanel
//
_MyDisplayTabControl.SelectDisplayTabItem(this);
_MyDSOTabPanel.MyDisplayTabItem = this;
MyDSOTabPanel.MyDisplayTabItem = this;
DSOTabPanel.IgnoreEnter = false;
}
private void SetupLibraryDocumentDSOTabPanel()
@@ -377,21 +298,17 @@ namespace Volian.Controls.Library
// B2016-131 if myiteminfo is null, then the lib doc is not referenced.
// - Allow editting only if you are an Administrator
// - Cannot check if you are a Writer or Set Aministrator because we don't have a Doc Verion
_MyDSOTabPanel = new DSOTabPanel(_MyDocumentInfo, _MyDisplayTabControl, _MyItemInfo, (MyItemInfo != null) ? UserInfo.CanEdit(ui, MyItemInfo.MyDocVersion) : ui.IsAdministrator());
MyDSOTabPanel = new DSOTabPanel(_MyDocumentInfo, _MyDisplayTabControl, _MyItemInfo, (MyItemInfo != null) ? UserInfo.CanEdit(ui, MyItemInfo.MyDocVersion) : ui.IsAdministrator());
//
// tabItem
//
Control = _MyDSOTabPanel;
// B2022-055 assigning the Name caused a duplicate name error
// we found that the procedure tab control remained in the Control list after the procedure was closed
// later on we need to find out why it isn't removed when the procedure is closed
//Name = "tabLibraryDocument " + _MyDocumentInfo.DocID;
Control = MyDSOTabPanel;
Text = _MyDocumentInfo.LibTitle;
DocumentConfig dc = new DocumentConfig(_MyDocumentInfo);
Tooltip = _Tooltip = dc.LibDoc_Comment;
MouseMove += new System.Windows.Forms.MouseEventHandler(DisplayTabItem_MouseMove);
LostFocus += new EventHandler(DisplayTabItem_LostFocus);
_MyDisplayTabControl.Controls.Add(_MyDSOTabPanel);
_MyDisplayTabControl.Controls.Add(MyDSOTabPanel);
DSOTabPanel.IgnoreEnter = true;
_MyDisplayTabControl.MyBar.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
this});
@@ -399,7 +316,7 @@ namespace Volian.Controls.Library
// tabPanel
//
_MyDisplayTabControl.SelectDisplayTabItem(this);
_MyDSOTabPanel.MyDisplayTabItem = this;
MyDSOTabPanel.MyDisplayTabItem = this;
DSOTabPanel.IgnoreEnter = false;
}
#endregion
+3 -3
View File
@@ -215,6 +215,7 @@ namespace Volian.Controls.Library
this.groupPanelCheckoff.CanvasColor = System.Drawing.SystemColors.Control;
this.groupPanelCheckoff.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007;
this.groupPanelCheckoff.Controls.Add(this.cmbCheckoff);
this.groupPanelCheckoff.Controls.Add(this.cbInitialLine);
this.groupPanelCheckoff.DisabledBackColor = System.Drawing.Color.Empty;
this.groupPanelCheckoff.Dock = System.Windows.Forms.DockStyle.Top;
this.groupPanelCheckoff.Location = new System.Drawing.Point(0, 231);
@@ -265,8 +266,7 @@ namespace Volian.Controls.Library
this.cbInitialLine.Margin = new System.Windows.Forms.Padding(2);
this.cbInitialLine.Name = "cbInitialLine";
this.cbInitialLine.Size = new System.Drawing.Size(112, 15);
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.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.cbInitialLine.TabIndex = 1;
this.cbInitialLine.Text = "Disable Initial Line";
this.cbInitialLine.Visible = false;
@@ -276,7 +276,6 @@ namespace Volian.Controls.Library
//
this.groupPanelcmbShwRplWds.CanvasColor = System.Drawing.SystemColors.Control;
this.groupPanelcmbShwRplWds.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007;
this.groupPanelcmbShwRplWds.Controls.Add(this.cbInitialLine);
this.groupPanelcmbShwRplWds.Controls.Add(this.cmbShwRplWds);
this.groupPanelcmbShwRplWds.DisabledBackColor = System.Drawing.Color.Empty;
this.groupPanelcmbShwRplWds.Dock = System.Windows.Forms.DockStyle.Top;
@@ -880,3 +879,4 @@ namespace Volian.Controls.Library
private System.Windows.Forms.Button btnSaveChangeID;
}
}
+24 -170
View File
@@ -1,9 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using JR.Utils.GUI.Forms;
@@ -14,16 +11,12 @@ namespace Volian.Controls.Library
public partial class DisplayTags : UserControl
{
#region Properties
private ItemInfo _CurItemInfo = null;
/// <summary>
/// Current ItemInfo
/// </summary>
public ItemInfo CurItemInfo
{
get { return _CurItemInfo; }
set { _CurItemInfo = value; }
}
public ItemInfo CurItemInfo { get; set; } = null;
private bool _Initalizing = false;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private IList<int> _MyStepTypeInd = null; // use to keep track of step types put in step type menu
/// <summary>
/// This stores the last selected EditItem when the Panel was not visible
@@ -70,23 +63,6 @@ namespace Volian.Controls.Library
CurItemInfo = value.MyItemInfo;
_MyEditItem.MyStepPropertiesPanel = this; // this allows us to access the Step Property pannel and toggle check boxes with shortcut keystrokes
// originally the change all (for step type) checkbox was initialized based
// on whether all steps at level were same type, i.e. if same type, default
// it to checked. This may confuse the user, so we decided to always default
// to not checked. The code was left in here in case that decision is changed.
// MRC, JSJ & KBR were in on discussion on 2/27/12:
// only change all at level if all substeps are of same type
//bool allSameType = true;
//ItemInfo itmp = CurItemInfo.FirstSibling;
//while (itmp != null)
//{
// if (CurItemInfo.MyContent.Type != itmp.MyContent.Type)
// {
// allSameType = false;
// break;
// }
// itmp = itmp.NextItem;
//}
cbChgAll.Checked = false;
TagsFillIn();
}
@@ -119,7 +95,6 @@ namespace Volian.Controls.Library
cbTCAS.Checked = false;
cbCAS.Enabled = false;
cbTCAS.Enabled = false;
//txbxAltConActSumText.Enabled = false;
rbChgBarOff.Enabled = false;
rbChgBarOn.Enabled = false;
listBoxStepTypes.Items.Clear();
@@ -134,22 +109,14 @@ namespace Volian.Controls.Library
}
private bool StepOverRide()
{
ItemInfo myparent = CurItemInfo.MyActiveParent as ItemInfo;
if (CurItemInfo.IsRNOPart && myparent !=null && myparent.IsHigh)
if (CurItemInfo.IsRNOPart && CurItemInfo.MyActiveParent is ItemInfo myparent && myparent.IsHigh)
{
// does the high level step of an RNO have a checkoff, if so it
// can be overridden?
StepConfig sc = myparent.MyConfig as StepConfig;
if (sc != null && sc.Step_CheckOffIndex != -1) return true;
if (myparent.MyConfig is StepConfig sc && sc.Step_CheckOffIndex != -1) return true;
}
return false;
}
public void HighlightChangeStep()
{
// As per MRC - don't bother to color it.
// left here in case we change our mind.
//groupPanelChgStepType.Style.BackColor = Color.PaleVioletRed;
}
public void FocusOnImageSize()
{
// B2016-237 added context menu item to change image size
@@ -246,6 +213,7 @@ namespace Volian.Controls.Library
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private Dictionary<int, int> _CheckOffIndex = new Dictionary<int, int>(); // C2020-003 translate the sorted index number to the actual checkoff index
private void TagsFillIn()
{
@@ -289,7 +257,6 @@ namespace Volian.Controls.Library
{
cbPlaceKeeper.Enabled = cbPlaceKeeperCont.Enabled = false;
}
//cbCAS.Enabled = true;
rbChgBarOff.Enabled = true;
rbChgBarOn.Enabled = true;
@@ -303,7 +270,6 @@ namespace Volian.Controls.Library
if (cmbShwRplWds.Visible)
{
cmbShwRplWds.SelectedIndex = 0;
//StepConfig sc = CurItemInfo.MyConfig as StepConfig;
cmbShwRplWds.Enabled = true;
cmbShwRplWds.SelectedIndex = sc.Step_ShwRplWdsIndex;
}
@@ -350,12 +316,6 @@ namespace Volian.Controls.Library
cbCAS.Checked = (sc.Step_CAS != null) ? sc.Step_CAS == "True" : CurItemInfo.IncludeOnContActSum;
// Set the Time Critical Action Summary check box - if nothing in config set to false
cbTCAS.Checked = (sc.Step_TCAS != null) ? sc.Step_TCAS == "True" : CurItemInfo.IncludeOnTimeCriticalActionSum;
//// if alternative continuous action text is saved in the config, then show it and check the checkbox
//if (sc.Step_AlternateContActSumText != null && sc.Step_AlternateContActSumText != "")
//{
// txbxAltConActSumText.Text = sc.Step_AlternateContActSumText;
// cbCAS.Checked = true;
//}
}
bool _checkoffsAllowed = true;
if (fmtdata.ProcData.CheckOffData.CheckoffOnSubStepsOnly)
@@ -365,7 +325,7 @@ namespace Volian.Controls.Library
if (_checkoffsAllowed && !(fmtdata.ProcData.CheckOffData.CheckOffList == null) && !(maxindx == 0))
{
CheckOffList chkoffList = fmtdata.ProcData.CheckOffData.CheckOffList;
if (chkoffList != null) chkoffList.Sort(CompareCheckoffUsingOrderBy); // C2020-003 sort the checkoff list via the Index and/or OrderBy elements
chkoffList?.Sort(CompareCheckoffUsingOrderBy); // C2020-003 sort the checkoff list via the Index and/or OrderBy elements
cmbCheckoff.Items.Clear();
_CheckOffIndex.Clear(); // C2020-003 clear the checkoff index dictionary
int sortedIndx = 0;
@@ -423,15 +383,6 @@ namespace Volian.Controls.Library
tbFSWd.Text = wd.ToString();
tbFSHt.Text = ht.ToString();
//trBarFS.Maximum = Math.Max((int)wd2, trBarFS.Maximum);
//if (wd > trBarFS.Maximum) trBarFS.Maximum = wd + 1;
//trBarFS.Minimum = Math.Min(wd, 72);
//trBarFS.Value = (int)wd;
//ImageItem ii = MyEditItem as ImageItem;
//_origFigureSizeWidth = ii.MyPictureBox.Width;
//tbFSWd.Text = ii.MyPictureBox.Width.ToString();
//tbFSHt.Text = ii.MyPictureBox.Height.ToString();
}
else
{
@@ -458,11 +409,6 @@ namespace Volian.Controls.Library
// There is also an override flag in the config for the step, used to override the change bar to 'off'
// if the date show it as having one, or allow a change bar to be 'on' if there the dates are
// not different. Note also that a user may edit data after the change bar is set to 'on'.
//DateTime curDts;
//using (Item itm = Item.Get(CurItemInfo.ItemID))
//{
// curDts = itm.DTS;
//}
// set change bar radio buttons for the default that there is no change
// bar & override sets it to On.
@@ -486,24 +432,13 @@ namespace Volian.Controls.Library
}
else
{
rbChgBarOff.Checked = (sc.Step_CBOverride == "Off") ? true : false;
rbChgBarOn.Checked = (sc.Step_CBOverride == "On") ? true : false;
rbChgBarOff.Checked = (sc.Step_CBOverride == "Off");
rbChgBarOn.Checked = (sc.Step_CBOverride == "On");
// there is override settings in the config... If the date time stamp says that text was changed
// so a change bar should exist - check override to see how change bar controls are set:
// If the date of this is greater than the procedure, a change bar should be displayed -
// see what the override says. The override states whether change bar is on/off (not
// whether override is on/off)
//if (curDts > CurItemInfo.MyProcedure.DTS)
//{
// rbChgBarOff.Text = "OFF (Override)";
// rbChgBarOn.Text = "ON";
//}
//else
//{
// // date time stamp says no change bar should be displayed:
// rbChgBarOff.Text = "OFF";
// rbChgBarOn.Text = "ON (Override)";
//}
}
// see if the change id label & text box are visible, i.e. plant has multiple change ids.
@@ -576,8 +511,7 @@ namespace Volian.Controls.Library
public void SetFigure(double wd, double wd2)
{
// Check MyEditItem type and cast if needed
ImageItem ii = MyEditItem as ImageItem;
if (ii == null) return;
if (!(MyEditItem is ImageItem ii)) return;
// Set the values as needed
trBarFS.Maximum = Math.Max((int)wd2, trBarFS.Maximum);
@@ -585,8 +519,6 @@ namespace Volian.Controls.Library
trBarFS.Minimum = Math.Min((int)wd, 72);
trBarFS.Value = (int)wd;
_origFigureSizeWidth = ii.MyPictureBox.Width;
//tbFSWd.Text = ii.MyPictureBox.Width.ToString();
//tbFSHt.Text = ii.MyPictureBox.Height.ToString();
}
private int DoListStepTypes(FormatData fmtdata, StepData topType, string curType)
@@ -611,26 +543,13 @@ namespace Volian.Controls.Library
}
return cursel;
}
//private void AddToGallery(StepData sd, string curType)
//{
// DevComponents.DotNetBar.ButtonItem bi = new DevComponents.DotNetBar.ButtonItem("btn" + sd.Type, sd.Type);
// bi.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText;
// bi.Image = this.imageListStepTypes.Images[0];
// bi.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top;
// bi.Checked = (sd.Type == curType);
// galleryContainerStepTypes.SubItems.Add(bi);
// listBoxStepTypes.Items.Add(sd.Type);
//}
#endregion
#region Events
private void cbPageBreak_CheckedChanged(object sender, EventArgs e)
{
if (_Initalizing) return;
MyEditItem.SaveContents();
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
MyEditItem.ChangeBarForConfigItemChange = false;
if (CurItemInfo.IsHigh)
sc.Step_NewManualPagebreak = cbPageBreak.Checked;
@@ -642,8 +561,7 @@ namespace Volian.Controls.Library
{
if (_Initalizing) return;
MyEditItem.SaveContents();
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
MyEditItem.ChangeBarForConfigItemChange = false;
sc.Step_CAS = (cbCAS.Checked) ? "True" : "False";
MyEditItem.ChangeBarForConfigItemChange = true;
@@ -656,8 +574,7 @@ namespace Volian.Controls.Library
{
if (_Initalizing) return;
MyEditItem.SaveContents();
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
MyEditItem.ChangeBarForConfigItemChange = false;
sc.Step_TCAS = (cbTCAS.Checked) ? "True" : "False";
MyEditItem.ChangeBarForConfigItemChange = true;
@@ -666,8 +583,7 @@ namespace Volian.Controls.Library
{
if (_Initalizing) return;
MyEditItem.SaveContents();
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
MyEditItem.ChangeBarForConfigItemChange = false;
sc.Step_Placekeeper = (cbPlaceKeeper.Checked) ? "Y" : "N";
MyEditItem.ChangeBarForConfigItemChange = true;
@@ -682,8 +598,7 @@ namespace Volian.Controls.Library
{
if (_Initalizing) return;
MyEditItem.SaveContents();
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
MyEditItem.ChangeBarForConfigItemChange = false;
sc.Step_Placekeeper = (cbPlaceKeeperCont.Checked) ? "C" : "N";
MyEditItem.ChangeBarForConfigItemChange = true;
@@ -698,8 +613,7 @@ namespace Volian.Controls.Library
{
if (_Initalizing) return;
MyEditItem.SaveContents();
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
MyEditItem.ChangeBarForConfigItemChange = false;
sc.Step_IncludeInTOC = cbIncludeInTOC.Checked;
MyEditItem.ChangeBarForConfigItemChange = true;
@@ -716,7 +630,7 @@ namespace Volian.Controls.Library
EditItem topEditItem = MyEditItem;
MyEditItem.SaveContents();
FormatData fmtdata = CurItemInfo.ActiveFormat.PlantFormat.FormatData;
string msgBox = null;
string msgBox;
if (cbChgAll.Checked)
{
ItemInfo startitm = CurItemInfo.FirstSibling;
@@ -733,12 +647,6 @@ namespace Volian.Controls.Library
}
// B2018-120: if caution/note steps have enhanced - change their type too
if (startitm.IsNote || startitm.IsCaution) chgEnh = ChangeTypesEnhanced(startitm);
//using (Item itm = Item.Get(startitm.ItemID))
//{
// itm.DTS = DateTime.Now;
// itm.UserID = Volian.Base.Library.VlnSettings.UserID;
// itm.Save();
//}
startitm = startitm.GetNext();
}
msgBox = chgEnh ? string.Format("All Step Types at this level and associated enhanced steps were changed to {0}", listBoxStepTypes.Items[listBoxStepTypes.SelectedIndex]) :
@@ -757,17 +665,9 @@ namespace Volian.Controls.Library
bool chgEnh = false;
// B2018-120: if caution/note steps have enhanced - change their type too
if (CurItemInfo.IsNote || CurItemInfo.IsCaution) chgEnh = ChangeTypesEnhanced(CurItemInfo);
//using (Item itm1 = Item.Get(CurItemInfo.ItemID))
//{
// itm1.DTS = DateTime.Now;
// itm1.UserID = Volian.Base.Library.VlnSettings.UserID;
// itm1.Save();
//}
msgBox = chgEnh ? string.Format("This Step Type and associated enhanced step were changed to {0}", listBoxStepTypes.Items[listBoxStepTypes.SelectedIndex]):
string.Format("This Step Type was changed to {0}", listBoxStepTypes.Items[listBoxStepTypes.SelectedIndex]);
}
// the follow line was to try and fix a refresh problem when you change the type of a new substep
//topEditItem.MyStepPanel.Reset();
topEditItem.SetAllTabs();
FlexibleMessageBox.Show(msgBox);
@@ -821,12 +721,6 @@ namespace Volian.Controls.Library
{
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
sc.Step_CBOverride = CurItemInfo.HasChanges ? null : "On";
//using (Content cnt = Content.Get(CurItemInfo.MyContent.ContentID))
//{
// cnt.DTS = DateTime.Now;
// cnt.UserID = Volian.Base.Library.VlnSettings.UserID;
// cnt.Save();
//}
}
}
private void rbChgBarOvrRideOff_CheckedChanged(object sender, EventArgs e)
@@ -840,12 +734,6 @@ namespace Volian.Controls.Library
{
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
sc.Step_CBOverride = CurItemInfo.HasChanges ? "Off" :null;
//using (Content cnt = Content.Get(CurItemInfo.MyContent.ContentID))
//{
// cnt.DTS = CurItemInfo.MyProcedure.DTS;
// cnt.UserID = CurItemInfo.MyProcedure.UserID;
// cnt.Save();
//}
}
}
private void cmbCheckoff_SelectedIndexChanged(object sender, EventArgs e)
@@ -856,25 +744,14 @@ namespace Volian.Controls.Library
int indx = _CheckOffIndex[cmbCheckoff.SelectedIndex]; // C2020-003 get the non-sorted index from the sorted index
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
sc.Step_CheckOffIndex = indx;
//using (Content cnt = Content.Get(CurItemInfo.MyContent.ContentID))
//{
// cnt.DTS = CurItemInfo.MyProcedure.DTS;
// cnt.UserID = CurItemInfo.MyProcedure.UserID;
// cnt.Save();
//}
}
// C2029-025 Show or hide replace words. Can highlight replace words in editor.
private void cmbShwRplWds_SelectedIndexChanged(object sender, EventArgs e) // new show replace words
{
// --------
if (_Initalizing) return;
MyEditItem.SaveContents();
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
MyEditItem.ChangeBarForConfigItemChange = false;
//sc.Step_DisableInitialLine = cbInitialLine.Checked;
sc.Step_ShwRplWdsIndex = cmbShwRplWds.SelectedIndex;
MyEditItem.ChangeBarForConfigItemChange = true;
@@ -892,8 +769,7 @@ namespace Volian.Controls.Library
{
// User left responsibilty field. If text changed, then prompt
// to see if save should occur.
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
bool bothEmpty = (sc.Step_Responsibility == null || sc.Step_Responsibility == "") && (tbRespons.Text == null || tbRespons.Text == "");
if (!bothEmpty && sc.Step_Responsibility != tbRespons.Text)
{
@@ -917,14 +793,14 @@ namespace Volian.Controls.Library
{
if (MyEditItem is ImageItem)
{
int wd = 0;
int ht = 0;
int wd;
int ht;
try
{
wd = int.Parse(tbFSWd.Text);
ht = int.Parse(tbFSHt.Text);
}
catch (Exception ex)
catch (Exception)
{
wd = 0;
ht = 0;
@@ -966,7 +842,7 @@ namespace Volian.Controls.Library
{
newHt = int.Parse(tbFSWd.Text);
}
catch (Exception ex)
catch (Exception)
{
invaliddata = true;
}
@@ -984,8 +860,7 @@ namespace Volian.Controls.Library
{
if (_Initalizing) return;
MyEditItem.SaveContents();
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
MyEditItem.ChangeBarForConfigItemChange = false;
sc.Step_PreferredPagebreak = cbPrefPageBreak.Checked;
MyEditItem.ChangeBarForConfigItemChange = true;
@@ -995,8 +870,7 @@ namespace Volian.Controls.Library
{
if (_Initalizing) return;
MyEditItem.SaveContents();
StepConfig sc = CurItemInfo.MyConfig as StepConfig;
if (sc == null) return;
if (!(CurItemInfo.MyConfig is StepConfig sc)) return;
MyEditItem.ChangeBarForConfigItemChange = false;
sc.Step_DisableInitialLine = cbInitialLine.Checked;
MyEditItem.ChangeBarForConfigItemChange = true;
@@ -1023,25 +897,5 @@ namespace Volian.Controls.Library
}
}
//private void txbxAltConActSumText_Leave(object sender, EventArgs e)
//{
// // User left Atlernate Continuous Action Text field. If text changed, then prompt
// // to see if save should occur.
// StepConfig sc = CurItemInfo.MyConfig as StepConfig;
// if (sc == null) return;
// bool bothEmpty = (sc.Step_AlternateContActSumText == null || sc.Step_AlternateContActSumText == "") && (txbxAltConActSumText.Text == null || txbxAltConActSumText.Text == "");
// if (!bothEmpty && sc.Step_AlternateContActSumText != txbxAltConActSumText.Text)
// {
// if (MessageBox.Show(this, "Do you want to save the Alternate Continuous Action Text?", "Confirm Save", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
// {
// MyEditItem.SaveContents();
// sc.Step_AlternateContActSumText = txbxAltConActSumText.Text; // this actually saves the config
// }
// else
// txbxAltConActSumText.Text = sc.Step_AlternateContActSumText;
// }
//}
}
}
@@ -1,16 +1,13 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using AT.STO.UI.Win;
using VEPROMS.CSLA.Library;
using Volian.Base.Library;
using JR.Utils.GUI.Forms;
using System.Linq;
namespace Volian.Controls.Library
{
@@ -116,14 +113,8 @@ namespace Volian.Controls.Library
private bool _DoingRange = false; // flags if in 'range' transition mode
private VETreeNode _RangeNode1;
private VETreeNode _RangeNode2;
// Use _RangeColor to show highlighting for steps selected in range. This is set from
// calling methods from application settings. If not default to aquamarine.
private Color _RangeColor = Color.LightGray;
public Color RangeColor
{
get { return _RangeColor; }
set { _RangeColor = value; }
}
public Color RangeColor { get; set; } = Color.LightGray;
private StepRTB _MyRTB; // Current MyDisplayRTB, i.e. insert transition to it.
public StepRTB MyRTB
{
@@ -148,7 +139,6 @@ namespace Volian.Controls.Library
CurTrans = args.MyLinkText.MyTransitionInfo;
}
private ItemInfo _CurrentItemProcedure; // the selected item's procedure
private ItemInfo _CurrentToProcedure; // the 'to' location's procedure (may be same as _CurrentItemProcedure)
private ItemInfo _CurrentProcedure; // current procedure used to set all of the controls (may switch between above two)
private int _CurrentProcIndex;
private bool _AlwaysDisableSets; // true if there is only 1 item in tree/combo for sets
@@ -219,7 +209,6 @@ namespace Volian.Controls.Library
}
}
_CurrentProcedure = tmpitm;
_CurrentToProcedure = _CurrentProcedure;
if (_CurTrans == null)
_CurrentItemProcedure = _CurrentProcedure;
else
@@ -271,7 +260,6 @@ namespace Volian.Controls.Library
else if (secitm != null && secitm.Steps != null && secitm.Steps.Count > 0)
stpitm = selitm.Steps[0];
if (!_DoingRange) tvTranFillIn(stpitm); // range code fills in tree.
//if (_DoingRange) tvInitHiliteRange(rangeSameLevel, stpitm, rngitm, (i1 < i2) ? i2 : i1);
}
else
{
@@ -283,16 +271,13 @@ namespace Volian.Controls.Library
}
private void tvInitHiliteRange() //bool rangeSameLevel, ItemInfo stpitm, ItemInfo rngitm, int uplevel)
{
ItemInfo toItm = _CurTrans.MyItemToID;
ItemInfo rngItm = null;
_ = _CurTrans.MyItemToID;
// figure out whether at same level, have same parent and have same HLS:
ItemInfo itm1 = _CurTrans.MyItemToID;
ItemInfo itm2 = _CurTrans.MyItemRangeID;
// Invalid existing transition
if (itm2.ActiveParent == null || itm1.ActiveParent == null)
return;
//if (_CurTrans.TranType == 2 && itm1.ItemID == itm2.ItemID) itm2 = itm1.LastSibling;
bool samHLS = itm1.MyHLS.ItemID == itm2.MyHLS.ItemID;
int lev1 = 0;
int lev2 = 0;
while (!itm1.IsHigh)
@@ -305,7 +290,6 @@ namespace Volian.Controls.Library
lev2++;
itm2 = itm2.MyParent;
}
bool samLevel = lev1 == lev2;
// For each range item, go to common level's parent.
int cnt = lev1+1;
ItemInfo sameParent1 = _CurTrans.MyItemToID;
@@ -327,7 +311,7 @@ namespace Volian.Controls.Library
// now add nodes for the subtrees so that highlighting can be done. Do 'to' item
// first. If 'range' item is at same level, won't need to do anymore processing.
ItemInfo toItem = sameParent1.Ordinal<=sameParent2.Ordinal?_CurTrans.MyItemToID:_CurTrans.MyItemRangeID;
ItemInfo rngItem = null;
ItemInfo rngItem;
if (_CurTrans.TranType == 2 && _CurTrans.MyItemToID == _CurTrans.MyItemRangeID)
{
@@ -452,51 +436,6 @@ namespace Volian.Controls.Library
vlnTreeComboSets.DropDownControl.SelectedNode = topnode;
vlnTreeComboSets.DropDownControl.BeforeExpand += new TreeViewCancelEventHandler(vlnTreeComboSets_BeforeExpand);
#region CheckIfNeeded Commented Out
//vlnTreeComboSets.DropDownControl. = vlnTreeComboSets.Width;
// The DropDownNode should be at a DocVersion now. The expanded DocVersion
// is the one that matches mydocversion
//tmpfi = mydocversion.ActiveParent as FolderInfo;
//DocVersionInfoList dvlist = tmpfi.FolderDocVersions;
//DropDownNode tnDV = null;
// Once at a docversions, only allow working
// draft sets. Use DocVersion that we're in, to expand it showing the active procedure.
// first count how many versions can be displayed, i.e. only workingdraft?
// if more than one, put out a tree node for them.
//int cntdocv = 0;
//foreach (DocVersionInfo dv in dvlist)
//{
// if ((VersionTypeEnum)dv.VersionType == VersionTypeEnum.WorkingDraft) cntdocv++;
//}
//if (cntdocv>1)
//{
// foreach (DocVersionInfo dv in dvlist)
// {
// if ((VersionTypeEnum)dv.VersionType == VersionTypeEnum.WorkingDraft)
// {
// DropDownNode tn = new DropDownNode(dv.VersionID, dv.ToString());
// tn.Tag = dv;
// if (topnode != null)
// topnode.Nodes.Add(tn);
// else
// vlnTreeComboSets.DropDownControl.Nodes.Add(tn);
// if (dv.VersionID == mydocversion.VersionID)
// {
// tnDV = tn;
// vlnTreeComboSets.Value = tnDV;
// vlnTreeComboSets.DropDownControl.SelectedNode = tnDV;
// }
// //else if (dv.HasChildren) // allow for '+' for tree expansion
// //{
// // DropDownNode tnt = new DropDownNode(0,"VLN_DUMMY");
// // tn.Nodes.Add(tnt);
// //}
// }
// }
//}
#endregion
}
private void ListBoxTranFmtFillIn()
{
@@ -504,7 +443,7 @@ namespace Volian.Controls.Library
listBoxTranFmt.Items.Clear();
for (int i = 0; i < ttl.MaxIndex; i++)
listBoxTranFmt.Items.Add(new TransItem(ttl[i].TransMenu.Replace("?.",""),ttl[i].TransFormat.Replace("?.","")));
//listBoxTranFmt.Items.Add(ttl[i].TransFormat.Replace("?.",""));
listBoxTranFmt.SelectedIndex = _TranFmtIndx;
E_TransUI etm = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[_TranFmtIndx].TransUI;
_DoingRange = (etm & E_TransUI.StepLast) == E_TransUI.StepLast;
@@ -532,18 +471,8 @@ namespace Volian.Controls.Library
if (startitm.MyContent.Type < 20000) return;
groupPanelTranstionSteps.Style.BackColor = Color.Cornsilk;
// For the tree view, use parent, unless already at HLS. If at HLS, use this level.
//ItemInfo selitm2 = startitm.MyHLS;
ItemInfo selSubSec = secitm.Sections[0];
// The commented out code below is for displaying the steps from the first sub-section B2025-035
//ItemInfo subSelStep = selSubSec.Steps[0];
//E_TransUI etm2 = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[listBoxTranFmt.SelectedIndex].TransUI;
//if (subSelStep.IsInRNO)
// startitm = subSelStep.FirstSibling; // if in RNO tree, start out with HLS
//else
// startitm = subSelStep != null ? subSelStep.FirstSibling : startitm.FirstSibling;
// B2025-035
ItemInfo subSelStep = secitm.Sections[0];
E_TransUI etm2 = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[listBoxTranFmt.SelectedIndex].TransUI;
if (subSelStep.IsInRNO)
@@ -551,12 +480,13 @@ namespace Volian.Controls.Library
else
startitm = subSelStep != null ? subSelStep.FirstSibling : startitm.FirstSibling;
// B2025-035
bool setsel2 = false;
while (startitm != null)
{
VETreeNode tvn = new VETreeNode(startitm, false);
tvn.Tag = startitm;
VETreeNode tvn = new VETreeNode(startitm, false)
{
Tag = startitm
};
int active = this.tvTran.Nodes.Add(tvn);
if (subSelStep != null && startitm.ItemID == subSelStep.ItemID)
{
@@ -580,7 +510,6 @@ namespace Volian.Controls.Library
groupPanelTranstionSteps.Style.BackColor = Color.Cornsilk;
// For the tree view, use parent, unless already at HLS. If at HLS, use this level.
ItemInfo selitm = startitm.MyHLS;
//if (_CurTrans == null)selitm = startitm.MyHLS;
E_TransUI etm = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[listBoxTranFmt.SelectedIndex].TransUI;
if (startitm.IsInRNO)
startitm = selitm.FirstSibling; // if in RNO tree, start out with HLS
@@ -589,8 +518,10 @@ namespace Volian.Controls.Library
bool setsel = false;
while (startitm != null)
{
VETreeNode tvn = new VETreeNode(startitm, false);
tvn.Tag = startitm;
VETreeNode tvn = new VETreeNode(startitm, false)
{
Tag = startitm
};
int active = this.tvTran.Nodes.Add(tvn);
if (selitm !=null && startitm.ItemID == selitm.ItemID)
{
@@ -614,9 +545,7 @@ namespace Volian.Controls.Library
if (secitm == null || secitm.MyContent.Type < 10000) return;
// if sectstart is not -1, then use this as the section to select, otherwise
// use the id for the item passed in.
int startitm = secstart;
if (clear && secstart < 0) secstart = secitm.ItemID;
ItemInfo selitm = secitm; // this is the selected 'section'
secitm = secitm.FirstSibling;
while (secitm != null)
{
@@ -793,19 +722,6 @@ namespace Volian.Controls.Library
}
}
}
// B2018-009 Eliminate Working Draft (DocVersions) from the procedure tree for transitions
//else if (fi.FolderDocVersionCount > 0)
//{
// foreach (DocVersionInfo dv in fi.FolderDocVersions)
// {
// if ((VersionTypeEnum)dv.VersionType == VersionTypeEnum.WorkingDraft)
// {
// DropDownNode newnode = new DropDownNode(dv.VersionID, dv.ToString());
// newnode.Tag = dv;
// par.Nodes.Add(newnode);
// }
// }
//}
}
vlnTreeComboSets.Value = par;
vlnTreeComboSets.DropDownControl.SelectedNode = par;
@@ -821,9 +737,9 @@ namespace Volian.Controls.Library
// selected the docversion itself....
bool defines_set = false;
FolderInfo fi = null;
if (obj is FolderInfo)
if (obj is FolderInfo finfo)
{
fi = (FolderInfo)obj;
fi = finfo;
if (fi.ChildFolderCount == 0)
{
// note that the folder may contain more than one docversion, check for
@@ -955,16 +871,6 @@ namespace Volian.Controls.Library
if (_DoingRange) tvTran.SelectedNode = null;
SaveCancelEnabling();
}
//private void btnUp1_Click(object sender, EventArgs e)
//{
// // if StepAllowNone, then use the second node in the tree view.
// int indx = 0;
// if (tvTran.Nodes[0].Tag == null) indx = 1;
// // if at HLS, don't do anything.
// ItemInfo curitm = (ItemInfo)((VETreeNode)tvTran.Nodes[indx]).VEObject;
// if (curitm.IsHigh) return;
// tvTranFillIn(curitm);
//}
private void tvTran_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
VETreeNode tn = ((VETreeNode)e.Node);
@@ -985,11 +891,6 @@ namespace Volian.Controls.Library
// it & disable.
ItemInfo secitm = (ItemInfo)cbTranSects.SelectedItem;
//if (secitm.IsStepSection)
//{
// cbTranSects.SelectedItem.Sections[0];
//}
if (!secitm.IsStepSection)
{
tvTran.Nodes.Clear();
@@ -997,7 +898,8 @@ namespace Volian.Controls.Library
cbIncStepNum.Enabled = false; // C2020-028: disable/uncheck 'Include Step Number' if on Word doc
cbIncStepNum.Checked = false;
// Set Save & Cancel enabling, depending on whether section can be an endpoint.
E_TransUI etm = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[_TranFmtIndx].TransUI;
//Following line is for Debugging
//E_TransUI etm = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[_TranFmtIndx].TransUI;
SaveCancelEnabling();
}
else
@@ -1065,7 +967,7 @@ namespace Volian.Controls.Library
// 1) Look in ProcedureConfig/SectionStart
ProcedureConfig pc = (ProcedureConfig)prcitm.MyConfig;
int sectstartid = -1;
string ss = pc == null ? null : pc.SectionStart;
string ss = pc?.SectionStart;
SectionInfo si = null;
if (ss != null && ss != "")
{
@@ -1077,7 +979,7 @@ namespace Volian.Controls.Library
if (si.MyProcedure.ItemID == prcitm.ItemID) return sectstartid;
// The following code fixes the sectionstart property for the Copy Procedure function. This code will correct
// any procedures that were copied prior to the implementation of this the copy procedure function fix.
foreach (SectionInfo si1 in prcitm.Sections)
foreach (SectionInfo si1 in prcitm.Sections.OfType<SectionInfo>())
{
if (si.DisplayNumber == si1.DisplayNumber && si.DisplayText == si1.DisplayText)
{
@@ -1096,22 +998,21 @@ namespace Volian.Controls.Library
// 2) Look in SectionConfig/OriginalSteps = 'Y'
if (prcitm.Sections != null)
{
foreach (SectionInfo sio in prcitm.Sections)
foreach (SectionInfo sio in prcitm.Sections.OfType<SectionInfo>())
{
SectionConfig sc = sio.MyConfig as SectionConfig;
if (sc != null && sc.Section_OriginalSteps == "Y")
if (sio.MyConfig is SectionConfig sc && sc.Section_OriginalSteps == "Y")
{
return sio.ItemID;
}
}
// 3) Find if any of the section titles contain 'PROCEDURES STEPS'
foreach (SectionInfo sit in prcitm.Sections)
foreach (SectionInfo sit in prcitm.Sections.OfType<SectionInfo>())
{
if (sit.DisplayText.ToUpper().Contains("PROCEDURE STEPS"))
return sit.ItemID;
}
foreach (SectionInfo sit in prcitm.Sections)
foreach (SectionInfo sit in prcitm.Sections.OfType<SectionInfo>())
{
if (sit.DisplayText.ToUpper().Equals("PROCEDURE"))// bug fix: B2015-003
return sit.ItemID;
@@ -1120,17 +1021,17 @@ namespace Volian.Controls.Library
// 4) Format has flag that a default section is not required so return 1st section.
if (prcitm.Sections != null)
{
foreach (SectionInfo sid in prcitm.Sections)
foreach (SectionInfo sid in prcitm.Sections.OfType<SectionInfo>())
{
if (sid.IsStepSection && sid.ActiveFormat.PlantFormat.FormatData.TransData.NoDefaultSectReq) return sid.ItemID;
}
// 3) Find if any of the section titles contain 'PROCEDURES STEPS'
foreach (SectionInfo sit in prcitm.Sections)
foreach (SectionInfo sit in prcitm.Sections.OfType<SectionInfo>())
{
if (sit.DisplayText.ToUpper().Contains("PROCEDURE STEPS"))
return sit.ItemID;
}
foreach (SectionInfo sit in prcitm.Sections)
foreach (SectionInfo sit in prcitm.Sections.OfType<SectionInfo>())
{
if (sit.DisplayText.ToUpper().Equals("PROCEDURE"))// bug fix: B2015-003
return sit.ItemID;
@@ -1173,8 +1074,7 @@ namespace Volian.Controls.Library
// check if node is a true end-point, i.e. not a 'part' node. If part node, don't
// allow selection.
VETreeNode vt = tvTran.SelectedNode as VETreeNode;
ItemInfo selii = vt.VEObject as ItemInfo;
if (selii == null)
if (!(vt.VEObject is ItemInfo selii))
{
FlexibleMessageBox.Show("Must select a valid step, not a grouping part such as 'RNO', 'Steps', etc");
return;
@@ -1197,7 +1097,7 @@ namespace Volian.Controls.Library
if (_RangeNode1 == null || (_RangeNode1 != null && _RangeNode2 != null))
{
if (_RangeNode1 != null) tvTranRangeHilites(false, _RangeNode1, _RangeNode2);
tvTran.SelectedNode.BackColor = _RangeColor;
tvTran.SelectedNode.BackColor = RangeColor;
_RangeNode1 = (VETreeNode)tvTran.SelectedNode;
_RangeNode2 = null;
lblxTranRangeTip.Text = "Select Last Step \r\nfor Range";
@@ -1208,7 +1108,7 @@ namespace Volian.Controls.Library
{
if (_RangeNode2 != null) tvTranRangeHilites(false, _RangeNode1, _RangeNode2);
_RangeNode2 = (VETreeNode)tvTran.SelectedNode;
tvTran.SelectedNode.BackColor = _RangeColor;
tvTran.SelectedNode.BackColor = RangeColor;
tvTranRangeHilites(true, _RangeNode1, _RangeNode2);
lblxTranRangeTip.Text = "Select First Transition\r\nfor Range";
lblxTranRangeTip.BackColor = Color.Yellow;
@@ -1219,8 +1119,6 @@ namespace Volian.Controls.Library
}
private void SaveCancelEnabling()
{
//bool hasChanged = _CurItemFrom != _SavCurItemFrom || _TranFmtIndx != _SavTranFmtIndx
// || ( selii != null && _CurTrans.ToID != selii.ItemID);
bool hasChanged = SettingsChanged;
bool isenh = MyRTB != null && MyRTB.MyItemInfo != null && MyRTB.MyItemInfo.IsEnhancedStep;
// B2018-002 - Invalid Transitions - Set button enabled if it has a default section or it doesn't need a default
@@ -1240,25 +1138,6 @@ namespace Volian.Controls.Library
null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
// B2024-007 color of transition panel was not toggling properly
groupPanelTranFmt.Style.BackColor = !HasDefault && NeedsDefault ? Color.Red : Color.Orange;
//btnTranSave.Enabled = allowSave;
//if (CurTrans != null && selii != null)
//{
// if (CurTrans.ToID == selii.ItemID)
// {
// // if the checkbox for including a page number (UseTransitionModifier flag is true)
// // then need to check if this has been changed, and allow a save/cancel if so.
// if (cbPageNum.Visible && _ModExistingPageNum != cbPageNum.Checked)
// btnTranCancel.Enabled = btnTranSave.Enabled = true;
// else
// btnTranCancel.Enabled = btnTranSave.Enabled = false;
// }
// else
// {
// btnTranCancel.Enabled = true;
// btnTranSave.Enabled = allowSave;
// }
//}
//else btnTranCancel.Enabled = btnTranSave.Enabled = allowSave;
}
private void btnTranCancel_Click(object sender, EventArgs e)
{
@@ -1314,7 +1193,7 @@ namespace Volian.Controls.Library
}
private void btnTranSave_Click(object sender, EventArgs e)
{
string trantxt = "(Resolved Transition Text)";
string trantxt; //Resolved Transition Text
string linktxt = null;
E_TransUI etm = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[listBoxTranFmt.SelectedIndex].TransUI;
// if must have a step, test for this first.
@@ -1370,14 +1249,11 @@ namespace Volian.Controls.Library
// be sure that the order is right, i.e. to is before range in list.
if (toItem.ItemID != rangeItem.ItemID)
{
Boolean switchIds = false;
// check for order of hls first, then do within sibling list.
switchIds = RangeItemAndToItemNeedsSwitched(toItem, rangeItem); // B2021-115 switchIds was being set to true when it should not have
Boolean switchIds = RangeItemAndToItemNeedsSwitched(toItem, rangeItem); // B2021-115 switchIds was being set to true when it should not have
if (switchIds)
{
ItemInfo switchItem = toItem;
toItem = rangeItem;
rangeItem = switchItem;
(rangeItem, toItem) = (toItem, rangeItem);
}
}
linktxt = string.Format("#Link:TransitionRange:{0} <NewID> {1} {2}", listBoxTranFmt.SelectedIndex, toItem.ItemID, rangeItem.ItemID);
@@ -1496,7 +1372,7 @@ namespace Volian.Controls.Library
if (node1==null && node2==null) return;
if (node1 != null && node2 == null)
{
node1.BackColor = on ? _RangeColor : tvTran.BackColor;
node1.BackColor = on ? RangeColor : tvTran.BackColor;
return;
}
// If node2 is below node1 in the tree switch them... get to high level step &
@@ -1520,9 +1396,7 @@ namespace Volian.Controls.Library
}
if (i1 > i2)
{
VETreeNode t = node2;
node2 = node1;
node1 = t;
(node1, node2) = (node2, node1);
}
// Turn Hilighting on/off (depending on bool argument) between the two nodes
@@ -1551,8 +1425,8 @@ namespace Volian.Controls.Library
VETreeNode cur = node1;
while (cur != null)
{
cur.BackColor = on ? _RangeColor : tvTran.BackColor;
cur = (VETreeNode)(cur.NextNode == null ? cur.Parent : cur.NextNode);
cur.BackColor = on ? RangeColor : tvTran.BackColor;
cur = (VETreeNode)(cur.NextNode ?? cur.Parent);
// if these nodes were at the same level, then stop after the current node = range2
if (cur == top1) cur = null; // stop at top
if (cur == top2) top1 = cur = null;
@@ -1561,30 +1435,25 @@ namespace Volian.Controls.Library
cur = top1==null?null:(VETreeNode)top1.NextNode;
while (cur != null)
{
cur.BackColor = on ? _RangeColor : tvTran.BackColor;
cur.BackColor = on ? RangeColor : tvTran.BackColor;
cur = (cur == top2) ? null : (VETreeNode)cur.NextNode;
}
// finish subtree of second node in range.
cur = top2==node2?null:node2;
while (cur != null)
{
cur.BackColor = on ? _RangeColor : tvTran.BackColor;
cur = (VETreeNode)(cur.PrevNode == null ? cur.Parent : cur.PrevNode);
cur.BackColor = on ? RangeColor : tvTran.BackColor;
cur = (VETreeNode)(cur.PrevNode ?? cur.Parent);
if (cur == top2) cur = null; // stop at top
}
// hilite last selection..
top2.BackColor = on ? _RangeColor : tvTran.BackColor;
top2.BackColor = on ? RangeColor : tvTran.BackColor;
}
#endregion
public DocVersionInfo Mydvi = null; // this is initialized in vlnTreeComboSetsFillIn()
private static UserInfo _MyUserInfo = null;
public static UserInfo MyUserInfo
{
get { return _MyUserInfo; }
set { _MyUserInfo = value; }
}
public static UserInfo MyUserInfo { get; set; } = null;
private void cbIncStepNum_CheckedChanged(object sender, EventArgs e)
{
@@ -1610,8 +1479,7 @@ namespace Volian.Controls.Library
if (cbHoldProcSet.Checked)
{
VETreeNode vt = tvTran.SelectedNode as VETreeNode;
ItemInfo selii = vt.VEObject as ItemInfo;
if (selii != null)
if (vt.VEObject is ItemInfo selii)
{
HeldLinkText = string.Format("#Link:Transition:{0} <NewID> {1}", listBoxTranFmt.SelectedIndex, selii.ItemID);
HeldLink_TranFmtIndx = listBoxTranFmt.SelectedIndex;
@@ -1628,29 +1496,17 @@ namespace Volian.Controls.Library
}
public class TransItem
{
private string _ItemDescription;
public string ItemDescription { get; set; }
public string ItemDescription
{
get { return _ItemDescription; }
set { _ItemDescription = value; }
}
private string _Format;
public string Format
{
get { return _Format; }
set { _Format = value; }
}
public string Format { get; set; }
public TransItem(string desc, string fmt)
{
_ItemDescription = desc;
_Format = fmt;
ItemDescription = desc;
Format = fmt;
}
public override string ToString()
{
return _ItemDescription;
return ItemDescription;
}
}
}
+2 -25
View File
@@ -1,4 +1,3 @@
using System;
using System.Windows.Forms;
using AT.STO.UI.Win;
@@ -8,16 +7,9 @@ namespace Volian.Controls.Library
internal class DropDownNode : TreeNode, ILookupItem<long>
{
#region Private Variable Declarations
private long _id = 0;
private readonly long _id = 0;
#endregion
#region Constructor / Destructor
/// <summary>
/// Default constructor.
/// </summary>
public DropDownNode() : base()
{
}
/// <summary>
/// /// <summary>
/// Some constructors initializing the node with Id.
@@ -29,26 +21,11 @@ namespace Volian.Controls.Library
{
_id = Id;
}
public DropDownNode(long Id, string Text, DropDownNode[] Children) : base(Text, Children)
{
_id = Id;
}
public DropDownNode(long Id, string Text, int ImageIndex, int SelectedImageIndex) : base(Text, ImageIndex, SelectedImageIndex)
{
_id = Id;
}
public DropDownNode(long Id, string Text, int ImageIndex, int SelectedImageIndex, DropDownNode[] Children) : base(Text, ImageIndex, SelectedImageIndex, Children)
{
_id = Id;
}
#endregion
#region Public Methods
public override string ToString()
{
return this.GetType().Name + " (Id=" + Id.ToString() + ", Name=" + Text + ")";
return $"{this.GetType().Name} (Id={Id}, Name={Text})";
}
#endregion
#region ILookupItem<long> Implementation
@@ -22,10 +22,7 @@ namespace Volian.Controls.Library
{
base.OnAfterSelect(e);
if (ValueChanged != null)
{
ValueChanged(this, new DropDownValueChangedEventArgs(e.Node));
}
ValueChanged?.Invoke(this, new DropDownValueChangedEventArgs(e.Node));
}
/// <summary>
/// A double click on a node counts as finish editing.
File diff suppressed because it is too large Load Diff
+20 -50
View File
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
@@ -16,13 +12,8 @@ namespace Volian.Controls.Library
{
private bool doingfind = false;
private bool findingbookmarks = false;
private bool _FoundIt = false;
private ItemInfo _StartingItemInfo = null;// C2023-016 used to remember where we started doing the Find/Replace
public bool FoundIt
{
get { return _FoundIt; }
set { _FoundIt = value; }
}
public bool FoundIt { get; set; } = false;
private bool IsFound
{
get
@@ -43,31 +34,16 @@ namespace Volian.Controls.Library
{
_MyEditItem = value;
if (_MyEditItem == null) return;
_MyDocVersion = _MyEditItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo;
Mydocversion = _MyEditItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo;
SetupContextMenu();
}
}
private DocVersionInfo _MyDocVersion;
public DocVersionInfo Mydocversion
{
get { return _MyDocVersion; }
set {_MyDocVersion = value; }
}
private DisplayBookMarks _myDisplayBookMarks;
public DisplayBookMarks MyDisplayBookMarks
{
get { return _myDisplayBookMarks; }
set { _myDisplayBookMarks = value; }
}
public DocVersionInfo Mydocversion { get; set; }
private bool _InApproved;
public DisplayBookMarks MyDisplayBookMarks { get; set; }
public bool InApproved
{
get { return _InApproved; }
set { _InApproved = value; }
}
public bool InApproved { get; set; }
public FindReplace()
{
InitializeComponent();
@@ -203,7 +179,7 @@ namespace Volian.Controls.Library
// C2023-016 Find the next element, but stay in the same procedure
private ItemInfo FindNextStepElement(ItemInfo curStepElem, string fndStr)
{
ItemInfo nxtStepElem = curStepElem;
ItemInfo nxtStepElem;
if (_StartingItemInfo == null)
_StartingItemInfo = MyEditItem.MyItemInfo;
if (cbxReverse.Checked)
@@ -267,11 +243,6 @@ namespace Volian.Controls.Library
}
FoundIt = true;
}
private bool FindNextText(ItemInfo next)
{
if (next.MyContent.MyGrid!=null) return true;
return next.MyContent.Text.ToUpper().Contains(cmboFindText.Text.ToUpper());
}
private void AddToComboLists()
{
bool hastext = this.cmboFindText.Text.Length > 0;
@@ -304,11 +275,6 @@ namespace Volian.Controls.Library
_StartingItemInfo = null;//C2023-016 reset the starting position
}
public void PerformFindNext()
{
btnFindNext.PerformClick();
}
private void tabFind_Click(object sender, EventArgs e)
{
lblRplTxt.Visible = false;
@@ -360,8 +326,10 @@ namespace Volian.Controls.Library
IDataObject myDO = Clipboard.GetDataObject();
if (myDO.GetDataPresent(DataFormats.Rtf))
{
RichTextBox rtb = new RichTextBox();
rtb.SelectedRtf = ItemInfo.StripLinks(myDO.GetData(DataFormats.Rtf).ToString());
RichTextBox rtb = new RichTextBox
{
SelectedRtf = ItemInfo.StripLinks(myDO.GetData(DataFormats.Rtf).ToString())
};
if (cmboReplaceText.Focused)
cmboReplaceText.SelectedText = rtb.Text;
else if (cmboFindText.Focused)
@@ -394,9 +362,9 @@ namespace Volian.Controls.Library
private void SetupContextMenu()
{
galSymbols.SubItems.Clear();
if (_MyDocVersion != null)
if (Mydocversion != null)
{
FormatData fmtdata = _MyDocVersion.ActiveFormat.PlantFormat.FormatData;
FormatData fmtdata = Mydocversion.ActiveFormat.PlantFormat.FormatData;
SymbolList sl = fmtdata.SymbolList;
if (sl == null || sl.Count <= 0)
{
@@ -405,13 +373,15 @@ namespace Volian.Controls.Library
}
foreach (Symbol sym in sl)
{
DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem();
btnCM.Text = string.Format("{0}", (char)sym.Unicode);
DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem
{
Text = string.Format("{0}", (char)sym.Unicode),
// to name button use unicode rather than desc, desc may have spaces or odd chars
btnCM.Name = "btnCM" + sym.Unicode.ToString();
btnCM.Tooltip = sym.Desc;
btnCM.Tag = string.Format(@"{0}", sym.Unicode);
btnCM.FontBold = true;
Name = "btnCM" + sym.Unicode.ToString(),
Tooltip = sym.Desc,
Tag = string.Format(@"{0}", sym.Unicode),
FontBold = true
};
btnCM.Click += new System.EventHandler(btnSym_Click);
galSymbols.SubItems.Add(btnCM);
}
@@ -1,8 +1,5 @@
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Drawing.Design;
using System.Windows.Forms.Design;
@@ -13,6 +10,7 @@ namespace Volian.Controls.Library
public class FlagCheckedListBox : CheckedListBox
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private System.ComponentModel.Container components = null;
public FlagCheckedListBox()
@@ -28,8 +26,7 @@ namespace Volian.Controls.Library
{
if (disposing)
{
if (components != null)
components.Dispose();
components?.Dispose();
}
base.Dispose(disposing);
}
@@ -37,9 +34,6 @@ namespace Volian.Controls.Library
#region Component Designer generated code
private void InitializeComponent()
{
//
// FlaggedCheckedListBox
//
this.CheckOnClick = true;
}
@@ -127,7 +121,7 @@ namespace Volian.Controls.Library
// If the item has been unchecked, remove its bits from the sum
if (cs == CheckState.Unchecked)
sum = sum & (~composite.value);
sum &= (~composite.value);
// If the item has been checked, combine its bits with the sum
else
sum |= composite.value;
@@ -239,12 +233,14 @@ namespace Volian.Controls.Library
public class FlagEnumUIEditor : UITypeEditor
{
// The checklistbox
private FlagCheckedListBox flagEnumCB;
private readonly FlagCheckedListBox flagEnumCB;
public FlagEnumUIEditor()
{
flagEnumCB = new FlagCheckedListBox();
flagEnumCB.BorderStyle = BorderStyle.None;
flagEnumCB = new FlagCheckedListBox
{
BorderStyle = BorderStyle.None
};
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
@@ -269,10 +265,7 @@ namespace Volian.Controls.Library
return null;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) => UITypeEditorEditStyle.DropDown;
}
@@ -1,9 +1,6 @@
using Csla;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using VEPROMS.CSLA.Library;
@@ -0,0 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Not modifying Naming Styles")]
+19 -20
View File
@@ -34,9 +34,9 @@ namespace Volian.Controls.Library
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GridItem));
this.lblTab = new System.Windows.Forms.Label();
this._MyToolTip = new DevComponents.DotNetBar.SuperTooltip();
this._MyFlexGrid = new Volian.Controls.Library.VlnFlexGrid(this.components);
this.MyFlexGrid = new Volian.Controls.Library.VlnFlexGrid(this.components);
this._MyDisablePanel = new vlnPanel();
((System.ComponentModel.ISupportInitialize)(this._MyFlexGrid)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.MyFlexGrid)).BeginInit();
this.SuspendLayout();
//
// lblTab
@@ -55,21 +55,21 @@ namespace Volian.Controls.Library
//
// _MyFlexGrid
//
this._MyFlexGrid.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom;
this._MyFlexGrid.AllowResizing = C1.Win.C1FlexGrid.AllowResizingEnum.Both;
this._MyFlexGrid.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this._MyFlexGrid.ColumnInfo = "3,0,0,0,0,40,Columns:";
this._MyFlexGrid.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
this._MyFlexGrid.FocusRect = C1.Win.C1FlexGrid.FocusRectEnum.Solid;
this._MyFlexGrid.Location = new System.Drawing.Point(5, 5);
this._MyFlexGrid.Name = "_MyFlexGrid";
this._MyFlexGrid.Rows.Count = 4;
this._MyFlexGrid.Rows.DefaultSize = 20;
this._MyFlexGrid.Rows.Fixed = 0;
this._MyFlexGrid.ScrollBars = System.Windows.Forms.ScrollBars.None;
this._MyFlexGrid.Size = new System.Drawing.Size(314, 66);
this._MyFlexGrid.StyleInfo = resources.GetString("_MyFlexGrid.StyleInfo");
this._MyFlexGrid.TabIndex = 4;
this.MyFlexGrid.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom;
this.MyFlexGrid.AllowResizing = C1.Win.C1FlexGrid.AllowResizingEnum.Both;
this.MyFlexGrid.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.MyFlexGrid.ColumnInfo = "3,0,0,0,0,40,Columns:";
this.MyFlexGrid.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
this.MyFlexGrid.FocusRect = C1.Win.C1FlexGrid.FocusRectEnum.Solid;
this.MyFlexGrid.Location = new System.Drawing.Point(5, 5);
this.MyFlexGrid.Name = "_MyFlexGrid";
this.MyFlexGrid.Rows.Count = 4;
this.MyFlexGrid.Rows.DefaultSize = 20;
this.MyFlexGrid.Rows.Fixed = 0;
this.MyFlexGrid.ScrollBars = System.Windows.Forms.ScrollBars.None;
this.MyFlexGrid.Size = new System.Drawing.Size(314, 66);
this.MyFlexGrid.StyleInfo = resources.GetString("_MyFlexGrid.StyleInfo");
this.MyFlexGrid.TabIndex = 4;
//
// _MyDisablePanel
//
@@ -81,13 +81,13 @@ namespace Volian.Controls.Library
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this._MyFlexGrid);
this.Controls.Add(this.MyFlexGrid);
this.Controls.Add(this._MyDisablePanel);
this.Controls.Add(this.lblTab);
this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "GridItem";
this.Size = new System.Drawing.Size(320, 72);
((System.ComponentModel.ISupportInitialize)(this._MyFlexGrid)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.MyFlexGrid)).EndInit();
this.ResumeLayout(false);
}
@@ -96,7 +96,6 @@ namespace Volian.Controls.Library
private System.Windows.Forms.Label lblTab;
private DevComponents.DotNetBar.SuperTooltip _MyToolTip;
private VlnFlexGrid _MyFlexGrid;
private vlnPanel _MyDisablePanel;
}
}
+43 -234
View File
@@ -1,13 +1,8 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Text.RegularExpressions;
//using System.IO;
using System.Windows.Forms;
using System.Xml;
using VEPROMS.CSLA.Library;
using Volian.Base.Library;
using C1.Win.C1FlexGrid;
@@ -24,42 +19,23 @@ namespace Volian.Controls.Library
{
get
{
ItemInfo procInfo = MyItemInfo.MyProcedure as ItemInfo;
if (procInfo == null)
if (!(MyItemInfo.MyProcedure is ItemInfo procInfo))
_MyDVI = null;
else
_MyDVI = procInfo.ActiveParent as DocVersionInfo;
return _MyDVI;
}
}
private static UserInfo _MyUserInfo = null;
public static UserInfo MyUserInfo
{
get { return _MyUserInfo; }
set { _MyUserInfo = value; }
}
private bool _IsSaving;
public bool IsSaving
{
get { return _IsSaving; }
set { _IsSaving = value; }
}
public VlnFlexGrid MyFlexGrid
{
get { return _MyFlexGrid; }
set { _MyFlexGrid = value; }
}
private int _GridMargin = 11;
public static UserInfo MyUserInfo { get; set; } = null;
public bool IsSaving { get; set; }
public VlnFlexGrid MyFlexGrid { get; set; }
/// <summary>
/// Margin between the EditItem and the VlnFlexGrid. Appears on the Right.
/// Will allow space to draw a Change Bar on the right side of the EditItem.
/// </summary>
public int GridMargin
{
get { return _GridMargin; }
set { _GridMargin = value; }
}
public int GridMargin { get; set; } = 11;
#endregion
#region Event Handlers
@@ -145,7 +121,6 @@ namespace Volian.Controls.Library
void MyStepRTB_AdjustTableWidth(object sender, StepRTBTableWidthEventArgs args)
{
//Console.WriteLine("MyStepRTB_AdjustTableWidth");
//if ((!_MyItemInfo.IsSection && !_MyItemInfo.IsProcedure) && (_MyItemInfo.IsTable || _MyItemInfo.IsFigure))
if (args.EditMode)
{
int colR = MyStepPanel.ToDisplay(MyStepSectionLayoutData.ColRTable, MyItemInfo.ColumnMode);
@@ -167,27 +142,12 @@ namespace Volian.Controls.Library
}
}
}
bool MyStepRTB_IsNotCurrentSelection(object sender, EventArgs args)
{
return MyStepPanel.SelectedEditItem != this;
}
bool MyStepRTB_IsNotCurrentSelection(object sender, EventArgs args) => MyStepPanel.SelectedEditItem != this;
void MyStepRTB_OpenAnnotations(object sender, EventArgs args)
{
OpenAnnotations();
}
void MyFlexGrid_OpenAnnotations(object sender, EventArgs args)
{
OpenAnnotations();
}
void MyStepRTB_DoMouseWheel(object sender, MouseEventArgs args)
{
DoMouseWheel(args);
}
void MyStepRTB_DoSaveContents(object sender, EventArgs args)
{
SaveCurrentAndContents();
}
void MyStepRTB_OpenAnnotations(object sender, EventArgs args) => OpenAnnotations();
void MyFlexGrid_OpenAnnotations(object sender, EventArgs args) => OpenAnnotations();
void MyStepRTB_DoMouseWheel(object sender, MouseEventArgs args) => DoMouseWheel(args);
void MyStepRTB_DoSaveContents(object sender, EventArgs args) => SaveCurrentAndContents();
void MyStepRTB_VisibleChanged(object sender, EventArgs e)
{
if (MyStepRTB == null) return;
@@ -204,7 +164,6 @@ namespace Volian.Controls.Library
void MyFlexGrid_Click(object sender, EventArgs e)
{
MyFlexGrid.Focus();
//MyStepPanel.MyStepTabPanel.MyStepTabRibbon.ToggleTableDesignButtons(false);
MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetRibbonForGrid();
MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetTableButtonsForMergeRangeSelection();
MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetGridContextMenu();
@@ -235,7 +194,6 @@ namespace Volian.Controls.Library
private string _OrigRtf; // used to store original rtf to allow for 'escape' key restore
void MyFlexGrid_SelChange(object sender, EventArgs e)
{
//if (Initializing) return;
//Volian.Base.Library.vlnStackTrace.ShowStackLocal("MyFlexGrid_SelChange {0}",MyFlexGrid.Selection);
RTBLastFocus = false;
MyStepRTB.Visible = false; // Hide the editor if the Selection Changes
@@ -244,7 +202,7 @@ namespace Volian.Controls.Library
{
// B2020-088: get string using method in case of merged cells
string rtf = MyFlexGrid.GetCellRTFString(MyFlexGrid.Row, MyFlexGrid.Col);
_OrigRtf = rtf == null ? string.Empty : rtf;
_OrigRtf = rtf ?? string.Empty;
}
}
void MyStepRTB_KeyDown(object sender, KeyEventArgs e)
@@ -310,7 +268,6 @@ namespace Volian.Controls.Library
this.MyStepRTB.SetMenu += new StepRTBMenuEvent(MyStepRTB_SetMenu);
this.MyStepRTB.OpenContextMenu += new StepRTBLocationEvent(MyStepRTB_OpenContextMenu);
this.MyFlexGrid.EnterKeyPressed += new VlnFlexGridkeyEvent(MyFlexGrid_EnterKeyPressed);
//this.MyStepRTB.EnterKeyPressed += new StepRTBCursorKeysEvent(MyStepRTB_EnterKeyPressed);
// This Resize event has been useful for debugging purposes numerous times
//
//this.MyStepRTB.Resize += new EventHandler(MyStepRTB_Resize);
@@ -330,12 +287,6 @@ namespace Volian.Controls.Library
cs.BackColor = MyFlexGrid.MyShading.GetColor(MyFlexGrid.Row, MyFlexGrid.Col); // C2021-004 reset the last active table cell's shading color when leaving
}
//void MyStepRTB_EnterKeyPressed(object sender, KeyEventArgs args)
//{
// args.Handled = true;
// MyStepPanel.MyStepTabPanel.MyStepTabRibbon.ProcessEnterKey();
//}
void MyFlexGrid_EnterKeyPressed(object sender, KeyEventArgs args)
{
args.Handled = true;
@@ -352,16 +303,6 @@ namespace Volian.Controls.Library
SetMenu(args.MenuGroup);
}
// This Resize event been useful for debugging purposes numerous times
//
//void MyStepRTB_Resize(object sender, EventArgs e)
//{
// if (MyStepRTB.Visible)
// {
// //Volian.Base.Library.vlnStackTrace.ShowStack("MyStepRTB_Resize");
// Console.WriteLine("MyStepRTB_Resize {0}", MyStepRTB.Width);
// }
//}
void MyStepRTB_RoInsert(object sender, StepRTBRoEventArgs args)
{
//Console.WriteLine("GridItem - Enter MyStepRTB_RoInsert");
@@ -372,12 +313,6 @@ namespace Volian.Controls.Library
MyFlexGrid.FixTableCellsHeightWidth();
MyFlexGrid.AdjustGridControlSize();
MyFlexGrid.Visible = true;
//MyFlexGrid.MergedRanges.Clear();
//MyFlexGrid.Clear();
//ConvertTableToGrid(args.RawValText, args.RODbID, args.ROID);
//MyFlexGrid.RODbId = args.RODbID;
//MyFlexGrid.ROID = args.ROID;
//SaveContents();
}
else
{
@@ -400,18 +335,7 @@ namespace Volian.Controls.Library
#endregion
#region Override Method and Properties
public override int BorderWidth { get { return (MyFlexGrid.Width - MyFlexGrid.ClientRectangle.Width); } }
//private bool _OnlyOnce = false;
//protected override void OnPaint(PaintEventArgs e)
//{
// base.OnPaint(e);
// if (!this.Enabled && !_OnlyOnce)
// {
// _OnlyOnce = true;
// _MyDisablePanel.SendToBack();
// _MyDisablePanel.BringToFront();
// _OnlyOnce = false;
// }
//}
protected override void OnEnabledChanged(EventArgs e)
{
base.OnEnabledChanged(e);
@@ -430,7 +354,6 @@ namespace Volian.Controls.Library
{
gr.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
gr.FillRectangle(new SolidBrush(Color.FromArgb(128, Color.FromKnownColor(KnownColor.ButtonFace))), rect);
//gr.FillEllipse(Brushes.Red, 10, 10, 10, 10);
}
_MyDisablePanel.Location = this.MyFlexGrid.Location;
_MyDisablePanel.Size = this.MyFlexGrid.Size;
@@ -446,10 +369,6 @@ namespace Volian.Controls.Library
public override string TabFormat { get { return _TabFormat; } set { _TabFormat = value; } }
public override void AdjustTableWidthAndLocation()
{
//_MyStepRTB.Font = MyStepData.Font.WindowsFont;
//ItemWidth = (int)GetTableWidth(MyStepRTB.Font, MyItemInfo.MyContent.Text, true);
//ItemWidth = MyFlexGrid.Width;
//ItemLocation = new Point(50, _MyParentEditItem.Bottom);
// We had a table that was in a funky state. This allows it to appear in editor so
// that is could be deleted.
@@ -586,11 +505,11 @@ namespace Volian.Controls.Library
}
}
}
c = c + 1;
c++;
if (c == w)
{
c = 0;
r = r + 1;
r++;
}
}
}
@@ -651,35 +570,17 @@ namespace Volian.Controls.Library
// if no ro has been defined yet, just return null
if (MyFlexGrid.ROID == null) return null;
ContentRoUsage rousg = null;
// using (Item itm = MyItemInfo.Get())
// {
using (RODb rodb = RODb.GetJustRoDb(MyFlexGrid.RODbId))
{
string padroid = (MyFlexGrid.ROID.Length <= 12) ? MyFlexGrid.ROID + "0000" : MyFlexGrid.ROID;
rousg = itm.MyContent.ContentRoUsages.Add(MyFlexGrid.ROID, rodb);
}
//itm.Save();
// }
MyItemInfo.MyContent.RefreshContentRoUsages();
return string.Format(@"#Link:ReferencedObject:{0} {1} {2}", rousg.ROUsageID, MyFlexGrid.ROID, MyFlexGrid.RODbId);
}
//private void ConvertTableToGrid(string valtext, int rodbid, string roid)
//{
// VE_Font vefont = MyItemInfo.GetItemFont();
// MyFlexGrid.Font = vefont.WindowsFont;
// //Initializing = true;
// MyFlexGrid.MergedRanges.Clear();
// MyFlexGrid.Clear();
// MyFlexGrid.ParseTableFromText(valtext);
// MyFlexGrid.AutoSizeCols();
// MyFlexGrid.AutoSizeRows();
// MyFlexGrid.MakeRTFcells();
// MyFlexGrid.RODbId = rodbid;
// MyFlexGrid.ROID = roid;
// MyFlexGrid.IsRoTable = true;
// //Initializing = false;
// SaveContents();
//}
private bool FinishSave(string searchableText)
{
// Just in case if the grid was in a mode to change sizes, clear out that setting
@@ -691,13 +592,9 @@ namespace Volian.Controls.Library
string xml = MyFlexGrid.GetXMLData();
using (Item itm = MyItemInfo.Get())
{
//if (!MatchingXML(itm.MyContent.MyGrid.Data, xml))
//{
// CompareXML(itm.MyContent.MyGrid.Data, xml);
itm.MyContent.MyGrid.Data = xml;
itm.MyContent.MyGrid.DTS = DateTime.Now;
itm.MyContent.MyGrid.UserID = Volian.Base.Library.VlnSettings.UserID;
//}
// if this is the initial save of an ro table, then the 'DoLinkForRoTable' will
// create the usage for it. this code gets run on modify of the ro table and also
// on exit of the griditem. We don't want to save the ro usage again, if it's already
@@ -705,12 +602,9 @@ namespace Volian.Controls.Library
if (MyFlexGrid.IsRoTable && MyFlexGrid.ROID != null && itm.MyContent.ContentRoUsageCount < 1)
{
searchableText = string.Format(@"\v<START]\v0 {0} \v {1}[END>\v0 ", searchableText, DoLinkForRoTable(itm));
//if (itm.MyContent.Text != searchableText)
//{
itm.MyContent.Text = searchableText;
itm.MyContent.UserID = Volian.Base.Library.VlnSettings.UserID;
itm.MyContent.DTS = DateTime.Now;
//}
}
else
{
@@ -726,82 +620,30 @@ namespace Volian.Controls.Library
if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ChangeBarData.ChangeIds &&
!this.MyStepPanel.MyStepTabPanel.MyDisplayTabControl.EditorialChange)
{
StepConfig sc = itm.MyConfig as StepConfig;
if (sc == null)
if (!(itm.MyConfig is StepConfig sc))
sc = new StepConfig();
sc.Step_ChangeID = this.MyStepPanel.MyStepTabPanel.MyDisplayTabControl.ChgId;
if (itm.MyConfig == null) itm.MyContent.Config = sc.ToString();
}
itm.Save();
StepConfig myItmCfg =MyItemInfo.MyConfig as StepConfig;
// We saved changes made to some step text. Reset the change bar override.
// IF there is a step config remove the change bar override by setting the CBOverride value to null
// This fixes a problem reported by Farly where if the change bar or overridden to be off, the next
// time a change was made, the change bar remained turned off.
if (myItmCfg != null)
if (MyItemInfo.MyConfig is StepConfig myItmCfg)
myItmCfg.Step_CBOverride = null; // clear the change bar override
MyItemInfo.MyContent.MyGrid.ResetContent(itm.MyContent.MyGrid);
}
return true;
}
private void CompareXML(string v1, string v2)
{
v1 = Regex.Replace(v1, "\r\n *", "");
v1 = Regex.Replace(v1, "version *= *\"[^\"]*\"", "");
v2 = Regex.Replace(v2, "\r\n *", "");
v2 = Regex.Replace(v2, "version *= *\"[^\"]*\"", "");
int iStart = 0;
int l1 = v1.Length;
int l2 = v2.Length;
int l3 = Math.Min(l1, l2);
while (iStart < l3 && v1[iStart] == v2[iStart])
iStart++;
int iEnd1 = l1 - 1;
int iEnd2 = l2 - 1;
while (iStart < iEnd1 && iStart < iEnd2 && v1[iEnd1] == v2[iEnd2])
{
iEnd1--;
iEnd2--;
}
if (iStart < iEnd1) Console.WriteLine("v1 = {0}", v1.Substring(iStart, iEnd1 - iStart));
if (iStart < iEnd2) Console.WriteLine("v2 = {0}", v2.Substring(iStart, iEnd2 - iStart));
}
private bool MatchingXML(string v1, string v2)
{
v1 = Regex.Replace(v1, "\r\n *", "");
v1 = Regex.Replace(v1, "version *= *\"[^\"]*\"", "");
v2 = Regex.Replace(v2, "\r\n *", "");
v2 = Regex.Replace(v2, "version *= *\"[^\"]*\"", "");
int l1 = v1.Length;
int l2 = v2.Length;
if(l1 != l2 )return false;
//int l3 = Math.Min(l1, l2);
//int l4 = Math.Max(l1, l2);
for (int i = 0; i < l1; i++)
if (v1[i] != v2[i]) return false;
return true;
//Console.WriteLine("{0} - {1},{2}",i, showChar(v1[i]), showChar(v2[i]));
//if(l1 > l3)Console.WriteLine("v1 = {0}",v1.Substring(l3));
//if(l2 > l3)Console.WriteLine("v2 = {0}",v2.Substring(l3));
}
//private object showChar(char c)
//{
// int i = (int)c;
// if (i <= 32)
// return string.Format("<{0}>", i);
// else
// return c.ToString();
//}
public void BasicSave()
{
using (Item itm = MyItemInfo.Get())
{
itm.MyContent.MyGrid.Data = MyFlexGrid.GetXMLData();
itm.Save();
//MyItemInfo.MyContent.MyGrid.ResetContent(itm.MyContent.MyGrid);
}
}
public override bool CanExpand { get { return false; } set { ;} }
@@ -821,7 +663,7 @@ namespace Volian.Controls.Library
MyFlexGrid.Select(0, 0);
MyFlexGrid.FirstEntry = true; // to fix a problem with initial mouse click into table
}
catch (Exception ex)
catch (Exception)
{
FlexibleMessageBox.Show("The content of this table is corrupted. You will either need to restore a previous version or delete it.", "Table Corrupted", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
@@ -831,21 +673,13 @@ namespace Volian.Controls.Library
{
_MyLog.WarnFormat("Attempt to give Focus to Disposed Object {0}", MyID);
}
//ScrollToCenter();
}
public override void ItemShow()
{
MyFlexGrid.Focus();
//ScrollToCenter();
}
public StepRTB DisplayRoStepRTB;
public override StepRTB MyStepRTB
{
get
{
return MyFlexGrid.TableCellEditor;
}
}
public override StepRTB MyStepRTB => MyFlexGrid.TableCellEditor;
public override DialogResult ReplaceText(string rpltxt, string fndstr, bool caseSensitive, bool matchWholeWord, bool reverse, bool prompt, IWin32Window fndrpldlg)
{
int r = MyFlexGrid.Row;
@@ -874,11 +708,11 @@ namespace Volian.Controls.Library
if (oldRtf != MyStepRTB.Rtf) MyFlexGrid[r, c] = MyStepRTB.Rtf;
if (dr == DialogResult.Yes || dr == DialogResult.Cancel) return dr;
}
c = c + 1;
c++;
if (c == w)
{
c = 0;
r = r + 1;
r++;
}
if (r < h)
{
@@ -908,11 +742,11 @@ namespace Volian.Controls.Library
if (oldRtf != MyStepRTB.Rtf) MyFlexGrid[r, c] = MyStepRTB.Rtf;
if (dr == DialogResult.Yes || dr == DialogResult.Cancel) return dr;
}
c = c - 1;
c--;
if (c < 0)
{
c = MyFlexGrid.Cols.Count - 1;
r = r - 1;
r--;
}
cr = MyFlexGrid.GetMergedRange(r, c);
if (r >= 0 && cr.r1 == r && cr.c1 == c)
@@ -946,11 +780,11 @@ namespace Volian.Controls.Library
bool scn = MyStepRTB.FindText(str, caseSensitive, matchWholeWord, reverse);
if (scn) return true;
}
c = c + 1;
c++;
if (c == w)
{
c = 0;
r = r + 1;
r++;
}
if (r < h)
{
@@ -972,11 +806,11 @@ namespace Volian.Controls.Library
bool scn = MyStepRTB.FindText(str, caseSensitive, matchWholeWord, reverse);
if (scn) return true;
}
c = c - 1;
c--;
if (c < 0)
{
c = MyFlexGrid.Cols.Count - 1;
r = r - 1;
r--;
}
cr = MyFlexGrid.GetMergedRange(r, c);
if (r >= 0 && cr.r1 == r && cr.c1 == c)
@@ -1002,11 +836,11 @@ namespace Volian.Controls.Library
MyFlexGrid.StartEditing();
return;
}
c = c - 1;
c--;
if (c < 0)
{
c = MyFlexGrid.Cols.Count - 1;
r = r - 1;
r--;
}
if (r >= 0)
{
@@ -1055,11 +889,11 @@ namespace Volian.Controls.Library
if (oldRtf != MyStepRTB.Rtf) MyFlexGrid[r, c] = MyStepRTB.Rtf;
if (!scn) return false;
}
c = c + 1;
c++;
if (c == w)
{
c = 0;
r = r + 1;
r++;
}
}
return true;
@@ -1092,29 +926,19 @@ namespace Volian.Controls.Library
MyFlexGrid.ShowTableCellShading();
}
}
public override void SetActive()
{
AdjustColorsForEditMode();
}
public override void SetActive() => AdjustColorsForEditMode();
private bool _Empty = false;
public override bool Empty
{
get { return _Empty; }
set { _Empty = value; }
}
private bool _Initializing = false;
public bool Initializing
{
get { return _Initializing; }
set { _Initializing = value; }
}
public bool Initializing { get; set; } = false;
private bool _ActiveMode = false;
public override void RefreshDisplay(bool activeMode)
{
_ActiveMode = activeMode;
//XmlDocument xd = new XmlDocument();
//xd.LoadXml(MyItemInfo.MyContent.MyGrid.Data);
//using (StringReader sr = new StringReader())
Initializing = true;
MyFlexGrid.LoadGrid(MyItemInfo);
Initializing = false;
@@ -1148,24 +972,10 @@ namespace Volian.Controls.Library
{
// if this is an RO Table, regenerate xml. This is done in the case that
// the rotable was updated by the ro editor.
//if (MyFlexGrid.IsRoTable) RefreshGridData();
RefreshDisplay(false);
IdentifyMe(false);
}
//private void RefreshGridData()
//{
// string ROID = MyFlexGrid.ROID;
// int rodbid = MyFlexGrid.RODbId;
// //MyFlexGrid.Clear();
// ROFSTLookup MyROFSTLookup = MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst.ROFSTLookup;
// MyFlexGrid.ConvertTableROToGrid(MyROFSTLookup.GetRoValue(ROID), rodbid, ROID);
// //ConvertTableToGrid(MyROFSTLookup.GetRoValue(ROID), rodbid, ROID);
// //MyFlexGrid.RODbId = rodbid;
// //MyFlexGrid.ROID = ROID;
// //MyFlexGrid.IsRoTable = true;
// //SaveContents();
//}
public override void SetExpandAndExpander(ItemInfo itemInfo) { CanExpand = false; } // can't expand a table
public void SavePastedCellRoTran()
{
@@ -1176,7 +986,7 @@ namespace Volian.Controls.Library
int h = MyFlexGrid.Rows.Count;
int r = 0;
int c = 0;
String Rtf = null;
string Rtf;
while (r < h)
{
CellRange cr = MyFlexGrid.GetMergedRange(r, c);
@@ -1199,7 +1009,7 @@ namespace Volian.Controls.Library
string linkstr = mro.Groups[2].Value;
string[] roparts = linkstr.Split(" ".ToCharArray());
ContentRoUsage rousg = null;
int oldid = -1;
int oldid;
using (Item itm = MyItemInfo.Get())
{
using (RODb rodb = RODb.GetJustRoDb(Convert.ToInt32(roparts[2])))
@@ -1288,11 +1098,11 @@ namespace Volian.Controls.Library
SaveContents();
}
}
c = c + 1;
c++;
if (c == w)
{
c = 0;
r = r + 1;
r++;
}
}
}
@@ -1304,7 +1114,6 @@ namespace Volian.Controls.Library
CellRange cr = MyFlexGrid.GetMergedRange(MyFlexGrid.Selection.r1, MyFlexGrid.Selection.c1); // B2018-127 get merged range
int row = MyFlexGrid.Row;
int col = MyFlexGrid.Col;
//SaveContents();
DoNotRefresh = true;
MyStepRTB.Rtf = MyStepRTB.DoNewLinkInGridCell();
DoNotRefresh = false;
@@ -1343,11 +1152,11 @@ namespace Volian.Controls.Library
return;
}
}
c = c + 1;
c++;
if (c == w)
{
c = 0;
r = r + 1;
r++;
}
}
}
+14 -94
View File
@@ -1,9 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;
@@ -18,17 +14,8 @@ namespace Volian.Controls.Library
{
#region IEditItem
// set this for the imageitem so that other code (menuing/ribbons/treeview, etc) will continue to work. Include the MyItemInfo
public override StepRTB MyStepRTB
{
get { return _MyStepRTB; }
}
public override int TableWidth
{
get
{
return (int)_MyPictureBox.Width + ImageMargin;
}
}
public override StepRTB MyStepRTB => _MyStepRTB;
public override int TableWidth => (int)_MyPictureBox.Width + ImageMargin;
/// <summary>
/// The left edge of the Tab
/// </summary>
@@ -109,10 +96,7 @@ namespace Volian.Controls.Library
RefreshDisplay(false);
SetExpandAndExpander(MyItemInfo);
}
public override void RefreshOrdinal()
{
TabFormat = null;
}
public override void RefreshOrdinal() => TabFormat = null;
public override void HandleResize() {}
public override void MatchExpanded() {}
/// <summary>
@@ -176,7 +160,7 @@ namespace Volian.Controls.Library
SetWidthsAndHeights(img);
//need this to trigger update of steptabribbonbuttons:
// B2020-083: crash after approve of procedure when no edit window displayed - check for nulls
if (MyStepPanel != null && MyStepPanel.MyStepTabPanel != null) MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetButtonAndMenuEnabling(true);
if (MyStepPanel != null && MyStepPanel.MyStepTabPanel != null) MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetButtonAndMenuEnabling();
}
public override void ToggleEditView(E_ViewMode vwMode) {}
public override string TabFormat
@@ -200,14 +184,8 @@ namespace Volian.Controls.Library
public override Point TabLocation { get { return lblTab.Location; } }
public override Font ContentFont { get { return MyStepRTB.Font; } set { /*MyStepRTB.Font = value*/; } }
public override float ContentTop { get { return MyPictureBox.Top; } }
public override DialogResult ReplaceText(string rpltxt, string fndstr, bool caseSensitive, bool matchWholeWord, bool reverse, bool prompt, IWin32Window fndrpldlg)
{
return DialogResult.OK;
}
public override bool FindText(string str, bool caseSensitive, bool matchWholeWord, bool reverse)
{
return false;
}
public override DialogResult ReplaceText(string rpltxt, string fndstr, bool caseSensitive, bool matchWholeWord, bool reverse, bool prompt, IWin32Window fndrpldlg) => DialogResult.OK;
public override bool FindText(string str, bool caseSensitive, bool matchWholeWord, bool reverse) => false;
public override void PositionToEnd()
{
return;
@@ -216,14 +194,8 @@ namespace Volian.Controls.Library
{
return;
}
public override string SelectedTextForFind
{
get { return null; }
}
public override bool SpellCheckNext()
{
return true;
}
public override string SelectedTextForFind => null;
public override bool SpellCheckNext() => true;
public override bool Empty
{
get
@@ -249,22 +221,17 @@ namespace Volian.Controls.Library
get { return _MyPictureBox; }
}
private string FileName = null;
private static int _ImageMargin = 18;
/// <summary>
/// Margin between the EditItem and the ImageItem. Appears on the Right.
/// Will allow space to draw a Change Bar on the right side of the EditItem.
/// </summary>
public static int ImageMargin
{
get { return _ImageMargin; }
set { _ImageMargin = value; }
}
public static int ImageMargin { get; set; } = 18;
private bool _IsDirty = false;
private int _origCfgHt = 0; // keep track if original size was stored in cfg
private int _origCfgWd = 0;
private bool _pastedNew = false; // need this for flagging newly pasted image (may need to clear cfg)
private DisplayTags _displayTags = new DisplayTags();
//House myhouse = new House();
#endregion
#region Constructors
@@ -390,10 +357,7 @@ namespace Volian.Controls.Library
{
InsType = insType;
FileName = null;
//InitializeComponent();
SetupEditItem(itemInfo, myStepPanel, myParentEditItem, myChildRelation, expand, nextEditItem, false);
//MyPictureBox.Width = 100;
//MyPictureBox.Height = 100;
this.Width = 100 + ImageMargin;
this.Height = 100;
if (insType == ImageItem.E_ImageSource.File)
@@ -409,7 +373,7 @@ namespace Volian.Controls.Library
MyPictureBox.Image = img;
SetWidthsAndHeights(img);
string ext = GetImageFormatExtension(img);
FileName = "paste." + ext;
FileName = $"paste.{ext}";
_IsDirty = true;
}
}
@@ -455,51 +419,7 @@ namespace Volian.Controls.Library
}
}
}
//public static System.Drawing.Imaging.ImageFormat GetImageFormat(this System.Drawing.Image img)
//{
// if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
// return System.Drawing.Imaging.ImageFormat.Jpeg;
// if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp))
// return System.Drawing.Imaging.ImageFormat.Bmp;
// if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
// return System.Drawing.Imaging.ImageFormat.Png;
// if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Emf))
// return System.Drawing.Imaging.ImageFormat.Emf;
// if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Exif))
// return System.Drawing.Imaging.ImageFormat.Exif;
// if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif))
// return System.Drawing.Imaging.ImageFormat.Gif;
// if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon))
// return System.Drawing.Imaging.ImageFormat.Icon;
// if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.MemoryBmp))
// return System.Drawing.Imaging.ImageFormat.MemoryBmp;
// if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff))
// return System.Drawing.Imaging.ImageFormat.Tiff;
// else
// return System.Drawing.Imaging.ImageFormat.Wmf;
//}
private static string GetImageFormatExtension(System.Drawing.Image img)
{
return ("jpg"); // seems that this is the only one that works.
/*
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
return "jpg";
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp))
return "bmp";
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
return "png";
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Emf))
return "emf";
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif))
return "gif";
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon))
return "ico";
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff))
return "tif";
else
return "wmf";
*/
}
private static string GetImageFormatExtension(System.Drawing.Image img) => ("jpg"); // seems that this is the only one that works.
#endregion
#region RO_Images
public void HandleRoImage()
@@ -750,7 +670,7 @@ namespace Volian.Controls.Library
MyPictureBox.Image = img;
SetWidthsAndHeights(img);
string ext = GetImageFormatExtension(img);
FileName = "paste." + ext;
FileName = $"paste.{ext}";
}
}
void MyStepRTB_RoInsert(object sender, StepRTBRoEventArgs args)
@@ -964,7 +884,7 @@ namespace Volian.Controls.Library
{
string ext = ImageItem.GetImageFormatExtension(img);
filename = "paste." + ext;
filename = $"paste.{ext}";
}
else
img = null;
+5 -40
View File
@@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using VEPROMS.CSLA.Library;
namespace Volian.Controls.Library
@@ -19,11 +17,11 @@ namespace Volian.Controls.Library
// First parse the string
if (_LinkInfoText.Contains(@"\v"))
throw new Exception("LinkText.ParseLink found RTF token");
//_LinkInfoText = _LinkInfoText.Replace(@"\v ", ""); // this is not needed because this is selected Text does not contain RTF tokens
// for tran : "2, #, #, # and 4#Link:TransitionRange:2 10 173 166"
Match m = Regex.Match(_LinkInfoText, @"(.*)[#]Link:([A-Za-z]*):(.*)");
_MyValue = m.Groups[1].Value;
_MyLink = "#Link:" + m.Groups[2].Value + ":" + m.Groups[3].Value;
//for debugging
//string _MyValue = m.Groups[1].Value;
//string _MyLink = $"#Link:{m.Groups[2].Value}:{m.Groups[3].Value}";
switch (m.Groups[2].Value)
{
case "ReferencedObject":
@@ -56,11 +54,8 @@ namespace Volian.Controls.Library
}
}
}
private string _LinkInfoText;
public string LinkInfoText
{
get { return _LinkInfoText; }
}
private readonly string _LinkInfoText;
public string LinkInfoText => _LinkInfoText;
private TransitionInfo _MyTransitionInfo = null;
public TransitionInfo MyTransitionInfo
{
@@ -74,42 +69,12 @@ namespace Volian.Controls.Library
{
get { ParseLink(); return _MyTransitionInfo.MyItemRangeID; }
}
private string _MyValue = null;
//public string MyValue
//{
// get { ParseLink(); return _MyValue; }
//}
private string _MyLink = null;
//public string MyLink
//{
// get { ParseLink(); return _MyLink; }
//}
private RoUsageInfo _MyRoUsageInfo;
public RoUsageInfo MyRoUsageInfo
{
get { ParseLink(); return _MyRoUsageInfo; }
}
//private string _Roid = null; // TODO: need to return Referenced Object rather than just roid
//public string Roid
//{
// get { ParseLink(); return _Roid; }
//}
//private string _RoUsageid = null; // TODO: need to return Referenced Object rather than just roid
//public string RoUsageid
//{
// get { ParseLink(); return _RoUsageid; }
//}
//private string _RoDbid = null; // TODO: need to return Referenced Object rather than just roid
//public string RoDbid
//{
// get { ParseLink(); return _RoDbid; }
//}
private ParsedLinkType _MyParsedLinkType = ParsedLinkType.NotParsed;
//public ParsedLinkType MyParsedLinkType
//{
// get { ParseLink(); return _MyParsedLinkType; }
//}
}
#region enums
public enum ParsedLinkType : int
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Volian.Controls.Library
+17 -34
View File
@@ -13,14 +13,10 @@ namespace Volian.Controls.Library
public event ItemInfoEvent AfterRemove;
internal void OnAfterRemove(object sender)
{
if (AfterRemove != null) AfterRemove(sender);
}
private int _MaxItems = 10;
public int MaxItems
{
get { return _MaxItems; }
set { _MaxItems = value; }
AfterRemove?.Invoke(sender);
}
public int MaxItems { get; set; } = 10;
public new MostRecentItem Add(MostRecentItem myMRI)
{
Refresh();
@@ -53,8 +49,7 @@ namespace Volian.Controls.Library
// when a delete item occurs.
void MyItemInfo_BeforeDelete(object sender)
{
ItemInfo ii = sender as ItemInfo;
if (ii != null)
if (sender is ItemInfo ii)
{
MostRecentItem tmp = null;
// Look for the ItemID
@@ -101,8 +96,10 @@ namespace Volian.Controls.Library
public static MostRecentItemList GetMRILst(System.Collections.Specialized.StringCollection list, int maxItems)
{
MostRecentItemList mril = new MostRecentItemList();
mril.MaxItems = maxItems;
MostRecentItemList mril = new MostRecentItemList
{
MaxItems = maxItems
};
if (list != null)
for (int i = list.Count - 1; i >= 0;i-- )// Add in reverse order so first is last and last is first
mril.Add(list[i]);
@@ -127,27 +124,20 @@ namespace Volian.Controls.Library
get
{
if (_MyItemInfo == null)
_MyItemInfo = ItemInfo.Get(_ItemID);
_MyItemInfo = ItemInfo.Get(ItemID);
return _MyItemInfo;
}
set
{
_ItemID = value.ItemID;
ItemID = value.ItemID;
_MyItemInfo = value;
_MenuTitle = GetMenuTitle();
_ToolTip = GetToolTip(_MyItemInfo);
}
}
internal void Refresh()
{
MyItemInfo = MyItemInfo;
}
private int _ItemID;
public int ItemID
{
get { return _ItemID; }
set { _ItemID = value; }
}
internal void Refresh() => MyItemInfo = MyItemInfo;
public int ItemID { get; set; }
private string _MenuTitle;
public string MenuTitle
{
@@ -159,10 +149,7 @@ namespace Volian.Controls.Library
}
set { _MenuTitle = value; }
}
private string GetMenuTitle()
{
return MyItemInfo.Path;
}
private string GetMenuTitle() => MyItemInfo.Path;
private string _ToolTip;
public string ToolTip
{
@@ -177,10 +164,9 @@ namespace Volian.Controls.Library
private static string GetToolTip(ItemInfo item)
{
// reset active parent if null
// if (MyItemInfo.MyProcedure.ActiveParent == null) MyItemInfo.MyProcedure.ActiveParent = null;
DocVersionInfo tmp = (DocVersionInfo)(item.MyProcedure.ActiveParent);
StringBuilder sb = new StringBuilder();
int indent = BuildPath(tmp.MyFolder, ref sb);
_ = BuildPath(tmp.MyFolder, ref sb); //indent
return sb.ToString();
}
private static int BuildPath(FolderInfo folderInfo, ref StringBuilder sb)
@@ -192,7 +178,7 @@ namespace Volian.Controls.Library
}
public override string ToString()
{
return string.Format("{0}~{1}~{2}", _ItemID, MenuTitle, ToolTip);
return string.Format("{0}~{1}~{2}", ItemID, MenuTitle, ToolTip);
}
private static ItemInfo GetCorrectItemInfoType(int itemId)
{
@@ -228,9 +214,6 @@ namespace Volian.Controls.Library
}
return _RetainBadMRIs == 2;
}
public MostRecentItem(ItemInfo myItem)
{
MyItemInfo = myItem;
}
public MostRecentItem(ItemInfo myItem) => MyItemInfo = myItem;
}
}
@@ -1,11 +1,3 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Volian.Controls.Library
{
public partial class PreviewMultiLineRO : DevComponents.DotNetBar.Office2007Form //Form
@@ -1,10 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Volian.Controls.Library
@@ -30,9 +25,6 @@ namespace Volian.Controls.Library
this.roImage.Image = thmb;
this.Text = title;
}
public bool ThumbnailCallback()
{
return false;
}
public bool ThumbnailCallback() => false;
}
}
+4 -98
View File
@@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Runtime.InteropServices;
@@ -450,11 +448,6 @@ namespace Volian.Controls.Library
}
#endregion
#region Structures
//struct CharRange
//{
// public int cpMin;
// public int cpMax;
//}
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Auto)]
public struct CharFormat2
{
@@ -874,25 +867,6 @@ namespace Volian.Controls.Library
pft.dySpaceBefore = spaceBefore * 1440 / dpi;
SetParaFormat(richTextBox, pft);
}
//developed for equation editor interface work, but ended up not needing it. Kept it in
// case it is needed in the future.
//public static void SetSpaceAfter(RichTextBox richTextBox, int spaceAfter)
//{
// ParaFormatTwo pft = GetParaFormat(richTextBox);
// pft.dwMask = 0;
// pft.dwMask |= ParaFormatMasks.PFM_SPACEAFTER;
// // get the monitor's resolution in DPI and use it to set the linespacing value for
// // the richtextbox. Note that without this, the Arial Unicode font made the appearance of
// // almost double linespacing. Using PFS_Exact makes it appear as regular single spacing.
// Graphics g = richTextBox.CreateGraphics();
// int dpi = Convert.ToInt32((g.DpiX + g.DpiY) / 2);
// g.Dispose();
// // dyLineSpacing is Spacing between lines. the PFS_EXACT sets line spacing as the spacing from one
// //line to the next, in twips - thus the 1440.
// pft.dySpaceAfter = spaceAfter * 1440 / dpi;
// SetParaFormat(richTextBox, pft);
//}
public static void SetLineSpacing(RichTextBox richTextBox, ParaSpacing type)
{
ParaFormatTwo pft = GetParaFormat(richTextBox);
@@ -955,14 +929,9 @@ namespace Volian.Controls.Library
}
SetCharFormat(richTextBox, RTBSelection.SCF_SELECTION, cft);
}
public static bool IsSuperScript(RichTextBox richTextBox)
{
return (richTextBox.SelectionCharOffset>0);
}
public static bool IsSubScript(RichTextBox richTextBox)
{
return (richTextBox.SelectionCharOffset < 0);
}
public static bool IsSuperScript(RichTextBox richTextBox) => (richTextBox.SelectionCharOffset > 0);
public static bool IsSubScript(RichTextBox richTextBox) => (richTextBox.SelectionCharOffset < 0);
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "Keeping RTBSelection")]
public static void ToggleSubscript(bool bSet, RichTextBox richTextBox, RTBSelection selection)
{
if (bSet)
@@ -970,6 +939,7 @@ namespace Volian.Controls.Library
else
richTextBox.SelectionCharOffset = 0;
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "Keeping RTBSelection")]
public static void ToggleSuperscript(bool bSet, RichTextBox richTextBox, RTBSelection selection)
{
if (bSet)
@@ -1040,70 +1010,6 @@ namespace Volian.Controls.Library
}
SetCharFormat(richTextBox, selection, cft);
}
//public static bool IsLink(RichTextBox richTextBox)
//{
// CharFormatTwo cft = GetCharFormat(richTextBox, RTBSelection.SCF_SELECTION);
// return ((cft.dwEffects & CharFormatEffects.CFE_PROTECTED) == CharFormatEffects.CFE_PROTECTED);
//}
//public static void ToggleLink(bool bSet, RichTextBox richTextBox, RTBSelection selection)
//{
// CharFormatTwo cft = GetCharFormat(richTextBox, selection);
// if (bSet)
// {
// cft.dwEffects |= CharFormatEffects.CFE_LINK;
// cft.dwMask |= CharFormatMasks.CFM_LINK;
// }
// else
// {
// cft.dwEffects &= ~RTBAPI.CharFormatEffects.CFE_LINK;
// }
// SetCharFormat(richTextBox, selection, cft);
//}
//public static void UnProtect(RichTextBox richTextBox) //, string type, string text, string link)
//{
// //richTextBox.DetectUrls = false;
// CharFormatTwo cft = GetCharFormat(richTextBox, RTBAPI.RTBSelection.SCF_SELECTION); ;
// //int position = richTextBox.SelectionStart = richTextBox.TextLength;
// //richTextBox.SelectionLength = 0;
// //richTextBox.SelectedRtf = @"{\rtf1\ansi " + text + @"\v #" + link + @"\v0}";
// //richTextBox.SelectedRtf = "{" + string.Format(@"\rtf1\ansi\protect\v {0}\v0 {1}\v #{2}", type, text, link) + "}";
// //richTextBox.Select(position, type.Length + text.Length + link.Length + 1);
// cft.dwMask = RTBAPI.CharFormatMasks.CFM_PROTECTED;
// cft.dwEffects = 0;
// // The lines below can be used to allow link text to be edited
// //charFormat.dwMask = RTBAPI.CharFormatMasks.CFM_LINK;
// //charFormat.dwEffects = RTBAPI.CharFormatEffects.CFE_LINK;
// SetCharFormat(richTextBox, RTBSelection.SCF_SELECTION, cft);
// //rtbRTF.SetSelectionLink(true);
// //richTextBox.SelectionStart = richTextBox.TextLength;
// //richTextBox.SelectionLength = 0;
//}
//public static void Protect(RichTextBox richTextBox) //, string type, string text, string link)
//{
// CharFormatTwo cft = GetCharFormat(richTextBox, RTBAPI.RTBSelection.SCF_SELECTION); ;
// cft.dwMask = CharFormatMasks.CFM_PROTECTED;
// cft.dwEffects = CharFormatEffects.CFE_PROTECTED;
// SetCharFormat(richTextBox, RTBSelection.SCF_SELECTION, cft);
//}
//public static void SetLink(RichTextBox richTextBox, string type, string text, string link)
//{
// richTextBox.DetectUrls = false;
// CharFormatTwo cft = GetCharFormat(richTextBox, RTBAPI.RTBSelection.SCF_SELECTION); ;
// int position = richTextBox.SelectionStart = richTextBox.TextLength;
// richTextBox.SelectionLength = 0;
// //richTextBox.SelectedRtf = @"{\rtf1\ansi " + text + @"\v #" + link + @"\v0}";
// richTextBox.SelectedRtf = "{" + string.Format(@"\rtf1\ansi\protect\v {0}\v0 {1}\v #{2}", type, text, link) + "}";
// richTextBox.Select(position, type.Length + text.Length + link.Length + 1);
// cft.dwMask = RTBAPI.CharFormatMasks.CFM_LINK | RTBAPI.CharFormatMasks.CFM_PROTECTED;
// cft.dwEffects = RTBAPI.CharFormatEffects.CFE_LINK | RTBAPI.CharFormatEffects.CFE_PROTECTED;
// // The lines below can be used to allow link text to be edited
// //charFormat.dwMask = RTBAPI.CharFormatMasks.CFM_LINK;
// //charFormat.dwEffects = RTBAPI.CharFormatEffects.CFE_LINK;
// SetCharFormat(richTextBox, RTBSelection.SCF_SELECTION, cft);
// //rtbRTF.SetSelectionLink(true);
// richTextBox.SelectionStart = richTextBox.TextLength;
// richTextBox.SelectionLength = 0;
//}
#endregion
}
}
+17 -214
View File
@@ -1,9 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
@@ -39,10 +35,7 @@ namespace Volian.Controls.Library
/// <summary>
/// Used to connect the RichTextBox with the menus and toolbars
/// </summary>
public override StepRTB MyStepRTB
{
get { return _MyStepRTB; }
}
public override StepRTB MyStepRTB => _MyStepRTB;
public override int TableWidth { get { return (int)GetTableWidth(_MyStepRTB.Font, MyItemInfo.MyContent.Text, true); } }
/// <summary>
@@ -80,8 +73,6 @@ namespace Volian.Controls.Library
get { return _MyStepRTB.Width; }
set
{
// This is wrong for single column (KBR) - RHM Debug:
//MyStepRTB.Width = value;
Width = value + lblTab.Left + lblTab.Width + (this.Width - MyStepRTB.Right);
}
}
@@ -167,7 +158,6 @@ namespace Volian.Controls.Library
{
ItemInfo.ResetTabString(MyID);
string tabString = MyItemInfo.IsSection ? MyItemInfo.DisplayNumber.PadRight(MyItemInfo.MyTab.CleanText.Length) : MyItemInfo.MyTab.CleanText;
//string tabString = /*MyItemInfo.IsSection ? MyItemInfo.DisplayNumber : */ MyItemInfo.MyTab.CleanText;
if (!MyItemInfo.IsProcedure) lblTab.Text = tabString; // B2021-068: don't reset if procedure (it is blank when initialized)
// calculate the width based upon characters per inch considering user's DPI
@@ -182,7 +172,6 @@ namespace Volian.Controls.Library
bool lastDigitSingle = Regex.IsMatch(tabString, "^.*[^0-9][0-9] *$");
lblTab.Width = ((lastDigitSingle && MyItemInfo.IsStep ? 1 : 0) + tabString.Length) * MyStepPanel.DPI / cpi;
Invalidate();
//if (MyItemInfo.MyTab.Offset == 0) // commented out for Farley bug fix B2015-123 alignment of tabs on the edit screen (Farly is only one using tab offset)
{
// In the following if statement, the last part, 'IsHigh & PageBreakOnStep' (PageBreakOnStep
// flags background steps and IsHigh is for the HLS - Cautions/Notes were ok), was added
@@ -201,16 +190,11 @@ namespace Volian.Controls.Library
#endregion
#region Properties
private static int _RTBMargin = 3;
/// <summary>
/// Margin between the EditItem and the StepRTB. Appears on the Right.
/// Will allow space to draw a Change Bar on the right side of the EditItem.
/// </summary>
public static int RTBMargin
{
get { return _RTBMargin; }
set { _RTBMargin = value; }
}
public static int RTBMargin { get; set; } = 3;
private int? _CheckOffMargin = null;
/// <summary>
/// Margin between the EditItem and the StepRTB. Appears on the Right.
@@ -238,24 +222,10 @@ namespace Volian.Controls.Library
}
set { _CheckOffMargin = value; }
}
private EnhancedAddTypes _EnhAddType = EnhancedAddTypes.No;
public EnhancedAddTypes EnhAddType
{
get { return _EnhAddType; }
set { _EnhAddType = value; }
}
private ItemInfo _EnhAddFromItemInfo = null;
public ItemInfo EnhAddFromItemInfo
{
get { return _EnhAddFromItemInfo; }
set { _EnhAddFromItemInfo = value; }
}
private bool _DoingPasteReplace = false;
public bool DoingPasteReplace
{
get { return _DoingPasteReplace; }
set { _DoingPasteReplace = value; }
}
public EnhancedAddTypes EnhAddType { get; set; } = EnhancedAddTypes.No;
public ItemInfo EnhAddFromItemInfo { get; set; } = null;
public bool DoingPasteReplace { get; set; } = false;
#endregion
#region Constructors
public RTBItem(ItemInfo itemInfo, StepPanel myStepPanel, EditItem myParentEditItem, ChildRelation myChildRelation, bool expand)
@@ -263,7 +233,6 @@ namespace Volian.Controls.Library
// B2016-179 If the parent is a section and the child is not a step then set expand to true.
// B2016-211 Added subsection check - don't expand all of the sub sections when you open a section (Farley)
expand |= (!itemInfo.IsStepPart && itemInfo.ActiveParent.IsSection) && !itemInfo.IsSubsection;
//// TIMING: DisplayItem.TimeIt("CSLARTB Top");
InitializeComponent();// TODO: Performance 25%
SetupEditItem(itemInfo, myStepPanel, myParentEditItem, myChildRelation, expand, null, false);
MyStepRTB.TextChanged += new EventHandler(MyStepRTB_TextChanged);
@@ -273,7 +242,6 @@ namespace Volian.Controls.Library
// B2016-179 If the parent is a section and the child is not a step then set expand to true.
// B2016-211 Added subsection check - don't expand all of the sub sections when you open a section (Farley)
expand |= (!itemInfo.IsStepPart && itemInfo.ActiveParent is SectionInfo) && !itemInfo.IsSubsection;
//// TIMING: DisplayItem.TimeIt("CSLARTB Top");
InitializeComponent();// TODO: Performance 25%
SetupEditItem(itemInfo, myStepPanel, myParentEditItem, myChildRelation, expand, nextEditItem, false);
MyStepRTB.TextChanged += new EventHandler(MyStepRTB_TextChanged);
@@ -283,124 +251,10 @@ namespace Volian.Controls.Library
// B2016-179 If the parent is a section and the child is not a step then set expand to true.
// B2016-211 Added subsection check - don't expand all of the sub sections when you open a section (Farley)
expand |= (!itemInfo.IsStepPart && itemInfo.ActiveParent is SectionInfo) && !itemInfo.IsSubsection;
//// TIMING: DisplayItem.TimeIt("CSLARTB Top");
InitializeComponent();// TODO: Performance 25%
SetupEditItem(itemInfo, myStepPanel, myParentEditItem, myChildRelation, expand, null, addFirstChld);
MyStepRTB.TextChanged += new EventHandler(MyStepRTB_TextChanged);
}
//private void SetupRTBItem(ItemInfo itemInfo, StepPanel myStepPanel, EditItem myParentEditItem, ChildRelation myChildRelation, bool expand, EditItem nextEditItem)
//{
// //if (itemInfo.ItemID == 225) _MyStepRTB.Resize += new EventHandler(_MyStepRTB_Resize);
// //_MyStepRTB.MyRTBItem = this;
// //// TIMING: DisplayItem.TimeIt("CSLARTB InitComp");
// BackColor = myStepPanel.PanelColor;
// //_MyStepRTB.BackColor = myStepPanel.InactiveColor;
// // TODO: Adjust top based upon format
// // TODO: Remove Label and just output ident on the paint event
// lblTab.Left = 20;
// SetupHeader(itemInfo);
// this.Paint += new PaintEventHandler(RTBItem_Paint);
// this.BackColorChanged += new EventHandler(RTBItem_BackColorChanged);
// if (itemInfo != null)
// {
// ContentType = (int)itemInfo.MyContent.Type;
// switch (ContentType / 10000)
// {
// case 0: // Procedure
// _MyStepRTB.Font = myStepPanel.ProcFont;// lblTab.Font = myStepPanel.ProcFont;
// lblTab.Font = itemInfo.MyTab.MyFont.WindowsFont;
// break;
// case 1: // Section
// _MyStepRTB.Font = myStepPanel.SectFont;// lblTab.Font = myStepPanel.SectFont;
// lblTab.Font = itemInfo.MyTab.MyFont.WindowsFont;
// break;
// case 2: // Steps
// _MyStepRTB.Font = myStepPanel.StepFont;//lblTab.Font = myStepPanel.StepFont;
// lblTab.Font = itemInfo.MyTab.MyFont.WindowsFont;
// MyStepData = itemInfo.ActiveFormat.PlantFormat.FormatData.StepDataList[ContentType % 10000];
// break;
// }
// //this.Move += new EventHandler(DisplayItem_Move);
// }
// else
// {
// if (myStepPanel.MyFont != null) _MyStepRTB.Font = lblTab.Font = myStepPanel.MyFont;
// }
// if (expand) _MyvlnExpander.ShowExpanded();
// MyStepPanel = myStepPanel;
// if (itemInfo != null) myStepPanel._LookupEditItems.Add(itemInfo.ItemID, this);
// _MyChildRelation = myChildRelation;
// if (myParentEditItem != null) RNOLevel = myParentEditItem.RNOLevel;
// if (itemInfo != null)
// {
// //// TIMING: DisplayItem.TimeIt("CSLARTB before _Layout");
// MyStepSectionLayoutData = itemInfo.ActiveFormat.MyStepSectionLayoutData;
// //// TIMING: DisplayItem.TimeIt("CSLARTB _Layout");
// if (myParentEditItem != null)
// SeqLevel = myParentEditItem.SeqLevel + ((myChildRelation == ChildRelation.After || myChildRelation == ChildRelation.Before) && itemInfo.IsSequential ? 1 : 0);
// //// TIMING: DisplayItem.TimeIt("CSLARTB seqLevel");
// MyItemInfo = itemInfo;
// MyItemInfo.MyConfig.PropertyChanged += new PropertyChangedEventHandler(MyConfig_PropertyChanged);
// }
// //// TIMING: DisplayItem.TimeIt("CSLARTB MyItem");
// myStepPanel.Controls.Add(this);
// switch (myChildRelation)
// {
// case ChildRelation.After:
// AddItem(myParentEditItem, ref myParentEditItem._MyAfterEditItems, nextEditItem);
// break;
// case ChildRelation.Before:
// AddItem(myParentEditItem, ref myParentEditItem._MyBeforeEditItems, nextEditItem);
// break;
// case ChildRelation.RNO:
// RNOLevel = myParentEditItem.RNOLevel + 1;
// AddItem(myParentEditItem, ref myParentEditItem._MyRNOEditItems, nextEditItem);
// break;
// case ChildRelation.None:
// break;
// }
// if (itemInfo != null)
// {
// if (myChildRelation == ChildRelation.None)
// {
// if (ContentType == 0 && MyStepSectionLayoutData != null)
// {
// LastMethodsPush(string.Format("SetupRTBItem {0}", MyID));
// Width = MyStepPanel.ToDisplay(MyStepSectionLayoutData.WidT);
// }
// }
// }
// //// TIMING: DisplayItem.TimeIt("CSLARTB Parent");
// SetText();
// //// TIMING: DisplayItem.TimeIt("CSLARTB SetText");
// if (itemInfo != null)
// {
// Name = string.Format("Item-{0}", itemInfo.ItemID);
// SetExpandAndExpander(itemInfo);
// if (expand && (itemInfo.MyContent.ContentPartCount != 0)) // If it should expand and it can expand
// Expand(true);
// else
// if (myParentEditItem == null)// If it is the top node
// if (ContentType >= 20000) // and it is a step - fully expand
// Expand(true);
// else // otherwise only expand one level
// Expand(false);
// }
// //// TIMING: DisplayItem.TimeIt("CSLARTB before Controls Add");
// //myStepPanel.Controls.Add(this);
// int top = FindTop(0);
// if (Top < top)
// {
// LastMethodsPush("SetupRTBItem");
// MyStepPanel.ItemMoving++;
// Top = top;
// MyStepPanel.ItemMoving--;
// LastMethodsPop();
// }
// _Loading = false;
// //// TIMING: DisplayItem.TimeIt("CSLARTB Controls Add");
//}
private void SetupHeader()
{
SetupHeader(MyItemInfo);
@@ -412,16 +266,13 @@ namespace Volian.Controls.Library
{
if (MyStepPanel != null && this == MyStepPanel.SelectedEditItem)
ScrollToCenter();
//MyStepPanel.ScrollControlIntoView(this);
}
void MyStepRTB_TextChanged(object sender, EventArgs e)
{
if (MyStepPanel != null && this == MyStepPanel.SelectedEditItem)
ScrollToCenter();
//MyStepPanel.ScrollControlIntoView(this);
}
private Label lblHeader = null;
private Label lblFooter = null;
private void SetupHeaderFooter(ref Label lbl, string name, MetaTag mTag)
{
if (lbl == null) lbl = new Label();
@@ -479,11 +330,9 @@ namespace Volian.Controls.Library
if (ed.Type != 0)
{
ItemInfo ii = ItemInfo.Get(ed.ItemID);
//if (MyStepPanel.MyStepTabPanel.MyDisplayTabControl.IsItemInfoProcedureOpen(ii))
if (ii != null)
MyStepPanel.MyStepTabPanel.MyDisplayTabControl.OnRefreshEnhancedDocument(new ItemSelectedChangedEventArgs(ii));
if (dti != null)
dti.MyStepTabPanel.MyDisplayTabControl.OpenItem(this.MyItemInfo);
dti?.MyStepTabPanel.MyDisplayTabControl.OpenItem(this.MyItemInfo);
}
}
}
@@ -511,7 +360,6 @@ namespace Volian.Controls.Library
{
Cursor tmp = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
int top = TopMostEditItem.Top;// This doesn't work - this is since the last time it was expanded.
int topOffset = TopMostEditItem.Top + MyStepPanel.VerticalScroll.Value;
Colapsing = true;
// Hide Children
@@ -519,7 +367,6 @@ namespace Volian.Controls.Library
// Adjust Positions
int topOffsetAfter = TopMostEditItem.Top + MyStepPanel.VerticalScroll.Value;
ExpandPrefix = topOffset - topOffsetAfter;
//ExpandSuffix = BottomMostEditItem.Bottom - Bottom;
if (topOffsetAfter != topOffset)
{
LastMethodsPush(string.Format("Colapse {0}", MyID));
@@ -569,7 +416,7 @@ namespace Volian.Controls.Library
/// <param name="args"></param>
private void _MyStepRTB_LinkGoTo(object sender, StepPanelLinkEventArgs args)
{
_MyLog.DebugFormat("_DisplayRTB_LinkGoTo " + args.LinkInfoText);
_MyLog.DebugFormat($"_DisplayRTB_LinkGoTo {args.LinkInfoText}");
MyStepPanel.OnLinkClicked(sender, args);
}
void _MyStepRTB_RoInsert(object sender, StepRTBRoEventArgs args)
@@ -603,10 +450,6 @@ namespace Volian.Controls.Library
{
MyStepPanel.CursorMovement(this, args.CursorLocation, args.Key);
}
//private void _MyStepRTB_ModeChange(object sender, StepRTBModeChangeEventArgs args)
//{
// MyStepPanel.OnModeChange(sender as StepRTB, args);
//}
void _MyStepRTB_SetMenu(object sender, StepRTBMenuEventArgs args)
{
if (args.MenuGroup == null)
@@ -663,7 +506,6 @@ namespace Volian.Controls.Library
foreach (string line in lines)
{
string lineAdj = Regex.Replace(line, @"\\u....\?", "X"); // Replace Special characters
//line2 = Regex.Replace(line2, @"\\.*? ", ""); // Remove RTF Commands - Really should not be any
lineAdj = StepRTB.RemoveLinkComments(lineAdj);
// MeasureString doesn't work properly if the line include graphics characters.
// So, Measure a string of the same length with 'M's.
@@ -795,11 +637,10 @@ namespace Volian.Controls.Library
bool success = MyStepRTB.OrigDisplayText.Save((RichTextBox)MyStepRTB);
if (success)
{
StepConfig sc = MyStepRTB.MyItemInfo.MyConfig as StepConfig;
// if the plant has the change id option, the change id was entered when the program started.
// this should be saved for every piece of edited data. Note that the set of config
// item Step_MultipleChangeID has the save built in to it.
if (sc == null) sc = new StepConfig();
if (!(MyStepRTB.MyItemInfo.MyConfig is StepConfig sc)) sc = new StepConfig();
if (MyStepRTB.MyItemInfo.IsStep &&
MyStepRTB.MyItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ChangeBarData.ChangeIds
&& !this.MyStepPanel.MyStepTabPanel.MyDisplayTabControl.EditorialChange)
@@ -884,7 +725,6 @@ namespace Volian.Controls.Library
}
public override void IdentifyMe(bool highlight)
{
//this.BringToFront(); // B2017-187 when called all the time, slows down the display of step and confuses the scroll bar
if (highlight)
{
MyStepRTB.BringToFront(); // B2017-187 when called all the time, slows down the display of step and confuses the scroll bar
@@ -931,7 +771,6 @@ namespace Volian.Controls.Library
{
_MyLog.WarnFormat("Attempt to give Focus to Disposed Object {0}", MyID);
}
// if (CanExpand) AutoExpand(); // Expand the item if you can
ScrollToCenter();
}
/// <summary>
@@ -942,18 +781,9 @@ namespace Volian.Controls.Library
_MyStepRTB.Focus();
ScrollToCenter();
}
public override DialogResult ReplaceText(string rpltxt, string fndstr, bool caseSensitive, bool matchWholeWord, bool reverse, bool prompt, IWin32Window fndrpldlg)
{
return MyStepRTB.ReplaceText(rpltxt, fndstr, caseSensitive, matchWholeWord, reverse, prompt, fndrpldlg);
}
public override bool FindText(string str, bool caseSensitive, bool matchWholeWord, bool reverse)
{
return MyStepRTB.FindText(str, caseSensitive, matchWholeWord, reverse);
}
public override void PositionToEnd()
{
MyStepRTB.SelectionStart = MyStepRTB.Text.Length;
}
public override DialogResult ReplaceText(string rpltxt, string fndstr, bool caseSensitive, bool matchWholeWord, bool reverse, bool prompt, IWin32Window fndrpldlg) => MyStepRTB.ReplaceText(rpltxt, fndstr, caseSensitive, matchWholeWord, reverse, prompt, fndrpldlg);
public override bool FindText(string str, bool caseSensitive, bool matchWholeWord, bool reverse) => MyStepRTB.FindText(str, caseSensitive, matchWholeWord, reverse);
public override void PositionToEnd() => MyStepRTB.SelectionStart = MyStepRTB.Text.Length;
public override void PositionToStart()
{
return;
@@ -973,41 +803,21 @@ namespace Volian.Controls.Library
return null;
}
}
public override bool SpellCheckNext()
{
return MyStepRTB.SpellCheckNext();
}
public override void SetActive()
{
MyStepRTB.BackColor = MyStepPanel.ActiveColor;
}
public override bool SpellCheckNext() => MyStepRTB.SpellCheckNext();
public override void SetActive() => MyStepRTB.BackColor = MyStepPanel.ActiveColor;
public override bool Empty
{
get
{
// Console.WriteLine("step rtb is dirty {0} and rtf is {1}", MyStepRTB.IsDirty, MyStepRTB.Rtf);
// string txt = MyStepRTB.Text;
// Console.WriteLine("step rtb is dirty {0} and rtf is {1}", MyStepRTB.IsDirty, MyStepRTB.Rtf);
// return txt == "";
//return MyStepRTB.IsEmpty;
return MyStepRTB.Text == "";
}
set { MyStepRTB.Text = value ? "" : " "; }
}
//public override bool IsEmpty() // this becomes 'Empty' property, i.e. get/set.
//{ // for the set, emtpy is following line (= not ==).
// // for not empty - it's code that is in 'MakeNotEmpty'
// return MyStepRTB.Text == "";
//}
//public override void MakeNotEmpty()
//{
// MyStepRTB.Text = " ";
//}
public override void RefreshDisplay(bool activeMode)
{
MyStepRTB.VwMode = MyStepPanel.VwMode;
MyStepRTB.RefreshDisplay(activeMode);
//MyStepRTB.ViewRTB = !activeMode;
}
public override void ToggleEditView(E_ViewMode vwMode)
{
@@ -1026,8 +836,7 @@ namespace Volian.Controls.Library
public override void SetupHeader(ItemInfo itemInfo)
{
lblTab.Top = 3 + ((itemInfo.HasHeader) ? 23 : 0);
_MyStepRTB.Top = lblTab.Top; // 3 + ((itemInfo.HasHeader) ? 23 : 0);
//lblTab.Move += new EventHandler(lblTab_Move);
_MyStepRTB.Top = lblTab.Top;
if (itemInfo.HasHeader)
SetupHeaderFooter(ref lblHeader, "Header", itemInfo.MyHeader);
else
@@ -1037,10 +846,7 @@ namespace Volian.Controls.Library
lblHeader = null;
}
}
public override void ShowExpanded()
{
_MyvlnExpander.ShowExpanded();
}
public override void ShowExpanded() => _MyvlnExpander.ShowExpanded();
/// <summary>
/// Sets the Item and as a result the text for the RichTextBox
/// </summary>
@@ -1078,10 +884,7 @@ namespace Volian.Controls.Library
break;
}
}
public override void SaveCurrentAndContents()
{
SaveContents();
}
public override void SaveCurrentAndContents() => SaveContents();
#endregion
}
}
@@ -1,13 +1,7 @@
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing;
using VEPROMS.CSLA.Library;
using System.Text.RegularExpressions;
namespace Volian.Controls.Library
{
+1 -22
View File
@@ -1,19 +1,14 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Volian.Controls.Library
{
public static class RomanNumeral
{
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private enum RomanOffset : int
{
Hundreds = 2,
Tens = 4,
Units = 6
}
private static string _Romans = "MDCLXVI";
private static readonly string _Romans = "MDCLXVI";
private static string RomanPart(RomanOffset offset, int value)
{
int iFive = value / 5;
@@ -34,21 +29,5 @@ namespace Volian.Controls.Library
RomanPart(RomanOffset.Tens, tens) +
RomanPart(RomanOffset.Units, units);
}
// private static int[] _TestRomans = new int[] {
// 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,25,30,40,50,60,69,70,80,90,99,
// 100,200,400,500,600,666,700,800,900,1000,1444,1666,1945,1997,1999,2000,2007,3000
// };
// public static void ShowRomans()
// {
// for (int i = 0; i < _TestRomans.Length; i++)
// {
// if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", _TestRomans[i], Convert(_TestRomans[i]));
// }
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 4, Convert(4));
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 5, Convert(5));
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 6, Convert(6));
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 8, Convert(8));
// //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 9, Convert(9));
// }
}
}
+28 -91
View File
@@ -1,9 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using Volian.Base.Library;
@@ -13,17 +9,8 @@ namespace Volian.Controls.Library
public partial class RtfRawItem : EditItem
{
#region IEditItem
public override StepRTB MyStepRTB
{
get { return _MyStepRTB; }
}
public override int TableWidth
{
get
{
return (int)_MyStepRTB.Width + RtfRawMargin;
}
}
public override StepRTB MyStepRTB => _MyStepRTB;
public override int TableWidth => (int)_MyStepRTB.Width + RtfRawMargin;
/// <summary>
/// The left edge of the Tab (no visible tab, but use this for EditItem interfacing
/// </summary>
@@ -62,7 +49,7 @@ namespace Volian.Controls.Library
Width = value + lblTab.Left + lblTab.Width;
}
}
public override int BorderWidth { get { return (_MyStepRTB.Width - _MyStepRTB.ClientRectangle.Width); } }
public override int BorderWidth => (_MyStepRTB.Width - _MyStepRTB.ClientRectangle.Width);
/// <summary>
/// Location of the RichTextBox
/// </summary>
@@ -99,20 +86,14 @@ namespace Volian.Controls.Library
_MyToolTip.SetSuperTooltip(MyStepRTB, tpi);
ToolTipOnOff(); // B2025-050 Show the tooltip based on User Options Settings
}
public override void ToolTipOnOff()
{
_MyToolTip.Enabled = VlnSettings.StepTypeToolTip; // B2025-XXX Show the tooltip based on User Options Settings
}
public override void ToolTipOnOff() => _MyToolTip.Enabled = VlnSettings.StepTypeToolTip; // B2025-XXX Show the tooltip based on User Options Settings
public override void RefreshContent()
{
IdentifyMe(false);
MyStepRTB.Rtf = MyItemInfo.MyContent.Text;
RefreshDisplay(false);
}
public override void RefreshOrdinal()
{
TabFormat = null;
}
public override void RefreshOrdinal() => TabFormat = null;
public override void HandleResize() {}
public override void MatchExpanded() {}
public override void ItemSelect()
@@ -136,10 +117,7 @@ namespace Volian.Controls.Library
_MyStepRTB.Focus();
ScrollToCenter();
}
public override void SetActive()
{
this.BackColor = MyStepPanel.ActiveColor;
}
public override void SetActive() => this.BackColor = MyStepPanel.ActiveColor;
public override void SetText()
{
LastMethodsPush("SetText");
@@ -150,14 +128,8 @@ namespace Volian.Controls.Library
}
LastMethodsPop();
}
public override void SetExpandAndExpander(ItemInfo itemInfo)
{
CanExpand = false;
}
public override void SaveCurrentAndContents()
{
SaveContents();
}
public override void SetExpandAndExpander(ItemInfo itemInfo) => CanExpand = false;
public override void SaveCurrentAndContents() => SaveContents();
public override void RefreshDisplay(bool activeMode)
{
MyStepRTB.VwMode = MyStepPanel.VwMode;
@@ -177,12 +149,9 @@ namespace Volian.Controls.Library
Width = sz.Width;
Height = _MyStepRTB.Height + _MyStepRTB.Top + 7;
ItemWidth = Width;
MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetButtonAndMenuEnabling(true);
}
public override void ToggleEditView(E_ViewMode vwMode)
{
SaveContents();
MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetButtonAndMenuEnabling();
}
public override void ToggleEditView(E_ViewMode vwMode) => SaveContents();
public override string TabFormat
{
get { return null; }
@@ -204,14 +173,8 @@ namespace Volian.Controls.Library
public override Point TabLocation { get { return lblTab.Location; } }
public override Font ContentFont { get { return MyStepRTB.Font; } set { /*MyStepRTB.Font = value*/; } }
public override float ContentTop { get { return MyStepRTB.Top; } }
public override DialogResult ReplaceText(string rpltxt, string fndstr, bool caseSensitive, bool matchWholeWord, bool reverse, bool prompt, IWin32Window fndrpldlg)
{
return DialogResult.OK;
}
public override bool FindText(string str, bool caseSensitive, bool matchWholeWord, bool reverse)
{
return false;
}
public override DialogResult ReplaceText(string rpltxt, string fndstr, bool caseSensitive, bool matchWholeWord, bool reverse, bool prompt, IWin32Window fndrpldlg) => DialogResult.OK;
public override bool FindText(string str, bool caseSensitive, bool matchWholeWord, bool reverse) => false;
public override void PositionToEnd()
{
return;
@@ -220,14 +183,8 @@ namespace Volian.Controls.Library
{
return;
}
public override string SelectedTextForFind
{
get {return null;}
}
public override bool SpellCheckNext()
{
return false;
}
public override string SelectedTextForFind => null;
public override bool SpellCheckNext() => false;
public override bool Empty
{
get
@@ -236,10 +193,7 @@ namespace Volian.Controls.Library
}
set { _MyStepRTB.Text = value ? "" : " "; }
}
public override void RefreshTab()
{
TabFormat = null;
}
public override void RefreshTab() => TabFormat = null;
public override void SetupHeader(ItemInfo itemInfo)
{
return;
@@ -247,16 +201,11 @@ namespace Volian.Controls.Library
public override void ShowExpanded() {}
#endregion
#region Properties
private static int _RtfRawMargin = 6; // make it a little bigger than rtbitems so it can be seen
/// <summary>
/// Margin between the EditItem and the RtfRawItem. Appears on the Right.
/// Will allow space to draw a Change Bar on the right side of the EditItem.
/// </summary>
public static int RtfRawMargin
{
get { return _RtfRawMargin; }
set { _RtfRawMargin = value; }
}
public static int RtfRawMargin { get; set; } = 6;
#endregion
#region Constructors
public RtfRawItem()
@@ -315,11 +264,7 @@ namespace Volian.Controls.Library
}
#endregion
#region EventHandlers
void RtfRawItem_Click(object sender, EventArgs e)
{
//if (MyStepPanel.DisplayItemChanging) return;
MyStepPanel.SelectedEditItem = this;
}
void RtfRawItem_Click(object sender, EventArgs e) => MyStepPanel.SelectedEditItem = this;
private void _MyStepRTB_HeightChanged(object sender, EventArgs args)
{
if (this.Height != _MyStepRTB.Height + _MyStepRTB.Top + 7) // add in 7 to make it look good // + 10)
@@ -351,10 +296,7 @@ namespace Volian.Controls.Library
}
#endregion
#region Methods
public override void SetFocus()
{
MyStepRTB.Focus();
}
public override void SetFocus() => MyStepRTB.Focus();
public override void SaveContents()
{
SaveText();
@@ -379,26 +321,27 @@ namespace Volian.Controls.Library
_origBitmap = GetBitmap(res);
MyStepRTB.ClearUndo();
}
catch (Exception ex)
catch (Exception)
{
//MessageBox.Show("The data could not be saved.", "Object Save", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
public System.Drawing.Bitmap GetBitmap(string rtf)
{
Bitmap bmap = null;
Bitmap bmap;
try
{
System.Drawing.Size sz = RtfRawItem.GetRtfRawSize(rtf);
Volian.Controls.Library.RTF myRtb = new RTF();
myRtb.Size = sz;
myRtb.Rtf = rtf;
Volian.Controls.Library.RTF myRtb = new RTF
{
Size = sz,
Rtf = rtf
};
bmap = new System.Drawing.Bitmap((int)sz.Width, (int)sz.Height);
System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmap);
myRtb.RenderClipped(gr, new System.Drawing.Rectangle(0, 0, (int)sz.Width, (int)sz.Height));
}
catch (Exception ex)
catch (Exception)
{
return null;
}
@@ -478,14 +421,8 @@ namespace Volian.Controls.Library
if (MyStepPanel != null && this == MyStepPanel.SelectedEditItem)
ScrollToCenter();
}
private void MyStepRTB_CursorKeyPress(object sender, KeyEventArgs args)
{
MyStepPanel.StepCursorKeys(this, args);
}
private void MyStepRTB_CursorMovement(object sender, StepRTBCursorMovementEventArgs args)
{
MyStepPanel.CursorMovement(this, args.CursorLocation, args.Key);
}
private void MyStepRTB_CursorKeyPress(object sender, KeyEventArgs args) => MyStepPanel.StepCursorKeys(this, args);
private void MyStepRTB_CursorMovement(object sender, StepRTBCursorMovementEventArgs args) => MyStepPanel.CursorMovement(this, args.CursorLocation, args.Key);
#endregion
}
}
+88 -340
View File
@@ -1,12 +1,9 @@
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using System.Drawing;
using System.Text.RegularExpressions;
using Volian.Base.Library;
using JR.Utils.GUI.Forms;
using System.Linq;
@@ -16,29 +13,14 @@ namespace Volian.Controls.Library
public partial class StepPanel : Panel
{
#region Fields
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// Procedure Item Info - Top ItemInfo
/// </summary>
private ItemInfo _MyProcedureItemInfo;
private E_ViewMode _VwMode = E_ViewMode.Edit;
public E_ViewMode VwMode
{
get { return _VwMode; }
set { _VwMode = value; }
}
private EditItem _TopMostEditItem = null;
public EditItem TopMostEditItem
{
get { return _TopMostEditItem; }
set { _TopMostEditItem = value; }
}
private ItemInfo _ExpandingHLS = null;
public ItemInfo ExpandingHLS
{
get { return _ExpandingHLS; }
set { _ExpandingHLS = value; }
}
public E_ViewMode VwMode { get; set; } = E_ViewMode.Edit;
public EditItem TopMostEditItem { get; set; } = null;
public ItemInfo ExpandingHLS { get; set; } = null;
// TODO: This is not correct. There should be a dictionary of Section Layouts
/// <summary>
/// Lookup Table to convert ItemInfo.ItemID to EditItem
@@ -60,16 +42,9 @@ namespace Volian.Controls.Library
_ApplDisplayMode = value;
foreach (Control c in Controls)
{
EditItem ei = c as EditItem;
if (ei != null)
if (c is EditItem ei)
{
ei.Enabled = ei.MyItemInfo.IsApplicable(value);
//IItemConfig cfg = ei.MyItemInfo.MyConfig as IItemConfig;
//List<int> apples = cfg.MasterSlave_Applicability.GetFlags();
//if (value == -1 || apples.Count == 0)
// ei.Enabled = true;
//else
// ei.Enabled = apples.Contains(value);
}
}
}
@@ -78,24 +53,14 @@ namespace Volian.Controls.Library
/// Currently selected ItemInfo
/// </summary>
internal ItemInfo _SelectedItemInfo;
private int _ItemMoving = 0;
private StepPanelSettings _MyStepPanelSettings;
private int _MaxRNO = -1; // TODO: Need to calculate MaxRNO on a section basis rather than for a panel
private Font _MyFont = null;
private Font _ProcFont = new Font("Arial", 12, FontStyle.Bold);
private Font _SectFont = new Font("Arial", 10, FontStyle.Bold);
private Font _StepFont = new Font("Arial", 10);
private Color _ActiveColor = Color.SkyBlue;
private Color _InactiveColor = Color.Linen;
private Color _AnnotationColor = Color.FromArgb(255, 255, 128);
private Color _TabColor = Color.Beige;
private Color _PanelColor = Color.LightGray;
// Whether panel is in view or edit mode. Toggled from steprtb
// or set based on approval/multi-user (these two will be done
// later.
//public E_ViewMode PanelViewEditMode = E_ViewMode.Edit;
internal string _LastAdjust="";
private bool _ShowLines = true;
private Graphics _MyGraphics = null;
private int _DPI = 0;
#endregion
@@ -111,7 +76,7 @@ namespace Volian.Controls.Library
/// <param name="args"></param>
internal void OnItemClick(object sender, StepPanelEventArgs args)
{
if (ItemClick != null) ItemClick(sender, args);
ItemClick?.Invoke(sender, args);
}
public bool ItemSelectionChangeShown = false; // This keeps OnItemSelectedChanged from being called twice when an item is selected.
/// <summary>
@@ -127,7 +92,7 @@ namespace Volian.Controls.Library
{
ItemSelectionChangeShown = true;//Remember that you have run already
//vlnStackTrace.ShowStack(string.Format("OnItemSelectedChanged {0}",args.MyItemInfo.ItemID));
if (ItemSelectedChanged != null) ItemSelectedChanged(sender, args);
ItemSelectedChanged?.Invoke(sender, args);
}
/// <summary>
/// Occurs when the user clicks on the Attachment Expander
@@ -143,39 +108,17 @@ namespace Volian.Controls.Library
if (AttachmentClicked != null) AttachmentClicked(sender, args);
else FlexibleMessageBox.Show(args.MyEditItem.MyItemInfo.MyContent.MyEntry.MyDocument.DocumentTitle, "Unhandled Attachment Click", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// Edit/View mode change
//public event StepPanelModeChangeEvent ModeChange;
//internal void OnModeChange(object sender, StepRTBModeChangeEventArgs args)
//{
// PanelViewEditMode = args.ViewMode;
// ModeChange(sender, args);
//}
// various selections from steptabribbon that need to filter up to frmveproms
// such as 'global search', 'bookmarks'
public event StepPanelTabDisplayEvent TabDisplay;
internal void OnTabDisplay(object sender, StepPanelTabDisplayEventArgs args)
{
TabDisplay(sender, args);
}
internal void OnTabDisplay(object sender, StepPanelTabDisplayEventArgs args) => TabDisplay(sender, args);
// close section, if deleting word doc section
public event StepPanelWordSectionCloseEvent WordSectionClose;
internal void OnWordSectionClose(object sender, WordSectionEventArgs args)
{
WordSectionClose(sender, args);
}
internal void OnWordSectionClose(object sender, WordSectionEventArgs args) => WordSectionClose(sender, args);
// if section deleted, have event to flag in other UI panels
public event StepPanelWordSectionDeletedEvent WordSectionDeleted;
internal void OnWordSectionDeleted(object sender, WordSectionEventArgs args)
{
WordSectionDeleted(sender, args);
}
internal void OnWordSectionDeleted(object sender, WordSectionEventArgs args) => WordSectionDeleted(sender, args);
// if item pasted, have event to flag in other UI panels
public event StepPanelItemPastedEvent ItemPasted;
internal void OnItemPasted(object sender, vlnTreeItemInfoPasteEventArgs args)
{
ItemPasted(sender, args);
}
internal void OnItemPasted(object sender, vlnTreeItemInfoPasteEventArgs args) => ItemPasted(sender, args);
#endregion
#region Link Events
/// <summary>
@@ -274,16 +217,15 @@ namespace Volian.Controls.Library
this.BackColorChanged += new EventHandler(StepPanel_BackColorChanged);
if (VlnSettings.DebugMode)
{
_InactiveColor = Color.Linen;
_TabColor = Color.Beige;
InactiveColor = Color.Linen;
TabColor = Color.Beige;
_PanelColor = Color.LightGray;
this.Paint += new PaintEventHandler(StepPanel_Paint);
this.DoubleClick += new EventHandler(StepPanel_DoubleClick); // Toggles Vertical lines on and off
}
else
{
_InactiveColor = Color.White;
_TabColor = Color.White;
InactiveColor = Color.White;
TabColor = Color.White;
_PanelColor = Color.White;
this.BackColor = Color.White;
}
@@ -301,9 +243,8 @@ namespace Volian.Controls.Library
InactiveColor = PanelColor = BackColor;
foreach (Control ctrl in Controls)
{
if (ctrl is EditItem)
if (ctrl is EditItem ei)
{
EditItem ei = (EditItem)ctrl;
ei.BackColor = BackColor;
}
}
@@ -323,9 +264,8 @@ namespace Volian.Controls.Library
if (_LookupEditItems.ContainsKey(id)) // Expanding Parent should have added it to _LookupEditItems
{
EditItem itm = _LookupEditItems[id];
ItemInfo ii = myItemInfo.ActiveParent as ItemInfo;
if (itm.Visible == false && ii != null)
ExpandAsNeeded((ItemInfo)myItemInfo.ActiveParent);
if (!itm.Visible && myItemInfo.ActiveParent is ItemInfo ii)
ExpandAsNeeded(ii);
itm.AutoExpand(); // Expand it if it should expand
}
}
@@ -342,19 +282,10 @@ namespace Volian.Controls.Library
get { return _MyProcedureItemInfo; }
set
{
//// TIMING: DisplayItem.TimeIt("pMyItem Start");
_MyProcedureItemInfo = value;
//// TIMING: DisplayItem.TimeIt("pMyItem Layout");
//this.Layout += new LayoutEventHandler(DisplayPanel_Layout);
//this.Scroll += new ScrollEventHandler(DisplayPanel_Scroll);
//// TIMING: DisplayItem.TimeIt("pMyItem Scroll");
Controls.Clear();
_LookupEditItems = new Dictionary<int, EditItem>();
//// TIMING: DisplayItem.TimeIt("pMyItem Clear");
//SuspendLayout();
new RTBItem(_MyProcedureItemInfo, this, null, ChildRelation.None, false);
//ResumeLayout();
//// TIMING: DisplayItem.TimeIt("pMyItem End");
}
}
public bool AutoExpand
@@ -369,8 +300,7 @@ namespace Volian.Controls.Library
}
public void Reset()
{
ItemInfo parent = SelectedItemInfo.ActiveParent as ItemInfo;
if (parent != null) ItemInfo.ResetParts(parent.ItemID); // Force data to reload
if (SelectedItemInfo.ActiveParent is ItemInfo parent) ItemInfo.ResetParts(parent.ItemID); // Force data to reload
else ItemInfo.ResetParts(SelectedItemInfo.ItemID);
// The following line actually reloads the procedure item
MyProcedureItemInfo = MyProcedureItemInfo; // see get/set above. - Load Procedure and Sections
@@ -379,8 +309,7 @@ namespace Volian.Controls.Library
}
public void Reset(ItemInfo myItemInfo)
{
ItemInfo parent = myItemInfo.ActiveParent as ItemInfo;
if (parent != null) ItemInfo.ResetParts(parent.ItemID); // Force data to reload
if (myItemInfo.ActiveParent is ItemInfo parent) ItemInfo.ResetParts(parent.ItemID); // Force data to reload
else ItemInfo.ResetParts(myItemInfo.ItemID);
// The following line actually reloads the procedure item
MyProcedureItemInfo = MyProcedureItemInfo; // see get/set above. - Load Procedure and Sections
@@ -406,16 +335,6 @@ namespace Volian.Controls.Library
// The following line expands the items needed to display SelectedItemInfo
ExpandAsNeeded(SelectedItemInfo);
}
/// <summary>
/// Currently selected StepRTB
/// </summary>
//private StepRTB _SelectedStepRTB = null;
//public StepRTB SelectedStepRTB
//{
// get { return _SelectedStepRTB; }
// set { _SelectedStepRTB=value;}
//}
/// <summary>
/// Gets or Sets the SelectedItemInfo
/// Activates and Expands as necessary
@@ -435,7 +354,6 @@ namespace Volian.Controls.Library
{
ExpandAsNeeded(itemInfo);
if (_SelectedItemInfo == null) _SelectedItemInfo = itemInfo;
//if (!_LookupEditItems.ContainsKey(itemInfo.ItemID)) Reset();
if (itemInfo.Moving)
{
Reset(itemInfo);
@@ -445,12 +363,8 @@ namespace Volian.Controls.Library
if (!_LookupEditItems.ContainsKey(itemInfo.ItemID)) return null;
return _LookupEditItems[itemInfo.ItemID];
}
private bool _DisplayItemChanging = false;
public bool DisplayItemChanging
{
get { return _DisplayItemChanging; }
set { _DisplayItemChanging = value; }
}
public bool DisplayItemChanging { get; set; } = false;
/// <summary>
/// Returns the SelectedEditItem
/// </summary>
@@ -460,14 +374,13 @@ namespace Volian.Controls.Library
get
{
return _SelectedEditItem;
//return (_SelectedItemInfo != null) ? _LookupEditItems[_SelectedItemInfo.ItemID] : null;
}
set
{
EditItem newFocus = null; // B2018-152 when empty step is deleted, will contain the new step element focus
bool deletingParent = false; // B2018-152 used to tell us user clicked on subtep of step element who's text was removed (special case)
EditItem lastEI = _SelectedEditItem;
if (value != null) value.SetActive(); // Set the active color
value?.SetActive(); // Set the active color
if (lastEI == value) return; // Same - No Change
// B2018-002 - Invalid Transitions - If the current step contains an invalid transition convert it to text
if(value != null) ItemInfo.ConvertInvalidTransitionsToText(value.MyItemInfo);
@@ -486,16 +399,16 @@ namespace Volian.Controls.Library
string msg3 = "Select NO to keep the empty step which can be restored via the History tab on the Step Properties panel.";
if (value != null && value.MyItemInfo.HasAncestor(lastEI.MyItemInfo))
{
msg1 = "This step does not have text but you had selected one of its substeps. " + msg1;
msg2 = msg2 + " including the substep you had selected. You will be placed at the next location.";
msg1 = $"This step does not have text but you had selected one of its substeps. {msg1}";
msg2 += " including the substep you had selected. You will be placed at the next location.";
deletingParent = true; // B2018-152 this will tell us that the user selected a substep of a parent being deleted
}
else
{
msg1 = "This step does not have text but has substeps. " + msg1;
msg2 = msg2 + " and its substeps.";
msg1 = $"This step does not have text but has substeps. {msg1}";
msg2 += " and its substeps.";
}
DialogResult result = FlexibleMessageBox.Show(msg1 + "\n\n" + msg2 + "\n\n" + msg3, "Verify Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
DialogResult result = FlexibleMessageBox.Show($"{msg1}\n\n{msg2}\n\n{msg3}", "Verify Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No) shouldDelete = false;
}
}
@@ -504,16 +417,14 @@ namespace Volian.Controls.Library
// if this item has enhanced edititems, remove them. Note that this code supports
// deleting text in an rtbitem that may be a step or section level.
EnhancedDocuments eds = null;
StepConfig sc = lastEI.MyItemInfo.MyConfig as StepConfig;
if (sc != null) eds = sc.MyEnhancedDocuments;
if (lastEI.MyItemInfo.MyConfig is StepConfig sc) eds = sc.MyEnhancedDocuments;
else
{
// if a section, just the title or all contents may be linked. If just title,
// don't delete enhanced, but clear links back from enhanced.
if (lastEI.MyItemInfo.IsSection)
{
SectionConfig sec = lastEI.MyItemInfo.MyConfig as SectionConfig;
if (sec != null)
if (lastEI.MyItemInfo.MyConfig is SectionConfig sec)
{
if (sec.Section_LnkEnh == "Y") eds = sec.MyEnhancedDocuments;
else lastEI.MyItemInfo.ClearEnhancedSectionLink();
@@ -593,8 +504,7 @@ namespace Volian.Controls.Library
SelectedItemInfo = value.MyItemInfo;
}
}
if (lastEI != null)
lastEI.IdentifyMe(false);
lastEI?.IdentifyMe(false);
}
}
/// <summary>
@@ -608,20 +518,13 @@ namespace Volian.Controls.Library
OnItemSelectedChanged(this, new ItemSelectedChangedEventArgs(SelectedEditItem));
}
}
public new void MouseWheel(MouseEventArgs e)
{
base.OnMouseWheel(e);
}
public new void MouseWheel(MouseEventArgs e) => base.OnMouseWheel(e);
/// <summary>
/// Used to track movement other than scrolling
/// 0 - Indicates no other movement
/// > 0 - Indicates that other movement is happening
/// </summary>
public int ItemMoving
{
get { return _ItemMoving; }
set { _ItemMoving = value; }
}
public int ItemMoving { get; set; } = 0;
/// <summary>
/// Lazy loaded StepPanelSettings
/// </summary>
@@ -640,32 +543,20 @@ namespace Volian.Controls.Library
public Font MyFont
{
get { return _MyFont; }
set { _ProcFont = _SectFont = _StepFont = _MyFont = value; }
set { ProcFont = SectFont = StepFont = _MyFont = value; }
}
/// <summary>
/// Gets or sets the font for the Procedure Text
/// </summary>
public Font ProcFont
{
get { return _ProcFont; }
set { _ProcFont = value; }
}
public Font ProcFont { get; set; } = new Font("Arial", 12, FontStyle.Bold);
/// <summary>
/// Gets or sets the font for the Section Text
/// </summary>
public Font SectFont
{
get { return _SectFont; }
set { _SectFont = value; }
}
public Font SectFont { get; set; } = new Font("Arial", 10, FontStyle.Bold);
/// <summary>
/// Gets or sets the Step Font
/// </summary>
public Font StepFont
{
get { return _StepFont; }
set { _StepFont = value; }
}
public Font StepFont { get; set; } = new Font("Arial", 10);
/// <summary>
/// Gets or Sets the Active Color for the Panel
/// </summary>
@@ -682,27 +573,15 @@ namespace Volian.Controls.Library
/// <summary>
/// Gets or Sets the Annotation backcolor for StepRTBs in the Panel
/// </summary>
public Color AnnotationColor
{
get { return _AnnotationColor; }
set { _AnnotationColor = value; }
}
public Color AnnotationColor { get; set; } = Color.FromArgb(255, 255, 128);
/// <summary>
/// Gets or sets the InActive Color for the Panel
/// </summary>
public Color InactiveColor
{
get { return _InactiveColor; }
set { _InactiveColor = value; }
}
public Color InactiveColor { get; set; } = Color.Linen;
/// <summary>
/// Gets or sets the Tab Color
/// </summary>
public Color TabColor
{
get { return _TabColor; }
set { _TabColor = value; }
}
public Color TabColor { get; set; } = Color.Beige;
/// <summary>
/// Gets or sets the Panel Color
/// </summary>
@@ -744,34 +623,20 @@ namespace Volian.Controls.Library
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public int ToDisplay(int value)
{
//return (DPI * value) / 864;
return (DPI * value) / 72;
}
public int ToDisplay(float? value)
{
//return (DPI * value) / 864;
return (int)(DPI * (value??0)) / 72;
}
public int ToDisplay(int value) => (DPI * value) / 72;
public int ToDisplay(float? value) => (int)(DPI * (value ?? 0)) / 72;
/// <summary>
/// Converts an integer? value from Twips to Pixels
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public int ToDisplay(int? value)
{
return ToDisplay((int)value);
}
public int ToDisplay(int? value) => ToDisplay((int)value);
/// <summary>
/// Converts an string value from Twips to Pixels
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public int ToDisplay(string value)
{
return ToDisplay(Convert.ToSingle(value));
}
public int ToDisplay(string value) => ToDisplay(Convert.ToSingle(value));
/// <summary>
/// Converts a value from a list in a string from Twips to Pixels
/// </summary>
@@ -788,21 +653,7 @@ namespace Volian.Controls.Library
/// <summary>
/// Gets or sets ShowLines so that vertical lines are shown for debugging purposes
/// </summary>
public bool ShowLines
{
get { return _ShowLines; }
set { _ShowLines = value; }
}
/// <summary>
/// Draw a vertical line
/// </summary>
/// <param name="g"></param>
/// <param name="x"></param>
private void VerticalLine(Graphics g, int x)
{
Pen bluePen = new Pen(Color.CornflowerBlue,1);
g.DrawLine(bluePen, x, 0, x, this.Height);
}
public bool ShowLines { get; set; } = true;
/// <summary>
/// Toggle the vertical lines on and off
/// </summary>
@@ -813,38 +664,6 @@ namespace Volian.Controls.Library
ShowLines = !ShowLines;
Refresh();
}
private void StepPanel_Paint(object sender, PaintEventArgs e)
{
if (ShowLines)
{
//int fifth = Height / 5;
//Rectangle r1 = new Rectangle(0, 0, Width, Height - fifth);
////Brush b = new System.Drawing.Drawing2D.LinearGradientBrush(r1, Color.FromArgb(128, 0, 32), Color.FromArgb(96, 0, 16), 90);
//Brush b = new System.Drawing.Drawing2D.LinearGradientBrush(r1, Color.FromArgb(255,128, 0, 32), Color.FromArgb(255,96, 0, 16),System.Drawing.Drawing2D.LinearGradientMode.Vertical);
//e.Graphics.FillRectangle(b, r1);
//r1 = new Rectangle(0, Height - fifth, Width, fifth);
//b = new System.Drawing.Drawing2D.LinearGradientBrush(r1, Color.FromArgb(255,96, 0, 16), Color.FromArgb(255,128, 0, 32), 90);
//e.Graphics.FillRectangle(b, r1);
//VerticalLine(e.Graphics, 60);
//VerticalLine(e.Graphics, 102);
//VerticalLine(e.Graphics, 415);
}
}
/// <summary>
/// Output all of the EditItem controls to the log
/// </summary>
private void ListControls()
{
// Walk through the controls and find the next control for each
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("'Item','Next'");
foreach (Control control in Controls)
if (control is EditItem)
{
EditItem ei = (EditItem)control;
EditItem nxt = ei.NextDownEditItem;
if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", ei.MyID, nxt == null ? 0 : nxt.MyID);
}
}
#endregion
#region Cursor Movement Methods
/// <summary>
@@ -880,6 +699,8 @@ namespace Volian.Controls.Library
/// <param name="rtb">StepRTB</param>
/// <param name="position">Point</param>
/// <param name="arrow">E_ArrowKeys</param>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0059:Unnecessary assignment of a value", Justification = "Values assigned to ItemInfo ii for Debugging")]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "Point position kept for consistancy")]
public void CursorMovement(EditItem ei, Point position, E_ArrowKeys arrow)
{
ItemInfo ii = null;
@@ -907,11 +728,8 @@ namespace Volian.Controls.Library
ii = MoveDown(ei, ii);
break;
case E_ArrowKeys.Left:
//case E_ArrowKeys.CtrlLeft:
if (!ei.MyItemInfo.IsProcedure)
{
EditItem tmpEI = null;
//SelectedEditItem = _LookupEditItems[ei.MyItemInfo.MyParent.ItemID];
ii = ArrowUp(ei.MyItemInfo);
if (ii != null)
{
@@ -948,6 +766,7 @@ namespace Volian.Controls.Library
return tmpEI.MyItemInfo;
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "ItemInfo ii Kept for Debugging")]
private ItemInfo MoveDown(EditItem ei, ItemInfo ii)
{
ii = ArrowDown(ei.MyItemInfo);
@@ -984,10 +803,7 @@ namespace Volian.Controls.Library
if (!ii.IsProcedure) return (ii.MyParent);
return null;
}
private ItemInfo ArrowDown(ItemInfo ii)
{
return ArrowDown(ii, true, true);
}
private ItemInfo ArrowDown(ItemInfo ii) => ArrowDown(ii, true, true);
private ItemInfo ArrowDown(ItemInfo ii, bool lookAtSub, bool lookAtRNO)
{
if (ii.IsSection || ii.IsProcedure)
@@ -1062,28 +878,20 @@ namespace Volian.Controls.Library
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class StepPanelSettings
{
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public StepPanelSettings(StepPanel panel)
{
_MyStepPanel = panel;
}
public StepPanelSettings(StepPanel panel) => MyStepPanel = panel;
public StepPanelSettings()
{
}
private StepPanel _MyStepPanel;
[Browsable(false)]
public StepPanel MyStepPanel
{
get { return _MyStepPanel; }
set { _MyStepPanel = value; }
}
public StepPanel MyStepPanel { get; set; }
private float _CircleXOffset = -4;
[Category("Circle")]
[DisplayName("Circle Horizontal Offset")]
public float CircleXOffset
{
get { return _CircleXOffset; }
set { _CircleXOffset = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CircleXOffset = value; MyStepPanel?.Refresh(); }
}
private float _CircleYOffset = -13;
[Category("Circle")]
@@ -1091,24 +899,15 @@ namespace Volian.Controls.Library
public float CircleYOffset
{
get { return _CircleYOffset; }
set { _CircleYOffset = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CircleYOffset = value; MyStepPanel?.Refresh(); }
}
// Appears to not be used - JSJ - 11-13-2017
//private Font _CircleFont = new Font("Arial Unicode MS", 23);
//[Category("Circle")]
//[DisplayName("Circle Font")]
//public Font CircleFont
//{
// get { return _CircleFont; }
// set { _CircleFont = value; if(_MyStepPanel != null) _MyStepPanel.Refresh(); }
//}
private Color _CircleColor = Color.Black;
[Category("Circle")]
[DisplayName("Circle Color")]
public Color CircleColor
{
get { return _CircleColor; }
set { _CircleColor = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CircleColor = value; MyStepPanel?.Refresh(); }
}
private int _CircleDiameter = 25;
[Category("Circle")]
@@ -1116,7 +915,7 @@ namespace Volian.Controls.Library
public int CircleDiameter
{
get { return _CircleDiameter; }
set { _CircleDiameter = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CircleDiameter = value; MyStepPanel?.Refresh(); }
}
private int _CircleWeight = 2;
[Category("Circle")]
@@ -1124,7 +923,7 @@ namespace Volian.Controls.Library
public int CircleWeight
{
get { return _CircleWeight; }
set { _CircleWeight = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CircleWeight = value; MyStepPanel?.Refresh(); }
}
private float _NumberLocationX = 20F;
[Category("Number")]
@@ -1132,7 +931,7 @@ namespace Volian.Controls.Library
public float NumberLocationX
{
get { return _NumberLocationX; }
set { _NumberLocationX = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _NumberLocationX = value; MyStepPanel?.Refresh(); }
}
private float _NumberLocationY = 4;
[Category("Number")]
@@ -1140,7 +939,7 @@ namespace Volian.Controls.Library
public float NumberLocationY
{
get { return _NumberLocationY; }
set { _NumberLocationY = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _NumberLocationY = value; MyStepPanel?.Refresh(); }
}
private SizeF _NumberSize = new SizeF(200F, 23F);
[Category("Number")]
@@ -1148,7 +947,7 @@ namespace Volian.Controls.Library
public SizeF NumberSize
{
get { return _NumberSize; }
set { _NumberSize = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _NumberSize = value; MyStepPanel?.Refresh(); }
}
private int _TableWidthAdjust = 4;
[Category("Table")]
@@ -1156,7 +955,7 @@ namespace Volian.Controls.Library
public int TableWidthAdjust
{
get { return _TableWidthAdjust; }
set { _TableWidthAdjust = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _TableWidthAdjust = value; MyStepPanel?.Refresh(); }
}
private int _CheckOffWeight = 1;
[Category("CheckOff")]
@@ -1164,7 +963,7 @@ namespace Volian.Controls.Library
public int CheckOffWeight
{
get { return _CheckOffWeight; }
set { _CheckOffWeight = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CheckOffWeight = value; MyStepPanel?.Refresh(); }
}
private Color _CheckOffColor = Color.Black;
[Category("CheckOff")]
@@ -1172,7 +971,7 @@ namespace Volian.Controls.Library
public Color CheckOffColor
{
get { return _CheckOffColor; }
set { _CheckOffColor = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CheckOffColor = value; MyStepPanel?.Refresh(); }
}
private int _CheckOffSize =12;
[Category("CheckOff")]
@@ -1180,7 +979,7 @@ namespace Volian.Controls.Library
public int CheckOffSize
{
get { return _CheckOffSize; }
set { _CheckOffSize = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CheckOffSize = value; MyStepPanel?.Refresh(); }
}
private int _CheckOffX =0;
[Category("CheckOff")]
@@ -1188,7 +987,7 @@ namespace Volian.Controls.Library
public int CheckOffX
{
get { return _CheckOffX; }
set { _CheckOffX = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CheckOffX = value; MyStepPanel?.Refresh(); }
}
private int _CheckOffY =5;
[Category("CheckOff")]
@@ -1196,7 +995,7 @@ namespace Volian.Controls.Library
public int CheckOffY
{
get { return _CheckOffY; }
set { _CheckOffY = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _CheckOffY = value; MyStepPanel?.Refresh(); }
}
private int _ChangeBarWeight = 1;
@@ -1205,7 +1004,7 @@ namespace Volian.Controls.Library
public int ChangeBarWeight
{
get { return _ChangeBarWeight; }
set { _ChangeBarWeight = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _ChangeBarWeight = value; MyStepPanel?.Refresh(); }
}
private Color _ChangeBarColor = Color.Black;
[Category("ChangeBar")]
@@ -1213,116 +1012,65 @@ namespace Volian.Controls.Library
public Color ChangeBarColor
{
get { return _ChangeBarColor; }
set { _ChangeBarColor = value; if (_MyStepPanel != null) _MyStepPanel.Refresh(); }
set { _ChangeBarColor = value; MyStepPanel?.Refresh(); }
}
}
public partial class StepPanelEventArgs
{
private EditItem _MyEditItem;
public EditItem MyEditItem
{
get { return _MyEditItem; }
set { _MyEditItem = value; }
}
private MouseEventArgs _MyMouseEventArgs;
public MouseEventArgs MyMouseEventArgs
{
get { return _MyMouseEventArgs; }
set { _MyMouseEventArgs = value; }
}
public EditItem MyEditItem { get; set; }
public MouseEventArgs MyMouseEventArgs { get; set; }
public StepPanelEventArgs(EditItem myEditItem, MouseEventArgs myMouseEventArgs)
{
_MyEditItem = myEditItem;
_MyMouseEventArgs = myMouseEventArgs;
MyEditItem = myEditItem;
MyMouseEventArgs = myMouseEventArgs;
}
}
public partial class ItemSelectedChangedEventArgs
{
private ItemInfo _MyItemInfo;
public ItemInfo MyItemInfo
{
get { return _MyItemInfo; }
set { _MyItemInfo = value; }
}
private EditItem _MyEditItem = null;
public EditItem MyEditItem
{
get { return _MyEditItem; }
set { _MyEditItem = value; }
}
public ItemInfo MyItemInfo { get; set; }
public EditItem MyEditItem { get; set; } = null;
public ItemSelectedChangedEventArgs(ItemInfo myItemInfo)
{
_MyItemInfo = myItemInfo;
MyItemInfo = myItemInfo;
}
public ItemSelectedChangedEventArgs(EditItem myEditItem)
{
_MyItemInfo = myEditItem?.MyItemInfo;
_MyEditItem = myEditItem;
MyItemInfo = myEditItem?.MyItemInfo;
MyEditItem = myEditItem;
}
}
public partial class StepPanelAttachmentEventArgs
{
private EditItem _MyEditItem;
public EditItem MyEditItem
{
get { return _MyEditItem; }
set { _MyEditItem = value; }
}
public EditItem MyEditItem { get; set; }
public StepPanelAttachmentEventArgs(EditItem myEditItem)
{
_MyEditItem = myEditItem;
MyEditItem = myEditItem;
}
}
public partial class StepPanelLinkEventArgs : EventArgs
{
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
//private EditItem _LinkedEditItem;
//public EditItem LinkedEditItem
//{
// get { return _LinkedEditItem; }
//}
private string _LinkInfoText;
public string LinkInfoText
{
get { return _LinkInfoText; }
}
private LinkText _MyLinkText;
public LinkText MyLinkText
{
get { return _MyLinkText;}
}
public string LinkInfoText { get; }
public LinkText MyLinkText { get; }
public StepPanelLinkEventArgs(string linkInfoText)
{
//_LinkedEditItem = linkedEditItem;
_LinkInfoText = linkInfoText;
_MyLinkText = new LinkText(_LinkInfoText);
//if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("\r\n LinkInfo '{0}'\r\n", linkInfo.LinkText);
LinkInfoText = linkInfoText;
MyLinkText = new LinkText(LinkInfoText);
//for Debugging: linkInfo.LinkText
}
}
public partial class StepPanelTabDisplayEventArgs : EventArgs
{
private string _PanelTabName;
public string PanelTabName
{
get { return _PanelTabName; }
}
public StepPanelTabDisplayEventArgs(string panelTabname)
{
_PanelTabName = panelTabname;
}
public string PanelTabName { get; }
public StepPanelTabDisplayEventArgs(string panelTabname) => PanelTabName = panelTabname;
}
public partial class WordSectionEventArgs : EventArgs
{
private SectionInfo _MySectionInfo;
public SectionInfo MySectionInfo
{
get { return _MySectionInfo; }
}
public SectionInfo MySectionInfo { get; }
public WordSectionEventArgs(SectionInfo mySectionInfo)
{
_MySectionInfo = mySectionInfo;
MySectionInfo = mySectionInfo;
}
}
public delegate void StepPanelEvent(object sender, StepPanelEventArgs args);
File diff suppressed because it is too large Load Diff
-1
View File
@@ -15,7 +15,6 @@ namespace Volian.Controls.Library
protected override void Dispose(bool disposing)
{
if (_Disposed) return;
_CountDisposed++;
_Disposed = true;
if (disposing && (components != null))
{
+34 -103
View File
@@ -1,11 +1,5 @@
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Drawing;
using VEPROMS.CSLA.Library;
using Volian.Controls.Library;
using System.Windows.Forms;
using JR.Utils.GUI.Forms;
@@ -14,41 +8,24 @@ namespace Volian.Controls.Library
public partial class StepTabPanel : DevComponents.DotNetBar.PanelDockContainer
{
#region Private Fields
private DisplayTabControl _MyDisplayTabControl;
private StepTabRibbon _MyStepTabRibbon;
public StepTabRibbon MyStepTabRibbon
{
get { return _MyStepTabRibbon; }
set { _MyStepTabRibbon = value; }
}
private readonly DisplayTabControl _MyDisplayTabControl;
public StepTabRibbon MyStepTabRibbon { get; set; }
private StepPanel _MyStepPanel;
private DisplayTabItem _MyDisplayTabItem;
#endregion
#region Properties
/// <summary>
/// Container
/// </summary>
public DisplayTabControl MyDisplayTabControl
{
get { return _MyDisplayTabControl; }
//set { _MyDisplayTabControl = value; }
}
public DisplayTabControl MyDisplayTabControl => _MyDisplayTabControl;
/// <summary>
/// StepPanel contained in this control.
/// </summary>
public Volian.Controls.Library.StepPanel MyStepPanel
{
get { return _MyStepPanel; }
//set { _MyStepPanel = value; }
}
public Volian.Controls.Library.StepPanel MyStepPanel => _MyStepPanel;
/// <summary>
/// related DisplayTabItem
/// </summary>
public DisplayTabItem MyDisplayTabItem
{
get { return _MyDisplayTabItem; }
set { _MyDisplayTabItem = value; }
}
public DisplayTabItem MyDisplayTabItem { get; set; }
/// <summary>
/// Currently Selected ItemInfo
/// </summary>
@@ -63,18 +40,14 @@ namespace Volian.Controls.Library
FlexibleMessageBox.Show("The selected item is not available in the editor. One possible cause is that the data is 'not editable', check the section properties 'Editable Data' checkbox.", "Inaccessible Data", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
if (_MyStepPanel.SelectedEditItem != null)
_MyStepPanel.SelectedEditItem.ItemSelect();
_MyStepPanel.SelectedEditItem?.ItemSelect();
if (!_MyStepPanel.ItemSelectionChangeShown) _MyStepPanel.OnItemSelectedChanged(this, new ItemSelectedChangedEventArgs(_MyStepPanel.SelectedEditItem));
}
}
/// <summary>
/// Currently Selected EditItem
/// </summary>
public EditItem SelectedEditItem
{
get { return _MyStepPanel.SelectedEditItem; }
}
public EditItem SelectedEditItem => _MyStepPanel.SelectedEditItem;
/// <summary>
/// Procedure ItemInfo
/// </summary>
@@ -120,14 +93,16 @@ namespace Volian.Controls.Library
/// </summary>
private void SetupStepTabRibbon()
{
_MyStepTabRibbon = new StepTabRibbon(_MyDisplayTabControl.IsInEditorialMode);
_MyStepTabRibbon.Dock = System.Windows.Forms.DockStyle.Top;
_MyStepTabRibbon.Location = new System.Drawing.Point(0, 0);
_MyStepTabRibbon.Name = "displayTabRibbon1";
MyStepTabRibbon = new StepTabRibbon(_MyDisplayTabControl.IsInEditorialMode)
{
Dock = System.Windows.Forms.DockStyle.Top,
Location = new System.Drawing.Point(0, 0),
Name = "displayTabRibbon1",
//_MyTabRibbon.MyDisplayRTB = null;
_MyStepTabRibbon.MyEditItem = null;
this.Controls.Add(_MyStepTabRibbon);
_MyStepTabRibbon.Expanded = _MyDisplayTabControl.RibbonExpanded;
MyEditItem = null
};
this.Controls.Add(MyStepTabRibbon);
MyStepTabRibbon.Expanded = _MyDisplayTabControl.RibbonExpanded;
}
/// <summary>
/// Setup this within control
@@ -142,7 +117,6 @@ namespace Volian.Controls.Library
/// </summary>
private void SetupStepPanel()
{
//this.Font = new Font("Microsoft Sans Serif", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));
_MyStepPanel = new Volian.Controls.Library.StepPanel(this.components);
this.Controls.Add(_MyStepPanel);
//
@@ -159,7 +133,6 @@ namespace Volian.Controls.Library
_MyStepPanel.ItemClick +=new Volian.Controls.Library.StepPanelEvent(_MyStepPanel_ItemClick);
_MyStepPanel.AttachmentClicked += new Volian.Controls.Library.StepPanelAttachmentEvent(_MyStepPanel_AttachmentClicked);
_MyStepPanel.ItemSelectedChanged += new ItemSelectedChangedEvent(_MyStepPanel_ItemSelectedChanged);
//_MyStepPanel.ModeChange += new Volian.Controls.Library.StepPanelModeChangeEvent(_MyStepPanel_ModeChange);
_MyStepPanel.TabDisplay += new Volian.Controls.Library.StepPanelTabDisplayEvent(_MyStepPanel_TabDisplay);
_MyStepPanel.WordSectionClose += new StepPanelWordSectionCloseEvent(_MyStepPanel_WordSectionClose);
_MyStepPanel.WordSectionDeleted += new StepPanelWordSectionDeletedEvent(_MyStepPanel_WordSectionDeleted);
@@ -169,12 +142,7 @@ namespace Volian.Controls.Library
#endregion
#region Event Handlers
private bool _ShowingItem = false;
public bool ShowingItem
{
get { return _ShowingItem; }
set { _ShowingItem = value; }
}
public bool ShowingItem { get; set; } = false;
/// <summary>
/// Occurs when the user clicks on a StepTabPanel
/// </summary>
@@ -182,15 +150,14 @@ namespace Volian.Controls.Library
/// <param name="e"></param>
private void StepTabPanel_Enter(object sender, EventArgs e)
{
if (_ShowingItem) return;
if (ShowingItem) return;
// B2019-029: added to save a dirty annotation when the btnsave was not clicked (user just moves to another steprtb but had added annotationi text):
if (MyDisplayTabControl.MyAnnotationDetails.AnnotationDirty) MyDisplayTabControl.MyAnnotationDetails.SaveAnnotation();
_ShowingItem = true;
//if (ItemSelected != null)
ShowingItem = true;
_MyStepPanel.ItemShow();
if (_MyStepPanel.MyStepTabPanel != null) // B2014-024 if MyStepTabPanel is null then we are in the process of closing the procedure in that step panel
_MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetUpdRoValBtn(_MyStepPanel.MyStepTabPanel.MyStepTabRibbon.NewerRoFst());
_ShowingItem = false;
// B2014-024 if MyStepTabPanel is null then we are in the process of closing the procedure in that step panel
_MyStepPanel.MyStepTabPanel?.MyStepTabRibbon.SetUpdRoValBtn(_MyStepPanel.MyStepTabPanel.MyStepTabRibbon.NewerRoFst());
ShowingItem = false;
_MyDisplayTabControl.SelectedDisplayTabItem = MyDisplayTabItem;
}
/// <summary>
@@ -198,46 +165,31 @@ namespace Volian.Controls.Library
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
void _MyStepPanel_LinkActiveChanged(object sender, StepPanelLinkEventArgs args)
{
_MyDisplayTabControl.OnLinkActiveChanged(sender, args);
}
void _MyStepPanel_LinkActiveChanged(object sender, StepPanelLinkEventArgs args) => _MyDisplayTabControl.OnLinkActiveChanged(sender, args);
/// <summary>
/// Occurs when the user chooses to add a transition
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
void _MyStepPanel_LinkInsertTran(object sender, StepPanelLinkEventArgs args)
{
_MyDisplayTabControl.OnLinkInsertTran(sender, args);
}
void _MyStepPanel_LinkInsertTran(object sender, StepPanelLinkEventArgs args) => _MyDisplayTabControl.OnLinkInsertTran(sender, args);
/// <summary>
/// Occurs when the user chooses to add an RO
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
void _MyStepPanel_LinkInsertRO(object sender, StepPanelLinkEventArgs args)
{
_MyDisplayTabControl.OnLinkInsertRO(sender, args);
}
void _MyStepPanel_LinkInsertRO(object sender, StepPanelLinkEventArgs args) => _MyDisplayTabControl.OnLinkInsertRO(sender, args);
/// <summary>
/// Occurs when the user chosses to modify a transition
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
void _MyStepPanel_LinkModifyTran(object sender, StepPanelLinkEventArgs args)
{
_MyDisplayTabControl.OnLinkModifyTran(sender, args);
}
void _MyStepPanel_LinkModifyTran(object sender, StepPanelLinkEventArgs args) => _MyDisplayTabControl.OnLinkModifyTran(sender, args);
/// <summary>
/// Occurs when the user chooses to Modify an RO
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
void _MyStepPanel_LinkModifyRO(object sender, StepPanelLinkEventArgs args)
{
_MyDisplayTabControl.OnLinkModifyRO(sender, args);
}
void _MyStepPanel_LinkModifyRO(object sender, StepPanelLinkEventArgs args) => _MyDisplayTabControl.OnLinkModifyRO(sender, args);
/// <summary>
/// Occurs when the Selected Item changes
/// </summary>
@@ -245,15 +197,9 @@ namespace Volian.Controls.Library
/// <param name="args"></param>
void _MyStepPanel_ItemSelectedChanged(object sender, ItemSelectedChangedEventArgs args)
{
_MyStepTabRibbon.MyEditItem = args.MyEditItem;
MyStepTabRibbon.MyEditItem = args.MyEditItem;
_MyDisplayTabControl.OnItemSelectedChanged(sender, args);
}
// Occurs when the Mode Changes
//void _MyStepPanel_ModeChange(object sender, StepRTBModeChangeEventArgs args)
//{
// _MyDisplayTabControl.OnModeChange(sender, args);
//}
/// <summary>
/// Occurs when the user clicks on the Attachment Expander
/// </summary>
@@ -302,27 +248,12 @@ namespace Volian.Controls.Library
else
Console.WriteLine("Bring Up roeditor"); //TODO: Need to bring up roeditor or infopanel
}
void _MyStepPanel_TabDisplay(object sender, StepPanelTabDisplayEventArgs args)
{
_MyDisplayTabControl.OnPanelTabDisplay(sender, args);
}
void _MyStepPanel_WordSectionClose(object sender, WordSectionEventArgs args)
{
_MyDisplayTabControl.OnWordSectionClose(sender, args);
}
void _MyStepPanel_WordSectionDeleted(object sender, WordSectionEventArgs args)
{
_MyDisplayTabControl.OnWordSectionDeleted(sender, args);
}
void _MyStepPanel_ItemPasted(object sender, vlnTreeItemInfoPasteEventArgs args)
{
_MyDisplayTabControl.OnItemPaste(sender, args);
}
public override string ToString()
{
return string.Format("StepTabPanel Procedure Item {0} {1}",
void _MyStepPanel_TabDisplay(object sender, StepPanelTabDisplayEventArgs args) => _MyDisplayTabControl.OnPanelTabDisplay(sender, args);
void _MyStepPanel_WordSectionClose(object sender, WordSectionEventArgs args) => _MyDisplayTabControl.OnWordSectionClose(sender, args);
void _MyStepPanel_WordSectionDeleted(object sender, WordSectionEventArgs args) => _MyDisplayTabControl.OnWordSectionDeleted(sender, args);
void _MyStepPanel_ItemPasted(object sender, vlnTreeItemInfoPasteEventArgs args) => _MyDisplayTabControl.OnItemPaste(sender, args);
public override string ToString() => string.Format("StepTabPanel Procedure Item {0} {1}",
MyDisplayTabItem.MyItemInfo.ItemID, MyDisplayTabItem.MyItemInfo.DisplayNumber);
}
#endregion
}
}
File diff suppressed because it is too large Load Diff
Binary file not shown.
@@ -24,6 +24,7 @@ namespace Volian.Controls.Library
};
private DataTable values;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping bindingSource flexible")]
private BindingSource bindingSource = null;
private int totalrows = 1;
private int totalcols = 1;
@@ -104,8 +105,10 @@ namespace Volian.Controls.Library
void FormLoad_setDefaults(object sender, EventArgs e)
{
BindingSource bindingSourceDropDown = new BindingSource();
bindingSourceDropDown.DataSource = Enum.GetNames(typeof(EPinputtype));
BindingSource bindingSourceDropDown = new BindingSource
{
DataSource = Enum.GetNames(typeof(EPinputtype))
};
//in order to achieve a dropdown of possible values need
//to remove the auto-inserted columns
@@ -114,8 +117,10 @@ namespace Volian.Controls.Library
for (int c = 0; c < totalcols; c++)
{
dataview.Columns.RemoveAt(c);
var cName = new DataGridViewComboBoxColumn();
cName.DataSource = bindingSourceDropDown;
var cName = new DataGridViewComboBoxColumn
{
DataSource = bindingSourceDropDown
};
cName.DefaultCellStyle.NullValue = "none";
dataview.Columns.Insert(c, cName);
}
@@ -200,8 +205,10 @@ namespace Volian.Controls.Library
int endNumCols = (int)NumCols.Value;
int curNumCols = totalcols;
BindingSource bindingSourceDropDown = new BindingSource();
bindingSourceDropDown.DataSource = Enum.GetNames(typeof(EPinputtype));
BindingSource bindingSourceDropDown = new BindingSource
{
DataSource = Enum.GetNames(typeof(EPinputtype))
};
//remove cols till equal
while (curNumCols > endNumCols)
@@ -215,8 +222,10 @@ namespace Volian.Controls.Library
{
values.Columns.Add(new DataColumn($"Column{curNumCols + 1}") { DefaultValue = "none"});
if (dataview.Columns.Count > curNumCols) dataview.Columns.RemoveAt(curNumCols);
var cName = new DataGridViewComboBoxColumn();
cName.DataSource = bindingSourceDropDown;
var cName = new DataGridViewComboBoxColumn
{
DataSource = bindingSourceDropDown
};
cName.DefaultCellStyle.NullValue = "none";
dataview.Columns.Add(cName);
@@ -1,9 +1,5 @@
using System;
using System.Drawing;
//using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
//using System.Data;
namespace Volian.Controls.Library
{
@@ -52,8 +48,6 @@ namespace Volian.Controls.Library
{
SizeF txtSize = e.Graphics.MeasureString(_Caption, this.Font);
//Use a gray rectangle to show that the underlying control is inactive
//using (Brush b2 = new SolidBrush(Color.FromArgb(_Alpha, this.BackColor)))
// e.Graphics.FillRectangle(b2, this.ClientRectangle);
using (Brush b = new SolidBrush(Color.FromArgb(_Alpha, this.ForeColor)))
e.Graphics.DrawString(_Caption, this.Font, b, this.Width - txtSize.Width, 2);
}
+7 -32
View File
@@ -1,10 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;
using System.Drawing;
using Volian.Base.Library;
@@ -164,18 +160,9 @@ namespace Volian.Controls.Library
}
#endregion
#region Serialize
public string ConvertToString()
{
return GenericSerializer<VlnBorders>.StringSerialize(this);
}
public override string ToString()
{
return "Volian Custom Borders";
}
public static VlnBorders Get(string xml)
{
return GenericSerializer<VlnBorders>.StringDeserialize(xml);
}
public string ConvertToString() => GenericSerializer<VlnBorders>.StringSerialize(this);
public override string ToString() => "Volian Custom Borders";
public static VlnBorders Get(string xml) => GenericSerializer<VlnBorders>.StringDeserialize(xml);
#endregion
#region Line Pattern Static Methods
public static int LineWidth(GridLinePattern linePattern)
@@ -322,10 +309,7 @@ namespace Volian.Controls.Library
}
#endregion
#region Insert and Delete Rows and Columns
public void InsertRow(int row)
{
InsertRows(row, 1);
}
public void InsertRow(int row) => InsertRows(row, 1);
public void InsertRows(int row, int count)
{
// Create a new Array of the correct size
@@ -343,10 +327,7 @@ namespace Volian.Controls.Library
Lines = newLines;
Rows = newRows;
}
public void DeleteRow(int row)
{
DeleteRows(row, 1);
}
public void DeleteRow(int row) => DeleteRows(row, 1);
public void DeleteRows(int row, int count)
{
GridLinePattern[] newLines = new GridLinePattern[(Rows - count) * Columns];
@@ -362,10 +343,7 @@ namespace Volian.Controls.Library
Lines = newLines;
Rows = newRows;
}
public void InsertColumn(int column)
{
InsertColumns(column, 1);
}
public void InsertColumn(int column) => InsertColumns(column, 1);
public void InsertColumns(int column, int count)
{
// Create a new Array of the correct size
@@ -382,10 +360,7 @@ namespace Volian.Controls.Library
Lines = newLines;
Columns = newColumns;
}
public void DeleteColumn(int column)
{
DeleteColumns(column, 1);
}
public void DeleteColumn(int column) => DeleteColumns(column, 1);
public void DeleteColumns(int column, int count)
{
GridLinePattern[] newLines = new GridLinePattern[Rows * (Columns - count)];
+2 -3
View File
@@ -49,12 +49,11 @@ namespace Volian.Controls.Library
protected override void Dispose(bool disposing)
{
if (_Disposed) return;
_CountDisposed++;
_Disposed = true;
_MyBorders = null;
_MyShading = null;
_SpellChecker = null;
_tableCellEditor = null;
SpellChecker = null;
TableCellEditor = null;
if (disposing && (components != null))
{
components.Dispose();
File diff suppressed because it is too large Load Diff
@@ -1,11 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;
using System.Drawing;
using Volian.Base.Library;
@@ -89,69 +84,26 @@ namespace Volian.Controls.Library
string strARGB = string.Format("[A={0}, R={1}, G={2}, B={3}]", clr.A, clr.R, clr.G, clr.B);
return strARGB;
}
public void SetColor(int row, int col, Color CellColor)
{
// Set the table cell to the ARGB representation of the passed in color
string cellShadeColor = GetARGBstring(CellColor);
TableShadingInfo[row, col] = cellShadeColor;
return;
}
#endregion
#region Insert and Remove Rows and Columns
public void InsertRow(int row)
{
TableShadingInfo.InsertRow(row);
}
public void InsertRows(int row, int count)
{
TableShadingInfo.InsertRows(row, count);
}
public void DeleteRow(int row)
{
TableShadingInfo.DeleteRow(row);
}
public void DeleteRows(int row, int count)
{
TableShadingInfo.DeleteRows(row, count);
}
public void InsertColumn(int column)
{
TableShadingInfo.InsertColumn(column);
}
public void InsertColumns(int column, int count)
{
TableShadingInfo.InsertColumns(column, count);
}
public void DeleteColumn(int column)
{
TableShadingInfo.DeleteColumn(column);
}
public void DeleteColumns(int column, int count)
{
TableShadingInfo.DeleteColumns(column, count);
}
public void InsertRow(int row) => TableShadingInfo.InsertRow(row);
public void InsertRows(int row, int count) => TableShadingInfo.InsertRows(row, count);
public void DeleteRow(int row) => TableShadingInfo.DeleteRow(row);
public void DeleteRows(int row, int count) => TableShadingInfo.DeleteRows(row, count);
public void InsertColumn(int column) => TableShadingInfo.InsertColumn(column);
public void InsertColumns(int column, int count) => TableShadingInfo.InsertColumns(column, count);
public void DeleteColumns(int column, int count) => TableShadingInfo.DeleteColumns(column, count);
#endregion
#region Serialize
public string ConvertToString()
{
return GenericSerializer<VlnGridCellShading>.StringSerialize(this);
}
public override string ToString()
{
return "Volian Custom Cell Shading";
}
public static VlnGridCellShading Get(string xml)
{
return GenericSerializer<VlnGridCellShading>.StringDeserialize(xml);
}
#endregion
// Adjust the cell shading array if needed
public void CheckAndFixShadingArraySize(int grdRows, int grdCols, Color defaultCellShading)
{
if (TableShadingInfo.Columns != grdCols || TableShadingInfo.Rows != grdRows)
TableShadingInfo = new CellShadingArray(defaultCellShading, grdRows, grdCols, TableShadingInfo.CellShadingColor);
}
}
[Serializable]
public class CellShadingArray
@@ -200,22 +152,6 @@ namespace Volian.Controls.Library
for (int c = 0; c < Columns; c++)
CellShadingColor[r * Columns + c] = defaultShadingColorARGB;
}
// Used to automatically adjust the cell shading color array
public CellShadingArray(Color defaultShadingColor, int rows, int columns, string[] shadeAry)
{
Rows = rows;
Columns = columns;
CellShadingColor = new string[rows * columns];
for (int r = 0; r < Rows; r++)
for (int c = 0; c < Columns; c++)
{
int idx = r * Columns + c;
if (idx < shadeAry.Length)
CellShadingColor[idx] = shadeAry[idx];
else
CellShadingColor[idx] = defaultShadingColor.ToString();
}
}
#endregion
#region Array Access
public string this[int r, int c]
@@ -234,10 +170,7 @@ namespace Volian.Controls.Library
}
#endregion
#region Insert and Delete Rows and Columns
public void InsertRow(int row)
{
InsertRows(row, 1);
}
public void InsertRow(int row) => InsertRows(row, 1);
public void InsertRows(int row, int count)
{
// Create a new Array of the correct size
@@ -255,10 +188,7 @@ namespace Volian.Controls.Library
CellShadingColor = newLines;
Rows = newRows;
}
public void DeleteRow(int row)
{
DeleteRows(row, 1);
}
public void DeleteRow(int row) => DeleteRows(row, 1);
public void DeleteRows(int row, int count)
{
string[] newLines = new string[(Rows - count) * Columns];
@@ -274,10 +204,7 @@ namespace Volian.Controls.Library
CellShadingColor = newLines;
Rows = newRows;
}
public void InsertColumn(int column)
{
InsertColumns(column, 1);
}
public void InsertColumn(int column) => InsertColumns(column, 1);
public void InsertColumns(int column, int count)
{
// Create a new Array of the correct size
@@ -294,10 +221,7 @@ namespace Volian.Controls.Library
CellShadingColor = newLines;
Columns = newColumns;
}
public void DeleteColumn(int column)
{
DeleteColumns(column, 1);
}
public void DeleteColumn(int column) => DeleteColumns(column, 1);
public void DeleteColumns(int column, int count)
{
string[] newLines = new string[Rows * (Columns - count)];
+1 -12
View File
@@ -1,21 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;
using VEPROMS.CSLA.Library;
namespace Volian.Controls.Library
{
public class VlnSpellCheck
{
private EditItem _MyEditItem;
public EditItem MyEditItem
{
get { return _MyEditItem; }
set
{
_MyEditItem = value;
}
}
public EditItem MyEditItem { get; set; }
public VlnSpellCheck()
@@ -1,11 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using C1.Win.C1SpellChecker;
namespace Volian.Controls.Library
@@ -19,24 +14,19 @@ namespace Volian.Controls.Library
private int _ErrorCount;
private int _ErrorIndex = -1; // current error index
private bool _AutoSuggest = true;
private string _NoSuggestionsText = "(no suggestions)";
private readonly string _NoSuggestionsText = "(no suggestions)";
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
Dictionary<string, string> _changeAll = new Dictionary<string, string>();
/// <summary>
/// Gets the <see cref="CharRange"/> object that represents the error currently
/// displayed in the dialog.
/// </summary>
public CharRange CurrentError
{
get { return _Errors[_ErrorIndex]; }
}
public CharRange CurrentError => _Errors[_ErrorIndex];
public bool DidCorrectSpelling = false; // B2015-024 have Spell Checker text changes be in editorial mode (not assign a change bar but keep existing change bar)
public VlnSpellCheckDlg()
{
InitializeComponent();
}
public VlnSpellCheckDlg() => InitializeComponent();
/// <summary>
/// Initializes the dialog to use the given parameters.
/// </summary>
@@ -58,10 +48,7 @@ namespace Volian.Controls.Library
/// <summary>
/// Gets the total number of errors detected in the control.
/// </summary>
public int ErrorCount
{
get { return _ErrorCount; }
}
public int ErrorCount => _ErrorCount;
/// <summary>
/// Gets or sets the index of the current error into the <see cref="Errors"/> list.
@@ -105,7 +92,7 @@ namespace Volian.Controls.Library
{
// fire load event
base.OnLoad(e);
//AddHandle();
//AddHandle(); //For Debugging
// show first error (after firing load event)
ErrorIndex = 0;
}
@@ -204,8 +191,6 @@ namespace Volian.Controls.Library
// show 'Add' button only if user dictionary is enabled
btnAddToDictionary.Visible = _Spell.UserDictionary.Enabled;
// all ready, fire ErrorDisplayed event
//OnErrorDisplayed(EventArgs.Empty);
}
private void SetupSuggestions(string badWord)
@@ -251,10 +236,7 @@ namespace Volian.Controls.Library
return false;
}
private void btnChange_Click(object sender, EventArgs e)
{
UpdateEditor(txbBadWord.Text);
}
private void btnChange_Click(object sender, EventArgs e) => UpdateEditor(txbBadWord.Text);
private void btnChangeAll_Click(object sender, EventArgs e)
{
@@ -262,10 +244,7 @@ namespace Volian.Controls.Library
UpdateEditor(txbBadWord.Text);
}
private void btnIgnore_Click(object sender, EventArgs e)
{
ErrorIndex++;
}
private void btnIgnore_Click(object sender, EventArgs e) => ErrorIndex++;
private void btnIgnoreAll_Click(object sender, EventArgs e)
{
@@ -299,9 +278,6 @@ namespace Volian.Controls.Library
}
}
private void btnRemove_Click(object sender, EventArgs e)
{
UpdateEditor("");
}
private void btnRemove_Click(object sender, EventArgs e) => UpdateEditor("");
}
}
@@ -126,7 +126,6 @@
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="AlphabeticalNumbering.cs" />
<Compile Include="AnnotationDetails.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -238,6 +237,9 @@
<Compile Include="FindReplace.designer.cs">
<DependentUpon>FindReplace.cs</DependentUpon>
</Compile>
<Compile Include="FlagEnumEditor.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="FormatUtility.cs" />
<Compile Include="frmEnhanced.cs">
<SubType>Form</SubType>
@@ -269,6 +271,7 @@
<Compile Include="frmViewTextFile.designer.cs">
<DependentUpon>frmViewTextFile.cs</DependentUpon>
</Compile>
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="GridItem.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -368,9 +371,6 @@
<Compile Include="DSOTabPanel.designer.cs">
<DependentUpon>DSOTabPanel.cs</DependentUpon>
</Compile>
<Compile Include="FlagEnumEditor.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="MostRecentItem.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
@@ -443,12 +443,6 @@
<Compile Include="vlnTreeView3.Designer.cs">
<DependentUpon>vlnTreeView3.cs</DependentUpon>
</Compile>
<Compile Include="WebBrowser.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="WebBrowser.designer.cs">
<DependentUpon>WebBrowser.cs</DependentUpon>
</Compile>
<Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
</ItemGroup>
<ItemGroup>
@@ -557,10 +551,6 @@
<DependentUpon>VlnSpellCheckDlg.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="WebBrowser.resx">
<DependentUpon>WebBrowser.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DropDownPanel\DropDownPanel.csproj">
-63
View File
@@ -1,63 +0,0 @@
namespace Volian.Controls.Library
{
partial class WebBrowser
{
/// <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.WebBrowserWindow = new System.Windows.Forms.WebBrowser();
this.SuspendLayout();
//
// WebBrowserWindow
//
this.WebBrowserWindow.Dock = System.Windows.Forms.DockStyle.Fill;
this.WebBrowserWindow.Location = new System.Drawing.Point(0, 0);
this.WebBrowserWindow.MinimumSize = new System.Drawing.Size(20, 20);
this.WebBrowserWindow.Name = "WebBrowserWindow";
this.WebBrowserWindow.Size = new System.Drawing.Size(1039, 723);
this.WebBrowserWindow.TabIndex = 0;
//this.WebBrowserWindow.Url = new System.Uri("http://www.volian.com", System.UriKind.Absolute);
//this.WebBrowserWindow.Url = new System.Uri(_currentURL, System.UriKind.Absolute);
//this.WebBrowserWindow.Navigate(_currentURL);
//
// WebBrowser
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1039, 723);
this.Controls.Add(this.WebBrowserWindow);
this.Name = "WebBrowser";
this.ShowIcon = false;
this.Text = "WebBrowser";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.WebBrowser WebBrowserWindow;
}
}
@@ -1,38 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Volian.Controls.Library
{
public partial class WebBrowser : DevComponents.DotNetBar.Office2007Form //Form
{
private string _currentURL = @"http:/www.volian.com"; // default to volain web site
/// <summary>
/// Display an instance of the default internet web browser.
/// Note that besides a web site address, you can pass in a PDF file name (include the path).
/// This assumes that the user's web browser can display PDF files.
/// If nothing is passed in, then this will default to displaying the Volian Web Site.
/// </summary>
/// <param name="url">The URL of the web site you want to display</param>
public WebBrowser(string url)
{
_currentURL = url;
//this.Text = url;
InitializeComponent();
this.WebBrowserWindow.Navigate(_currentURL);
this.TitleText = _currentURL;
}
public WebBrowser()
{
InitializeComponent();
this.WebBrowserWindow.Navigate(_currentURL);
this.TitleText = _currentURL;
}
}
}
@@ -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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+1 -6
View File
@@ -1,16 +1,11 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Volian.Controls.Library
{
public partial class dlgChgId : Form
{
DisplayTabControl TabControl;
readonly DisplayTabControl TabControl;
public dlgChgId(DisplayTabControl tc)
{
InitializeComponent();
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Volian.Controls.Library
@@ -12,11 +7,11 @@ namespace Volian.Controls.Library
// (a few users said that procedures 'disappeared' but this could not be reproduced)
public partial class dlgDelProcReason : Form
{
vlnTreeView VTreeView;
readonly vlnTreeView VTreeView;
public dlgDelProcReason(vlnTreeView tv)
{
InitializeComponent();
this.Text = "Verify Delete By " + Volian.Base.Library.VlnSettings.UserID;
this.Text = $"Verify Delete By {Volian.Base.Library.VlnSettings.UserID}";
VTreeView = tv;
tbDelProcReason.Focus();
}
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using JR.Utils.GUI.Forms;
@@ -13,10 +7,10 @@ namespace Volian.Controls.Library
{
public partial class dlgEnhMissingItem : Form
{
StepTabRibbon STRibbon = null;
private ItemInfo _SourceItem = null;
private int _EnhType = -1;
private bool _Initializing = false;
readonly StepTabRibbon STRibbon = null;
private readonly ItemInfo _SourceItem = null;
private readonly int _EnhType = -1;
private readonly bool _Initializing = false;
public bool OKSelected = false;
public dlgEnhMissingItem(StepTabRibbon strbn, ItemInfo srcItem, int enhType)
{
@@ -40,7 +34,7 @@ namespace Volian.Controls.Library
cbUnlinkedEnhancedItems.SelectedIndex = -1;
cbUnlinkedEnhancedItems.Enabled = false;
}
if (srcItem.IsProcedure) this.Text = "Create Missing Enhanced Item for " + srcItem.DisplayNumber;
if (srcItem.IsProcedure) this.Text = $"Create Missing Enhanced Item for {srcItem.DisplayNumber}";
else this.Text = "Create Missing Enhanced Item";
_Initializing = false;
}
@@ -90,8 +84,7 @@ namespace Volian.Controls.Library
// convert the data. If so, convert all items within it that can be linked. If not, just link as before.
if (_SourceItem.IsProcedure)
{
ItemInfo ii = cbUnlinkedEnhancedItems.SelectedItem as ItemInfo;
if (ii == null) return;
if (!(cbUnlinkedEnhancedItems.SelectedItem is ItemInfo ii)) return;
ContentInfoList cil = ContentInfoList.Get16BitEnhancedContents(_SourceItem.ItemID, ii.ItemID, _EnhType);
bool foundSubItem = false; // in returned list, see if there are any sections/steps. If none, don't prompt
foreach (ContentInfo ci in cil)
@@ -1,12 +1,9 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
using Volian.Controls.Library;
using System.Linq;
namespace Volian.Controls.Library
+8 -30
View File
@@ -1,9 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
@@ -16,34 +13,25 @@ namespace Volian.Controls.Library
get { return tc.MySessionInfo; }
set { tc.MySessionInfo = value; }
}
private ItemInfo _MyItemInfo;
public ItemInfo MyItemInfo
{
get { return _MyItemInfo; }
set { _MyItemInfo = value; }
}
public ItemInfo MyItemInfo { get; set; }
public frmEnhanced(ItemInfo ii)
{
_MyItemInfo = ii;
MyItemInfo = ii;
InitializeComponent();
SetCaption();
}
public void OpenItem()
{
tc.OpenItem(_MyItemInfo);
tc.OpenItem(MyItemInfo);
}
private void frmEnhanced_Load(object sender, EventArgs e)
{
OpenItem();
}
public DisplayTabControl MyDisplayTabClntrol
{
get { return this.tc; }
}
private void SetCaption()
{
FolderInfo myfolder = _MyItemInfo.MyDocVersion.MyFolder;
FolderInfo myfolder = MyItemInfo.MyDocVersion.MyFolder;
string sep = "";
string fPath = "";
while (myfolder.FolderID != myfolder.ParentID)
@@ -57,18 +45,8 @@ namespace Volian.Controls.Library
}
public class VersionWindow
{
private int _VersionID;
public int VersionID
{
get { return _VersionID; }
set { _VersionID = value; }
}
private int _DBId;
public int DBId
{
get { return _DBId; }
set { _DBId = value; }
}
public int VersionID { get; set; }
public int DBId { get; set; }
private Rectangle _MyRectangle;
public Rectangle MyRectangle
{
@@ -78,12 +56,12 @@ namespace Volian.Controls.Library
public override string ToString()
{
RectangleConverter rc = new RectangleConverter();
return string.Format("{0}~{1}", _VersionID, rc.ConvertToString(_MyRectangle));
return string.Format("{0}~{1}", VersionID, rc.ConvertToString(_MyRectangle));
}
public VersionWindow(string str)
{
string[] parts = str.Split('~');
_VersionID = int.Parse(parts[0]);
VersionID = int.Parse(parts[0]);
RectangleConverter rc = new RectangleConverter();
_MyRectangle = (Rectangle)rc.ConvertFromString(parts[1]);
}
@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
@@ -109,7 +107,6 @@ namespace Volian.Controls.Library
// C2019-021 RHM 5/15/2019 Added new methods and properties for Import Word Content
_WordApp.Selection.MoveUp(LBWdUnits.wdParagraph, 1, 0); // Move to previous paragraph
_WordApp.Selection.MoveUp(LBWdUnits.wdParagraph, 1, 1); // Select paragraph
//_WordApp.Selection.MoveEnd(LBWdUnits.wdCharacter, -1); // Move 1 Character Back
try
{
// C2019-021 Use generic function CopyWordText
@@ -294,34 +291,6 @@ namespace Volian.Controls.Library
// incase user manually closed word
}
}
//C2019-021 Remove old method.
//private void btnNextIns_Click(object sender, EventArgs e)
//{
// if (MyStepRTB != null)
// {
// if (MyStepRTB.MyItemInfo.IsSection)
// {
// MyStepRTB.RtbSendKeys("^{DOWN}"); // <Ctrl><down arrow> - next edit window
// MyStepRTB.RtbSendKeys("^+b"); // insert previous
// }
// else
// MyStepRTB.RtbSendKeys("^+i"); // insert next (same type and level)
// MyStepRTB.RtbSendKeys("^v"); // clipboard paste
// Application.DoEvents();
// }
// this.Focus(); // set focus back to this form
//}
//private void btnNextRpl_Click(object sender, EventArgs e)
//{
// if (MyStepRTB != null)
// {
// MyStepRTB.RtbSendKeys("^{DOWN}"); // <Ctrl><down arrow> - next edit window
// MyStepRTB.RtbSendKeys("^a"); // select all
// MyStepRTB.RtbSendKeys("^v"); // clipboard paste
// Application.DoEvents();
// }
// this.Focus(); // set focus back to this form
//}
// C2019-021 New function to replace the PROMS text with the word text and move to the next paragraph in word.
private void btnReplaceNext_Click(object sender, EventArgs e)
{
@@ -382,7 +351,6 @@ namespace Volian.Controls.Library
if (MyStepRTB.Parent is VlnFlexGrid)
{
VlnFlexGrid vg = MyStepRTB.Parent as VlnFlexGrid;
//vg.FinishEditing(false);
vg.SelectNextCell();
}
else
@@ -498,9 +466,6 @@ namespace Volian.Controls.Library
private void btnCurrent_Click(object sender, EventArgs e)
{
// B2019-108 Corrected curent button code
//_WordApp.Selection.MoveUp(LBWdUnits.wdParagraph, 1, 0); // Select paragraph
//_WordApp.Selection.MoveDown(LBWdUnits.wdParagraph, 1, 1); // Select paragraph
//_WordApp.Selection.MoveEnd(LBWdUnits.wdCharacter, -1); // Exclude the last character
try
{
_WordApp.Selection.Cells[1].Range.Select();
@@ -514,9 +479,6 @@ namespace Volian.Controls.Library
// C2019-021 Use Generic CopyWordText
CopyWordText();
// C2019-021If the word text only contains whitespace skip to next
//if (txbWrdText.Text.TrimEnd("\f\r\n\a".ToCharArray()) == "")
// btnNext_Click(sender, e);
//else
Clipboard.SetText(txbWrdText.Text);
}
catch
@@ -524,16 +486,6 @@ namespace Volian.Controls.Library
// Ask RHM what to do here 2/28/2020 JBS
}
}
//private void btnTest_Click(object sender, EventArgs e)
//{
// if (!MoveToNextCell())
// {
// _WordApp.Selection.MoveDown(LBWdUnits.wdParagraph, 2, 0);
// _WordApp.Selection.MoveDown(LBWdUnits.wdParagraph, 1, 1);
// }
// _WordApp.Activate();
// //int cols = _WordApp.Selection.Tables[1].Columns.Count;
//}
// B2019-108 Show special Characters
private void txbWrdText_TextChanged(object sender, EventArgs e)
@@ -562,9 +514,6 @@ namespace Volian.Controls.Library
private void frmImportWordContents_Activated(object sender, EventArgs e)
{
// B2019-108 Corrected curent button code
//_WordApp.Selection.MoveUp(LBWdUnits.wdParagraph, 1, 0); // Select paragraph
//_WordApp.Selection.MoveDown(LBWdUnits.wdParagraph, 1, 1); // Select paragraph
//_WordApp.Selection.MoveEnd(LBWdUnits.wdCharacter, -1); // Exclude the last character
try
{
if (_WordApp != null || _WordApp.WindowState == LBWdWindowState.wdWindowStateMinimize)
@@ -576,16 +525,6 @@ namespace Volian.Controls.Library
disableButtons();
}
}
//private void btnTest_Click(object sender, EventArgs e)
//{
// if (!MoveToNextCell())
// {
// _WordApp.Selection.MoveDown(LBWdUnits.wdParagraph, 2, 0);
// _WordApp.Selection.MoveDown(LBWdUnits.wdParagraph, 1, 1);
// }
// _WordApp.Activate();
// //int cols = _WordApp.Selection.Tables[1].Columns.Count;
//}
private void btnTableConvert_Click(object sender, EventArgs e)
{
@@ -613,12 +552,11 @@ namespace Volian.Controls.Library
else
sb.Append(c);
}
MessageBox.Show(ex.Message + "\r\n" + sb.ToString(), ex.GetType().Name);
MessageBox.Show($"{ex.Message}\r\n{sb}", ex.GetType().Name);
return;
}
LoadTable2(xd.DocumentElement);
int type = 20008;
ItemInfo myTable;
if(MyStepRTB.MyItemInfo.IsTable)
{
using( Item itm = MyStepRTB.MyItemInfo.Get())
@@ -633,12 +571,6 @@ namespace Volian.Controls.Library
}
else
{
//using (Step stp = Step.MakeStep(MyStepRTB.MyItemInfo, null, null, TblFlexGrid.GetSearchableText() , 20008, E_FromType.Table))
//{
// myTable = ItemInfo.Get(stp.ItemID);
// Grid.MakeGrid(stp.MyContent, TblFlexGrid.GetXMLData(), "");
//}
//MyStepRTB.MyItemInfo.MyContent.RefreshContentParts();
EditItem ei = MyStepRTB.Parent as EditItem;
ei.AddChild(E_FromType.Table, 20008, TblFlexGrid);
if (ei != null) ei.SetAllTabs();
@@ -671,7 +603,6 @@ namespace Volian.Controls.Library
// capture widths for valid cells
for (int i = 1; i <= tbl.Range.Cells.Count; i++)
{
//LBCell myCell = tbl.Range.Cells[i];
// convert points to pixels and save value
int w = (int)(tbl.Range.Cells[i].Width * 8 / 6);
iC = tbl.Range.Cells[i].ColumnIndex - 1;
@@ -774,16 +705,16 @@ namespace Volian.Controls.Library
iC = myCell.ColumnIndex - 1 + offset;
if (SpanR[iR, iC] > 1)
{
sXML += " rowspan=\"" + SpanR[iR, iC] + "\"";
sXML += $" rowspan=\"{SpanR[iR, iC]}\"";
}
if (SpanC[iR, iC] > 1)
{
sXML += " colspan=\"" + SpanC[iR, iC] + "\"";
sXML += $" colspan=\"{SpanC[iR, iC]}\"";
offset += SpanC[iR, iC] - 1;
}
else if (Wcol[iC] > 0)
{
sXML += " width=\"" + Wcol[iC] + "\"";
sXML += $" width=\"{Wcol[iC]}\"";
Wcol[iC] = Wcol[iC] * -1;
}
string textalign = "";
@@ -815,7 +746,7 @@ namespace Volian.Controls.Library
textalign += "Top";
break;
}
sXML += " textalign=\"" + textalign + "\"";
sXML += $" textalign=\"{textalign}\"";
sXML += ">";
// select text from current cell
_WordApp.Selection.Start = myCell.Range.Start;
@@ -830,7 +761,6 @@ namespace Volian.Controls.Library
rtbStep.SelectAll();
Console.WriteLine("RTF before {0}", rtbStep.Rtf);
Console.WriteLine("RTF after {0}", rtbStep.Rtf);
// rtbStep.Rtf.Replace("\\f1 P\\f0 ", "\\u10004?"); // check mark within parenthesis
string strp = rtbStep.Rtf.Replace("\\par\r\n", "!!!");
strp = DisplayText.StaticStripRtfCommands(strp, true);
Console.WriteLine("RTF clean {0}", strp);
@@ -849,11 +779,9 @@ namespace Volian.Controls.Library
sb.Replace("\x201D", "\"");// Space
sb.Replace("\x09INITIAL", "");// Space
sb.Replace("\x09_____", ""); // Tab Signoff
//sb.Replace("(P)", "(\\u10004?)"); // check mark within parenthesis
//sb.Replace("\\u9633?", "&#9633;"); //box
}
// save resulting text in xml structure
sXML += "<p>" + ha + sb + "</p></td>";
sXML += $"<p>{ha}{sb}</p></td>";
}
else
{
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using LBOutlookLibrary;
@@ -82,10 +78,8 @@ namespace Volian.Controls.Library
MailMessage mm = new MailMessage();
mm.From = new MailAddress(SMTPUser);
mm.To.Add("support@volian.com");
//mm.To.Add("rmark@epix.net");
//mm.To.Add("jcbodine@gmail.com");
mm.Subject = "PROMS Error Log " + DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss");
mm.Body = Header + "\r\n\r\n" + tbContent.Text;
mm.Subject = $"PROMS Error Log {DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss")}";
mm.Body = $"{Header}\r\n\r\n{tbContent.Text}";
fs = File.Open(_ErrorLogPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
mm.Attachments.Add(new Attachment(fs, "ErrorLog.txt"));
SmtpClient sc = new SmtpClient(SMTPServer);
@@ -109,7 +103,6 @@ namespace Volian.Controls.Library
get
{
StringBuilder sb = new StringBuilder();
//sb.Append("PROMS\t\tVersion: ");
sb.AppendLine("PROMS");
sb.Append("Version: ");
sb.Append(AssemblyVersion);
@@ -118,10 +111,9 @@ namespace Volian.Controls.Library
string connectionString = Database.VEPROMS_Connection;
Match mServer = Regex.Match(connectionString, ".*Data Source=([^;]*).*");
string server = (mServer.Success) ? mServer.Groups[1].Value : "unknown";
if (server.StartsWith(@".\")) server = @"Local \ " + server.Substring(2);
if (server.StartsWith(@".\")) server = $@"Local \ {server.Substring(2)}";
string databaseName = string.Format("{0}[SQL:{1:yyMM.ddHH}]", Database.ActiveDatabase, Database.RevDate);
sb.Append(string.Format("SQL Server: {0}", server));
//if (databaseName == null) databaseName = Regex.Replace(connectionString, "^.*Initial Catalog=([^;]*);.*$", "$1", RegexOptions.IgnoreCase);
sb.AppendLine(string.Format("\t\tDatabase: {0}", databaseName));
if (OutlookEmail)
sb.AppendLine("sent via outlook");
@@ -137,13 +129,9 @@ namespace Volian.Controls.Library
LBApplicationClass app = new LBApplicationClass();
LBMailItemClass msg = app.CreateMailItem();
msg.Recipients.Add("support@volian.com");
//msg.Recipients.Add("rmark@epix.net");
//msg.Recipients.Add("jcbodine@gmail.com");
//msg.To = "jcbodine@gmail.com";//"rmark@epix.net";
//msg.Recipients.Add("jcbodine@gmail.com");
msg.Subject = "PROMS Error Log " + DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss");
msg.Subject = $"PROMS Error Log {DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss")}";
msg.BodyFormat = LBOlBodyFormat.olFormatPlain;
msg.Body = Header + "\r\n\r\n" + tbContent.Text;
msg.Body = $"{Header}\r\n\r\n{tbContent.Text}";
msg.AddAttachment(_ErrorLogPath);
msg.Send();
return true;
@@ -162,7 +150,6 @@ namespace Volian.Controls.Library
get
{
return Application.ProductVersion;
//return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
}
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
@@ -13,11 +8,6 @@ namespace Volian.Controls.Library
{
string _FileName;
RichTextBoxStreamType _RTBType;
//public string FileName
//{
// get { return _FileName; }
// set { _FileName = value; }
//}
public string ButtonText
{
get { return buttonX1.Text; }

Some files were not shown because too many files have changed in this diff Show More