@magic-xpa/gui 4.1100.0-dev4110.98 → 4.1100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/README.md +7 -7
  2. package/{esm2020 → esm2022}/index.mjs +71 -71
  3. package/{esm2020 → esm2022}/magic-xpa-gui.mjs +1 -1
  4. package/esm2022/src/Commands.mjs +184 -0
  5. package/esm2022/src/Events.mjs +425 -0
  6. package/{esm2020 → esm2022}/src/EventsProcessor.mjs +66 -66
  7. package/{esm2020 → esm2022}/src/FocusManager.mjs +33 -33
  8. package/esm2022/src/GuiConstants.mjs +68 -0
  9. package/{esm2020 → esm2022}/src/GuiEnums.mjs +301 -300
  10. package/esm2022/src/GuiEnvironment.mjs +4 -0
  11. package/{esm2020 → esm2022}/src/IFlowMonitorQueue.mjs +1 -1
  12. package/esm2022/src/Manager.mjs +91 -0
  13. package/esm2022/src/UIBridge.mjs +33 -0
  14. package/{esm2020 → esm2022}/src/env/IEnvironment.mjs +1 -1
  15. package/{esm2020 → esm2022}/src/gui/ControlBase.mjs +2 -2
  16. package/esm2022/src/gui/GuiMgControl.mjs +123 -0
  17. package/{esm2020 → esm2022}/src/gui/GuiMgForm.mjs +3 -3
  18. package/esm2022/src/gui/KeyboardItem.mjs +135 -0
  19. package/esm2022/src/gui/LastFocusedVal.mjs +11 -0
  20. package/esm2022/src/gui/MgValue.mjs +16 -0
  21. package/{esm2020 → esm2022}/src/gui/PropParentInterface.mjs +1 -1
  22. package/{esm2020 → esm2022}/src/gui/low/DialogHandler.mjs +6 -6
  23. package/esm2022/src/gui/low/GuiCommand.mjs +68 -0
  24. package/esm2022/src/gui/low/GuiCommandQueue.mjs +35 -0
  25. package/esm2022/src/gui/low/GuiInteractive.mjs +178 -0
  26. package/esm2022/src/gui/low/Style.mjs +20 -0
  27. package/esm2022/src/management/RuntimeContextBase.mjs +42 -0
  28. package/esm2022/src/management/data/BlobType.mjs +281 -0
  29. package/esm2022/src/management/data/DcValues.mjs +214 -0
  30. package/{esm2020 → esm2022}/src/management/data/DcValuesBuilderBase.mjs +95 -95
  31. package/esm2022/src/management/data/FieldDef.mjs +331 -0
  32. package/{esm2020 → esm2022}/src/management/data/FieldsTable.mjs +54 -54
  33. package/esm2022/src/management/data/GuiDataViewBase.mjs +88 -0
  34. package/esm2022/src/management/data/GuiFieldBase.mjs +82 -0
  35. package/{esm2020 → esm2022}/src/management/data/IRecord.mjs +1 -1
  36. package/{esm2020 → esm2022}/src/management/data/IReferencedObject.mjs +1 -1
  37. package/esm2022/src/management/data/NUM_TYPE.mjs +1739 -0
  38. package/esm2022/src/management/data/ObjectReferenceBase.mjs +48 -0
  39. package/esm2022/src/management/data/ObjectReferencesCollection.mjs +27 -0
  40. package/{esm2020 → esm2022}/src/management/data/RecordUtils.mjs +360 -360
  41. package/esm2022/src/management/data/VectorType.mjs +612 -0
  42. package/esm2022/src/management/data/VectorTypeBase.mjs +88 -0
  43. package/{esm2020 → esm2022}/src/management/events/IActionManager.mjs +1 -1
  44. package/{esm2020 → esm2022}/src/management/events/IGuiEventsManager.mjs +1 -1
  45. package/esm2022/src/management/exp/ExpressionInterface.mjs +244 -0
  46. package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +305 -0
  47. package/esm2022/src/management/gui/ControlTable.mjs +118 -0
  48. package/esm2022/src/management/gui/DisplayConvertor.mjs +1649 -0
  49. package/esm2022/src/management/gui/FieldValidator.mjs +711 -0
  50. package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +24 -0
  51. package/{esm2020 → esm2022}/src/management/gui/GuiFormPropertyAdapter.mjs +10 -10
  52. package/esm2022/src/management/gui/HebrewDate.mjs +278 -0
  53. package/esm2022/src/management/gui/Helps.mjs +237 -0
  54. package/esm2022/src/management/gui/MgControlBase.mjs +1869 -0
  55. package/esm2022/src/management/gui/MgFormBase.mjs +741 -0
  56. package/esm2022/src/management/gui/PIC.mjs +1185 -0
  57. package/{esm2020 → esm2022}/src/management/gui/PropDefaults.mjs +229 -229
  58. package/{esm2020 → esm2022}/src/management/gui/PropInterface.mjs +246 -245
  59. package/esm2022/src/management/gui/PropTable.mjs +221 -0
  60. package/esm2022/src/management/gui/Property.mjs +1362 -0
  61. package/esm2022/src/management/gui/ValidationDetails.mjs +248 -0
  62. package/{esm2020 → esm2022}/src/management/gui/ValidationDetailsBase.mjs +93 -93
  63. package/{esm2020 → esm2022}/src/management/gui/WrongFormatException.mjs +29 -29
  64. package/esm2022/src/management/tasks/GuiDataCollection.mjs +4 -0
  65. package/esm2022/src/management/tasks/GuiTaskBase.mjs +511 -0
  66. package/{esm2020 → esm2022}/src/management/tasks/IMGDataTable.mjs +1 -1
  67. package/{esm2020 → esm2022}/src/management/tasks/ITask.mjs +1 -1
  68. package/esm2022/src/management/tasks/MgTimer.mjs +21 -0
  69. package/esm2022/src/management/tasks/TaskDefinitionId.mjs +54 -0
  70. package/{esm2020 → esm2022}/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -41
  71. package/{esm2020 → esm2022}/src/util/MemoryUtil.mjs +34 -34
  72. package/esm2022/src/util/ObjectReference.mjs +36 -0
  73. package/esm2022/src/util/UsernamePasswordCredentials.mjs +52 -0
  74. package/{fesm2020 → fesm2022}/magic-xpa-gui.mjs +16086 -16095
  75. package/fesm2022/magic-xpa-gui.mjs.map +1 -0
  76. package/index.d.ts +70 -70
  77. package/package.json +6 -12
  78. package/src/Commands.d.ts +40 -40
  79. package/src/Events.d.ts +157 -155
  80. package/src/EventsProcessor.d.ts +13 -13
  81. package/src/FocusManager.d.ts +8 -8
  82. package/src/GuiConstants.d.ts +65 -65
  83. package/src/GuiEnums.d.ts +283 -282
  84. package/src/GuiEnvironment.d.ts +4 -4
  85. package/src/IFlowMonitorQueue.d.ts +3 -3
  86. package/src/Manager.d.ts +26 -26
  87. package/src/UIBridge.d.ts +16 -16
  88. package/src/env/IEnvironment.d.ts +31 -31
  89. package/src/gui/ControlBase.d.ts +4 -4
  90. package/src/gui/GuiMgControl.d.ts +38 -38
  91. package/src/gui/GuiMgForm.d.ts +3 -3
  92. package/src/gui/KeyboardItem.d.ts +18 -18
  93. package/src/gui/LastFocusedVal.d.ts +7 -7
  94. package/src/gui/MgValue.d.ts +15 -15
  95. package/src/gui/PropParentInterface.d.ts +13 -13
  96. package/src/gui/low/DialogHandler.d.ts +4 -4
  97. package/src/gui/low/GuiCommand.d.ts +37 -37
  98. package/src/gui/low/GuiCommandQueue.d.ts +13 -13
  99. package/src/gui/low/GuiInteractive.d.ts +55 -55
  100. package/src/gui/low/Style.d.ts +19 -19
  101. package/src/management/RuntimeContextBase.d.ts +23 -23
  102. package/src/management/data/BlobType.d.ts +29 -29
  103. package/src/management/data/DcValues.d.ts +33 -33
  104. package/src/management/data/DcValuesBuilderBase.d.ts +17 -17
  105. package/src/management/data/FieldDef.d.ts +53 -53
  106. package/src/management/data/FieldsTable.d.ts +16 -16
  107. package/src/management/data/GuiDataViewBase.d.ts +27 -27
  108. package/src/management/data/GuiFieldBase.d.ts +17 -17
  109. package/src/management/data/IRecord.d.ts +12 -12
  110. package/src/management/data/IReferencedObject.d.ts +5 -5
  111. package/src/management/data/NUM_TYPE.d.ts +103 -103
  112. package/src/management/data/ObjectReferenceBase.d.ts +16 -16
  113. package/src/management/data/ObjectReferencesCollection.d.ts +10 -10
  114. package/src/management/data/RecordUtils.d.ts +21 -21
  115. package/src/management/data/VectorType.d.ts +52 -52
  116. package/src/management/data/VectorTypeBase.d.ts +8 -8
  117. package/src/management/events/IActionManager.d.ts +7 -7
  118. package/src/management/events/IGuiEventsManager.d.ts +20 -20
  119. package/src/management/exp/ExpressionInterface.d.ts +242 -242
  120. package/src/management/exp/GuiExpressionEvaluator.d.ts +47 -47
  121. package/src/management/gui/ControlTable.d.ts +28 -28
  122. package/src/management/gui/DisplayConvertor.d.ts +103 -103
  123. package/src/management/gui/FieldValidator.d.ts +35 -35
  124. package/src/management/gui/GuiControlPropertyAdapter.d.ts +40 -40
  125. package/src/management/gui/GuiFormPropertyAdapter.d.ts +17 -17
  126. package/src/management/gui/HebrewDate.d.ts +46 -46
  127. package/src/management/gui/Helps.d.ts +51 -51
  128. package/src/management/gui/MgControlBase.d.ts +225 -223
  129. package/src/management/gui/MgFormBase.d.ts +160 -160
  130. package/src/management/gui/PIC.d.ts +108 -108
  131. package/src/management/gui/PropDefaults.d.ts +7 -7
  132. package/src/management/gui/PropInterface.d.ts +244 -243
  133. package/src/management/gui/PropTable.d.ts +33 -33
  134. package/src/management/gui/Property.d.ts +121 -121
  135. package/src/management/gui/ValidationDetails.d.ts +52 -52
  136. package/src/management/gui/ValidationDetailsBase.d.ts +14 -14
  137. package/src/management/gui/WrongFormatException.d.ts +9 -9
  138. package/src/management/tasks/GuiDataCollection.d.ts +4 -4
  139. package/src/management/tasks/GuiTaskBase.d.ts +150 -150
  140. package/src/management/tasks/IMGDataTable.d.ts +10 -10
  141. package/src/management/tasks/ITask.d.ts +6 -6
  142. package/src/management/tasks/MgTimer.d.ts +8 -8
  143. package/src/management/tasks/TaskDefinitionId.d.ts +16 -16
  144. package/src/management/tasks/TaskDefinitionIdTableSaxHandler.d.ts +7 -7
  145. package/src/util/MemoryUtil.d.ts +6 -6
  146. package/src/util/ObjectReference.d.ts +9 -9
  147. package/src/util/UsernamePasswordCredentials.d.ts +18 -18
  148. package/esm2020/src/Commands.mjs +0 -184
  149. package/esm2020/src/Events.mjs +0 -420
  150. package/esm2020/src/GuiConstants.mjs +0 -68
  151. package/esm2020/src/GuiEnvironment.mjs +0 -4
  152. package/esm2020/src/Manager.mjs +0 -91
  153. package/esm2020/src/UIBridge.mjs +0 -32
  154. package/esm2020/src/gui/GuiMgControl.mjs +0 -125
  155. package/esm2020/src/gui/KeyboardItem.mjs +0 -135
  156. package/esm2020/src/gui/LastFocusedVal.mjs +0 -11
  157. package/esm2020/src/gui/MgValue.mjs +0 -16
  158. package/esm2020/src/gui/low/GuiCommand.mjs +0 -66
  159. package/esm2020/src/gui/low/GuiCommandQueue.mjs +0 -35
  160. package/esm2020/src/gui/low/GuiInteractive.mjs +0 -176
  161. package/esm2020/src/gui/low/Style.mjs +0 -20
  162. package/esm2020/src/management/RuntimeContextBase.mjs +0 -43
  163. package/esm2020/src/management/data/BlobType.mjs +0 -281
  164. package/esm2020/src/management/data/DcValues.mjs +0 -214
  165. package/esm2020/src/management/data/FieldDef.mjs +0 -331
  166. package/esm2020/src/management/data/GuiDataViewBase.mjs +0 -90
  167. package/esm2020/src/management/data/GuiFieldBase.mjs +0 -82
  168. package/esm2020/src/management/data/NUM_TYPE.mjs +0 -1741
  169. package/esm2020/src/management/data/ObjectReferenceBase.mjs +0 -48
  170. package/esm2020/src/management/data/ObjectReferencesCollection.mjs +0 -29
  171. package/esm2020/src/management/data/VectorType.mjs +0 -612
  172. package/esm2020/src/management/data/VectorTypeBase.mjs +0 -88
  173. package/esm2020/src/management/exp/ExpressionInterface.mjs +0 -244
  174. package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +0 -307
  175. package/esm2020/src/management/gui/ControlTable.mjs +0 -118
  176. package/esm2020/src/management/gui/DisplayConvertor.mjs +0 -1679
  177. package/esm2020/src/management/gui/FieldValidator.mjs +0 -711
  178. package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +0 -22
  179. package/esm2020/src/management/gui/HebrewDate.mjs +0 -278
  180. package/esm2020/src/management/gui/Helps.mjs +0 -237
  181. package/esm2020/src/management/gui/MgControlBase.mjs +0 -1858
  182. package/esm2020/src/management/gui/MgFormBase.mjs +0 -741
  183. package/esm2020/src/management/gui/PIC.mjs +0 -1185
  184. package/esm2020/src/management/gui/PropTable.mjs +0 -221
  185. package/esm2020/src/management/gui/Property.mjs +0 -1356
  186. package/esm2020/src/management/gui/ValidationDetails.mjs +0 -248
  187. package/esm2020/src/management/tasks/GuiDataCollection.mjs +0 -4
  188. package/esm2020/src/management/tasks/GuiTaskBase.mjs +0 -510
  189. package/esm2020/src/management/tasks/MgTimer.mjs +0 -21
  190. package/esm2020/src/management/tasks/TaskDefinitionId.mjs +0 -54
  191. package/esm2020/src/util/ObjectReference.mjs +0 -36
  192. package/esm2020/src/util/UsernamePasswordCredentials.mjs +0 -52
  193. package/fesm2015/magic-xpa-gui.mjs +0 -16391
  194. package/fesm2015/magic-xpa-gui.mjs.map +0 -1
  195. package/fesm2020/magic-xpa-gui.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magic-xpa-gui.mjs","sources":["../../../../projects/gui/src/gui/MgValue.ts","../../../../projects/gui/src/gui/ControlBase.ts","../../../../projects/gui/src/gui/GuiMgForm.ts","../../../../projects/gui/src/Events.ts","../../../../projects/gui/src/UIBridge.ts","../../../../projects/gui/src/gui/low/GuiCommandQueue.ts","../../../../projects/gui/src/gui/low/GuiInteractive.ts","../../../../projects/gui/src/gui/GuiMgControl.ts","../../../../projects/gui/src/GuiEnums.ts","../../../../projects/gui/src/gui/low/GuiCommand.ts","../../../../projects/gui/src/Commands.ts","../../../../projects/gui/src/management/gui/PropInterface.ts","../../../../projects/gui/src/GuiEnvironment.ts","../../../../projects/gui/src/Manager.ts","../../../../projects/gui/src/GuiConstants.ts","../../../../projects/gui/src/management/data/BlobType.ts","../../../../projects/gui/src/management/gui/PIC.ts","../../../../projects/gui/src/management/gui/ValidationDetailsBase.ts","../../../../projects/gui/src/management/data/NUM_TYPE.ts","../../../../projects/gui/src/util/MemoryUtil.ts","../../../../projects/gui/src/management/gui/HebrewDate.ts","../../../../projects/gui/src/management/gui/DisplayConvertor.ts","../../../../projects/gui/src/management/data/VectorTypeBase.ts","../../../../projects/gui/src/management/data/RecordUtils.ts","../../../../projects/gui/src/management/data/VectorType.ts","../../../../projects/gui/src/management/data/FieldDef.ts","../../../../projects/gui/src/management/data/GuiFieldBase.ts","../../../../projects/gui/src/management/tasks/TaskDefinitionId.ts","../../../../projects/gui/src/management/tasks/TaskDefinitionIdTableSaxHandler.ts","../../../../projects/gui/src/management/gui/GuiControlPropertyAdapter.ts","../../../../projects/gui/src/management/gui/PropDefaults.ts","../../../../projects/gui/src/management/gui/Property.ts","../../../../projects/gui/src/management/gui/GuiFormPropertyAdapter.ts","../../../../projects/gui/src/management/gui/PropTable.ts","../../../../projects/gui/src/management/gui/WrongFormatException.ts","../../../../projects/gui/src/management/gui/FieldValidator.ts","../../../../projects/gui/src/management/gui/ValidationDetails.ts","../../../../projects/gui/src/management/data/DcValues.ts","../../../../projects/gui/src/util/ObjectReference.ts","../../../../projects/gui/src/FocusManager.ts","../../../../projects/gui/src/management/gui/MgControlBase.ts","../../../../projects/gui/src/management/gui/ControlTable.ts","../../../../projects/gui/src/management/gui/MgFormBase.ts","../../../../projects/gui/src/EventsProcessor.ts","../../../../projects/gui/src/gui/KeyboardItem.ts","../../../../projects/gui/src/gui/LastFocusedVal.ts","../../../../projects/gui/src/gui/low/DialogHandler.ts","../../../../projects/gui/src/gui/low/Style.ts","../../../../projects/gui/src/management/RuntimeContextBase.ts","../../../../projects/gui/src/management/data/DcValuesBuilderBase.ts","../../../../projects/gui/src/management/data/FieldsTable.ts","../../../../projects/gui/src/management/data/GuiDataViewBase.ts","../../../../projects/gui/src/management/data/ObjectReferenceBase.ts","../../../../projects/gui/src/management/data/ObjectReferencesCollection.ts","../../../../projects/gui/src/management/exp/ExpressionInterface.ts","../../../../projects/gui/src/management/exp/GuiExpressionEvaluator.ts","../../../../projects/gui/src/management/gui/Helps.ts","../../../../projects/gui/src/management/tasks/GuiDataCollection.ts","../../../../projects/gui/src/management/tasks/GuiTaskBase.ts","../../../../projects/gui/src/management/tasks/MgTimer.ts","../../../../projects/gui/src/util/UsernamePasswordCredentials.ts"],"sourcesContent":["import {List} from \"@magic-xpa/mscorelib\";\r\n\r\nexport class MgValue {\r\n str: string = null;\r\n caption: string = null;\r\n title: string = null;\r\n path: string = null;\r\n filter: string = null;\r\n boolVal: boolean = false;\r\n bool1: boolean = false;\r\n style: number = 0;\r\n number: number = 0;\r\n obj: any = null;\r\n listOfIntArr: List<number[]> = null;\r\n\r\n constructor() {\r\n\r\n }\r\n}\r\n","export abstract class ControlBase {\r\n\r\n abstract get UniqueName(): string;\r\n\r\n abstract get TaskTag(): string;\r\n}\r\n","import {ControlBase} from \"./ControlBase\";\r\n\r\nexport abstract class GuiMgForm extends ControlBase {\r\n\r\n}\r\n","import {GuiMgControl} from \"./gui/GuiMgControl\";\r\nimport {MgFormBase} from \"./management/gui/MgFormBase\";\r\nimport {ITask} from \"./management/tasks/ITask\";\r\nimport {MgControlBase} from \"./management/gui/MgControlBase\";\r\nimport {RuntimeContextBase} from \"./management/RuntimeContextBase\";\r\nimport {GuiMgForm} from \"./gui/GuiMgForm\";\r\nimport {GuiTaskBase} from \"./management/tasks/GuiTaskBase\";\r\nimport {Debug, Exception, List, NString, StringBuilder} from \"@magic-xpa/mscorelib\";\r\nimport {Modifiers} from \"./GuiEnums\";\r\nimport {MgTimer} from \"./management/tasks/MgTimer\";\r\nimport {LastFocusedVal} from \"./gui/LastFocusedVal\";\r\nimport {Logger_LogLevels, OSEnvironment} from \"@magic-xpa/utils\";\r\nimport { GuiControlPropertyAdapter } from \"./management/gui/GuiControlPropertyAdapter\";\r\n\r\n/// <summary>events raised by MgGui.dll and handled by MgxpaRIA.exe or MgxpaRuntime.exe.\r\n/// Important note: these events are NOT related the events handling of Magic (RC or RTE) -\r\n/// the events exposed from this class contain functionality that the current assembly (MgGui.dll)\r\n/// requires from either MgxpaRIA.exe or MgxpaRuntime.exe.\r\n/// This class contains only the definitions of all delegates and events.\r\n/// Class 'EventsProcessor' contains handlers for events that can be served locally (by MgGui.dll),\r\n/// and registered external handlers (in MgxpaRIA.exe or MgxpaRuntime.exe) for events that can't be served locally.\r\n/// </summary>\r\nexport class Events {\r\n /// <summary> invokes the VisibilityChanged Event</summary>\r\n /// <param name=\"ctrl\">control whose visibility is changed</param>\r\n static NonParkableLastParkedCtrlEvent: (ctrl: GuiMgControl) => void = null;\r\n\r\n /// <summary>\r\n /// returns TRUE, if Batch task is running in MAIN context.\r\n /// </summary>\r\n static IsBatchRunningInMainContextEvent: () => boolean = null;\r\n\r\n /// <summary>MLS translation</summary>\r\n /// <param name=\"fromString\">source string</param>\r\n /// <returns>translated string</returns>\r\n static TranslateEvent: (fromString: string) => string = null;\r\n\r\n /// <summary>\r\n /// Creates Print Preview Form\r\n /// </summary>\r\n /// <param name=\"contextId\">context id</param>\r\n /// <param name=\"ioPtr\">pointer to current IORT object</param>\r\n /// <param name=\"copies\">number of copies</param>\r\n /// <param name=\"enablePDlg\">indicates whether to enable Print dialog</param>\r\n /// <param name=\"hWnd\">Handle of Print Preview Form</param>\r\n static PrintPreviewStartEvent: (contextID: number, ioPtr: number, copies: number, enablePDlg: boolean, hWnd: number) => void = null;\r\n\r\n /// <summary>\r\n /// Set cursor to Print Preview form\r\n /// </summary>\r\n /// <param name=\"prnPrevData\">print preview data</param>\r\n static PrintPreviewSetCursorEvent: (printPreviewData: number) => void = null;\r\n\r\n ///<summary>\r\n /// Handles Invoke UDP operation from GUI thread\r\n ///</summary>\r\n ///<param name=\"contextId\">Context id</param>\r\n static InvokeUDPEvent: (contextId: number) => number = null;\r\n\r\n /// <summary>\r\n /// Update Print Preview\r\n /// </summary>\r\n /// <param name=\"prnPrevData\">print preview data</param>\r\n static PrintPreviewUpdateEvent: (prnPrevData: number) => void = null;\r\n\r\n /// <summary>\r\n /// Create Rich Edit\r\n /// </summary>\r\n /// <param name=\"contextId\"></param>\r\n /// <param name=\"ctrlPtr\"></param>\r\n /// <param name=\"prmPtr\"></param>\r\n /// <param name=\"style\"></param>\r\n /// <param name=\"dwExStyle\"></param>\r\n static CreateRichWindowEvent: (contextID: number, ctrlPtr: number, prmPtr: number, style: number, dwExStyle: number) => void = null;\r\n\r\n ///<summary>\r\n /// Creates a window\r\n ///</summary>\r\n ///<param name=\"exStyle\">!!.</param>\r\n ///<param name=\"className\">!!.</param>\r\n ///<param name=\"windowName\">!!.</param>\r\n ///<param name=\"style\">!!.</param>\r\n ///<param name=\"x\">!!.</param>\r\n ///<param name=\"y\">!!.</param>\r\n ///<param name=\"width\">!!.</param>\r\n ///<param name=\"height\">!!.</param>\r\n ///<param name=\"hwndParent\">!!.</param>\r\n ///<param name=\"hMenu\">!!.</param>\r\n ///<param name=\"hInstance\">!!.</param>\r\n ///<param name=\"lParam\">!!.</param>\r\n ///<returns>handle of window</returns>\r\n static CreateGuiWindowEvent: (exStyle: number, className: string, windowName: string, style: number, x: number, y: number, width: number, height: number, hwndParent: number, hMenu: number, hInstance: number, lParam: number) => number = null;\r\n\r\n /// <summary>\r\n /// Destroys a window\r\n /// </summary>\r\n /// <param name=\"hWndPtr\">handle of window</param>\r\n static DestroyGuiWindowEvent: (hWndPtr: number) => void = null;\r\n\r\n /// <summary>\r\n /// OnClose Print Preview\r\n /// </summary>\r\n /// <param name=\"hWndPtr\">print preview data</param>\r\n static PrintPreviewCloseEvent: (hWndPtr: number) => void = null;\r\n\r\n /// <summary>\r\n /// Show Print Dialog\r\n /// </summary>\r\n /// <param name=\"gpd\"></param>\r\n static ShowPrintDialogEvent: (gpd: number) => number = null;\r\n\r\n /// <summary>\r\n /// SetModal event\r\n /// </summary>\r\n /// <param name=\"currForm\"></param>\r\n /// <param name=\"on\"></param>\r\n static SetModalEvent: (mgForm: MgFormBase, on: boolean) => void = null;\r\n\r\n /// <summary>raises CtrlFocusEvent</summary>\r\n /// <returns></returns>\r\n static CtrlFocusEvent: (iTask: ITask, ctrl: MgControlBase) => void = null;\r\n\r\n /// <summary>\r\n /// Gets the RuntimeContextBase that belongs to the contextID\r\n /// </summary>\r\n /// <param name=\"contextID\"></param>\r\n /// <returns></returns>\r\n static GetRuntimeContextEvent: (contextID: string) => RuntimeContextBase = null;\r\n\r\n /// <summary>\r\n /// Saves the name of the last clicked control.\r\n /// </summary>\r\n /// <param name=\"guiMgControl\">guiMgControl</param>\r\n /// <param name=\"controlName\">Name of the control</param>\r\n static SaveLastClickedCtrlEvent: ( controlName: string) => void = null;\r\n\r\n /// <summary>\r\n /// Saves the last clicked information. (i.e. Co-ordinates and control name.\r\n /// </summary>\r\n /// <param name=\"guiMgForm\">guiMgForm</param>\r\n /// <param name=\"controlName\">name of the control</param>\r\n /// <param name=\"x\"></param>\r\n /// <param name=\"y\"></param>\r\n /// <param name=\"offsetX\"></param>\r\n /// <param name=\"offsetY\"></param>\r\n /// <param name=\"lastClickCoordinatesAreInPixels\">co-ordinates are in pixel or not.</param>\r\n static SaveLastClickInfoEvent: (controlName: string, x: number, y: number, offsetX: number, offsetY: number, lastClickCoordinatesAreInPixels: boolean) => void = null;\r\n\r\n /// <summary>write an error message to the internal log file</summary>\r\n /// <param name=\"msg\"></param>\r\n static WriteErrorToLogEvent: (msg: string) => void = null;\r\n\r\n /// <summary>Write an internal error to the log. Also prints stack trace along with the message</summary>\r\n /// <param name=\"msg\"></param>\r\n static WriteExceptionToLogEvent: (msg: string) => void = null;\r\n\r\n\r\n /// <summary>write a warning message to the internal log file</summary>\r\n /// <param name=\"msg\"></param>\r\n static WriteWarningToLogEvent: (msg: string) => void = null;\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"logLevel\"></param>\r\n /// <returns></returns>\r\n static ShouldLogEvent: (logLevel: Logger_LogLevels) => boolean = null;\r\n\r\n /// <summary>write a GUI message to the internal log file</summary>\r\n /// <param name=\"msg\"></param>\r\n static WriteGuiToLogEvent: (msg: string) => void = null;\r\n\r\n /// <summary>write a DEV message to the internal log file</summary>\r\n /// <param name=\"msg\"></param>\r\n static WriteDevToLogEvent: (msg: string) => void = null;\r\n\r\n\r\n\r\n /// <summary>\r\n /// Called when WM_CLEAR message is received\r\n /// </summary>\r\n /// <param name=\"ctrl\"></param>\r\n static ClearEvent: (ctrl: GuiMgControl) => void = null;\r\n\r\n /// <summary>\r\n /// Called when WM_UNDO message is received\r\n /// </summary>\r\n /// <param name=\"ctrl\"></param>\r\n static UndoEvent: (ctrl: GuiMgControl) => void = null;\r\n\r\n /// <summary>\r\n /// Should Enter be added as keyboard event ? This is important mostly in determining if a click event\r\n /// will be raised for a default button or not.\r\n /// Adding Enter as a keyboard event will not raise click on default button.\r\n /// </summary>\r\n /// <returns></returns>\r\n static ShouldAddEnterAsKeyEvent: () => boolean = null;\r\n\r\n /// <summary>\r\n /// </summary>\r\n static ShowSessionStatisticsEvent: () => void = null;\r\n\r\n /// <summary>\r\n /// Called when WM_COPYDATA message is received\r\n /// </summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <param name=\"copyData\"></param>\r\n static CopyDataEvent: (guiMgForm: GuiMgForm, copyData: number) => void = null;\r\n\r\n /// <summary> invokes the focus event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"isProduceClick\"></param>\r\n static FocusEvent: (ctrl: GuiMgControl, line: number, isProduceClick: boolean, onMultiMark: boolean) => void = null;\r\n\r\n /// <summary> invokes the focus out event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n static FocusOnNonMagicControlEvent: (ctrl: GuiMgControl) => void = null;\r\n\r\n /// <summary> invokes the MouseDown Event</summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <param name=\"guiMgCtrl\"></param>\r\n /// <param name=\"dotNetArgs\"></param>\r\n /// <param name=\"leftClickWasPressed\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"onMultiMark\">indicates that Multi Mark continues</param>\r\n static MouseDownEvent: (guiMgForm: GuiMgForm, guiMgCtrl: GuiMgControl, dotNetArgs: Object[], leftClickWasPressed: boolean, line: number, onMultiMark: boolean, canProduceClick: boolean) => void = null;\r\n\r\n /// <summary> invokes the TableReorder Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"tabOrderList\"></param>\r\n static TableReorderEvent: (ctrl: GuiMgControl, tabOrderList: List<GuiMgControl>) => void = null;\r\n\r\n /// <summary> invokes the MouseUp Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n static MouseUpEvent: (ctrl: GuiMgControl, line: number) => void = null;\r\n\r\n /// <summary> invokes the ComboDroppingDown Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n static ComboDroppingDownEvent: (ctrl: GuiMgControl, line: number) => void = null;\r\n\r\n /// <summary> invokes the Selection Event</summary>\r\n /// <param name=\"val\"></param>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"produceClick\"></param>\r\n static SelectionEvent: (val: string, ctrl: GuiMgControl, line: number, produceClick: boolean) => void = null;\r\n\r\n /// <summary> invokes the DblClick Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n static DblClickEvent: (ctrl: GuiMgControl, line: number) => void = null;\r\n\r\n /// <summary> invokes the KeyDown Event</summary>\r\n /// <param name=\"form\"></param>\r\n /// <param name=\"guiMgCtrl\"></param>\r\n /// <param name=\"modifier\"></param>\r\n /// <param name=\"keyCode\"></param>\r\n /// <param name=\"start\"></param>\r\n /// <param name=\"end\"></param>\r\n /// <param name=\"text\"></param>\r\n /// <param name=\"im\"></param>\r\n /// <param name=\"isActChar\"></param>\r\n /// <param name=\"suggestedValue\"></param>\r\n /// <param name=\"comboIsDropDown\"></param>\r\n /// <param name=\"handled\">boolean variable event is handled or not. </param>\r\n static KeyDownEvent: (form: GuiMgForm, guiMgCtrl: GuiMgControl, modifier: Modifiers, keyCode: number, start: number, end: number, text: string, isActChar: boolean, suggestedValue: string, comboIsDropDown: boolean, handled: boolean) => boolean = null;\r\n\r\n /// <summary>\r\n /// delegate for the MultiMark hit event\r\n /// </summary>\r\n /// <param name=\"guiMgCtrl\"> control </param>\r\n /// <param name=\"row\"> table row </param>\r\n static MultimarkHitEvent: (guiMgCtrl: GuiMgControl, row: number, modifier: Modifiers) => void = null;\r\n\r\n /// <summary> invokes the Close Event</summary>\r\n /// <param name=\"form\"></param>\r\n /// <returns>true if event is CLR handled(closing of the form will be the responsibility of the CLR and no commands will be put\r\n /// in to close the form) else false.</returns>\r\n static CloseFormEvent: (form: GuiMgForm) => boolean = null;\r\n\r\n /// <summary> invokes the Dispose Event</summary>\r\n /// <param name=\"form\"></param>\r\n static DisposeEvent: (form: GuiMgForm) => void = null;\r\n\r\n /// <summary> invokes the Timer Event</summary>\r\n /// <param name=\"mgTimer\"></param>\r\n static TimerEvent: (mgTimer: MgTimer) => void = null;\r\n\r\n\r\n /// <summary> invokes the Resize Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"newRowsInPage\"></param>\r\n static TableResizeEvent: (ctrl: GuiMgControl, newRowsInPage: number) => void = null;\r\n\r\n /// <summary> invokes the GetRowsData Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"desiredTopIndex\"></param>\r\n /// <param name=\"sendAll\"></param>\r\n /// <param name=\"lastFocusedVal\"></param>\r\n static GetRowsDataEvent: (ctrl: GuiMgControl, desiredTopIndex: number, sendAll: boolean, lastFocusedVal: LastFocusedVal) => void = null;\r\n\r\n /// <summary> invokes the EnableCutCopy Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"enable\"></param>\r\n static EnableCutCopyEvent: (ctrl: GuiMgControl, enable: boolean) => void = null;\r\n\r\n /// <summary> invokes the EnablePaste Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"enable\"></param>\r\n static EnablePasteEvent: (ctrl: GuiMgControl, enable: boolean) => void = null;\r\n\r\n /// <summary> invokes the ColumnClick Event</summary>\r\n /// <param name=\"columnCtrl\"></param>\r\n /// <param name=\"direction\"></param>\r\n /// <param name=\"columnHeader\"></param>\r\n static ColumnClickEvent: (columnCtrl: GuiMgControl, direction: number, columnHeader: string) => void = null;\r\n\r\n\r\n\r\n /// <summary>invokes refreshTables delegate</summary>\r\n static RefreshTablesEvent: () => void = null;\r\n\r\n\r\n\r\n /// <summary>OnHelpClose</summary>\r\n /// <param name=\"activeForm\"></param>\r\n static HelpCloseEvent: (activeForm: GuiMgForm) => void = null;\r\n\r\n\r\n /// <summary> displaySessionStatistics </summary>\r\n static DisplaySessionStatisticsEvent: () => void = null;\r\n\r\n /// <summary>\r\n /// returns true for non interactive task for all controls except a button control\r\n /// </summary>\r\n /// <param name=\"ctrl\">clicked control</param>\r\n /// <returns></returns>\r\n static ShouldBlockMouseEventsEvent: (ctrl: GuiMgControl) => boolean = null;\r\n\r\n /// <summary>peekEndOfWork</summary>\r\n /// <returns></returns>\r\n static PeekEndOfWorkEvent: () => boolean = null;\r\n\r\n /// <summary>invokes the GetEventTime delegate</summary>\r\n /// <returns></returns>\r\n static GetEventTimeEvent: () => number = null;\r\n\r\n /// <summary>\r\n /// invokes the ScrollTable Event\r\n /// </summary>\r\n /// <param name=\"guiMgObject\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"rowsToScroll\"></param>\r\n /// <param name=\"isPageScroll\">next/prev page?</param>\r\n /// <param name=\"isTableScroll\">Begin/End Table?</param>\r\n /// <param name=\"isRaisedByMouseWheel\">indicates whether event is raised by mousewheel or not.</param>\r\n static ScrollTableEvent: (guiMgObject: any, line: number, rowsToScroll: number, isPageScroll: boolean, isTableScroll: boolean, isRaisedByMouseWheel: boolean) => boolean = null;\r\n\r\n /// <summary>\r\n /// Gets the user defined Drop formats\r\n /// </summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <returns></returns>\r\n static GetDropUserFormatsEvent: () => string = null;\r\n\r\n /// <summary>\r\n /// Get the context id from GuiMgForm\r\n /// </summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <returns></returns>\r\n static GetContextIDEvent: (guiMgForm: GuiMgForm) => number = null;\r\n\r\n /// <summary> </summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <returns></returns>\r\n static ShowFormEvent: (guiMgForm: GuiMgForm) => void = null;\r\n\r\n /// <summary>\r\n /// invokes OnFormActivateEvent\r\n /// </summary>\r\n static OnFormActivateEvent: (guiMgForm: GuiMgForm) => void = null;\r\n\r\n /// <summary>\r\n /// invokes OnNCActivate\r\n /// </summary>\r\n static OnNCActivateEvent: (guiMgForm: GuiMgForm) => void = null;\r\n\r\n\r\n /// <summary>\r\n /// Handle WM_KEYUP - (required only for ACT_NEXT_RT_WINDOW, ACT_PREV_RT_WINDOW for sorting windowlist\r\n /// when the key associated with the action is released)\r\n /// </summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <param name=\"keyCode\">keycode of a key which is just released</param>\r\n static HandleKeyUpMessageEvent: (guiMgForm: GuiMgForm, keyCode: number) => void = null;\r\n\r\n /// <summary>\r\n /// checks whether we should show Logon window in RTOL format or not.\r\n /// </summary>\r\n /// <returns></returns>\r\n static OnIsLogonRTLEvent: () => boolean = null;\r\n\r\n\r\n static OnIsSpecialEngLogonEvent: () => boolean = null;\r\n\r\n\r\n static OnIsSpecialIgnoreButtonFormatEvent: () => boolean = null;\r\n\r\n\r\n /// <summary> invokes the getMainProgram Event </summary>\r\n /// <param name=\"contextID\">active/target context</param>\r\n /// <param name=\"ctlIdx\"></param>\r\n /// <returns></returns>\r\n static GetMainProgramEvent: (contextID: number, ctlIdx: number) => GuiTaskBase = null;\r\n\r\n /// <summary>\r\n /// Logical name translation\r\n /// </summary>\r\n /// <param name=\"fromString\">source string</param>\r\n /// <returns>translated string</returns>\r\n static TranslateLogicalNameEvent: (fromString: string) => string = null;\r\n\r\n /// <summary>\r\n /// Invokes the GetAssetsURL event\r\n /// </summary>\r\n static GetAssetsURLEvent: () => string = null;\r\n\r\n /// <summary>invokes getMessageString Event</summary>\r\n /// <param name=\"msgId\"></param>\r\n /// <returns></returns>\r\n static GetMessageStringEvent: (msgId: string) => string = null;\r\n\r\n /// <summary> invokes the focus event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"isProduceClick\"></param>\r\n static OnFocus(ctrl: GuiMgControl, line: number, isProduceClick: boolean, onMultiMark: boolean): void {\r\n Debug.Assert(Events.FocusEvent !== null);\r\n Events.FocusEvent(ctrl, line, isProduceClick, onMultiMark);\r\n }\r\n\r\n /// <summary> invokes the focus event</summary>\r\n /// <param name=\"ctrl receiving lostFocus\"></param>\r\n static OnFocusOnNonMagicControl(ctrl: GuiMgControl): void {\r\n Debug.Assert(Events.FocusOnNonMagicControlEvent !== null);\r\n Events.FocusOnNonMagicControlEvent(ctrl);\r\n }\r\n\r\n\r\n /// <summary> invokes the MouseDown Event</summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <param name=\"guiMgCtrl\"></param>\r\n /// <param name=\"dotNetArgs\"></param>\r\n /// <param name=\"leftClickWasPressed\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"onMultiMark\">indicates that Multi Mark continues</param>\r\n static OnMouseDown(guiMgForm: GuiMgForm, guiMgCtrl: GuiMgControl, dotNetArgs: any[], leftClickWasPressed: boolean, line: number, onMultiMark: boolean, canProduceClick: boolean): void {\r\n Debug.Assert(Events.MouseDownEvent !== null);\r\n Events.MouseDownEvent(guiMgForm, guiMgCtrl, dotNetArgs, leftClickWasPressed, line, onMultiMark, canProduceClick);\r\n }\r\n\r\n\r\n /// <summary> invokes the VisibilityChanged Event</summary>\r\n /// <param name=\"ctrl\">control whose visibility is changed</param>\r\n static OnNonParkableLastParkedCtrl(ctrl: GuiMgControl): void {\r\n if (Events.NonParkableLastParkedCtrlEvent !== null) {\r\n Events.NonParkableLastParkedCtrlEvent(ctrl);\r\n }\r\n }\r\n\r\n /// <summary> invokes the TableReorder Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"tabOrderList\"></param>\r\n static OnTableReorder(ctrl: GuiMgControl, tabOrderList: List<GuiMgControl>): void {\r\n if (Events.TableReorderEvent !== null) {\r\n Events.TableReorderEvent(ctrl, tabOrderList);\r\n }\r\n }\r\n\r\n /// <summary> invokes the MouseUp Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n static OnMouseUp(ctrl: GuiMgControl, line: number): void {\r\n if (Events.MouseUpEvent !== null) {\r\n Events.MouseUpEvent(ctrl, line);\r\n }\r\n }\r\n\r\n /// <summary> invokes the ComboDroppingDown Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n static OnComboDroppingDown(ctrl: GuiMgControl, line: number): void {\r\n Debug.Assert(Events.ComboDroppingDownEvent !== null);\r\n Events.ComboDroppingDownEvent(ctrl, line);\r\n }\r\n\r\n /// <summary> invokes the Selection Event</summary>\r\n /// <param name=\"val\"></param>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"produceClick\"></param>\r\n static OnSelection(val: string, ctrl: GuiMgControl, line: number, produceClick: boolean): void {\r\n Debug.Assert(Events.SelectionEvent !== null);\r\n Events.SelectionEvent(val, ctrl, line, produceClick);\r\n }\r\n\r\n /// <summary> invokes the DblClick Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"line\"></param>\r\n static OnDblClick(ctrl: GuiMgControl, line: number): void {\r\n Debug.Assert(Events.DblClickEvent !== null);\r\n Events.DblClickEvent(ctrl, line);\r\n }\r\n\r\n\r\n /// <summary> invokes the KeyDown Event</summary>\r\n /// <param name=\"form\"></param>\r\n /// <param name=\"guiMgCtrl\"></param>\r\n /// <param name=\"modifier\"></param>\r\n /// <param name=\"keyCode\"></param>\r\n /// <param name=\"start\"></param>\r\n /// <param name=\"end\"></param>\r\n /// <param name=\"text\"></param>\r\n /// <param name=\"im\"></param>\r\n /// <param name=\"isActChar\"></param>\r\n /// <param name=\"suggestedValue\"></param>\r\n /// <param name=\"comboIsDropDown\"></param>\r\n /// <param name=\"handled\">boolean variable event is handled or not. </param>\r\n static OnKeyDown(form: GuiMgForm, guiMgCtrl: GuiMgControl, modifier: Modifiers, keyCode: number, start: number, end: number, text: string, isActChar: boolean, suggestedValue: string, comboIsDropDown: boolean, handled: boolean): void;\r\n static OnKeyDown(form: GuiMgForm, ctrl: GuiMgControl, modifier: Modifiers, keyCode: number, start: number, end: number, text: string, isActChar: boolean, suggestedValue: string, handled: boolean): void;\r\n static OnKeyDown(form: GuiMgForm, ctrl: GuiMgControl, modifier: Modifiers, keyCode: number, suggestedValue: string, comboIsDropDown: boolean, handled: boolean): void;\r\n static OnKeyDown(form: GuiMgForm, guiMgCtrlOrCtrl: GuiMgControl, modifier: Modifiers, keyCode: number, startOrSuggestedValue: any, endOrComboIsDropDown: any, textOrHandled: any, isActChar?: boolean, suggestedValue?: string, comboIsDropDownOrHandled?: boolean, handled?: boolean): void {\r\n if (arguments.length === 11)\r\n Events.OnKeyDown_0(form, guiMgCtrlOrCtrl, modifier, keyCode, startOrSuggestedValue, endOrComboIsDropDown, textOrHandled, isActChar, suggestedValue, comboIsDropDownOrHandled, handled);\r\n\r\n else if (arguments.length === 10)\r\n Events.OnKeyDown_1(form, guiMgCtrlOrCtrl, modifier, keyCode, startOrSuggestedValue, endOrComboIsDropDown, textOrHandled, isActChar, suggestedValue, comboIsDropDownOrHandled);\r\n else\r\n Events.OnKeyDown_2(form, guiMgCtrlOrCtrl, modifier, keyCode, startOrSuggestedValue, endOrComboIsDropDown, textOrHandled);\r\n }\r\n\r\n private static OnKeyDown_0(form: GuiMgForm, guiMgCtrl: GuiMgControl, modifier: Modifiers, keyCode: number, start: number, end: number, text: string, isActChar: boolean, suggestedValue: string, comboIsDropDown: boolean, handled: boolean): void {\r\n Debug.Assert(Events.KeyDownEvent !== null);\r\n Events.KeyDownEvent(form, guiMgCtrl, modifier, keyCode, start, end, text, isActChar, suggestedValue, comboIsDropDown, handled);\r\n }\r\n\r\n static OnMultiMarkHit(ctrl: GuiMgControl, row: number, modifier: Modifiers): void {\r\n Debug.Assert(Events.MultimarkHitEvent !== null);\r\n Events.MultimarkHitEvent(ctrl, row, modifier);\r\n }\r\n\r\n private static OnKeyDown_1(form: GuiMgForm, ctrl: GuiMgControl, modifier: Modifiers, keyCode: number, start: number, end: number, text: string, isActChar: boolean, suggestedValue: string, handled: boolean): boolean {\r\n Debug.Assert(Events.KeyDownEvent !== null);\r\n return Events.KeyDownEvent(form, ctrl, modifier, keyCode, start, end, text, isActChar, suggestedValue, false, handled);\r\n }\r\n\r\n private static OnKeyDown_2(form: GuiMgForm, ctrl: GuiMgControl, modifier: Modifiers, keyCode: number, suggestedValue: string, comboIsDropDown: boolean, handled: boolean): boolean {\r\n Debug.Assert(Events.KeyDownEvent !== null);\r\n return Events.KeyDownEvent(form, ctrl, modifier, keyCode, 0, 0, null, false, suggestedValue, comboIsDropDown, handled);\r\n }\r\n\r\n /// <summary> invokes the Close Event</summary>\r\n /// <param name=\"form\"></param>\r\n /// <returns>true if event is CLR handled(closing of the form will be the responsibility of the CLR and no commands will be put\r\n /// in to close the form) else false.</returns>\r\n static OnFormClose(form: GuiMgForm): boolean {\r\n Debug.Assert(Events.CloseFormEvent !== null);\r\n return Events.CloseFormEvent(form);\r\n }\r\n\r\n /// <summary> invokes the Dispose Event</summary>\r\n /// <param name=\"form\"></param>\r\n static OnDispose(form: GuiMgForm): void {\r\n Debug.Assert(Events.DisposeEvent !== null);\r\n Events.DisposeEvent(form);\r\n }\r\n\r\n /// <summary> invokes the Timer Event</summary>\r\n /// <param name=\"mgTimer\"></param>\r\n static OnTimer(mgTimer: MgTimer): void {\r\n Debug.Assert(Events.TimerEvent !== null);\r\n Events.TimerEvent(mgTimer);\r\n }\r\n\r\n\r\n\r\n /// <summary> invokes the Resize Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"newRowsInPage\"></param>\r\n static OnTableResize(ctrl: GuiMgControl, newRowsInPage: number): void {\r\n if (Events.TableResizeEvent !== null) {\r\n Events.TableResizeEvent(ctrl, newRowsInPage);\r\n }\r\n }\r\n\r\n /// <summary> invokes the GetRowsData Event</summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"desiredTopIndex\"></param>\r\n /// <param name=\"sendAll\"></param>\r\n /// <param name=\"lastFocusedVal\"></param>\r\n static OnGetRowsData(ctrl: GuiMgControl, desiredTopIndex: number, sendAll: boolean, lastFocusedVal: LastFocusedVal): void {\r\n if (Events.GetRowsDataEvent !== null) {\r\n Events.GetRowsDataEvent(ctrl, desiredTopIndex, sendAll, lastFocusedVal);\r\n }\r\n }\r\n\r\n\r\n /// <summary> invokes the ColumnClick Event</summary>\r\n /// <param name=\"columnCtrl\"></param>\r\n /// <param name=\"direction\"></param>\r\n /// <param name=\"columnHeader\"></param>\r\n static OnColumnClick(columnCtrl: GuiMgControl, direction: number, columnHeader: string): void {\r\n Debug.Assert(Events.ColumnClickEvent !== null);\r\n Events.ColumnClickEvent(columnCtrl, direction, columnHeader);\r\n }\r\n\r\n\r\n\r\n\r\n /// <summary>invokes refreshTables delegate</summary>\r\n static RefreshTables(): void {\r\n if (Events.RefreshTablesEvent !== null) {\r\n Events.RefreshTablesEvent();\r\n }\r\n }\r\n\r\n\r\n /// <summary>OnHelpClose</summary>\r\n /// <param name=\"activeForm\"></param>\r\n static OnCloseHelp(activeForm: GuiMgForm): void {\r\n if (Events.HelpCloseEvent !== null) {\r\n Events.HelpCloseEvent(activeForm);\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// returns TRUE, if Batch task is running in MAIN context.\r\n /// </summary>\r\n static IsBatchRunningInMainContext(): boolean {\r\n let retValue: boolean = false;\r\n if (Events.IsBatchRunningInMainContextEvent !== null) {\r\n retValue = Events.IsBatchRunningInMainContextEvent();\r\n }\r\n return retValue;\r\n }\r\n\r\n\r\n /// <summary>MLS translation</summary>\r\n /// <param name=\"fromString\">source string</param>\r\n /// <returns>translated string</returns>\r\n static Translate(fromString: string): string {\r\n Debug.Assert(Events.TranslateEvent !== null);\r\n return (fromString !== null && fromString.length > 0) ? Events.TranslateEvent(fromString) : fromString;\r\n }\r\n\r\n /// <summary>\r\n /// Creates Print Preview Form\r\n /// </summary>\r\n /// <param name=\"contextId\">context id</param>\r\n /// <param name=\"ioPtr\">pointer to current IORT object</param>\r\n /// <param name=\"copies\">number of copies</param>\r\n /// <param name=\"enablePDlg\">indicates whether to enable Print dialog</param>\r\n /// <param name=\"hWnd\">Handle of Print Preview Form</param>\r\n static OnPrintPreviewStart(contextID: number, ioPtr: number, copies: number, enablePDlg: boolean, hWnd: number): void {\r\n if (Events.PrintPreviewStartEvent !== null) {\r\n Events.PrintPreviewStartEvent(contextID, ioPtr, copies, enablePDlg, hWnd);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Set cursor to Print Preview form\r\n /// </summary>\r\n /// <param name=\"prnPrevData\">print preview data</param>\r\n static OnPrintPreviewSetCursor(printPreviewData: number): void {\r\n if (Events.PrintPreviewSetCursorEvent !== null) {\r\n Events.PrintPreviewSetCursorEvent(printPreviewData);\r\n }\r\n }\r\n\r\n ///<summary>\r\n /// Handles Invoke UDP operation from GUI thread\r\n ///</summary>\r\n ///<param name=\"contextId\">Context id</param>\r\n static InvokeUDP(contextId: number): number {\r\n let ret: number = 0;\r\n if (Events.InvokeUDPEvent !== null) {\r\n ret = Events.InvokeUDPEvent(contextId);\r\n }\r\n return ret;\r\n }\r\n\r\n /// <summary>\r\n /// Update Print Preview\r\n /// </summary>\r\n /// <param name=\"prnPrevData\">print preview data</param>\r\n static OnPrintPreviewUpdate(prnPrevData: number): void {\r\n if (Events.PrintPreviewUpdateEvent !== null) {\r\n Events.PrintPreviewUpdateEvent(prnPrevData);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Create Rich Edit\r\n /// </summary>\r\n /// <param name=\"contextId\"></param>\r\n /// <param name=\"ctrlPtr\"></param>\r\n /// <param name=\"prmPtr\"></param>\r\n /// <param name=\"style\"></param>\r\n /// <param name=\"dwExStyle\"></param>\r\n static OnCreateRichWindow(contextID: number, ctrlPtr: number, prmPtr: number, style: number, dwExStyle: number): void {\r\n if (Events.CreateRichWindowEvent !== null) {\r\n Events.CreateRichWindowEvent(contextID, ctrlPtr, prmPtr, style, dwExStyle);\r\n }\r\n }\r\n\r\n ///<summary>\r\n /// Creates a window\r\n ///</summary>\r\n ///<param name=\"exStyle\">!!.</param>\r\n ///<param name=\"className\">!!.</param>\r\n ///<param name=\"windowName\">!!.</param>\r\n ///<param name=\"style\">!!.</param>\r\n ///<param name=\"x\">!!.</param>\r\n ///<param name=\"y\">!!.</param>\r\n ///<param name=\"width\">!!.</param>\r\n ///<param name=\"height\">!!.</param>\r\n ///<param name=\"hwndParent\">!!.</param>\r\n ///<param name=\"hMenu\">!!.</param>\r\n ///<param name=\"hInstance\">!!.</param>\r\n ///<param name=\"lParam\">!!.</param>\r\n ///<returns>handle of window</returns>\r\n static OnCreateGuiWindow(exStyle: number, className: string, windowName: string, style: number, x: number, y: number, width: number, height: number, hwndParent: number, hMenu: number, hInstance: number, lParam: number): number {\r\n let retValue: number = 0;\r\n if (Events.CreateGuiWindowEvent !== null) {\r\n retValue = Events.CreateGuiWindowEvent(exStyle, className, windowName, style, x, y, width, height, hwndParent, hMenu, hInstance, lParam);\r\n }\r\n return retValue;\r\n }\r\n\r\n /// <summary>\r\n /// Destroys a window\r\n /// </summary>\r\n /// <param name=\"hWndPtr\">handle of window</param>\r\n static OnDestroyGuiWindow(hWndPtr: number): void {\r\n if (Events.DestroyGuiWindowEvent !== null) {\r\n Events.DestroyGuiWindowEvent(hWndPtr);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// OnClose Print Preview\r\n /// </summary>\r\n /// <param name=\"hWndPtr\">print preview data</param>\r\n static OnPrintPreviewClose(printPreviewDataPtr: number): void {\r\n if (Events.PrintPreviewCloseEvent !== null) {\r\n Events.PrintPreviewCloseEvent(printPreviewDataPtr);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Show Print Dialog\r\n /// </summary>\r\n /// <param name=\"gpd\"></param>\r\n static OnShowPrintDialog(gpd: number): number {\r\n let retValue: number = 0;\r\n if (Events.ShowPrintDialogEvent !== null) {\r\n retValue = Events.ShowPrintDialogEvent(gpd);\r\n }\r\n return retValue;\r\n }\r\n\r\n /// <summary> displaySessionStatistics </summary>\r\n static DisplaySessionStatistics(): void {\r\n if (Events.DisplaySessionStatisticsEvent !== null) {\r\n Events.DisplaySessionStatisticsEvent();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// returns true for non interactive task for all controls except a button control\r\n /// </summary>\r\n /// <param name=\"ctrl\">clicked control</param>\r\n /// <returns></returns>\r\n static ShouldBlockMouseEvents(ctrl: GuiMgControl): boolean {\r\n return Events.ShouldBlockMouseEventsEvent !== null && Events.ShouldBlockMouseEventsEvent(ctrl);\r\n }\r\n\r\n /// <summary>peekEndOfWork</summary>\r\n /// <returns></returns>\r\n static PeekEndOfWork(): boolean {\r\n return Events.PeekEndOfWorkEvent !== null && Events.PeekEndOfWorkEvent();\r\n }\r\n\r\n /// <summary>invokes the GetEventTime delegate</summary>\r\n /// <returns></returns>\r\n static GetEventTime(): number {\r\n return (Events.GetEventTimeEvent !== null) ? Events.GetEventTimeEvent() : 0;\r\n }\r\n\r\n /// <summary>\r\n /// invokes the ScrollTable Event\r\n /// </summary>\r\n /// <param name=\"guiMgObject\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"rowsToScroll\"></param>\r\n /// <param name=\"isPageScroll\">next/prev page?</param>\r\n /// <param name=\"isTableScroll\">Begin/End Table?</param>\r\n /// <param name=\"isRaisedByMouseWheel\">indicates whether event is raised by mousewheel or not.</param>\r\n static OnScrollTable(guiMgObject: any, line: number, rowsToScroll: number, isPageScroll: boolean, isTableScroll: boolean, isRaisedByMouseWheel: boolean): boolean {\r\n let handled: boolean = false;\r\n if (Events.ScrollTableEvent !== null) {\r\n handled = Events.ScrollTableEvent(guiMgObject, line, rowsToScroll, isPageScroll, isTableScroll, isRaisedByMouseWheel);\r\n }\r\n return handled;\r\n }\r\n\r\n /// <summary>\r\n /// Gets the user defined Drop formats\r\n /// </summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <returns></returns>\r\n static GetDropUserFormats(): string {\r\n Debug.Assert(Events.GetDropUserFormatsEvent !== null);\r\n return Events.GetDropUserFormatsEvent();\r\n }\r\n\r\n /// <summary>\r\n /// Get the context id from GuiMgForm\r\n /// </summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <returns></returns>\r\n static GetContextID(guiMgForm: GuiMgForm): number {\r\n let contextID: number = -1;\r\n Debug.Assert(guiMgForm !== null);\r\n if (Events.GetContextIDEvent !== null) {\r\n contextID = Events.GetContextIDEvent(guiMgForm);\r\n }\r\n return contextID;\r\n }\r\n\r\n /// <summary>\r\n /// SetModal event\r\n /// </summary>\r\n /// <param name=\"currForm\"></param>\r\n /// <param name=\"on\"></param>\r\n static SetModal(mgForm: MgFormBase, on: boolean): void {\r\n if (Events.SetModalEvent !== null) {\r\n Events.SetModalEvent(mgForm, on);\r\n }\r\n }\r\n\r\n /// <summary> </summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <returns></returns>\r\n static OnShowForm(guiMgForm: GuiMgForm): void {\r\n if (Events.ShowFormEvent !== null) {\r\n Events.ShowFormEvent(guiMgForm);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// invokes OnFormActivateEvent\r\n /// </summary>\r\n static OnFormActivate(guiMgForm: GuiMgForm): void {\r\n if (Events.OnFormActivateEvent !== null) {\r\n Events.OnFormActivateEvent(guiMgForm);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// invokes OnNCActivate\r\n /// </summary>\r\n static OnNCActivate(guiMgForm: GuiMgForm): void {\r\n if (Events.OnNCActivateEvent !== null) {\r\n Events.OnNCActivateEvent(guiMgForm);\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Handle WM_KEYUP - (required only for ACT_NEXT_RT_WINDOW, ACT_PREV_RT_WINDOW for sorting windowlist\r\n /// when the key associated with the action is released)\r\n /// </summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <param name=\"keyCode\">keycode of a key which is just released</param>\r\n static HandleKeyUpMessage(guiMgForm: GuiMgForm, keyCode: number): void {\r\n if (Events.HandleKeyUpMessageEvent !== null) {\r\n Events.HandleKeyUpMessageEvent(guiMgForm, keyCode);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// checks whether we should show Logon window in RTOL format or not.\r\n /// </summary>\r\n /// <returns></returns>\r\n static IsLogonRTL(): boolean {\r\n let isRTL: boolean = false;\r\n if (Events.OnIsLogonRTLEvent !== null) {\r\n isRTL = Events.OnIsLogonRTLEvent();\r\n }\r\n return isRTL;\r\n }\r\n\r\n static IsSpecialEngLogon(): boolean {\r\n let isEngLogon: boolean = false;\r\n if (Events.OnIsSpecialEngLogonEvent !== null) {\r\n isEngLogon = Events.OnIsSpecialEngLogonEvent();\r\n }\r\n return isEngLogon;\r\n }\r\n\r\n static IsSpecialIgnoreButtonFormat(): boolean {\r\n let isIgnoreButtonFormat: boolean = false;\r\n if (Events.OnIsSpecialIgnoreButtonFormatEvent !== null) {\r\n isIgnoreButtonFormat = Events.OnIsSpecialIgnoreButtonFormatEvent();\r\n }\r\n return isIgnoreButtonFormat;\r\n }\r\n\r\n /// <summary> invokes the getMainProgram Event </summary>\r\n /// <param name=\"contextID\">active/target context</param>\r\n /// <param name=\"ctlIdx\"></param>\r\n /// <returns></returns>\r\n static GetMainProgram(contextID: number, ctlIdx: number): GuiTaskBase {\r\n Debug.Assert(Events.GetMainProgramEvent !== null);\r\n return Events.GetMainProgramEvent(contextID, ctlIdx);\r\n }\r\n\r\n /// <summary>\r\n /// Logical name translation\r\n /// </summary>\r\n /// <param name=\"fromString\">source string</param>\r\n /// <returns>translated string</returns>\r\n static TranslateLogicalName(fromString: string): string {\r\n Debug.Assert(Events.TranslateLogicalNameEvent !== null);\r\n return Events.TranslateLogicalNameEvent(fromString);\r\n }\r\n\r\n /// <summary>\r\n /// Returns AssertURL event\r\n /// </summary>\r\n static GetAssetsURL(): string {\r\n Debug.Assert(Events.GetAssetsURLEvent !== null);\r\n return Events.GetAssetsURLEvent();\r\n }\r\n\r\n /// <summary>invokes getMessageString Event</summary>\r\n /// <param name=\"msgId\"></param>\r\n /// <returns></returns>\r\n static GetMessageString(msgId: string): string {\r\n Debug.Assert(Events.GetMessageStringEvent !== null);\r\n let fromString: string = Events.GetMessageStringEvent(msgId);\r\n let text: string = Events.Translate(fromString);\r\n if (text !== null && text.endsWith(\":\")) {\r\n let str: StringBuilder;\r\n str = new StringBuilder(text);\r\n str.Insert(text.length, \" \");\r\n text = str.ToString();\r\n }\r\n return text;\r\n }\r\n\r\n /// <summary>raises CtrlFocusEvent</summary>\r\n /// <returns></returns>\r\n static OnCtrlFocus(iTask: ITask, ctrl: GuiControlPropertyAdapter): void {\r\n if (Events.CtrlFocusEvent !== null) {\r\n Events.CtrlFocusEvent(iTask, <MgControlBase>ctrl);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Gets the RuntimeContextBase that belongs to the contextID\r\n /// </summary>\r\n /// <param name=\"contextID\"></param>\r\n /// <returns></returns>\r\n static GetRuntimeContext(contextID: string): RuntimeContextBase {\r\n Debug.Assert(Events.GetRuntimeContextEvent !== null);\r\n return Events.GetRuntimeContextEvent(contextID);\r\n }\r\n\r\n /// <summary>\r\n /// Saves the name of the last clicked control.\r\n /// </summary>\r\n /// <param name=\"guiMgControl\">guiMgControl</param>\r\n /// <param name=\"controlName\">Name of the control</param>\r\n static SaveLastClickedCtrlName(guiMgControl: GuiMgControl, controlName: string): void {\r\n if (Events.SaveLastClickedCtrlEvent !== null) {\r\n Events.SaveLastClickedCtrlEvent( controlName);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Saves the last clicked information. (i.e. Co-ordinates and control name.\r\n /// </summary>\r\n /// <param name=\"guiMgForm\">guiMgForm</param>\r\n /// <param name=\"controlName\">name of the control</param>\r\n /// <param name=\"x\"></param>\r\n /// <param name=\"y\"></param>\r\n /// <param name=\"offsetX\"></param>\r\n /// <param name=\"offsetY\"></param>\r\n /// <param name=\"lastClickCoordinatesAreInPixels\">co-ordinates are in pixel or not.</param>\r\n static SaveLastClickInfo(guiMgForm: GuiMgForm, controlName: string, x: number, y: number, offsetX: number, offsetY: number, lastClickCoordinatesAreInPixels: boolean): void {\r\n if (Events.SaveLastClickInfoEvent !== null) {\r\n Events.SaveLastClickInfoEvent( controlName, x, y, offsetX, offsetY, lastClickCoordinatesAreInPixels);\r\n }\r\n }\r\n\r\n /// <summary>write an error message to the internal log file</summary>\r\n /// <param name=\"msg\"></param>\r\n static WriteErrorToLog(msg: string): void {\r\n Debug.Assert(Events.WriteErrorToLogEvent !== null);\r\n Events.WriteErrorToLogEvent(msg);\r\n }\r\n\r\n static WriteExceptionToLog(msg: string): void;\r\n static WriteExceptionToLog(ex: Exception): void;\r\n static WriteExceptionToLog(msgOrEx: any): void {\r\n if (arguments.length === 1 && (msgOrEx === null || msgOrEx.constructor === String)) {\r\n Events.WriteExceptionToLog_0(msgOrEx);\r\n return;\r\n }\r\n Events.WriteExceptionToLog_1(msgOrEx);\r\n }\r\n\r\n private static WriteExceptionToLog_0(msg: string): void {\r\n Debug.Assert(Events.WriteErrorToLogEvent !== null);\r\n Events.WriteErrorToLogEvent(msg);\r\n }\r\n\r\n private static WriteExceptionToLog_1(ex: Exception): void {\r\n Events.WriteExceptionToLog(NString.Format(\"{0} : {1}{2}{3}{4}\", [\r\n ex.GetType(), OSEnvironment.EolSeq, ex.StackTrace, OSEnvironment.EolSeq, ex.Message\r\n ]));\r\n }\r\n\r\n /// <summary>write a warning message to the internal log file</summary>\r\n /// <param name=\"msg\"></param>\r\n static WriteWarningToLog(msg: string): void;\r\n static WriteWarningToLog(ex: Exception): void;\r\n static WriteWarningToLog(msgOrEx: any): void {\r\n if (arguments.length === 1 && (msgOrEx === null || msgOrEx.constructor === String)) {\r\n Events.WriteWarningToLog_0(msgOrEx);\r\n return;\r\n }\r\n Events.WriteWarningToLog_1(msgOrEx);\r\n }\r\n\r\n private static WriteWarningToLog_0(msg: string): void {\r\n Debug.Assert(Events.WriteWarningToLogEvent !== null);\r\n Events.WriteWarningToLogEvent(msg);\r\n }\r\n\r\n private static WriteWarningToLog_1(ex: Exception): void {\r\n Events.WriteWarningToLog(ex.GetType() + \" : \" + OSEnvironment.EolSeq + ex.StackTrace + OSEnvironment.EolSeq + ex.Message);\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"logLevel\"></param>\r\n /// <returns></returns>\r\n static ShouldLog(logLevel: Logger_LogLevels): boolean {\r\n Debug.Assert(Events.ShouldLogEvent !== null);\r\n return Events.ShouldLogEvent(logLevel);\r\n }\r\n\r\n /// <summary>write a GUI message to the internal log file</summary>\r\n /// <param name=\"msg\"></param>\r\n static WriteGuiToLog(msg: string): void {\r\n Debug.Assert(Events.WriteGuiToLogEvent !== null);\r\n Events.WriteGuiToLogEvent(\"GUI: \" + msg);\r\n }\r\n\r\n /// <summary>write a DEV message to the internal log file</summary>\r\n /// <param name=\"msg\"></param>\r\n static WriteDevToLog(msg: string): void {\r\n Debug.Assert(Events.WriteDevToLogEvent !== null);\r\n Events.WriteDevToLogEvent(msg);\r\n }\r\n\r\n /// <summary>\r\n /// Called when WM_CLEAR message is received\r\n /// </summary>\r\n /// <param name=\"ctrl\"></param>\r\n static OnClear(ctrl: GuiMgControl): void {\r\n if (Events.ClearEvent !== null) {\r\n Events.ClearEvent(ctrl);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Called when WM_UNDO message is received\r\n /// </summary>\r\n /// <param name=\"ctrl\"></param>\r\n static OnUndo(ctrl: GuiMgControl): void {\r\n if (Events.UndoEvent !== null) {\r\n Events.UndoEvent(ctrl);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Should Enter be added as keyboard event ? This is important mostly in determining if a click event\r\n /// will be raised for a default button or not.\r\n /// Adding Enter as a keyboard event will not raise click on default button.\r\n /// </summary>\r\n /// <returns></returns>\r\n static AddEnterAsKeyEvent(): boolean {\r\n return Events.ShouldAddEnterAsKeyEvent !== null && Events.ShouldAddEnterAsKeyEvent();\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n static ShowSessionStatisticsForm(): void {\r\n if (Events.ShowSessionStatisticsEvent !== null) {\r\n Events.ShowSessionStatisticsEvent();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Called when WM_COPYDATA message is received\r\n /// </summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <param name=\"copyData\"></param>\r\n static OnCopyData(guiMgForm: GuiMgForm, copyData: number): void {\r\n if (Events.CopyDataEvent !== null) {\r\n Events.CopyDataEvent(guiMgForm, copyData);\r\n }\r\n }\r\n\r\n constructor() {\r\n }\r\n}\r\n","import {GuiCommand} from \"./gui/low/GuiCommand\";\r\nimport {GuiInteractive} from \"./gui/low/GuiInteractive\";\r\n\r\n\r\nexport declare type ExecuteCommandsCallback = (commands: GuiCommand[]) => void;\r\nexport declare type GetIntractiveCallback = (command: GuiInteractive) => string;\r\n\r\n// @dynamic\r\n export class UIBridge {\r\n\r\n // define callbacks\r\n getInteractiveCallback : GetIntractiveCallback = null;\r\n executeCommandsCallback: ExecuteCommandsCallback = null;\r\n\r\n private static instance: UIBridge;\r\n\r\n private constructor() {\r\n // do something construct...\r\n }\r\n\r\n static getInstance() {\r\n if (!UIBridge.instance) {\r\n UIBridge.instance = new UIBridge();\r\n // ... any one time initialization goes here ...\r\n }\r\n return UIBridge.instance;\r\n }\r\n\r\n\r\n public ExecuteInteractiveCommand(command:GuiInteractive): string {\r\n if (this.getInteractiveCallback != null)\r\n return this.getInteractiveCallback( command);\r\n return \"\";\r\n }\r\n\r\n public executeCommands(commands: GuiCommand[]): void {\r\n if (this.executeCommandsCallback != null && commands != null) {\r\n this.executeCommandsCallback(commands);\r\n\r\n }\r\n }\r\n\r\n\r\n public registerInteractiveCallback(getIntractiveCallback: GetIntractiveCallback): void {\r\n this.getInteractiveCallback = getIntractiveCallback;\r\n }\r\n\r\n public registerExecuteCommandsCallback(executeCommandsCallback: ExecuteCommandsCallback): void {\r\n this.executeCommandsCallback = executeCommandsCallback;\r\n }\r\n\r\n // used to save stub data\r\n public saveData(data: string): void {\r\n console.log(data);\r\n }\r\n }\r\n","/// <summary>\r\n/// <summary>\r\n/// Gui command queue\r\n/// </summary>\r\nimport {UIBridge} from \"../../UIBridge\";\r\nimport {GuiCommand} from \"./GuiCommand\";\r\n\r\nexport class GuiCommandQueue {\r\n private static _instance: GuiCommandQueue = null;\r\n\r\n private _commandsQueue: Array<GuiCommand> = null;\r\n private _executingGuiCommands: boolean = false;\r\n\r\n /// <summary>\r\n /// basis Constructor\r\n /// </summary>\r\n constructor() {\r\n this.init();\r\n }\r\n\r\n /// <summary>\r\n /// end inner class GuiCommand\r\n /// </summary>\r\n /// <summary>singleton</summary>\r\n /// <returns> reference to GuiCommandQueue object</returns>\r\n static getInstance(): GuiCommandQueue {\r\n if (GuiCommandQueue._instance === null)\r\n GuiCommandQueue._instance = new GuiCommandQueue();\r\n return GuiCommandQueue._instance;\r\n }\r\n\r\n /// <summary>Constructor</summary>\r\n init(): void {\r\n this._commandsQueue = new Array<GuiCommand>();\r\n }\r\n\r\n\r\n addCommand(guiCommand: GuiCommand): void {\r\n this.put(guiCommand);\r\n }\r\n\r\n /// <summary>\r\n /// Adds a command to the queue. If there are already enough commands in the queue then\r\n /// it will wait till the queue is emptied bu Gui thread.\r\n /// </summary>\r\n /// <param name=\"guiCommand\"></param>\r\n private put(guiCommand: GuiCommand): void {\r\n // const QUEUE_SIZE_THRESHOLD: number = 1200; // a threshold above which commands will not be inserted to the queue until the queue will be empty.\r\n // const MAX_SLEEP_DURATION: number = 4;// duration, in ms, between checking that the queue is empty.\r\n //\r\n // // If worker thread wants to add a command and there are too many commands in the queue pending\r\n // // to be processed by Gui thread then suspend current thread till the commands are over. If we keep\r\n // // on adding commands to the queue and Gui thread enters Run(), then sometimes (specially in cases of\r\n // // batch tasks) Gui thread remains in Run() for a long time and hence it is unable to process user\r\n // // interactions (as described in QCR#722145)\r\n // // Before entering the loop confirm that the command is NOT being added by Gui thread itself and Gui\r\n // // thread is already processing the commands. This is to ensure that the commands will be processed by\r\n // // Gui thread. If Gui thread is not processing commands, then it will never process it again as it is\r\n // // the worker thread that invokes Gui thread for processing commands\r\n // // Also, suspend worker thread from adding new commands to the queue till SHOW_FORM for modal window\r\n // // is processed. Problem occurs if SHOW_FORM is followed by few more commands and then a call to\r\n // // GuiInteractive that depends on the earlier commands. In such cases, GuiInteractive will not process\r\n // // commands between SHOW_FORM and interactive command because GuiThreadIsAvailableToProcessCommands\r\n // // was set to false before opening the dialog.\r\n // if (((this._commandsQueue.Size() > QUEUE_SIZE_THRESHOLD ) || this._modalShowFormCommandPresentInQueue)) {\r\n // let sleepDuration: number = MAX_SLEEP_DURATION;\r\n // do {\r\n // // get current size of the queue and wait for some time\r\n // const size: number = this._commandsQueue.Size();\r\n // //System.Threading.Thread.Sleep(sleepDuration);\r\n // const newSize: number = this._commandsQueue.Size();\r\n //\r\n // // while current thread was sleeping, gui thread should have processed some commands.\r\n // // get average duration required by gui thread for processing a command and estimate new duration for remaining commands.\r\n // if (size > newSize) {\r\n // let averageDurationPerCommand: number = sleepDuration / (size - newSize);\r\n // let newSleepDuration: number = <number>(newSize * averageDurationPerCommand);\r\n // if (newSleepDuration > 0)\r\n // sleepDuration = Math.min(MAX_SLEEP_DURATION, newSleepDuration);\r\n // }\r\n // }\r\n // while (this._commandsQueue.Size() > 0);\r\n this._commandsQueue.push(guiCommand);\r\n\r\n // if (guiCommand.CommandType === CommandType.REFRESH_TABLE && guiCommand.Bool3) {\r\n // let mgControl: MgControlBase = <MgControlBase>(guiCommand.obj);\r\n // mgControl.refreshTableCommandCount++;\r\n // }\r\n // else if (guiCommand.IsModalShowFormCommand())\r\n // this._modalShowFormCommandPresentInQueue = true;\r\n }\r\n\r\n /// <summary>\r\n /// execute all pending commands, asynchronously\r\n /// </summary>\r\n beginInvoke(): void {\r\n this.invoke();\r\n\r\n }\r\n\r\n /// <summary>\r\n /// execute all pending commands, synchronously\r\n /// </summary>\r\n invoke(): void {\r\n if (!this._executingGuiCommands) {\r\n this._executingGuiCommands = true;\r\n UIBridge.getInstance().executeCommands(this._commandsQueue);\r\n this._commandsQueue.length = 0;\r\n this._executingGuiCommands = false;\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n","import {GuiMgControl} from '../GuiMgControl';\r\nimport {MgValue} from '../MgValue';\r\nimport {GuiMgForm} from '../GuiMgForm';\r\nimport {Events} from '../../Events';\r\nimport {UIBridge} from '../../UIBridge';\r\nimport {ControlBase} from '../ControlBase';\r\nimport {GuiCommandQueue} from './GuiCommandQueue';\r\n\r\nexport enum InteractiveCommandType {\r\n GET_VALUE,\r\n GET_TOP_INDEX,\r\n MESSAGE_BOX,\r\n SET_TITLE,\r\n SET_EDIT_TEXT,\r\n INSERT_EDIT_TEXT,\r\n GET_CARET_POS,\r\n REFRESH_PAGE,\r\n GET_ROWS_IN_PAGE,\r\n SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA,\r\n GET_IS_ROW_EDITING,\r\n GET_MAX_ROWS_IN_PAGINATED_TABLE,\r\n CALL_JS,\r\n GET_LAST_ROUTE,\r\n OPEN_FORM\r\n}\r\n\r\n/// <summary> GuiUtils class provides methods for retrieving information from the GUI layer</summary>\r\nexport abstract class GuiInteractiveBase {\r\n _commandType: InteractiveCommandType = 0;\r\n TaskTag: string = null;\r\n controlName: string = null;\r\n\r\n _str: string = String.fromCharCode(0);\r\n _intVal1: number = 0;\r\n _line: number = 0;\r\n _obj1: any = null;\r\n _parameters: any[] = null;\r\n _boolVal: boolean = false;\r\n _obj2: any = null;\r\n _mgValue: MgValue = null;\r\n arguments : Array<any> ;\r\n resultString : string = String.fromCharCode(0);\r\n\r\n /// <summary>\r\n /// Constructor : sets the contextID for the current command.\r\n /// </summary>\r\n constructor() {\r\n }\r\n\r\n /// <summary>\r\n /// This methode is set TRUE\\FALSE that GuiUtiles\\GetValue() method will be use\r\n /// this falg say if to return the : (true) suggested value or (false)the real value\r\n /// this method is use for MG_ACT_CTRL_MODIFY\r\n /// </summary>\r\n /// <param name=\"ctrl\"></param>\r\n /// <param name=\"retSuggestedValue\"></param>\r\n setGetSuggestedValueOfChoiceControlOnTagData(ctrl: GuiMgControl, line: number, retSuggestedValue: boolean): void {\r\n this._commandType = InteractiveCommandType.SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA;\r\n this._obj2 = ctrl;\r\n this._line = line;\r\n this._boolVal = retSuggestedValue;\r\n this.Invoke();\r\n }\r\n\r\n\r\n /// <summary> Get value of the control</summary>\r\n /// <param name=\"object\">a reference to the relevant object</param>\r\n /// <param name=\"rect\">a reference to the object that on return will contain the requested values on string</param>\r\n getValue(obj: any, line: number, isThreeStateCheckBox: boolean): string {\r\n this._commandType = InteractiveCommandType.GET_VALUE;\r\n this._obj2 = obj;\r\n this._boolVal = isThreeStateCheckBox;\r\n this._line = line;\r\n this._mgValue = new MgValue();\r\n this.Invoke();\r\n return this._mgValue.obj;\r\n }\r\n\r\n\r\n getTopIndex(tablecontrol: GuiMgControl): number {\r\n this._commandType = InteractiveCommandType.GET_TOP_INDEX;\r\n this._obj2 = tablecontrol;\r\n this.Invoke();\r\n return this._intVal1;\r\n }\r\n\r\n getIsRowEditing(tablecontrol: GuiMgControl, line: number, isLineMode: boolean): boolean {\r\n this._commandType = InteractiveCommandType.GET_IS_ROW_EDITING;\r\n this._obj2 = tablecontrol;\r\n this._intVal1 = line;\r\n this._boolVal = isLineMode;\r\n\r\n this.Invoke();\r\n return this._boolVal;\r\n }\r\n\r\n /// <summary>Open message box with parent form</summary>\r\n /// <param name=\"title\"></param>\r\n /// <param name=\"msg\"></param>\r\n /// <param name=\"style\">the style of the message box can be flags of Styles.MSGBOX_xxx </param>\r\n /// <returns> message box style from Styles.MSGBOX_XXX</returns>\r\n messageBox(title: string, msg: string, style: number): number {\r\n this._commandType = InteractiveCommandType.MESSAGE_BOX;\r\n this._mgValue = new MgValue();\r\n this._mgValue.title = title;\r\n this._mgValue.str = ((msg === null) ? '' : msg);\r\n this._mgValue.style = style;\r\n Events.RefreshTables();\r\n this.Invoke();\r\n return this._mgValue.number;\r\n }\r\n\r\n /// <summary>set title to browser</summary>\r\n /// <param name=\"topMostForm\">the parent form of the message box</param>\r\n /// <param name=\"title\"></param>\r\n /// <returns> message box style from Styles.MSGBOX_XXX</returns>\r\n setTitle(topMostForm: GuiMgForm, title: string): void {\r\n this._commandType = InteractiveCommandType.SET_TITLE;\r\n this._mgValue = new MgValue();\r\n this._obj2 = topMostForm;\r\n this._mgValue.title = ((title === null) ? '' : title);\r\n this.Invoke();\r\n }\r\n\r\n /// <summary> set the text to the the control\r\n ///\r\n /// </summary>\r\n /// <param name=\"control\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"text\"></param>\r\n setEditText(control: GuiMgControl, line: number, text: string): boolean {\r\n this._commandType = InteractiveCommandType.SET_EDIT_TEXT;\r\n this._obj2 = control;\r\n this._line = line;\r\n this._mgValue = new MgValue();\r\n this._mgValue.str = text;\r\n\r\n this.Invoke();\r\n\r\n return this._mgValue.boolVal;\r\n }\r\n\r\n /// <summary> insert the text to the the control at the given position\r\n ///\r\n /// </summary>\r\n /// <param name=\"control\"></param>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"text\"></param>\r\n insertEditText(control: GuiMgControl, line: number, startPosition: number, textToInsert: string): boolean {\r\n this._commandType = InteractiveCommandType.INSERT_EDIT_TEXT;\r\n this._obj2 = control;\r\n this._line = line;\r\n this._mgValue = new MgValue();\r\n this._mgValue.str = textToInsert;\r\n this._intVal1 = startPosition;\r\n\r\n this.Invoke();\r\n\r\n return this._mgValue.boolVal;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// get the position of the caret on the control\r\n /// </summary>\r\n /// <param name=\"control\"></param>\r\n /// <param name=\"line\"></param>\r\n caretPosGet(control: GuiMgControl, line: number): number {\r\n this._commandType = InteractiveCommandType.GET_CARET_POS;\r\n this._obj2 = control;\r\n this._line = line;\r\n\r\n this._mgValue = new MgValue();\r\n this.Invoke();\r\n\r\n return this._mgValue.number;\r\n }\r\n\r\n /// <summary>\r\n /// refresh page\r\n /// </summary>\r\n RefreshPage(navigateToRootRoute: boolean, initialUrl: string) {\r\n this._commandType = InteractiveCommandType.REFRESH_PAGE;\r\n this._boolVal = navigateToRootRoute;\r\n this._obj1 = initialUrl;\r\n this.Invoke();\r\n return;\r\n }\r\n\r\n\r\n\r\n /// <summary> return number of rows in the table</summary>\r\n /// <param name=\"control\"></param>\r\n /// <returns></returns>\r\n getRowsInPage(control: GuiMgControl): number {\r\n this._commandType = InteractiveCommandType.GET_ROWS_IN_PAGE;\r\n this._obj2 = control;\r\n this.Invoke();\r\n return this._intVal1;\r\n }\r\n\r\n /// <summary> return number of rows in the table</summary>\r\n /// <param name=\"control\"></param>\r\n /// <returns></returns>\r\n getMaxRowsInPaginatedTable(control: GuiMgControl): number {\r\n this._commandType = InteractiveCommandType.GET_MAX_ROWS_IN_PAGINATED_TABLE;\r\n this._obj2 = control;\r\n this.Invoke();\r\n return this._intVal1;\r\n }\r\n\r\n /// <summary>\r\n /// Get the last route\r\n /// </summary>\r\n getLastRoute(): string {\r\n this._commandType = InteractiveCommandType.GET_LAST_ROUTE;\r\n this.Invoke();\r\n return this.resultString;\r\n }\r\n\r\n\r\n\r\n ExecuteCallJS(form , formName: string, functionName: string, args: Array<any>): string {\r\n this._commandType = InteractiveCommandType.CALL_JS;\r\n this._obj2 = form;\r\n this.controlName = formName;\r\n this._str = functionName;\r\n this.arguments = args;\r\n this.Invoke();\r\n return this.resultString;\r\n }\r\n\r\n ExecuteOpenOverlayForm(obj: Object, formName: string, handlerTaskTag: string, calledTaskTag: string,\r\n inputControls: string, isDialog: boolean): void {\r\n //taskTag should be 0 as its hosted by root-component\r\n this._commandType = InteractiveCommandType.OPEN_FORM;\r\n this.controlName = formName;\r\n this._str = handlerTaskTag;\r\n this._mgValue = new MgValue();\r\n this._mgValue.str = calledTaskTag;\r\n this._mgValue.path = inputControls;\r\n this._boolVal = isDialog;\r\n this.Invoke();\r\n }\r\n\r\n /// <summary> Calls Run() synchronously to execute the command.\r\n /// But before that, it executes the GuiCommandQueue.\r\n /// </summary>\r\n private Invoke(): void {\r\n GuiCommandQueue.getInstance().invoke();\r\n if (this._obj2 instanceof ControlBase) {\r\n let controlBase: ControlBase = <ControlBase>this._obj2;\r\n this.TaskTag = controlBase.TaskTag;\r\n this.controlName = controlBase.UniqueName;\r\n } else if (this._obj2 instanceof GuiMgForm) {\r\n let guiMgForm: GuiMgForm = <GuiMgForm>this._obj2;\r\n this.TaskTag = guiMgForm.TaskTag;\r\n } else\r\n this.TaskTag = '0'; // general command\r\n\r\n UIBridge.getInstance().ExecuteInteractiveCommand(this);\r\n }\r\n\r\n /// <summary> implements the Runnable run method for calling Display.syncExec()</summary>\r\n // Run(): void {\r\n // // Sets the currentContextID\r\n // let contextIDGuard = new ContextIDGuard(this._contextID);\r\n // try {\r\n // switch (this._commandType) {\r\n // case InteractiveCommandType.GET_FONT_METRICS:\r\n // this.onGetFontMetrics();\r\n // break;\r\n // case InteractiveCommandType.GET_RESOLUTION:\r\n // this.onGetResolution();\r\n // break;\r\n // case InteractiveCommandType.GET_BOUNDS:\r\n // this.onBounds();\r\n // break;\r\n // case InteractiveCommandType.GET_VALUE:\r\n // this.onValue();\r\n // break;\r\n // case InteractiveCommandType.SET_BROWSER_TEXT:\r\n // this.onSetBrowserText();\r\n // break;\r\n // case InteractiveCommandType.GET_BROWSER_TEXT:\r\n // this.onGetBrowserText();\r\n // break;\r\n // case InteractiveCommandType.BROWSER_EXECUTE:\r\n // this.onBrowserExecute();\r\n // break;\r\n // case InteractiveCommandType.GET_TOP_INDEX:\r\n // this.onGetTopIndex();\r\n // break;\r\n // case InteractiveCommandType.MESSAGE_BOX:\r\n // this.onMessageBox();\r\n // break;\r\n // case InteractiveCommandType.DIRECTORY_DIALOG_BOX:\r\n // this.onDirectoryDialogBox();\r\n // break;\r\n // case InteractiveCommandType.GET_CLIENT_BOUNDS:\r\n // this.getClientBounds();\r\n // break;\r\n // case InteractiveCommandType.SET_EDIT_TEXT:\r\n // this.onSetEditText();\r\n // break;\r\n // case InteractiveCommandType.INSERT_EDIT_TEXT:\r\n // this.onInsertEditText();\r\n // break;\r\n // case InteractiveCommandType.SET_SELECTION:\r\n // this.onSetSelection();\r\n // break;\r\n // case InteractiveCommandType.GET_SELECTION:\r\n // this.onSelectionGet();\r\n // break;\r\n // case InteractiveCommandType.GET_CARET_POS:\r\n // this.onCaretPosGet();\r\n // break;\r\n // case InteractiveCommandType.GET_IS_TOP_OF_TEXTBOX:\r\n // this.onGetIsTopOfTextBox();\r\n // break;\r\n // case InteractiveCommandType.GET_IS_END_OF_TEXTBOX:\r\n // this.onGetIsEndOfTextBox();\r\n // break;\r\n // case InteractiveCommandType.CLIPBOARD_GET_CONTENT:\r\n // this.onClipboardRead();\r\n // break;\r\n // case InteractiveCommandType.CLIPBOARD_SET_CONTENT:\r\n // this.onClipboardWrite();\r\n // break;\r\n // case InteractiveCommandType.CLIPBOARD_PASTE:\r\n // this.onClipboardPaste();\r\n // break;\r\n // case InteractiveCommandType.POST_KEY_EVENT:\r\n // this.onPostKeyEvent();\r\n // break;\r\n // case InteractiveCommandType.POST_CHAR_EVENT:\r\n // this.onPostCharEvent();\r\n // break;\r\n // case InteractiveCommandType.SET_CURSOR:\r\n // this.onSetCursor();\r\n // break;\r\n // case InteractiveCommandType.DISPOSE_ALL_FORMS:\r\n // this.onDisposeAllForms();\r\n // break;\r\n // case InteractiveCommandType.GET_ROWS_IN_PAGE:\r\n // this.onGetRowsInPage();\r\n // break;\r\n // case InteractiveCommandType.GET_HIDDEN_ROWS_COUNT_IN_TABLE:\r\n // this.onGetHiddenRowsCountInTable();\r\n // break;\r\n // case InteractiveCommandType.FILE_OPEN_DIALOG_BOX:\r\n // this.onFileOpenDialogBox();\r\n // break;\r\n // case InteractiveCommandType.FILE_SAVE_DIALOG_BOX:\r\n // this.onFileSaveDialogBox();\r\n // break;\r\n // case InteractiveCommandType.CREATE_DIALOG:\r\n // this.onCreateDialog();\r\n // break;\r\n // case InteractiveCommandType.OPEN_DIALOG:\r\n // this.onOpenDialog();\r\n // break;\r\n // case InteractiveCommandType.CLOSE_DIALOG:\r\n // this.onCloseDialog();\r\n // break;\r\n // case InteractiveCommandType.SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA:\r\n // this.OnSetGetSuggestedValueOfChoiceControlOnTagData();\r\n // break;\r\n // case InteractiveCommandType.GET_LAST_WINDOW_STATE:\r\n // this.onGetLastWindowState();\r\n // break;\r\n // case InteractiveCommandType.GET_FRAMES_BOUNDS:\r\n // this.onGetFramesBounds();\r\n // break;\r\n // case InteractiveCommandType.GET_LINKED_PARENT_IDX:\r\n // this.onGetLinkedParentIdx();\r\n // break;\r\n // case InteractiveCommandType.GET_FORM_BOUNDS:\r\n // this.onGetFormBounds();\r\n // break;\r\n // case InteractiveCommandType.GET_COLUMNS_STATE:\r\n // this.onGetColumnsState();\r\n // break;\r\n // case InteractiveCommandType.GET_FORM_HANDLE:\r\n // this.onGetFormHandle();\r\n // break;\r\n // case InteractiveCommandType.GET_CTRL_HANDLE:\r\n // this.onGetCtrlHandle();\r\n // break;\r\n // case InteractiveCommandType.IS_FORM_ACTIVE:\r\n // this.isFormActive();\r\n // break;\r\n // case InteractiveCommandType.GET_DROPPED_DATA:\r\n // this.onGetDroppedData();\r\n // break;\r\n // case InteractiveCommandType.GET_DROPPED_POINT:\r\n // this.onGetDroppedPoint();\r\n // break;\r\n // case InteractiveCommandType.GET_DROPPED_SELECTION:\r\n // this.onGetDroppedSelection();\r\n // break;\r\n // case InteractiveCommandType.DROP_FORMAT_SUPPORTED:\r\n // this.onCheckDropFormatPresent();\r\n // break;\r\n // case InteractiveCommandType.GET_IS_BEGIN_DRAG:\r\n // this.onGetIsBeginDrag();\r\n // break;\r\n // case InteractiveCommandType.ACTIVATE_NEXT_OR_PREVIOUS_MDI_CHILD:\r\n // this.OnActivateNextOrPreviousMDIChild();\r\n // break;\r\n // case InteractiveCommandType.SEND_IME_MSG:\r\n // this.onSendImeMsg();\r\n // break;\r\n // case InteractiveCommandType.CAN_FOCUS:\r\n // this.onCanFocus();\r\n // break;\r\n // case InteractiveCommandType.GET_SELECTED_INDICE:\r\n // this.OnGetSelectedIndice();\r\n // break;\r\n // case InteractiveCommandType.SET_SUGGESTED_VALUE:\r\n // this.onSetSuggestedValue();\r\n // break;\r\n // case InteractiveCommandType.MAP_WIDGET_TO_GUI_OBJECT:\r\n // this.MapWidget();\r\n // break;\r\n // case InteractiveCommandType.REMOVE_DN_CONTROL_VALUE_CHANGED_HANDLER:\r\n // this.OnRemoveDNControlValueChangedHandler();\r\n // break;\r\n // case InteractiveCommandType.ADD_DN_CONTROL_VALUE_CHANGED_HANDLER:\r\n // this.OnAddDNControlValueChangedHandler();\r\n // break;\r\n // case InteractiveCommandType.GET_RTF_VALUE_BEFORE_ENTERING_CONTROL:\r\n // this.OnGetRtfValueBeforeEnteringControl();\r\n // break;\r\n // case InteractiveCommandType.GET_MDI_CHILD_COUNT:\r\n // this.OnGetMDIChildCount();\r\n // break;\r\n // case InteractiveCommandType.ACTIVATE_FORM:\r\n // this.OnActivateForm();\r\n // break;\r\n // case InteractiveCommandType.ENABLE_MENU_ENTRY:\r\n // this.OnEnableMenuEntry();\r\n // break;\r\n // case InteractiveCommandType.SHOW_CONTEXT_MENU:\r\n // this.OnShowContextMenu();\r\n // break;\r\n // case InteractiveCommandType.IS_COMBO_DROPPED_DOWN:\r\n // this.OnIsComboDroppedDowndState();\r\n // break;\r\n // case InteractiveCommandType.INVOKE_UDPCOMMAND:\r\n // this.onInvokeUDP();\r\n // break;\r\n // case InteractiveCommandType.GET_HASINDENT:\r\n // this.OnGetHasIndent();\r\n // break;\r\n // }\r\n // }\r\n // catch (ex) {\r\n // if (ex instanceof Exception) {\r\n // Events.WriteExceptionToLog(ex);\r\n // throw ex;\r\n // }\r\n // else\r\n // throw ex; // Reset the current contextID.\r\n // }\r\n // finally {\r\n // contextIDGuard.Dispose();\r\n // }\r\n // }\r\n\r\n\r\n\r\n /// <summary> get number of rows in the table\r\n /// </summary>\r\n onGetRowsInPage(): void {\r\n }\r\n\r\n}\r\n\r\nexport class GuiInteractive extends GuiInteractiveBase {\r\n\r\n}\r\n","\r\nimport {CtrlButtonTypeGui, MgControlType} from \"@magic-xpa/utils\";\r\nimport {Debug, Int32} from \"@magic-xpa/mscorelib\";\r\nimport {GuiMgForm} from \"./GuiMgForm\";\r\nimport {ControlBase} from \"./ControlBase\";\r\n\r\n\r\nexport abstract class GuiMgControl extends ControlBase {\r\n private _type: MgControlType = MgControlType.CTRL_TYPE_NONE;\r\n\r\n\r\n public ConnectedControl: GuiMgControl;\r\n\r\n set Type(value: MgControlType) {\r\n if (this._type === MgControlType.CTRL_TYPE_NONE) {\r\n this._type = value;\r\n }\r\n else {\r\n Debug.Assert(false);\r\n }\r\n }\r\n\r\n\r\n get Type(): MgControlType {\r\n return this._type;\r\n }\r\n\r\n ButtonStyle: CtrlButtonTypeGui = CtrlButtonTypeGui.None;\r\n IsRepeatable: boolean = false;\r\n\r\n get IsTableChild(): boolean {\r\n let parent: GuiMgControl = ((this.getParent() instanceof GuiMgControl) ? <GuiMgControl>this.getParent() : null);\r\n let parentIsTable: boolean = parent !== null && parent.isTableControl();\r\n return parentIsTable && !this.isColumnControl();\r\n }\r\n\r\n\r\n get IsTableHeaderChild(): boolean {\r\n return !this.IsRepeatable && this.IsTableChild;\r\n }\r\n\r\n Layer: number = 0;\r\n\r\n Name: string = null;\r\n GuiMgForm: GuiMgForm = null;\r\n\r\n\r\n /// <summary>\r\n /// get the name of the Control with the line number for repeatable controls\r\n /// </summary>\r\n getName(line: number): string {\r\n let result: string;\r\n if (this.IsRepeatable) {\r\n if (line > Int32.MinValue) {\r\n result = this.Name + \"_\" + line;\r\n }\r\n else {\r\n // else there is no current row, yet (parsing time for example). Try first row.\r\n result = this.Name + \"_0\";\r\n }\r\n }\r\n else {\r\n result = this.Name;\r\n }\r\n return result;\r\n }\r\n\r\n abstract getParent(): any;\r\n\r\n abstract get TaskTag(): string;\r\n\r\n get UniqueName(): string {\r\n return this.Name;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// returns true if this control is a static control\r\n /// </summary>\r\n isStatic(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_LABEL || this._type === MgControlType.CTRL_TYPE_GROUP || this._type === MgControlType.CTRL_TYPE_TABLE ||\r\n this._type === MgControlType.CTRL_TYPE_COLUMN || this._type === MgControlType.CTRL_TYPE_STATUS_BAR || this._type === MgControlType.CTRL_TYPE_SB_IMAGE ||\r\n this._type === MgControlType.CTRL_TYPE_SB_LABEL || this._type === MgControlType.CTRL_TYPE_LINE;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// return true for table control\r\n /// </summary>\r\n /// <returns>\r\n /// </returns>\r\n isTableControl(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_TABLE;\r\n }\r\n\r\n /// <summary>\r\n /// return true for tab control\r\n /// </summary>\r\n /// <returns>\r\n /// </returns>\r\n isTabControl(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_TAB;\r\n }\r\n\r\n\r\n\r\n /// <summary>\r\n /// return text control\r\n /// </summary>\r\n /// <returns>\r\n /// </returns>\r\n isTextControl(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_TEXT;\r\n }\r\n\r\n /// <summary>\r\n /// return true for image control\r\n /// </summary>\r\n /// <returns></returns>\r\n isImageControl(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_IMAGE;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this control is a sub form control\r\n /// </summary>\r\n isSubform(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_SUBFORM;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this control is a sub form control\r\n /// </summary>\r\n isRadio(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_RADIO;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this control is a ComboBox control\r\n /// </summary>\r\n isComboBox(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_COMBO;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this control is a ListBox control\r\n /// </summary>\r\n isListBox(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_LIST;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this control is a isButton control\r\n /// </summary>\r\n isButton(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_BUTTON;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this control is a label control\r\n /// </summary>\r\n isLabel(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_LABEL;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this control is a Group control\r\n /// </summary>\r\n isGroup(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_GROUP;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if the control is either combo or list\r\n /// </summary>\r\n /// <returns>\r\n /// </returns>\r\n isSelectionCtrl(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_COMBO || this._type === MgControlType.CTRL_TYPE_LIST;\r\n }\r\n\r\n\r\n\r\n isCheckBox(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_CHECKBOX;\r\n }\r\n\r\n isColumnControl(): boolean {\r\n return this._type === MgControlType.CTRL_TYPE_COLUMN;\r\n }\r\n\r\n /// <summary>\r\n /// Returns true if the control is a choice control: CTRL_TYPE_TAB, CTRL_TYPE_COMBO, CTRL_TYPE_LIST,\r\n /// CTRL_TYPE_RADIO\r\n /// </summary>\r\n /// <returns></returns>\r\n isChoiceControl(): boolean {\r\n let val: boolean = false;\r\n switch (this._type) {\r\n case MgControlType.CTRL_TYPE_TAB:\r\n case MgControlType.CTRL_TYPE_COMBO:\r\n case MgControlType.CTRL_TYPE_LIST:\r\n case MgControlType.CTRL_TYPE_RADIO:\r\n val = true;\r\n break;\r\n }\r\n return val;\r\n }\r\n\r\n\r\n\r\n /// <summary>\r\n /// return TRUE if the control is button and his style is text on image\r\n /// </summary>\r\n /// <returns></returns>\r\n IsImageButton(): boolean {\r\n let result: boolean = false;\r\n if (this.isButton()) {\r\n result = (this.ButtonStyle === CtrlButtonTypeGui.Image);\r\n }\r\n return result;\r\n }\r\n\r\n\r\n\r\n /// <summary>\r\n /// return TRUE if the control is button and his style is Hyper Text\r\n /// </summary>\r\n /// <returns></returns>\r\n IsHyperTextButton(): boolean {\r\n let result: boolean = false;\r\n if (this.isButton()) {\r\n result = (this.ButtonStyle === CtrlButtonTypeGui.Hypertext);\r\n }\r\n return result;\r\n }\r\n\r\n}\r\n\r\n","export enum DateElement {\r\n YEAR = 'Y',\r\n MONTH = 'M',\r\n DAY = 'D',\r\n DOW = 'W'\r\n}\r\n\r\nexport enum MenuEntryProgram_SrcContext {\r\n Main = 'M',\r\n Current = 'C'\r\n}\r\n\r\nexport enum EditReturnCode {\r\n EDIT_CONTINUE,\r\n EDIT_AUTOSKIP,\r\n EDIT_RESTART\r\n}\r\n\r\nexport enum GuiExpressionEvaluator_ControlsPersistencyClearOption {\r\n All = 1,\r\n CurrentForm\r\n}\r\n\r\nexport enum DataModificationTypes {\r\n Update = 'u',\r\n Insert = 'i',\r\n Delete = 'd',\r\n None = ' '\r\n}\r\n\r\nexport enum MgCheckState {\r\n UNCHECKED = 1,\r\n CHECKED,\r\n INDETERMINATE\r\n}\r\n\r\nexport enum MarkMode {\r\n MARK_ALL_TEXT = 1,\r\n UNMARK_ALL_TEXT,\r\n MARK_SELECTION_TEXT\r\n}\r\n\r\nexport enum MgCursors {\r\n ARROW = 1,\r\n WAITCURSOR,\r\n HAND,\r\n APPSTARTING,\r\n CROSS,\r\n HELP,\r\n IBEAM,\r\n NO,\r\n SIZEALL,\r\n SIZENESW,\r\n SIZENS,\r\n SIZENWSE,\r\n SIZEWE,\r\n UPARROW\r\n}\r\n\r\n/// <summary> modifier keys</summary>\r\nexport enum Modifiers {\r\n MODIFIER_ALT = 'A',\r\n MODIFIER_CTRL = 'C',\r\n MODIFIER_SHIFT = 'S',\r\n MODIFIER_NONE = ' ',\r\n MODIFIER_SHIFT_CTRL = 'X',\r\n MODIFIER_ALT_CTRL = 'Y',\r\n MODIFIER_ALT_SHIFT = 'Z'\r\n}\r\n\r\nexport enum CommandType {\r\n OPEN_FORM,\r\n CREATE_FORM,\r\n INITIAL_FORM_LAYOUT,\r\n SHOW_FORM,\r\n CREATE_LABEL,\r\n CREATE_EDIT,\r\n CREATE_BUTTON,\r\n CREATE_COMBO_BOX,\r\n CREATE_LIST_BOX,\r\n CREATE_RADIO_CONTAINER,\r\n CREATE_RADIO_BUTTON,\r\n CREATE_IMAGE,\r\n CREATE_CHECK_BOX,\r\n CREATE_TAB,\r\n CREATE_TABLE,\r\n CREATE_COLUMN,\r\n CREATE_SUB_FORM,\r\n CLOSE_SUB_FORM,\r\n CREATE_BROWSER,\r\n CREATE_GROUP,\r\n CREATE_RICH_EDIT,\r\n CREATE_RICH_TEXT,\r\n CREATE_LINE,\r\n DISPOSE_OBJECT,\r\n PROP_SET_CONTROL_NAME,\r\n PROP_SET_TEXT,\r\n PROP_SET_READ_ONLY,\r\n PROP_SET_TEXT_SIZE_LIMIT,\r\n PROP_SET_ITEMS_LIST,\r\n PROP_SET_IMAGE_FILE_NAME,\r\n PROP_SET_IMAGE_DATA,\r\n PROP_SET_IMAGE_LIST,\r\n\r\n PROP_SET_TOOLTIP,\r\n PROP_SET_VISIBLE,\r\n PROP_SET_ENABLE,\r\n PROP_SET_MENU_ENABLE,\r\n PROP_SET_VISIBLE_LINES,\r\n PROP_SET_RIGHT_TO_LEFT,\r\n PROP_SET_CHECKED,\r\n PROP_SET_SELECTION,\r\n PROP_SET_LAYOUT_NUM_COLUMN,\r\n PROP_SET_LINE_VISIBLE,\r\n PROP_SET_RESIZABLE,\r\n PROP_SET_ALLOW_REORDER,\r\n PROP_SET_SORTABLE_COLUMN,\r\n PROP_SET_COLUMN_PLACMENT,\r\n PROP_SET_ICON_FILE_NAME,\r\n SET_WINDOW_STATE,\r\n SET_COLUMN_ORG_WIDTH,\r\n SET_COLUMN_START_POS,\r\n SET_TABLE_ITEMS_COUNT,\r\n SET_TABLE_VIRTUAL_ITEMS_COUNT,\r\n SET_TABLE_VSCROLL_THUMB_POS,\r\n SET_TABLE_VSCROLL_PAGE_SIZE,\r\n SET_TABLE_INCLUDES_FIRST,\r\n SET_TABLE_INCLUDES_LAST,\r\n SET_TABLE_TOP_INDEX,\r\n SET_SELECTION_INDEX,\r\n INVALIDATE_TABLE,\r\n REFRESH_TABLE,\r\n REFRESH_TMP_EDITOR,\r\n UPDATE_TMP_EDITOR_INDEX,\r\n CREATE_TABLE_ROW,\r\n UNDO_CREATE_TABLE_ROW,\r\n SET_TABLE_ROW_VISIBILITY,\r\n VALIDATE_TABLE_ROW,\r\n INSERT_ROWS,\r\n REMOVE_ROWS,\r\n CLEAR_TABLE_COLUMNS_SORT_MARK,\r\n PROP_SET_URL,\r\n MOVE_ABOVE,\r\n SET_FOCUS,\r\n WRITE_TO_MESSAGE_BOX,\r\n CLOSE_FORM,\r\n REMOVE_SUBFORM_CONTROLS,\r\n START_TIMER,\r\n STOP_TIMER,\r\n BEEP,\r\n CREATE_TOOLBAR,\r\n DELETE_TOOLBAR,\r\n CREATE_TOOLBAR_ITEM,\r\n DELETE_TOOLBAR_ITEM,\r\n CREATE_STATUS_BAR,\r\n PROP_SET_SB_PANE_WIDTH,\r\n CREATE_SB_LABEL,\r\n CREATE_SB_IMAGE,\r\n SHOW_TMP_EDITOR,\r\n PROP_SET_TRANSLATOR,\r\n\r\n PROP_SET_PASSWORD_EDIT,\r\n PROP_SET_TITLE_BAR,\r\n PROP_SHOW_FULL_ROW,\r\n PROP_SHOW_BUTTONS,\r\n PROP_SHOW_LINES,\r\n PROP_SHOW_SCROLLBAR,\r\n SET_ENV_ACCESS_TEST,\r\n SET_ENV_TOOLTIP_TIMEOUT,\r\n SET_ENV_SPECIAL_TEXT_SIZE_FACTORING,\r\n SET_ENV_SPECIAL_FLAT_EDIT_ON_CLASSIC_THEME,\r\n PROP_SET_STARTUP_POSITION,\r\n PROP_SET_CHECK_BOX_CHECKED,\r\n COMBO_DROP_DOWN,\r\n SET_ACTIVETE_KEYBOARD_LAYOUT,\r\n SET_TAG_DATA_LINK_VISITED,\r\n ALLOW_UPDATE,\r\n SET_ALIGNMENT,\r\n BULLET,\r\n INDENT,\r\n UNINDENT,\r\n CHANGE_COLUMN_SORT_MARK,\r\n SET_CURRENT_CURSOR,\r\n REORDER_COLUMNS,\r\n RESTORE_COLUMNS,\r\n ACTIVATE_FORM,\r\n LOCK_WINDOW_UPDATE,\r\n ENABLE_XPTHEMES,\r\n TOGGLE_ALTERNATE_COLOR_FOR_FIRST_ROW,\r\n REGISTER_DN_CTRL_VALUE_CHANGED_EVENT,\r\n SET_TABLE_ORG_ROW_HEIGHT,\r\n SET_TOOLBAR,\r\n CREATE_ENTRY_IN_CONTROLS_MAP,\r\n REMOVE_ENTRY_FROM_CONTROLS_MAP,\r\n PROCESS_PRESS_EVENT,\r\n SET_MARKED_ITEM_STATE,\r\n ACCEPT_DVCONTROL_CHANGES,\r\n UPDATE_DVCONTROL_ROW,\r\n ADD_DVCONTROL_HANDLER,\r\n REMOVE_DVCONTROL_HANDLER,\r\n CREATE_ROW_IN_DVCONTROL,\r\n UPDATE_DVCONTROL_COLUMN,\r\n DELETE_DVCONTROL_ROW,\r\n SET_DVCONTROL_ROW_POSITION,\r\n REJECT_DVCONTROL_COLUMN_CHANGES,\r\n SET_DESIGNER_VALUES,\r\n PROP_SET_EDIT_HINT,\r\n PROP_SET_MULTI_COLUMN_DISPLAY,\r\n SET_ENV_LAMGUAGE,\r\n SET_LAST_IN_CONTEXT,\r\n SET_CARET,\r\n SET_RECORDS_BEFORE_CURRENT_VIEW,\r\n SET_VALUE,\r\n SET_ATTRIBUTE,\r\n SET_PROPERTY,\r\n SET_CLASS,\r\n SET_STYLE,\r\n REFRESH_TASK,\r\n PROP_SET_USER_PROPERTY,\r\n PROP_SET_CUSTOM_VALIDATOR,\r\n SET_IS_ROW_EDITING,\r\n SET_NOT_IS_ROW_EDITING,\r\n SET_EMPTY_DATAVIEW,\r\n SET_IS_LOGGED_IN,\r\n RELOAD_PAGE,\r\n EXIT_MAGIC,\r\n CALL_JS,\r\n PROP_SET_BINDING_LEVEL,\r\n SHOW_SPINNER,\r\n SHOW_HTML_ERROR,\r\n SET_WC_IDLE,\r\n SET_CHUNK_SIZE,\r\n}\r\n\r\nexport enum HtmlProperties {\r\n Visible = \"visible\",\r\n Enabled = \"enabled\",\r\n Text = \"text\",\r\n ItemsList =\"itemslist\",\r\n Image = \"image\",\r\n Tooltip = \"tooltip\",\r\n SelectedValue = \"selectedvalue\",\r\n ShowBorder=\"showborder\",\r\n PlaceHolder=\"placeholder\",\r\n Password=\"password\",\r\n TabIndex=\"tabindex\",\r\n SelectedRow=\"selectedRow\",\r\n ReadOnly=\"readOnly\",\r\n MustInput=\"mustInput\",\r\n SelectedLayer=\"SelectedLayer\",\r\n BindingLevel = \"bindingLevel\",\r\n ZoomButtonTooltip =\"ZoomButtonTooltip\",\r\n CheckBoxIndeterminate = \"CheckBoxIndeterminate\"\r\n}\r\n\r\nexport enum MenuStyle {\r\n MENU_STYLE_PULLDOWN = 1,\r\n MENU_STYLE_CONTEXT,\r\n MENU_STYLE_TOOLBAR\r\n}\r\n\r\nexport enum DockingStyle {\r\n NONE,\r\n BOTTOM,\r\n FILL,\r\n LEFT,\r\n RIGHT,\r\n TOP\r\n}\r\n\r\nexport enum RaisedBy {\r\n USER_ACTION,\r\n CLOSE_SYSTEM_MENU,\r\n CTRL_GOTO,\r\n MOUSE_WHEEL,\r\n INTERNAL,\r\n KBPUT\r\n}\r\n\r\nexport enum TraverseMode {\r\n NONE = 1,\r\n WITHIN_CONTROL,\r\n BETWEEN_CONTROLS\r\n}\r\n\r\nexport enum ClipFormats {\r\n FORMAT_USER,\r\n FORMAT_TEXT,\r\n FORMAT_OEM_TEXT,\r\n FORMAT_RICH_TEXT,\r\n FORMAT_HTML_TEXT,\r\n FORMAT_HYPERLINK_TEXT,\r\n FORMAT_DROP_FILES,\r\n FORMAT_UNICODE_TEXT,\r\n FORMAT_UNKNOWN = 'c'\r\n}\r\n\r\n/**\r\n * @ignore\r\n */\r\nexport enum OverlayType\r\n{\r\n Overlay = 0,\r\n Alert,\r\n ConfirmationBox\r\n}\r\n","import {CommandType} from \"../../GuiEnums\";\r\nimport {ControlBase} from \"../ControlBase\";\r\nimport {List} from \"@magic-xpa/mscorelib\";\r\n\r\nexport class GuiCommand {\r\n TaskTag: string = null;\r\n Operation: string;\r\n CommandType: CommandType = 0;\r\n options: any = null;\r\n Bool1: boolean = false;\r\n params: List<any> = null;\r\n fileName: string = null;\r\n height: number = 0;\r\n layer: number = 0;\r\n line: number = 0;\r\n number: number = 0;\r\n obj: any = null;\r\n parentObject: any = null;\r\n obj1: any = null;\r\n str: string = null;\r\n value: any = null;\r\n stringList: List<string> = null;\r\n style: number = 0;\r\n width: number = 0;\r\n x: number = 0;\r\n y: number = 0;\r\n userDropFormat: string = null;\r\n contextID: string = '\\0';\r\n\r\n\r\n public CtrlName: string;\r\n\r\n constructor(commandType: CommandType);\r\n constructor(commandType: CommandType, str: string);\r\n constructor(obj: any, commandType: CommandType);\r\n constructor(parentObject: any, obj: any, cmmandType: CommandType);\r\n constructor(commandTypeOrObjOrParentObject: any, strOrCommandTypeOrObj?: any, cmmandType?: CommandType) {\r\n if (arguments.length === 1 && (commandTypeOrObjOrParentObject === null || commandTypeOrObjOrParentObject.constructor === Number)) {\r\n this.constructor_0(commandTypeOrObjOrParentObject);\r\n return;\r\n }\r\n if (arguments.length === 2 && (commandTypeOrObjOrParentObject === null || commandTypeOrObjOrParentObject.constructor === Number)\r\n && (strOrCommandTypeOrObj === null || strOrCommandTypeOrObj.constructor === String)) {\r\n this.constructor_1(commandTypeOrObjOrParentObject, strOrCommandTypeOrObj);\r\n return;\r\n } else if (arguments.length === 2) {\r\n // && (commandTypeOrObjOrParentObject === null || commandTypeOrObjOrParentObject.constructor === Object) && (strOrCommandTypeOrObj === null || strOrCommandTypeOrObj.constructor === Number)) {\r\n this.constructor_2(commandTypeOrObjOrParentObject, strOrCommandTypeOrObj);\r\n return;\r\n }\r\n this.constructor_3(commandTypeOrObjOrParentObject, strOrCommandTypeOrObj, cmmandType);\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private constructor_0(commandType: CommandType): void {\r\n this.CommandType = commandType;\r\n }\r\n\r\n /// <summary></summary>\r\n /// <param name = \"commandType\"></param>\r\n /// <param name = \"str\"></param>\r\n private constructor_1(commandType: CommandType, str: string): void {\r\n this.constructor_0(commandType);\r\n this.str = str;\r\n }\r\n\r\n /// <summary></summary>\r\n private constructor_2(obj: any, commandType: CommandType): void {\r\n this.constructor_0(commandType);\r\n this.obj = obj;\r\n if (this.obj instanceof ControlBase) {\r\n this.CtrlName = (<ControlBase>this.obj).UniqueName;\r\n this.TaskTag = (<ControlBase>this.obj).TaskTag;\r\n }\r\n else if(obj === null)\r\n this.TaskTag = \"0\";\r\n }\r\n\r\n /// <summary>\r\n /// this is my comment\r\n /// </summary>\r\n /// <param name = \"parentObject\">the parent object of the object</param>\r\n private constructor_3(parentObject: any, obj: any, cmmandType: CommandType): void {\r\n this.constructor_2(obj, cmmandType);\r\n this.parentObject = parentObject;\r\n }\r\n\r\n\r\n toString(): string {\r\n return \"{\" + this.CommandType + \"}\";\r\n }\r\n}\r\n","import {List} from '@magic-xpa/mscorelib';\r\nimport {GuiMgForm} from './gui/GuiMgForm';\r\nimport {GuiInteractive} from './gui/low/GuiInteractive';\r\nimport {GuiMgControl} from './gui/GuiMgControl';\r\nimport {CommandType} from './GuiEnums';\r\nimport {GuiCommandQueue} from './gui/low/GuiCommandQueue';\r\nimport {GuiCommand} from './gui/low/GuiCommand';\r\n\r\n\r\n/// <summary>\r\n/// Commands to the GUI thread.\r\n/// There’re two types of commands (grouped in #regions):\r\n/// 1.\tCommands that are executed immediately.\r\n/// 2.\tCommands that are queued (overloaded methods ‘addAsync’) and then executed,\r\n/// either synchronously (method ‘invoke’) or asynchronously (method ‘beginInvoke’).\r\n/// </summary>\r\nexport class Commands {\r\n\r\n\r\n private static resolveCallback = null; // callback to resolve the promise\r\n\r\n /// <summary>\r\n /// save the callback\r\n /// </summary>\r\n static SetResolveCallback(resolveCallback) {\r\n this.resolveCallback = resolveCallback;\r\n }\r\n\r\n /// <summary>\r\n /// resolve promise\r\n /// </summary>\r\n static ResolvePromise(result: number) {\r\n this.resolveCallback(result);\r\n }\r\n\r\n /// <summary>\r\n /// Sync call to display message box\r\n /// </summary>\r\n /// <param name = \"title\"></param>\r\n /// <param name = \"msg\"></param>\r\n /// <param name = \"style\"></param>\r\n /// <returns></returns>\r\n static async messageBox(title: string, msg: string, style: number): Promise<number> {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n let returnValue: number;\r\n\r\n await new Promise((resolve) => {\r\n this.SetResolveCallback(resolve);\r\n guiInteractive.messageBox(title, msg, style);\r\n // save the resolve callback on EventsManager, so that it can be resolved on closing modal window\r\n }).then((res: number)=>{returnValue = res;});\r\n return returnValue;\r\n }\r\n\r\n /// <summary>\r\n /// Promise waits till the overlay window gets Opened through guiInteractive command.\r\n /// </summary>\r\n static async openOverlayForm(obj: Object, formName: string, handlerTaskTag: string,\r\n calledTaskTag: string, inputControls: string, isDialog: boolean): Promise<void> {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n\r\n await new Promise((resolve) => {\r\n this.SetResolveCallback(resolve);\r\n guiInteractive.ExecuteOpenOverlayForm(obj, formName, handlerTaskTag,\r\n calledTaskTag, inputControls, isDialog);\r\n }).then();\r\n }\r\n\r\n /// <summary>\r\n /// set title to browser\r\n /// </summary>\r\n /// <param name = \"topMostForm\"></param>\r\n /// <param name = \"title\"></param>\r\n static setTitle(topMostForm: GuiMgForm, title: string): void {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n guiInteractive.setTitle(topMostForm, title);\r\n }\r\n\r\n /// <summary>\r\n /// Sync call. This methode is set TRUE\\FALSE that GuiUtiles\\GetValue() method will be use\r\n /// this falg say if to return the : (true) suggested value or (false)the real value\r\n /// this method is use for MG_ACT_CTRL_MODIFY\r\n /// </summary>\r\n /// <param name = \"ctrl\"></param>\r\n /// <param name = \"retSuggestedValue\"></param>\r\n static setGetSuggestedValueOfChoiceControlOnTagData(ctrl: GuiMgControl, line: number, retSuggestedValue: boolean): void {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n guiInteractive.setGetSuggestedValueOfChoiceControlOnTagData(ctrl, line, retSuggestedValue);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Sync call to get value of the control\r\n /// </summary>\r\n /// <param name = \"obj\"></param>\r\n /// <param name = \"line\"></param>\r\n /// <param name = \"isThreeStateCheckBox\"></param>\r\n static getValue(obj: any, line: number, isThreeStateCheckBox: boolean): string {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n return guiInteractive.getValue(obj, line, isThreeStateCheckBox);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Sync call to get table top index\r\n /// </summary>\r\n /// <param name = \"tablecontrol\"></param>\r\n /// <returns></returns>\r\n static getTopIndex(tablecontrol: GuiMgControl): number {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n return guiInteractive.getTopIndex(tablecontrol);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Sync call to get is row editing on row index\r\n /// </summary>\r\n /// <param name = \"tablecontrol\"></param>\r\n /// <returns></returns>\r\n static getIsRowEditing(tablecontrol: any, rowIndex: number, isLineMode: boolean): boolean {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n return guiInteractive.getIsRowEditing(tablecontrol, rowIndex, isLineMode);\r\n }\r\n\r\n\r\n\r\n /// <summary>\r\n /// Sync call to set the text to the the control\r\n /// </summary>\r\n /// <param name = \"control\"></param>\r\n /// <param name = \"line\"></param>\r\n /// <param name = \"text\"></param>\r\n /// <returns></returns>\r\n static setEditText(control: GuiMgControl, line: number, text: string): boolean {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n return guiInteractive.setEditText(control, line, text);\r\n }\r\n\r\n /// <summary>\r\n /// Insert text to a text control at a given position\r\n /// </summary>\r\n /// <param name = \"control\"></param>\r\n /// <param name = \"line\"></param>\r\n /// <param name = \"startPosition\">where to add the text</param>\r\n /// <param name = \"textToInsert\">the text to add</param>\r\n /// <returns></returns>\r\n static insertEditText(control: GuiMgControl, line: number, startPosition: number, textToInsert: string): boolean {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n return guiInteractive.insertEditText(control, line, startPosition, textToInsert);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Sync call to get the position of the caret on the control\r\n /// </summary>\r\n /// <param name = \"control\"></param>\r\n /// <param name = \"line\"></param>\r\n /// <param name = \"mgValue\"></param>\r\n static caretPosGet(control: GuiMgControl, line: number): number {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n return guiInteractive.caretPosGet(control, line);\r\n }\r\n\r\n static addRefreshPage(navigateToRootRoute : boolean, initialUrl: string) {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n\r\n guiInteractive.RefreshPage(navigateToRootRoute, initialUrl);\r\n }\r\n\r\n /// <summary>\r\n /// Sync call to get number of rows in the table\r\n /// </summary>\r\n /// <param name = \"control\"></param>\r\n /// <returns></returns>\r\n static getRowsInPage(control: GuiMgControl): number {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n let rowsInPage = guiInteractive.getRowsInPage(control);\r\n return (rowsInPage === 0 ? 1 : rowsInPage);\r\n }\r\n\r\n /// <summary>\r\n /// Get max no of rows in paginated table\r\n /// </summary>\r\n /// <param name = \"control\"></param>\r\n /// <returns></returns>\r\n static getMaxRowsInPaginatedTable(control: GuiMgControl): number {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n let maxRows = guiInteractive.getMaxRowsInPaginatedTable(control);\r\n return (maxRows);\r\n }\r\n\r\n /// <summary>\r\n /// Get the last route\r\n /// </summary>\r\n static getLastRoute(): string {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n return guiInteractive.getLastRoute();\r\n }\r\n\r\n static addBoolWithLine(commandType: CommandType, obj: any, line: number, bool: boolean): void {\r\n let guiCommand: GuiCommand = new GuiCommand(obj, commandType);\r\n guiCommand.Bool1 = bool;\r\n guiCommand.line = line;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n static addNoParameters(commandType: CommandType, obj: any): void {\r\n let guiCommand: GuiCommand = new GuiCommand(obj, commandType);\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n static addWithNumber(commandType: CommandType, obj: any, num: number): void {\r\n let guiCommand: GuiCommand = new GuiCommand(obj, commandType);\r\n guiCommand.number = num;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n static addValueWithLine(commandType: CommandType, obj: any, line: number, value: any): void {\r\n let guiCommand: GuiCommand = new GuiCommand(obj, commandType);\r\n guiCommand.value = value;\r\n guiCommand.line = line;\r\n if (commandType === CommandType.SET_VALUE)\r\n {\r\n if (obj instanceof GuiMgControl && obj.isChoiceControl())\r\n {\r\n if(value < 0)\r\n //TODO: Handling done for bug # 32083 for combobox only. To be done for all types of choice controls\r\n if (obj.isComboBox())\r\n guiCommand.value = undefined;\r\n else\r\n guiCommand.value = '';\r\n }\r\n }\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n\r\n static addOperationWithLine(commandType: CommandType, obj: any, line: number, operation: string, value: any): void {\r\n let guiCommand: GuiCommand = new GuiCommand(obj, commandType);\r\n guiCommand.obj1 = value;\r\n guiCommand.line = line;\r\n guiCommand.Operation = operation;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n\r\n static addOpensubform(commandType: CommandType, obj: Object, calledTaskTag: string, subformControlName: string, formName: string, inputControls: string, routerPath: string, routerParams: List<any>, inDefaultRouterOutlet: boolean): void {\r\n let guiCommand: GuiCommand = new GuiCommand(obj, commandType);\r\n guiCommand.str = calledTaskTag;\r\n guiCommand.obj1 = subformControlName;\r\n guiCommand.userDropFormat = formName;\r\n guiCommand.fileName = inputControls;\r\n guiCommand.Bool1 = inDefaultRouterOutlet;\r\n guiCommand.contextID = routerPath;\r\n guiCommand.params = routerParams;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n static addClosesubform(commandType: CommandType, obj: Object, calledTaskTag: string, subformControlName: string, formName: string): void {\r\n let guiCommand: GuiCommand = new GuiCommand(obj, commandType);\r\n guiCommand.str = calledTaskTag;\r\n guiCommand.obj1 = subformControlName;\r\n guiCommand.userDropFormat = formName;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n static addOpenForm(obj: Object, formName: string, handlerTaskTag: string, calledTaskTag: string, inputControls: string, isDialog: boolean): void {\r\n let guiCommand: GuiCommand = new GuiCommand(obj, CommandType.OPEN_FORM);\r\n guiCommand.TaskTag = handlerTaskTag;\r\n guiCommand.str = formName;\r\n guiCommand.stringList = new List<string>();\r\n guiCommand.stringList.push(calledTaskTag);\r\n guiCommand.stringList.push(inputControls);\r\n guiCommand.Bool1 = isDialog;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n static addCloseForm(obj: Object, handlerTaskTag: string, calledTaskTag: string): void {\r\n let guiCommand: GuiCommand = new GuiCommand(obj, CommandType.CLOSE_FORM);\r\n guiCommand.TaskTag = handlerTaskTag;\r\n guiCommand.str = calledTaskTag;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n static addCallJS(form : any, formName: string, name: string, args: Array<any>): string {\r\n let guiInteractive: GuiInteractive = new GuiInteractive();\r\n return guiInteractive.ExecuteCallJS(form , formName, name, args);\r\n }\r\n\r\n static addIsLoggedIn(setBool: boolean): void {\r\n let guiCommand: GuiCommand = new GuiCommand(null, CommandType.SET_IS_LOGGED_IN);\r\n guiCommand.Bool1 = setBool;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n // adds a command to show or hide the spinner\r\n static addShowSpinner(show: boolean): void {\r\n let guiCommand: GuiCommand = new GuiCommand(null, CommandType.SHOW_SPINNER);\r\n guiCommand.Bool1 = show;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n // adds a command which is not related to a specific task\r\n static addGlobalCommand(commandType: CommandType): void {\r\n let guiCommand: GuiCommand = new GuiCommand(null, commandType);\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n // adds a command to display the HTML error received from the requeser\r\n static addShowHTMLError(commandType: CommandType, error: string): void {\r\n let guiCommand: GuiCommand = new GuiCommand(null, commandType);\r\n guiCommand.str = error;\r\n GuiCommandQueue.getInstance().addCommand(guiCommand);\r\n }\r\n\r\n /// <summary>\r\n /// execute all pending commands, asynchronously\r\n /// </summary>\r\n static beginInvoke(): void {\r\n GuiCommandQueue.getInstance().beginInvoke();\r\n }\r\n\r\n /// <summary>\r\n /// execute all pending commands, synchronously\r\n /// </summary>\r\n static invoke(): void {\r\n GuiCommandQueue.getInstance().invoke();\r\n }\r\n\r\n constructor() {\r\n }\r\n}\r\n","export enum PropInterface {\r\n PROP_TYPE_LINES_IN_TABLE = 3,\r\n PROP_TYPE_HYPERLINK = 14,\r\n PROP_TYPE_TEXT = 19,\r\n PROP_TYPE_PLACEMENT = 20,\r\n PROP_TYPE_LEFT = 21,\r\n PROP_TYPE_TOP = 22,\r\n PROP_TYPE_WIDTH = 23,\r\n PROP_TYPE_LAYER = 25,\r\n PROP_TYPE_TITLE_BAR = 26,\r\n PROP_TYPE_SYSTEM_MENU = 27,\r\n PROP_TYPE_MINBOX = 28,\r\n PROP_TYPE_MAXBOX = 29,\r\n PROP_TYPE_UOM = 33,\r\n PROP_TYPE_VER_FAC = 34,\r\n PROP_TYPE_HOR_FAC = 35,\r\n PROP_TYPE_WALLPAPER = 42,\r\n PROP_TYPE_DATA = 43,\r\n PROP_TYPE_LABEL = 45,\r\n PROP_TYPE_NAME = 46,\r\n PROP_TYPE_FONT = 50,\r\n PROP_TYPE_COLOR = 51,\r\n PROP_TYPE_MUST_INPUT = 52,\r\n PROP_TYPE_MODIFIABLE = 53,\r\n PROP_TYPE_HELP_SCR = 54,\r\n PROP_TYPE_TOOLTIP = 56,\r\n PROP_TYPE_PROMPT = 57,\r\n PROP_TYPE_SELECT_PROGRAM = 58,\r\n PROP_TYPE_SELECT_MODE = 59,\r\n PROP_TYPE_MODIFY_IN_QUERY = 60,\r\n PROP_TYPE_VISIBLE = 61,\r\n PROP_TYPE_ENABLED = 62,\r\n PROP_TYPE_STYLE_3D = 63,\r\n PROP_TYPE_BORDER_STYLE = 64,\r\n PROP_TYPE_HORIZONTAL_ALIGNMENT = 65,\r\n PROP_TYPE_VERTICAL_ALIGNMENT = 66,\r\n PROP_TYPE_CHOICE_COLUMNS = 67,\r\n PROP_TYPE_VISIBLE_LINES = 68,\r\n PROP_TYPE_STATIC_TYPE = 70,\r\n PROP_TYPE_MULTILINE = 71,\r\n PROP_TYPE_MULTILINE_VERTICAL_SCROLL = 73,\r\n PROP_TYPE_MULTILINE_ALLOW_CR = 74,\r\n PROP_TYPE_LINE_STYLE = 75,\r\n PROP_TYPE_LINE_WIDTH = 76,\r\n PROP_TYPE_SCROLL_BAR = 77,\r\n PROP_TYPE_LINE_DIVIDER = 78,\r\n PROP_TYPE_TITLE_HEIGHT = 79,\r\n PROP_TYPE_ROW_HEIGHT = 80,\r\n PROP_TYPE_FORMAT = 82,\r\n PROP_TYPE_ATTRIBUTE = 83,\r\n PROP_TYPE_EXPAND_WINDOW = 84,\r\n PROP_TYPE_PASSWORD = 85,\r\n PROP_TYPE_TAB_CONTROL_SIDE = 87,\r\n PROP_TYPE_IMAGE_FILENAME = 88,\r\n PROP_TYPE_IMAGE_STYLE = 89,\r\n PROP_TYPE_BUTTON_STYLE = 96,\r\n PROP_TYPE_RETURN_ACTION = 97,\r\n PROP_TYPE_RANGE = 98,\r\n PROP_TYPE_PARAMETERS = 126,\r\n PROP_TYPE_FRAME_NAME = 127,\r\n PROP_TYPE_HEBREW = 130,\r\n PROP_TYPE_TRANSLATOR = 132,\r\n PROP_TYPE_SORT_COLUMN = 134,\r\n PROP_TYPE_COLUMN_PLACEMENT = 138,\r\n PROP_TYPE_COLUMN_TITLE = 139,\r\n PROP_TYPE_SUBFORM_TYPE = 156,\r\n PROP_TYPE_PRGTSK_NUM = 183,\r\n PROP_TYPE_COLUMN_DIVIDER = 189,\r\n PROP_TYPE_ALLOW_COL_RESIZE = 191,\r\n PROP_TYPE_TASK_MODE = 197,\r\n PROP_TYPE_END_CONDITION = 198,\r\n PROP_TYPE_EVAL_END_CONDITION = 199,\r\n PROP_TYPE_SELECTION = 200,\r\n PROP_TYPE_ALLOW_MODIFY = 201,\r\n PROP_TYPE_ALLOW_CREATE = 202,\r\n PROP_TYPE_ALLOW_DELETE = 203,\r\n PROP_TYPE_CONFIRM_UPDATE = 204,\r\n PROP_TYPE_CONFIRM_CANCEL = 205,\r\n PROP_TYPE_FORCE_SUFFIX = 206,\r\n PROP_TYPE_TRASACTION_BEGIN = 207,\r\n PROP_TYPE_REPEATABLE = 208,\r\n PROP_TYPE_HIGHLIGHTING = 216,\r\n PROP_TYPE_SELECTION_ROWS = 217,\r\n PROP_TYPE_BEFORE_900_VERSION = 225,\r\n PROP_TYPE_FORCE_DELETE = 233,\r\n PROP_TYPE_TRIGGER = 234,\r\n PROP_TYPE_TOP_BORDER = 237,\r\n PROP_TYPE_RIGHT_BORDER = 238,\r\n PROP_TYPE_WINDOW_WIDTH = 241,\r\n PROP_TYPE_NODE_ID = 247,\r\n PROP_TYPE_NODE_PARENTID = 248,\r\n PROP_TYPE_SHOW_BUTTONS = 249,\r\n PROP_TYPE_SHOW_LINES = 250,\r\n PROP_TYPE_SHOW_FULL_ROW = 252,\r\n PROP_TYPE_TRACK_SELECTION = 253,\r\n PROP_TYPE_EXPANDED_IMAGEIDX = 256,\r\n PROP_TYPE_COLLAPSED_IMAGEIDX = 257,\r\n PROP_TYPE_PARKED_IMAGEIDX = 258,\r\n PROP_TYPE_LINES_AT_ROOT = 267,\r\n PROP_TYPE_TAB_IN = 269,\r\n PROP_TYPE_STARTUP_POSITION = 275,\r\n PROP_TYPE_ALLOW_DRAGGING = 283,\r\n PROP_TYPE_ALLOW_DROPPING = 284,\r\n PROP_TYPE_IS_CACHED = 286,\r\n PROP_TYPE_SELECTION_MODE = 288,\r\n PROP_TYPE_PARKED_COLLAPSED_IMAGEIDX = 290,\r\n PROP_TYPE_DISPLAY_LIST = 303,\r\n PROP_TYPE_FORM_NAME = 311,\r\n PROP_TYPE_AUTO_REFRESH = 312,\r\n PROP_TYPE_AUTO_FIT = 313,\r\n PROP_TYPE_TAB_ORDER = 314,\r\n PROP_TYPE_ALLOW_PARKING = 315,\r\n PROP_TYPE_ALLOWED_DIRECTION = 317,\r\n PROP_TYPE_TABBING_ORDER = 318,\r\n PROP_TYPE_HOT_TRACK = 354,\r\n PROP_TYPE_TAB_CONTROL_TABS_WIDTH = 355,\r\n PROP_TYPE_IMAGE_LIST_INDEXES = 356,\r\n PROP_TYPE_WINDOW_TYPE = 358,\r\n PROP_TYPE_DISPLAY_TOOLBAR = 360,\r\n PROP_TYPE_DISPLAY_STATUS_BAR = 361,\r\n PROP_TYPE_STARTUP_MODE = 362,\r\n PROP_TYPE_THREE_STATES = 390,\r\n PROP_TYPE_CHECKBOX_MAIN_STYLE = 391,\r\n PROP_TYPE_RAISE_AT = 395,\r\n PROP_TYPE_DISPLAY_MENU = 396,\r\n PROP_TYPE_RADIO_BUTTON_APPEARANCE = 401,\r\n PROP_TYPE_DEFAULT_BUTTON = 408,\r\n PROP_TYPE_ROW_HIGHLIGHT_STYLE = 409,\r\n PROP_TYPE_BOTTOM_POSITION_INTERVAL = 411,\r\n PROP_TYPE_MINIMUM_WIDTH = 418,\r\n PROP_TYPE_MINIMUM_HEIGHT = 419,\r\n PROP_TYPE_SHOW_IN_WINDOW_MENU = 422,\r\n PROP_TYPE_SET_COLOR_BY = 428,\r\n PROP_TYPE_ALLOW_REORDER = 430,\r\n PROP_TYPE_PARK_ON_CLICK = 433,\r\n PROP_TYPE_TASK_ID = 440,\r\n PROP_TYPE_PULLDOWN_MENU = 441,\r\n PROP_TYPE_CONTEXT_MENU = 442,\r\n PROP_TYPE_DISPLAY_FIELD = 443,\r\n PROP_TYPE_LINK_FIELD = 444,\r\n PROP_TYPE_INDEX = 445,\r\n PROP_TYPE_PRELOAD_VIEW = 446,\r\n PROP_TYPE_WALLPAPER_STYLE = 448,\r\n PROP_TYPE_PART_OF_DATAVIEW = 449,\r\n PROP_TYPE_BORDER = 452,\r\n PROP_TYPE_MULTILINE_WORDWRAP_SCROLL = 455,\r\n PROP_TYPE_ALLOW_QUERY = 456,\r\n PROP_TYPE_MAIN_DISPLAY = 457,\r\n PROP_TYPE_DEST_SUBFORM = 458,\r\n PROP_TYPE_HORIZONTAL_PLACEMENT = 459,\r\n PROP_TYPE_VERTICAL_PLACEMENT = 460,\r\n PROP_TYPE_FRAMESET_STYLE = 461,\r\n PROP_TYPE_FRAME_TYPE = 462,\r\n PROP_TYPE_ALLOW_EMPTY_DATAVIEW = 463,\r\n PROP_TYPE_SHOW_TITLE = 464,\r\n PROP_TYPE_TABBING_CYCLE = 465,\r\n PROP_TYPE_REFRESH_WHEN_HIDDEN = 472,\r\n PROP_TYPE_HOVERING_COLOR = 473,\r\n PROP_TYPE_VISITED_COLOR = 474,\r\n PROP_TYPE_ALLOW_OPTION = 475,\r\n PROP_TYPE_VISIBLE_LAYERS_LIST = 476,\r\n PROP_TYPE_INTERACTIVE = 477,\r\n PROP_TYPE_OBJECT_TYPE = 478,\r\n PROP_TYPE_OBJECT_PROPERTIES = 479,\r\n PROP_TYPE_GRADIENT_COLOR = 480,\r\n PROP_TYPE_GRADIENT_STYLE = 481,\r\n PROP_TYPE_RETAIN_FOCUS = 482,\r\n PROP_TYPE_REAL_OBJECT_TYPE = 483,\r\n PROP_TYPE_ALLOW_LOCATE_IN_QUERY = 486,\r\n PROP_TYPE_LOAD_IMAGE_FROM = 487,\r\n PROP_TYPE_PRINT_DATA = 488,\r\n PROP_TYPE_ALLOW_RANGE = 489,\r\n PROP_TYPE_ALLOW_LOCATE = 490,\r\n PROP_TYPE_ALLOW_SORT = 491,\r\n PROP_TYPE_DEST_SUBFORM_NAME = 492,\r\n PROP_TYPE_PERSISTENT_FORMSTATE = 493,\r\n PROP_TYPE_CLOSE_TASKS_BY_MDI_MENU = 496,\r\n PROP_TYPE_ROW_PLACEMENT = 572,\r\n PROP_TYPE_ADDITIONAL_INFORMATION = 573,\r\n PROP_TYPE_TASK_PROPERTIES_ALLOW_EVENTS = 592,\r\n PROP_TYPE_TASK_PROPERTIES_RETURN_VALUE = 596,\r\n PROP_TYPE_TASK_PROPERTIES_TRANSACTION_MODE = 604,\r\n PROP_TYPE_TASK_PROPERTIES_OPEN_TASK_WINDOW = 619,\r\n PROP_TYPE_TASK_PROPERTIES_MAIN_DISPLAY = 621,\r\n PROP_TYPE_TASK_PROPERTIES_ALLOW_INDEX = 630,\r\n PROP_TYPE_TASK_PROPERTIES_LOCATE = 634,\r\n PROP_TYPE_TASK_PROPERTIES_LOCATE_ORDER = 635,\r\n PROP_TYPE_TASK_PROPERTIES_POSITION = 636,\r\n PROP_TYPE_TASK_PROPERTIES_POSITION_USAGE = 637,\r\n PROP_TYPE_TASK_PROPERTIES_RANGE = 638,\r\n PROP_TYPE_TASK_PROPERTIES_RANGE_ORDER = 639,\r\n PROP_TYPE_TASK_PROPERTIES_SQL_RANGE = 640,\r\n PROP_TYPE_TASK_PROPERTIES_DB_SQL_RANGE = 641,\r\n PROP_TYPE_TASK_PROPERTIES_CHUNK_SIZE = 645,\r\n PROP_TYPE_TASK_PROPERTIES_INDEX_OPTIMIZATION = 653,\r\n PROP_TYPE_DATAVIEWCONTROL = 656,\r\n PROP_TYPE_DATAVIEWCONTROL_FIELDS = 657,\r\n PROP_TYPE_POP_UP = 658,\r\n PROP_TYPE_ORIENTATION_LOCK = 659,\r\n PROP_TYPE_ENTER_ANIMATION = 660,\r\n PROP_TYPE_EXIT_ANIMATION = 661,\r\n PROP_TYPE_NAVIGATION_DRAWER_MENU = 662,\r\n PROP_TYPE_TITLE_BAR_COLOR = 663,\r\n PROP_TYPE_MOBILE_BORDER_WIDTH = 664,\r\n PROP_TYPE_BORDER_COLOR = 665,\r\n PROP_TYPE_BORDER_FOCUS_WIDTH = 666,\r\n PROP_TYPE_BORDER_FOCUS_COLOR = 667,\r\n PROP_TYPE_CORNER_RADIUS = 668,\r\n PROP_TYPE_OPEN_PICKER = 669,\r\n PROP_TYPE_OPEN_EDIT_DIALOG = 670,\r\n PROP_TYPE_DEFAULT_ALIGNMENT = 671,\r\n PROP_TYPE_HINT = 672,\r\n PROP_TYPE_KEYBOARD_TYPE = 673,\r\n PROP_TYPE_KEYBOARD_RETURN_KEY = 674,\r\n PROP_TYPE_ALLOW_SUGGESTIONS = 675,\r\n PROP_TYPE_MOBILE_IMAGE_LIST_FILE_NAME = 676,\r\n PROP_TYPE_TITLE_COLOR = 677,\r\n PROP_TYPE_FOCUS_COLOR = 678,\r\n PROP_TYPE_SWIPE_REFRESH = 679,\r\n PROP_TYPE_ACTION_BAR_MENU = 683,\r\n PROP_TYPE_TOP_BORDER_MARGIN = 684,\r\n PROP_TYPE_DIVIDER_COLOR = 685,\r\n PROP_TYPE_HOT_TRACK_COLOR = 686,\r\n PROP_TYPE_COL_ALLOW_FILTERING = 687,\r\n PROP_TYPE_FILL_WIDTH = 688,\r\n PROP_TYPE_TITLE_PADDING = 689,\r\n PROP_TYPE_HINT_COLOR = 691,\r\n PROP_TYPE_MULTI_COLUMN_DISPLAY = 692,\r\n PROP_TYPE_SELECTED_TAB_COLOR = 694,\r\n PROP_TYPE_PERSISTENT_FORM_STATE_VERSION = 696,\r\n PROP_TYPE_INACTIVE_ROW_HIGHLIGHT_COLOR = 697,\r\n PROP_TYPE_ROW_BG_COLOR = 698,\r\n PROP_TYPE_SHOW_ELLIPISIS = 699,\r\n PROP_TYPE_SCROLL_BAR_THUMB = 700,\r\n PROP_TYPE_IS_ROUTER_OUTLET = 707,\r\n PROP_TYPE_DEFAULT_OUTLET = 712,\r\n PROP_TYPE_CUSTOM_PROPERTIES = 713,\r\n PROP_TYPE_CONNECTED_ZOOM_CONTROL = 719,\r\n PROP_TYPE_CUSTOM_VALIDATORS = 732,\r\n PROP_TYPE_BINDING_LEVEL = 733,\r\n PROP_TYPE_SERVER_READ_AHEAD = 736,\r\n PROP_TYPE_AUTO_COMPLETE_MODE_WC = 740,\r\n PROP_TYPE_PARK_FIRST_ON = 743\r\n}\r\n","import { IEnvironment } from \"./env/IEnvironment\";\r\n\r\nexport class GuiEnvironment\r\n{\r\n static Environment: IEnvironment = null;\r\n}\r\n","/// <summary>\r\n/// MgGui.dll's manager - assembly level properties and methods.\r\n/// </summary>\r\nimport {UtilImeJpn, UtilStrByteMode} from \"@magic-xpa/utils\";\r\nimport {IGuiEventsManager} from \"./management/events/IGuiEventsManager\";\r\nimport {GuiTaskBase} from \"./management/tasks/GuiTaskBase\";\r\nimport {MgControlBase} from \"./management/gui/MgControlBase\";\r\nimport {Commands} from \"./Commands\";\r\nimport {MgFormBase} from \"./management/gui/MgFormBase\";\r\nimport {CommandType, HtmlProperties} from \"./GuiEnums\";\r\nimport {Events} from \"./Events\";\r\nimport {RuntimeContextBase} from \"./management/RuntimeContextBase\";\r\nimport {PropInterface} from \"./management/gui/PropInterface\";\r\nimport {GuiEnvironment} from \"./GuiEnvironment\";\r\n\r\n\r\nexport class Manager {\r\n static IsOverlayOpen: boolean = false;\r\n// this object is used for execution and interrupting delay command\r\n// Data to be written to the clipboard.\r\n\r\n // This will hold the contextID for a current thread.\r\n // Thread static is a separate for each thread (i.e.: value of a static field is unique for each thread).\r\n // http://msdn.microsoft.com/en-us/library/system.threadstaticattribute.aspx\r\n private static _currentContextID: string = '\\0';\r\n\r\n static DefaultProtocol: string = null; // default protocol (http/https) and server name to be used for any relative url\r\n static DefaultServerName: string = null;\r\n static UtilImeJpn: UtilImeJpn = (UtilStrByteMode.isLocaleDefLangJPN() ? new UtilImeJpn() : null); // JPN: IME support\r\n static EventsManager: IGuiEventsManager = null;\r\n\r\n /// <summary>(public)\r\n /// Set the context ID for a current thread\r\n /// </summary>\r\n /// <param name=\"contextID\"></param>\r\n static SetCurrentContextID(contextID: string): void {\r\n Manager._currentContextID = contextID;\r\n }\r\n\r\n /// <summary>\r\n /// Get the context ID for a current thread\r\n /// </summary>\r\n /// <returns>current thread's contextID</returns>\r\n static GetCurrentContextID(): string {\r\n return Manager._currentContextID;\r\n }\r\n\r\n\r\n\r\n static Init(): void {\r\n return;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// close the task\r\n /// </summary>\r\n /// <param name = \"form\"> </param>\r\n /// <param name=\"mainPrgTask\"></param>\r\n static Abort(form: MgFormBase): void {\r\n\r\n if (form.getSubFormCtrl() === null && form.Opened) {\r\n // if the closing form is 'opened as a modal' then decrement the modal count on its frame window.\r\n if (form.isDialog()) {\r\n this.IsOverlayOpen = false;\r\n\r\n let topMostFrameForm: MgFormBase = form.getTopMostFrameForm();\r\n if (topMostFrameForm !== null)\r\n topMostFrameForm.UpdateModalFormsCount(form, false);\r\n }\r\n\r\n Commands.addCloseForm(form, \"0\", form.getTask().getTaskTag());\r\n\r\n Commands.beginInvoke();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// returns the current value of the control\r\n /// </summary>\r\n /// <param name = \"ctrl\">control to get value </param>\r\n /// <returns> value of the control </returns>\r\n static GetCtrlVal(ctrl: MgControlBase): string {\r\n // QCR #745117: Make sure that if the contents of a control were changed\r\n // then the changes are applied before examining its value.\r\n return Commands.getValue(ctrl, ctrl.getDisplayLine(true), ctrl.isThreeStateCheckBox());\r\n }\r\n\r\n /// <summary>\r\n /// Set read only for controls\r\n /// </summary>\r\n /// <param name = \"ctrl\">the control to change its property </param>\r\n /// <param name = \"isReadOnly\">boolean </param>\r\n static async SetReadOnlyControl(ctrl: MgControlBase, isReadOnly: boolean): Promise<void> {\r\n if (ctrl.isTextControl() || ctrl.IsRepeatable || ctrl.isComboBox() || ctrl.isListBox() || ctrl.isCheckBox() || ctrl.isRadio()) // Defect 131802: Set ReadOnly for Rich Text control in Table Header and defect 131704: in general for Rich Text.\r\n {\r\n // JPN: IME support (enable IME in query mode)\r\n if (UtilStrByteMode.isLocaleDefLangDBCS()) {\r\n if (await ctrl.getForm().getTask().checkProp(PropInterface.PROP_TYPE_ALLOW_LOCATE_IN_QUERY, false))\r\n return;\r\n }\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, ctrl, ctrl.getDisplayLine(false), HtmlProperties.ReadOnly, isReadOnly);\r\n\r\n Commands.beginInvoke();\r\n }\r\n }\r\n\r\n\r\n /// <summary> Open the form. </summary>\r\n /// <param name=\"mgForm\">form to be opened.</param>\r\n static OpenForm(mgForm: MgFormBase): void {\r\n // non interactive can choose not to open the window.\r\n if (!mgForm.Opened && (mgForm.getTask().IsInteractive || mgForm.getTask().isOpenWin())) {\r\n if (!mgForm.isSubForm()) {\r\n // if the form is to be opened as a modal, then increment the modal count on its frame window.\r\n if (mgForm.isDialog()) {\r\n this.IsOverlayOpen = true;\r\n\r\n let topMostFrameForm: MgFormBase = mgForm.getTopMostFrameForm();\r\n if (topMostFrameForm !== null)\r\n topMostFrameForm.UpdateModalFormsCount(mgForm, true);\r\n }\r\n\r\n }\r\n // if (!mgForm.isSubForm()) {\r\n // let formName: string = mgForm.UniqueName;\r\n // UIBridge.getInstance().OpenForm(formName);\r\n\r\n // }\r\n // else {\r\n // let inputControls = mgForm.GetListOfInputControls();\r\n // //\r\n // // JSBridge.Instance.OpenSubForm(this.getSubFormCtrl().getName(), ParentForm.getTask().getTaskTag(), getProp(PropInterface.PROP_TYPE_FORM_NAME).getValue(), _task.getTaskTag(), inputControls);\r\n // // }\r\n // }\r\n\r\n mgForm.Opened = true;\r\n\r\n Commands.beginInvoke();\r\n }\r\n }\r\n\r\n /// <summary> Performs first refresh for the table control </summary>\r\n static async DoFirstRefreshTable(mgForm: MgFormBase): Promise<void> {\r\n if (mgForm !== null && !mgForm.ignoreFirstRefreshTable) {\r\n mgForm.ignoreFirstRefreshTable = true;\r\n await mgForm.firstTableRefresh();\r\n }\r\n }\r\n\r\n\r\n/// <summary>\r\n /// clean the status bar\r\n /// </summary>\r\n /// <param name = \"task\"></param>\r\n static CleanMessagePane(task: GuiTaskBase): void {\r\n task.WriteToMessagePane(Manager.GetCurrentRuntimeContext().DefaultStatusMsg);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Message string to be displayed on status bar or in Message box\r\n /// </summary>\r\n /// <param name = \"msg\"> input message string </param>\r\n /// <returns> output message string </returns>\r\n static GetMessage(msg: string): string {\r\n if (msg === null)\r\n msg = \"\";\r\n else if (msg.length > 0) {\r\n let idxOfCarriage: number = msg.indexOf(\"\\r\");\r\n if (idxOfCarriage !== -1)\r\n msg = msg.substr(0, idxOfCarriage);\r\n\r\n let idxOfNewLine: number = msg.indexOf(\"\\n\");\r\n if (idxOfNewLine !== -1)\r\n msg = msg.substr(0, idxOfNewLine);\r\n }\r\n\r\n return msg;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Gets the runtime context belongs to the current thread.\r\n /// </summary>\r\n /// <returns>RuntimeContextBase</returns>\r\n static GetCurrentRuntimeContext(): RuntimeContextBase {\r\n return Events.GetRuntimeContext(Manager.GetCurrentContextID());\r\n }\r\n\r\n /// <summary>\r\n /// return SpecialValNewPolicy\r\n /// </summary>\r\n /// <returns></returns>\r\n public static GetSpecialValNewPolicy(): boolean {\r\n return GuiEnvironment.Environment.GetSpecialValNewPolicy();\r\n }\r\n}\r\n\r\n\r\n","import {Int32} from \"@magic-xpa/mscorelib\";\r\n\r\nexport class GuiConstants {\r\n static DEFAULT_LIST_VALUE: number = -1;\r\n static DEFAULT_VALUE_INT: number = -999999;\r\n static ALL_LINES: number = -1;\r\n static NO_ROW_SELECTED: number = Int32.MinValue; // no row selected - for empty dataview\r\n\r\n /// <summary>RC mobile unsupported controls message string</summary>\r\n static RIA_MOBILE_UNSUPPORTED_CONTROL_ERROR: string = \"control is not supported for mobile RIA deployment\";\r\n static RIA_MOBILE_UNSUPPORTED_CONTROL_ERROR_WINDOW_6: string = \"control is not supported for mobile RIA deployment on Window 6 standard\";\r\n static TOOL_HEIGHT: number = 17;\r\n static TOOL_WIDTH: number = 16;\r\n\r\n /// <summary>Data Binding constants</summary>\r\n static STR_DISPLAY_MEMBER: string = \"DisplayMember\";\r\n static STR_VALUE_MEMBER: string = \"ValueMember\";\r\n\r\n /// <summary>parent type</summary>\r\n static PARENT_TYPE_TASK: string = 'T';\r\n static PARENT_TYPE_FORM: string = 'F';\r\n static PARENT_TYPE_CONTROL: string = 'C';\r\n\r\n /// <summary>properties</summary>\r\n\r\n static GENERIC_PROPERTY_BASE_ID: number = 10000;\r\n\r\n /// <summary>tabbing cycle</summary>\r\n static TABBING_CYCLE_REMAIN_IN_CURRENT_RECORD: string = 'R';\r\n static TABBING_CYCLE_MOVE_TO_NEXT_RECORD: string = 'N';\r\n static TABBING_CYCLE_MOVE_TO_PARENT_TASK: string = 'P';\r\n\r\n /// <summary>blobs</summary>\r\n static BLOB_PREFIX_ELEMENTS_COUNT: number = 5;\r\n\r\n /// <summary>key codes</summary>\r\n static KEY_DOWN: number = 40;\r\n static KEY_RIGHT: number = 39;\r\n static KEY_UP: number = 38;\r\n static KEY_LEFT: number = 37;\r\n static KEY_HOME: number = 36;\r\n static KEY_END: number = 35;\r\n static KEY_PG_DOWN: number = 34;\r\n static KEY_PG_UP: number = 33;\r\n static KEY_SPACE: number = 32;\r\n static KEY_F12: number = 123;\r\n static KEY_F1: number = 112;\r\n static KEY_9: number = 57;\r\n static KEY_0: number = 48;\r\n static KEY_Z: number = 90;\r\n static KEY_A: number = 65;\r\n static KEY_DELETE: number = 46;\r\n static KEY_INSERT: number = 45;\r\n static KEY_BACKSPACE: number = 8;\r\n static KEY_TAB: number = 9;\r\n static KEY_RETURN: number = 13;\r\n static KEY_ESC: number = 27;\r\n static KEY_CAPS_LOCK: number = 20;\r\n static KEY_POINT1: number = 190;\r\n static KEY_POINT2: number = 110;\r\n static KEY_COMMA: number = 188;\r\n static KEY_CTRL : number = 17;\r\n static KEY_ALT : number = 18;\r\n\r\n // authentication\r\n static LOGON_CAPTION: string = \"Logon - \";\r\n static ENTER_UID_TTL: string = \"Please enter your user ID and password.\";\r\n\r\n static GROUP_BOX_TITLE_MAX_SIZE: number = 62;\r\n static MSG_CAPTION_MAX_SIZE: number = 56;\r\n static LABEL_CAPTION_MAX_SIZE: number = 9;\r\n static PASSWORD_CAPTION_MAX_SIZE: number = 19;\r\n\r\n static REPLACE_ALL_TEXT: number = -1;\r\n\r\n // execution property names used for customizing logon screen\r\n static STR_LOGON_RTL: string = \"LogonRTL\";\r\n static STR_LOGO_WIN_ICON_URL: string = \"LogonWindowIconURL\";\r\n static STR_LOGON_IMAGE_URL: string = \"LogonImageURL\";\r\n static STR_LOGON_WIN_TITLE: string = \"LogonWindowTitle\";\r\n static STR_LOGON_GROUP_TITLE: string = \"LogonGroupTitle\";\r\n static STR_LOGON_MSG_CAPTION: string = \"LogonMessageCaption\";\r\n static STR_LOGON_USER_ID_CAPTION: string = \"LogonUserIDCaption\";\r\n static STR_LOGON_PASS_CAPTION: string = \"LogonPasswordCaption\";\r\n static STR_LOGON_OK_CAPTION: string = \"LogonOKCaption\";\r\n static STR_LOGON_CANCEL_CAPTION: string = \"LogonCancelCaption\";\r\n\r\n constructor() {\r\n }\r\n}\r\n","import { Logger, StorageAttribute, StrUtil } from '@magic-xpa/utils';\r\nimport { ApplicationException, Debug, Encoding, ISO_8859_1_Encoding, NNumber, NString } from '@magic-xpa/mscorelib';\r\nimport { GuiConstants } from '../../GuiConstants';\r\nimport { GuiEnvironment } from '../../GuiEnvironment';\r\n\r\nexport class BlobType {\r\n static CONTENT_TYPE_UNKNOWN: string = '0';\r\n static CONTENT_TYPE_ANSI: string = '1';\r\n static CONTENT_TYPE_UNICODE: string = '2';\r\n static CONTENT_TYPE_BINARY: string = '3';\r\n\r\n /// <summary> returns the content type of the blob</summary>\r\n /// <param name=\"blob\">\r\n /// </param>\r\n /// <returns>\r\n /// </returns>\r\n static getContentType(blob: string): string {\r\n try {\r\n let tokens: string[] = StrUtil.tokenize(blob, /,|;/);\r\n return tokens[4].charAt(0);\r\n }\r\n catch (Exception) {\r\n throw new ApplicationException(\" in BlobType.getContentType blob is in invalid format\");\r\n }\r\n }\r\n\r\n /// <summary> Creates an empty blob prefix with a given cell attribute</summary>\r\n /// <param name=\"vecCellAttr\">in case this blob is vector the cells type else 0\r\n /// </param>\r\n /// <returns> an empty blob prefix without the ';\" at the end\r\n /// </returns>\r\n static getEmptyBlobPrefix(vecCellAttr: string): string {\r\n return NString.Format(\"0,0,{0},{1},0\", '\\0', vecCellAttr);\r\n }\r\n\r\n /// <param name=\"contentType\">\r\n /// </param>\r\n /// <returns>\r\n /// </returns>\r\n static getBlobPrefixForContentType(contentType: string): string {\r\n return NString.Format(\"0,0,{0},{0},{1};\", '\\0', contentType);\r\n }\r\n\r\n /// <summary> returns the header only</summary>\r\n /// <param name=\"str\">\r\n /// </param>\r\n /// <returns>\r\n /// </returns>\r\n static getPrefix(str: string): string {\r\n let idx: number = str.indexOf(';')/*';'*/;\r\n return str.substr(0, idx + 1);\r\n }\r\n\r\n /// <param name=\"ContentType\">\r\n /// </param>\r\n /// <returns>\r\n /// </returns>\r\n static getEncodingFromContentType(ContentType: string): Encoding {\r\n let encoding: Encoding;\r\n\r\n if (ContentType === BlobType.CONTENT_TYPE_UNICODE)\r\n encoding = Encoding.Unicode;\r\n else if (ContentType === BlobType.CONTENT_TYPE_ANSI)\r\n encoding = GuiEnvironment.Environment.GetEncoding();\r\n else\r\n encoding = ISO_8859_1_Encoding.ISO_8859_1;\r\n\r\n return encoding;\r\n }\r\n\r\n /// <summary> This function converts ansi bytes to unicode bytes.\r\n /// </summary>\r\n /// <param name=\"BytesInMb\"></param>\r\n /// <returns></returns>\r\n private static MbToUnicode(BytesInMb: Uint8Array): Uint8Array {\r\n let result: Uint8Array = null;\r\n\r\n try {\r\n let UnicodeString: string = GuiEnvironment.Environment.GetEncoding().GetString(BytesInMb, 0, BytesInMb.length);\r\n result = Encoding.Unicode.GetBytes(UnicodeString);\r\n }\r\n catch (Exception) {\r\n result = null;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /// <summary> This function converts unicode bytes to ansi bytes.\r\n /// </summary>\r\n /// <param name=\"BytesInUnicode\"></param>\r\n /// <returns></returns>\r\n private static UnicodeToMb(BytesInUnicode: Uint8Array): Uint8Array {\r\n let result: Uint8Array = null;\r\n\r\n try {\r\n let UnicodeString: string = Encoding.Unicode.GetString(BytesInUnicode, 0, BytesInUnicode.length);\r\n\r\n result = GuiEnvironment.Environment.GetEncoding().GetBytes(UnicodeString);\r\n }\r\n catch (Exception) {\r\n result = null;\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary> Assumes the given blob contains a string and returns it. If the content type of the blob is not Unicode\r\n /// then assume it is ANSI.\r\n ///\r\n /// </summary>\r\n /// <param name=\"blob\">a valid representation of a blob\r\n /// </param>\r\n /// <returns> the string contained by the blob\r\n /// </returns>\r\n static getString(blob: string): string {\r\n let result: string = null;\r\n let bytes: Uint8Array = null;\r\n\r\n if (BlobType.isValidBlob(blob)) {\r\n let contentType: string = BlobType.getContentType(blob);\r\n if (contentType !== BlobType.CONTENT_TYPE_UNICODE)\r\n contentType = BlobType.CONTENT_TYPE_ANSI;\r\n\r\n try {\r\n bytes = BlobType.getBytes(blob);\r\n\r\n let encoding: Encoding = BlobType.getEncodingFromContentType(contentType);\r\n result = encoding.GetString(bytes, 0, bytes.length);\r\n\r\n let index: number = result.indexOf('\\0')/*'\u0000'*/;\r\n if (index !== -1)\r\n result = result.substr(0, index);\r\n }\r\n catch (Exception) {\r\n result = null;\r\n }\r\n }\r\n else\r\n Debug.Assert(false);\r\n\r\n return result;\r\n }\r\n\r\n /// <summary> Create a blob of the specified content type from the display string\r\n /// </summary>\r\n /// <param name=\"blobStr\"></param>\r\n /// <param name=\"contentType\"></param>\r\n /// <returns></returns>\r\n static createFromString(blobStr: string, contentType: string): string {\r\n let blob: string = null;\r\n let srcContentType: string = contentType;\r\n let bytes: Uint8Array = null;\r\n\r\n if (contentType !== BlobType.CONTENT_TYPE_UNICODE)\r\n srcContentType = BlobType.CONTENT_TYPE_ANSI;\r\n\r\n try {\r\n if(blobStr.constructor === ArrayBuffer) {\r\n bytes = new Uint8Array(<ArrayBuffer><any>blobStr);\r\n }\r\n else {\r\n let encoding: Encoding = BlobType.getEncodingFromContentType(srcContentType);\r\n\r\n bytes = encoding.GetBytes(blobStr);\r\n }\r\n blob = BlobType.createFromBytes(bytes, contentType);\r\n }\r\n catch (Exception) {\r\n blob = null;\r\n }\r\n\r\n return blob;\r\n }\r\n\r\n /// <summary> Get blob contents as byte array\r\n ///\r\n /// </summary>\r\n /// <param name=\"blob\">contents including blob prefix\r\n /// </param>\r\n /// <returns> byte array according to content type in blob prefix\r\n /// </returns>\r\n static getBytes(str: string): Uint8Array {\r\n let bytes: Uint8Array = null;\r\n let data: string = BlobType.removeBlobPrefix(str);\r\n\r\n try {\r\n let encoding: Encoding = ISO_8859_1_Encoding.ISO_8859_1;\r\n bytes = encoding.GetBytes(data);\r\n }\r\n catch (Exception) {\r\n bytes = null;\r\n }\r\n\r\n return bytes;\r\n }\r\n\r\n /// <summary> Create a blob of the specified content type from the byte array\r\n ///\r\n /// </summary>\r\n /// <param name=\"Bytes\">\r\n /// </param>\r\n /// <param name=\"contentType\">\r\n /// </param>\r\n /// <returns> string\r\n /// </returns>\r\n static createFromBytes(bytes: Uint8Array, contentType: string): string {\r\n let blobStr = '';\r\n let blobPrefix: string;\r\n let blobData: string;\r\n\r\n blobPrefix = BlobType.getBlobPrefixForContentType(contentType);\r\n\r\n try {\r\n let encoding: ISO_8859_1_Encoding = ISO_8859_1_Encoding.ISO_8859_1;\r\n blobData = encoding.GetString(bytes, 0, bytes.length);\r\n }\r\n catch (Exception) {\r\n blobData = null;\r\n }\r\n\r\n blobStr = blobPrefix + blobData;\r\n\r\n return blobStr;\r\n }\r\n\r\n /// <param name=\"dest\">\r\n /// </param>\r\n /// <param name=\"src\">\r\n /// </param>\r\n /// <returns>\r\n /// </returns>\r\n static copyBlob(dest: string, src: string): string {\r\n let srcBytes: Uint8Array;\r\n let destBytes: Uint8Array;\r\n\r\n if (src === null)\r\n return null;\r\n else if (dest === null)\r\n return src;\r\n\r\n srcBytes = BlobType.getBytes(src);\r\n\r\n let destContentType: string = BlobType.getContentType(dest);\r\n let srcContentType: string = BlobType.getContentType(src);\r\n\r\n if (srcContentType === BlobType.CONTENT_TYPE_ANSI && destContentType === BlobType.CONTENT_TYPE_UNICODE)\r\n destBytes = BlobType.MbToUnicode(srcBytes);\r\n else if (srcContentType === BlobType.CONTENT_TYPE_UNICODE && destContentType === BlobType.CONTENT_TYPE_ANSI)\r\n destBytes = BlobType.UnicodeToMb(srcBytes);\r\n else\r\n destBytes = srcBytes;\r\n\r\n dest = BlobType.createFromBytes(destBytes, destContentType);\r\n\r\n return dest;\r\n }\r\n\r\n /// <summary> removes blob prefix from source</summary>\r\n /// <param name=\"source\">- blob value\r\n ///\r\n ///\r\n /// </param>\r\n static removeBlobPrefix(source: string): string {\r\n let idx: number;\r\n if (source !== null) {\r\n idx = source.indexOf(';');\r\n if (idx < 0)\r\n Logger.Instance.WriteToLog(\"Error: invalid blob prefix\", true);\r\n return source.substr(idx + 1);\r\n }\r\n else\r\n return null;\r\n }\r\n\r\n /// <summary> checks if the given string is a valid blob</summary>\r\n /// <param name=\"blob\">\r\n /// </param>\r\n /// <returns> true if the blob is valid\r\n /// </returns>\r\n static isValidBlob(blob: string): boolean {\r\n let isValid: boolean = true;\r\n\r\n if (blob === null || blob.indexOf(';') < 0)\r\n isValid = false;\r\n\r\n if (isValid) {\r\n let contentType: string = BlobType.getContentType(blob);\r\n if (contentType !== BlobType.CONTENT_TYPE_ANSI && contentType !== BlobType.CONTENT_TYPE_BINARY && contentType !== BlobType.CONTENT_TYPE_UNICODE && contentType !== BlobType.CONTENT_TYPE_UNKNOWN)\r\n isValid = false;\r\n }\r\n return isValid;\r\n }\r\n\r\n static setContentType(str: string, contentType: string): string {\r\n let result: string = \"\";\r\n\r\n try {\r\n let prefixLastIndex: number = str.indexOf(\";\");\r\n let prefix: string = str.substr(0, prefixLastIndex);\r\n\r\n let dataLength: number = str.length - (prefix.length + 1);\r\n let data: string = str.substr(prefixLastIndex + 1, dataLength);\r\n\r\n let prefixTokens: string[] = StrUtil.tokenize(prefix, /,|;/);\r\n\r\n for (let i: number = 0; i < GuiConstants.BLOB_PREFIX_ELEMENTS_COUNT; i = i + 1) {\r\n if (i === 4)\r\n result = result + contentType + \",\";\r\n else\r\n result = result + prefixTokens[i] + \",\";\r\n }\r\n return result.substr(0, result.length - 1) + \";\" + data;\r\n }\r\n catch (Exception) {\r\n throw new ApplicationException(\" in BlobType.setContentType : invalid format\");\r\n }\r\n }\r\n\r\n /// <summary> Replace the vector's cell attribute in the blob prefix by the specified one</summary>\r\n /// <param name=\"str\">a valid blob string (i.e. prefix;data) </param>\r\n /// <param name=\"vecCellAttr\">attribute to insert into the prefix </param>\r\n /// <returns> modified blob string </returns>\r\n static SetVecCellAttr(str: string, vecCellAttr: StorageAttribute): string {\r\n let result: string = \"\";\r\n try {\r\n let prefixLastIndex: number = str.indexOf(\";\");\r\n let prefix: string = str.substr(0, prefixLastIndex);\r\n\r\n let data: string = str.substr(prefixLastIndex + 1);\r\n\r\n let tokens: string[] = StrUtil.tokenize(prefix, /,|;/);\r\n\r\n for (let i: number = 0; i < GuiConstants.BLOB_PREFIX_ELEMENTS_COUNT; i = i + 1) {\r\n if (i === 3)\r\n result = result + <string>vecCellAttr + \",\";\r\n else\r\n result = result + tokens[i] + \",\";\r\n }\r\n return result.substr(0, result.length - 1) + \";\" + data;\r\n }\r\n catch (Exception) {\r\n throw new ApplicationException(\" in XMLparser.blobPrefixLength invalid format\");\r\n }\r\n }\r\n\r\n /// <summary> Returns the Vector' cell attribute from the prefix. </summary>\r\n /// <param name=\"blobStr\">A valid blob string (i.e. prefix;data) </param>\r\n /// <returns></returns>\r\n static GetVecCellAttr(blobStr: string): string {\r\n try {\r\n let tokens: string[] = StrUtil.tokenize(blobStr, /,|;/);\r\n\r\n return tokens[3].charAt(0);\r\n }\r\n catch (Exception) {\r\n throw new ApplicationException(\" in BlobType.GetVecCellAttr(): blob is in invalid format\");\r\n }\r\n }\r\n\r\n /// <summary> Calculate the length of the blob prefix. The prefix is in the format:\r\n /// <tt>\"ObjHandle,VariantIdx,ContentType,VecCellAttr;\"</tt>. The length includes the commas and the\r\n /// semicolon.\r\n ///\r\n /// </summary>\r\n /// <param name=\"blob\">a valid blob\r\n /// </param>\r\n /// <returns> the blob prefix length\r\n /// </returns>\r\n static blobPrefixLength(blob: string): number {\r\n try {\r\n let prefixLength: number = blob.indexOf(';') + 1;\r\n let prefix: string = blob.substr(0, prefixLength);\r\n\r\n // check if the prefix is valid\r\n if (prefixLength > 0) {\r\n let tokens: string[] = StrUtil.tokenize(prefix, \",\");\r\n if (tokens.length === GuiConstants.BLOB_PREFIX_ELEMENTS_COUNT)\r\n return prefixLength;\r\n }\r\n }\r\n catch (Exception) {\r\n // invalid prefix\r\n }\r\n\r\n throw new ApplicationException(\" in XMLparser.blobPrefixLength invalid format\");\r\n }\r\n\r\n /// <summary>\r\n /// gets the key from a blob string\r\n /// </summary>\r\n /// <param name=\"blobStr\"></param>\r\n /// <returns></returns>\r\n static getKey(blobStr: string): number {\r\n let tokens: string[] = StrUtil.tokenize(blobStr, /,|;/);\r\n let key: number = 0;\r\n\r\n if (tokens.length > 5) {\r\n try {\r\n key = NNumber.Parse(tokens[0]);\r\n }\r\n catch (Exception) {\r\n }\r\n }\r\n\r\n return key;\r\n }\r\n\r\n /// <summary> calculates the blob size held in the string\r\n /// </summary>\r\n /// <param name=\"blob\"> The string holding the blob </param>\r\n /// <returns></returns>\r\n static getBlobSize(blob: string): number {\r\n let size: number = 0;\r\n\r\n try {\r\n let tokens: string[] = StrUtil.tokenize(blob, /,|;/);\r\n if (tokens.length > 5) {\r\n size = blob.length;\r\n for (let i: number = 0; i < 5; i = i + 1) {\r\n size = size - tokens[i].length;\r\n size = size - 1;\r\n }\r\n }\r\n }\r\n catch (Exception) {\r\n }\r\n\r\n return size;\r\n }\r\n\r\n /// <summary>\r\n /// Parse content type\r\n /// </summary>\r\n /// <param name=\"contentType\"></param>\r\n /// <returns></returns>\r\n static ParseContentType(contentType: number): string {\r\n let newContentType: string = ' ';\r\n switch (contentType) {\r\n case 0:\r\n newContentType = BlobType.CONTENT_TYPE_UNKNOWN;\r\n break;\r\n case 1:\r\n newContentType = BlobType.CONTENT_TYPE_ANSI;\r\n break;\r\n case 2:\r\n newContentType = BlobType.CONTENT_TYPE_UNICODE;\r\n break;\r\n case 3:\r\n newContentType = BlobType.CONTENT_TYPE_BINARY;\r\n }\r\n return newContentType;\r\n }\r\n}\r\n","import { MsgInterface, PICInterface, StorageAttribute, UtilImeJpn, UtilStrByteMode } from '@magic-xpa/utils';\r\nimport { Events } from '../../Events';\r\nimport { ApplicationException, Int32, NString, StringBuilder } from '@magic-xpa/mscorelib';\r\nimport { GuiEnvironment } from '../../GuiEnvironment';\r\n\r\n/// <summary>\r\n/// The class handles the process of converting internal data to displayed data\r\n/// by using a specific format.\r\n/// The class implements the PIC structure of Magic, and all its related operations.\r\n/// </summary>\r\n// @dynamic\r\nexport class PIC {\r\n // --------------------------------------------------------------------------\r\n // Original members of the Magic PIC structure\r\n // --------------------------------------------------------------------------\r\n private _mskLen: number = 0; // The mask len\r\n private _negPref: StringBuilder = new StringBuilder();\r\n private _negSuff: StringBuilder = new StringBuilder();\r\n private _picAttr: StorageAttribute = StorageAttribute.NONE;\r\n private _posPref: StringBuilder = new StringBuilder();\r\n private _posSuff: StringBuilder = new StringBuilder();\r\n private _autoSkip_: boolean = false; // Autoskip ?\r\n private _padFill: boolean = false; // Pad fill ?\r\n private _zeroFill: boolean = false; // Zero fill ?\r\n private _comma: boolean = false; // Display numbers with commas ?\r\n private _decimalDigits: number = 0; // Decimal digits\r\n private _decPointIsFirst: boolean = false;\r\n private _decimal: boolean = false; // Decimals ?\r\n private _embeded: boolean = false; // Embeded characters ?\r\n private _formatIdx: number = 0; // Current char processed in format_;\r\n private _format: string[] = null; // The format processed\r\n private hebrew: boolean = false; // Hebrew ?\r\n private _imeMode: number = -1; // JPN: IME support\r\n private _left: boolean = false; // Left justified ?\r\n private _maskLength: number = 0;\r\n private _maskChars: number = 0; // Mask chars count\r\n private _maskSize: number = 0; // Size of picture i/o mask\r\n private _mixed: boolean = false; // Mixed language ?\r\n private _formatExp:boolean = false;\r\n // --------------------------------------------------------------------------\r\n // Added variables\r\n // --------------------------------------------------------------------------\r\n private _msk: string[] = null; // The mask for the specified picture format\r\n private _needLength: boolean = false; // get length of the picture after parsing\r\n private _negative: boolean = false; // Negative values allowed ?\r\n private _pad: string = '\\0'; // Pad character\r\n private _prefLen: number = 0;\r\n private _size: number = 0; // Size of Alpha data without mask characters\r\n private _suffLen: number = 0;\r\n private _termFlag: boolean = false; // are terminators specified ?\r\n private _trim: boolean = false; // Trim ?\r\n private _whole: number = 0; // Whole digits\r\n private _zero: string = '\\0'; // Zero character\r\n\r\n\r\n /// <summary>\r\n /// Builds a PIC class from picture format and attribute\r\n /// </summary>\r\n /// <param name = \"picStr\">The picture format string</param>\r\n /// <param name = \"attr\">The data attribute (N/A/D/T/...)</param>\r\n constructor(picStr: string, attr: StorageAttribute, compIdx: number) {\r\n this._picAttr = attr;\r\n\r\n if (this._picAttr === StorageAttribute.BLOB ||\r\n this._picAttr === StorageAttribute.BLOB_VECTOR) {\r\n if (picStr.trim().length > 0) {\r\n Events.WriteDevToLog(\"PIC.PIC the picture of BLOB must be empty string\");\r\n }\r\n return;\r\n }\r\n\r\n this._format = NString.ToCharArray(picStr);\r\n this._formatIdx = 0;\r\n\r\n this._mskLen = this.getMaskLen(compIdx);\r\n this.prs_all(compIdx);\r\n\r\n }\r\n\r\n /// <summary>\r\n /// Get information methods\r\n /// </summary>\r\n /// <returns></returns>\r\n isHebrew(): boolean {\r\n return this.hebrew;\r\n }\r\n\r\n isMixed(): boolean {\r\n return this._mixed;\r\n }\r\n\r\n embededChars(): boolean {\r\n return this._embeded;\r\n }\r\n\r\n isNegative(): boolean {\r\n return this._negative;\r\n }\r\n\r\n withComa(): boolean {\r\n return this._comma;\r\n }\r\n\r\n isLeft(): boolean {\r\n return this._left;\r\n }\r\n\r\n padFill(): boolean {\r\n return this._padFill;\r\n }\r\n\r\n getPad(): string {\r\n return this._pad;\r\n }\r\n\r\n zeroFill(): boolean {\r\n return this._zeroFill;\r\n }\r\n\r\n getZeroPad(): string {\r\n return this._zero;\r\n }\r\n\r\n isTrimed(): boolean {\r\n return this._trim;\r\n }\r\n\r\n autoSkip(): boolean {\r\n return this._autoSkip_;\r\n }\r\n\r\n withDecimal(): boolean {\r\n return this._decimal;\r\n }\r\n\r\n withTerm(): boolean {\r\n return this._termFlag;\r\n }\r\n\r\n getMaskChars(): number {\r\n return this._maskChars;\r\n }\r\n\r\n getWholes(): number {\r\n return this._whole;\r\n }\r\n\r\n getDec(): number {\r\n return this._decimalDigits;\r\n }\r\n\r\n getSize(): number {\r\n return this._size;\r\n }\r\n\r\n getMaskSize(): number {\r\n return this._maskSize;\r\n }\r\n\r\n getMaskLength(): number {\r\n return this._maskLength;\r\n }\r\n\r\n decInFirstPos(): boolean {\r\n return this._decPointIsFirst;\r\n }\r\n\r\n setFormatExp(val :boolean) {\r\n this._formatExp = val;\r\n }\r\n\r\n isFormatExp(): boolean {\r\n return this._formatExp;\r\n }\r\n getPosPref_(): string {\r\n return this._posPref.ToString();\r\n }\r\n\r\n getPosSuff_(): string {\r\n return this._posSuff.ToString();\r\n }\r\n\r\n getNegPref_(): string {\r\n return this._negPref.ToString();\r\n }\r\n\r\n getNegSuff_(): string {\r\n return this._negSuff.ToString();\r\n }\r\n\r\n getMask(): string {\r\n return NString.FromChars(this._msk);\r\n }\r\n\r\n getFormat(): string {\r\n return NString.FromChars(this._format);\r\n }\r\n\r\n getAttr(): StorageAttribute {\r\n return this._picAttr;\r\n }\r\n\r\n\r\n setAttr(set:StorageAttribute): void {\r\n this._picAttr == set;\r\n }\r\n\r\n getImeMode(): number {\r\n return this._imeMode;\r\n }\r\n\r\n /// <summary>\r\n /// Parse the picture format by the attribute\r\n /// </summary>\r\n private prs_all(compIdx: number): void {\r\n if (!this._needLength) {\r\n this._msk = new Array<string>(this._mskLen);\r\n for (let _ai: number = 0; _ai < this._msk.length; ++_ai)\r\n this._msk[_ai] = '\\0';\r\n }\r\n switch (this._picAttr) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n this.alpha_prs();\r\n break;\r\n\r\n case StorageAttribute.NUMERIC:\r\n this.num_prs();\r\n break;\r\n\r\n case StorageAttribute.DATE:\r\n this.date_prs(compIdx);\r\n break;\r\n\r\n case StorageAttribute.TIME:\r\n this.time_prs();\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n this.bool_prs();\r\n break;\r\n\r\n case StorageAttribute.BLOB:\r\n // do nothing\r\n case StorageAttribute.BLOB_VECTOR:\r\n break;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Parse an alpha picture format\r\n /// </summary>\r\n private alpha_prs(): void {\r\n let currChr: string;\r\n let drv: number;\r\n let count: number;\r\n\r\n while (this._formatIdx < this._format.length) {\r\n currChr = this._format[this._formatIdx];\r\n switch (currChr) {\r\n case 'H':\r\n this._formatIdx++;\r\n this.setHebrew();\r\n break;\r\n\r\n case 'A':\r\n this._autoSkip_ = true;\r\n this._formatIdx++;\r\n break;\r\n\r\n case '#':\r\n case 'L':\r\n case 'U':\r\n case 'X':\r\n drv = 0;\r\n switch (currChr) {\r\n case '#':\r\n drv = PICInterface.PIC_N;\r\n break;\r\n\r\n case 'L':\r\n drv = PICInterface.PIC_L;\r\n break;\r\n\r\n case 'U':\r\n drv = PICInterface.PIC_U;\r\n break;\r\n\r\n case 'X':\r\n drv = PICInterface.PIC_X;\r\n break;\r\n }\r\n this._formatIdx++;\r\n count = this.pik_count();\r\n this.pik_drv_fill(drv, count);\r\n break;\r\n\r\n default:\r\n if (UtilStrByteMode.isLocaleDefLangDBCS()) // JPN: DBCS support\r\n {\r\n // JPN: IME support\r\n let useImeJpn: boolean = UtilStrByteMode.isLocaleDefLangJPN();\r\n if (currChr === 'K' && useImeJpn) {\r\n if (this.pic_kanji())\r\n break;\r\n }\r\n\r\n if (GuiEnvironment.Environment.GetLocalAs400Set()) {\r\n drv = 0;\r\n\r\n if (currChr === 'J')\r\n drv = PICInterface.PIC_J;\r\n else if (currChr === 'T')\r\n drv = PICInterface.PIC_T;\r\n else if (currChr === 'G')\r\n drv = PICInterface.PIC_G;\r\n else if (currChr === 'S')\r\n drv = PICInterface.PIC_S;\r\n\r\n if (drv !== 0) {\r\n // JPN: IME support\r\n // calculate IME mode from AS/400 pictures if Kanji parameter isn't specified.\r\n if (this._imeMode === -1 && useImeJpn) {\r\n if (drv === PICInterface.PIC_J || drv === PICInterface.PIC_G)\r\n this._imeMode = UtilImeJpn.IME_ZEN_HIRAGANA_ROMAN;\r\n else if (drv === PICInterface.PIC_S)\r\n this._imeMode = UtilImeJpn.IME_FORCE_OFF;\r\n }\r\n this._formatIdx++;\r\n count = this.pik_count();\r\n this.pik_drv_fill(drv, count);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (UtilStrByteMode.isDigit(currChr)) {\r\n count = this.pik_count();\r\n this.pik_drv_fill(PICInterface.PIC_X, count);\r\n }\r\n else\r\n this.pik_mask();\r\n break;\r\n }\r\n }\r\n\r\n // In case that no picture is specified, assume all is Xs\r\n if (this._maskSize === 0)\r\n this.pik_drv_fill(PICInterface.PIC_X, this._mskLen);\r\n\r\n // Compute mask size without the mask characters\r\n this._size = this._maskSize;\r\n if (!this._embeded)\r\n this._size -= this._maskChars;\r\n }\r\n\r\n /// <summary>\r\n /// Parse a numeric picture format\r\n /// </summary>\r\n private num_prs(): void {\r\n let i: number;\r\n let j: number;\r\n let currChr: string;\r\n let count: number;\r\n let tmp: number;\r\n let tmps: number;\r\n let tmp_c: number = 0;\r\n let first: boolean = true;\r\n\r\n\r\n this._zero = ' '/*' '*/;\r\n this._pad = ' '/*' '*/;\r\n this._negPref.Append('-')/*'-'*/;\r\n\r\n for (i = 0; i < this._format.length; i = i + 1) {\r\n if (this._format[i] === '+' /*'+'*/ || this._format[i] === '-'/*'-'*/) {\r\n break;\r\n }\r\n if (this._format[i] === '\\\\' /*'\\'*/ || this._format[i] === 'P'/*'P'*/) {\r\n i = i + 1;\r\n }\r\n if (this._format[i] === 'C'/*'C'*/) {\r\n this._comma = true;\r\n }\r\n }\r\n\r\n while (this._formatIdx < this._format.length) {\r\n currChr = this._format[this._formatIdx];\r\n switch (currChr) {\r\n case 'N':\r\n this._formatIdx++;\r\n this._negative = true;\r\n break;\r\n\r\n case 'C':\r\n this._formatIdx++;\r\n this._comma = true;\r\n break;\r\n\r\n case 'L':\r\n this._formatIdx++;\r\n this._left = true;\r\n break;\r\n\r\n case 'P':\r\n this._formatIdx++;\r\n this._padFill = true;\r\n if (this._formatIdx < this._format.length)\r\n this._pad = this._format[this._formatIdx++];\r\n break;\r\n\r\n case 'Z':\r\n this._formatIdx++;\r\n this._zeroFill = true;\r\n if (this._formatIdx < this._format.length)\r\n this._zero = this._format[this._formatIdx++];\r\n break;\r\n\r\n case 'A':\r\n this._formatIdx++;\r\n this._autoSkip_ = true;\r\n break;\r\n\r\n case '.':\r\n this._formatIdx++;\r\n if (this._needLength)\r\n this._maskLength++;\r\n this._decimal = true;\r\n if (this._maskSize < this._mskLen)\r\n this._msk[this._maskSize] = String.fromCharCode(PICInterface.PIC_N);\r\n // --------------------------------------------------------------\r\n // 26/11/97 Shay Z. Bug #770526 - Mark that\r\n // Decimal Point is in First Position:\r\n // --------------------------------------------------------------\r\n if (this._maskSize === 0)\r\n this._decPointIsFirst = true;\r\n this._maskSize++;\r\n break;\r\n\r\n case '+':\r\n case '-':\r\n this.pik_sign();\r\n break;\r\n\r\n default:\r\n if (UtilStrByteMode.isDigit(currChr) || currChr === '#') {\r\n tmp = this._formatIdx;\r\n if (currChr === '#')\r\n this._formatIdx++;\r\n count = this.pik_count();\r\n this.pik_drv_fill(PICInterface.PIC_N, count);\r\n if (this._format[tmp] === '#') {\r\n if (count === 1) {\r\n tmps = this._formatIdx;\r\n this._formatIdx = tmp;\r\n tmp_c = this.pik_dup();\r\n this._formatIdx = tmps;\r\n }\r\n if (first && (tmp_c > 0 || count > 1)) {\r\n if (count > 1)\r\n tmp_c = count;\r\n // add commas befor places\r\n if (this._comma && !this._decimal)\r\n this.pik_drv_fill(PICInterface.PIC_N, Math.floor((tmp_c - 1) / 3));\r\n first = false;\r\n }\r\n }\r\n // add commas befor places\r\n else if (this._comma && !this._decimal)\r\n this.pik_drv_fill(PICInterface.PIC_N, Math.floor((count - 1) / 3));\r\n\r\n if (this._decimal)\r\n this._decimalDigits += count;\r\n else\r\n this._whole += count;\r\n }\r\n else\r\n this.pik_mask();\r\n break;\r\n }\r\n }\r\n\r\n// Store the maximal length of sign prefix and suffix between negative and positive\r\n this._prefLen = this._posPref.Length;\r\n this._suffLen = this._posSuff.Length;\r\n if (this._negative) {\r\n if (this._negPref.Length > this._prefLen) {\r\n this._prefLen = this._negPref.Length;\r\n }\r\n if (this._negSuff.Length > this._suffLen) {\r\n this._suffLen = this._negSuff.Length;\r\n }\r\n }\r\n\r\n // Check for a format without digits\r\n if (this._whole === 0 && this._decimalDigits === 0) {\r\n count = PICInterface.PIC_MAX_MSK_LEN - this._prefLen - this._suffLen;\r\n if (this._maskSize < count) {\r\n this._whole = count - this._maskSize;\r\n if (this._comma)\r\n this._whole -= Math.floor(this._whole / 4);\r\n this.pik_drv_fill(PICInterface.PIC_N, this._whole);\r\n }\r\n }\r\n\r\n // add extra for pref/suff and commas\r\n if (this._comma) {\r\n count = Math.floor((this._whole - 1) / 3);\r\n this.pik_drv_fill(PICInterface.PIC_N, count);\r\n // remove commas places\r\n this._maskSize -= count;\r\n }\r\n\r\n i = this._prefLen;\r\n if (i > 0 && this._msk != null) {\r\n if ((this._maskSize + i) <= this._mskLen) {\r\n for (j = this._maskSize - 1;\r\n j >= 0;\r\n j--)\r\n this._msk[j + i] = this._msk[j];\r\n // memset (this->msk, PIC_N, i); // Original Line\r\n for (j = 0;\r\n j < i;\r\n j++)\r\n if (this._msk != null && j < this._msk.length)\r\n this._msk[j] = String.fromCharCode(PICInterface.PIC_N);\r\n }\r\n this._maskSize += i;\r\n }\r\n i = this._suffLen;\r\n if (i > 0 && this._msk != null) {\r\n if (this._maskSize + this._suffLen <= this._mskLen)\r\n // memset (&Msk[this->pic->mask_size], PIC_N, this->pic->suff_len); // Original Line\r\n for (j = 0;\r\n j < this._suffLen;\r\n j++)\r\n this._msk[this._maskSize + j] = String.fromCharCode(PICInterface.PIC_N);\r\n this._maskSize += i;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// getUnformattedNumericPic from current pic\r\n /// </summary>\r\n public getUnformattedNumericPic(): PIC {\r\n let picStr = '';\r\n if (this.isNegative())\r\n picStr = this.isNegative() ? 'N': '';\r\n\r\n picStr += this.getWholes().toString();\r\n\r\n if (this.getDec() > 0)\r\n picStr += '.' + this.getDec().toString();\r\n if (this._zeroFill)\r\n picStr += 'Z';\r\n let newPic = new PIC (picStr, StorageAttribute.NUMERIC, 0);\r\n\r\n return newPic;\r\n }\r\n\r\n /// <summary>\r\n /// Parse a date picture format\r\n /// </summary>\r\n private date_prs(compIdx: number) {\r\n // -----------------------------------------------------------------------\r\n // Original vars\r\n // -----------------------------------------------------------------------\r\n let i: number;\r\n let ocr: number;\r\n let count: number;\r\n let drv: number = 0;\r\n let SwitchAndExpandDate: boolean = false;\r\n let SWExpandDateChecked: boolean = false;\r\n\r\n // -----------------------------------------------------------------------\r\n // Added vars\r\n // -----------------------------------------------------------------------\r\n let currChr: string;\r\n let isJpnEraYear: boolean = false; // JPN: Japanese date picture support\r\n this._zero = ' ';\r\n ocr = 0;\r\n\r\n if (this._format.length === 0 || this._format[0] === '\\0')\r\n this._format = NString.ToCharArray(PIC.getDefaultDateMask(GuiEnvironment.Environment.GetDateMode(compIdx)));\r\n\r\n for (let j = 0; j < this._format.length; j++)\r\n if (this._format[j] === 'H')\r\n this.setHebrew();\r\n\r\n while (this._formatIdx < this._format.length) {\r\n currChr = this._format[this._formatIdx];\r\n switch (currChr) {\r\n case 'H':\r\n this._formatIdx++;\r\n break;\r\n\r\n case 'Z':\r\n this._formatIdx++;\r\n this._zeroFill = true;\r\n if (this._formatIdx < this._format.length)\r\n this._zero = this._format[this._formatIdx++];\r\n break;\r\n\r\n case 'T':\r\n this._formatIdx++;\r\n this._trim = true;\r\n break;\r\n\r\n case 'A':\r\n this._formatIdx++;\r\n this._autoSkip_ = true;\r\n break;\r\n\r\n case 'L':\r\n if (this.hebrew) {\r\n this._formatIdx++;\r\n this.pik_drv_fill(PICInterface.PIC_HL, 1);\r\n }\r\n else\r\n this.pik_mask();\r\n break;\r\n\r\n case 'Y':\r\n count = this.pik_dup();\r\n drv = 0;\r\n i = count;\r\n switch (count) {\r\n case 1:\r\n break;\r\n\r\n case 2:\r\n if (!this.hebrew)\r\n drv = PICInterface.PIC_YY;\r\n break;\r\n\r\n case 4:\r\n if (!this.hebrew)\r\n drv = PICInterface.PIC_YYYY;\r\n else\r\n drv = PICInterface.PIC_HYYYYY;\r\n break;\r\n\r\n case 5:\r\n case 6:\r\n if (this.hebrew)\r\n drv = PICInterface.PIC_HYYYYY;\r\n break;\r\n }\r\n if (drv !== 0) {\r\n this._formatIdx += count;\r\n this.pik_drv_fill(drv, i);\r\n }\r\n else\r\n this.pik_mask();\r\n break;\r\n\r\n case 'M':\r\n count = this.pik_dup();\r\n drv = 0;\r\n if (count === 2)\r\n drv = PICInterface.PIC_MMD;\r\n else if (count > 2) {\r\n drv = PICInterface.PIC_MMM;\r\n if (count > 10)\r\n drv = 0;\r\n }\r\n if (drv !== 0) {\r\n this._formatIdx += count;\r\n this.pik_drv_fill(drv, count);\r\n }\r\n else\r\n this.pik_mask();\r\n break;\r\n\r\n case 'D':\r\n count = this.pik_dup();\r\n drv = 0;\r\n switch (count) {\r\n case 2:\r\n if (!this.hebrew) {\r\n drv = PICInterface.PIC_DD;\r\n break;\r\n }\r\n /* falls through */\r\n case 3:\r\n if (!this.hebrew)\r\n drv = PICInterface.PIC_DDD;\r\n else\r\n drv = PICInterface.PIC_HDD;\r\n break;\r\n\r\n case 4:\r\n if (!this.hebrew)\r\n drv = PICInterface.PIC_DDDD;\r\n else\r\n this.pik_mask();\r\n break;\r\n\r\n default:\r\n this.pik_mask();\r\n break;\r\n }\r\n if (drv !== 0) {\r\n this.pik_drv_fill(drv, count);\r\n this._formatIdx += count;\r\n }\r\n break;\r\n\r\n case '#':\r\n count = this.pik_dup();\r\n if (count === 2) {\r\n drv = 0;\r\n ocr++;\r\n if (!this.hebrew)\r\n switch (GuiEnvironment.Environment.GetDateMode(compIdx)) {\r\n case 'B':\r\n case 'E':\r\n switch (ocr) {\r\n case 1:\r\n drv = PICInterface.PIC_DD;\r\n break;\r\n\r\n case 2:\r\n drv = PICInterface.PIC_MMD;\r\n break;\r\n\r\n case 3:\r\n drv = PICInterface.PIC_YY;\r\n break;\r\n }\r\n break;\r\n\r\n case 'A':\r\n switch (ocr) {\r\n case 1:\r\n drv = PICInterface.PIC_MMD;\r\n break;\r\n\r\n case 2:\r\n drv = PICInterface.PIC_DD;\r\n break;\r\n\r\n case 3:\r\n drv = PICInterface.PIC_YY;\r\n break;\r\n }\r\n break;\r\n\r\n case 'J':\r\n case 'S':\r\n switch (ocr) {\r\n case 1:\r\n if (!SWExpandDateChecked) {\r\n // Check if format_ contains \"####\"\r\n SwitchAndExpandDate = NString.FromChars(this._format).indexOf(\"####\") > -1;\r\n SWExpandDateChecked = true;\r\n }\r\n if (SwitchAndExpandDate)\r\n this.pik_drv_fill(PICInterface.PIC_YYYY, 4);\r\n else\r\n drv = PICInterface.PIC_YY;\r\n break;\r\n\r\n case 2:\r\n drv = PICInterface.PIC_MMD;\r\n break;\r\n\r\n case 3:\r\n drv = PICInterface.PIC_DD;\r\n break;\r\n }\r\n break;\r\n }\r\n if (drv !== 0)\r\n this.pik_drv_fill(drv, 2);\r\n }\r\n else if (count === 4) {\r\n drv = 0;\r\n ocr++;\r\n if (!this.hebrew)\r\n switch (GuiEnvironment.Environment.GetDateMode(compIdx)) {\r\n case 'B':\r\n case 'E':\r\n case 'A':\r\n if (ocr === 3)\r\n drv = PICInterface.PIC_YYYY;\r\n break;\r\n\r\n case 'J':\r\n case 'S':\r\n if (ocr === 1)\r\n drv = PICInterface.PIC_YYYY;\r\n else {\r\n if (!SWExpandDateChecked) {\r\n // Check if format_ contains \"####\"\r\n SwitchAndExpandDate = NString.FromChars(this._format).indexOf(\"####\") > -1;\r\n SWExpandDateChecked = true;\r\n }\r\n if (SwitchAndExpandDate && ocr === 3)\r\n this.pik_drv_fill(PICInterface.PIC_DD, 2);\r\n }\r\n\r\n break;\r\n }\r\n\r\n if (drv !== 0)\r\n this.pik_drv_fill(drv, 4);\r\n }\r\n\r\n this._formatIdx += count;\r\n break;\r\n\r\n\r\n case 'W':\r\n count = this.pik_dup();\r\n i = count;\r\n if (count === 1)\r\n drv = PICInterface.PIC_W;\r\n else if (this.hebrew)\r\n if (count === 5)\r\n drv = PICInterface.PIC_WWW;\r\n else\r\n i = 0;\r\n else if (count > 2 && count <= 10)\r\n drv = PICInterface.PIC_WWW;\r\n else\r\n i = 0;\r\n this._formatIdx += count;\r\n this.pik_drv_fill(drv, i);\r\n break;\r\n\r\n case '/':\r\n this._formatIdx++;\r\n this.pik_drv_fill(GuiEnvironment.Environment.GetDate().charCodeAt(0), 1);\r\n break;\r\n\r\n case 'S': // JPN: Japanese date picture support\r\n\r\n if (UtilStrByteMode.isLocaleDefLangJPN()) {\r\n count = this.pik_dup();\r\n i = count;\r\n\r\n if (count !== 2 && count !== 4 && count !== 6)\r\n i = 0;\r\n\r\n drv = PICInterface.PIC_BB;\r\n this._formatIdx += count;\r\n this.pik_drv_fill(drv, i);\r\n }\r\n else {\r\n this.pik_mask();\r\n }\r\n break;\r\n\r\n case 'J': // JPN: Japanese date picture support\r\n\r\n if (UtilStrByteMode.isLocaleDefLangJPN()) {\r\n count = this.pik_dup();\r\n i = count;\r\n isJpnEraYear = true;\r\n\r\n switch (count) {\r\n case 1:\r\n drv = PICInterface.PIC_JY1;\r\n break;\r\n\r\n case 2:\r\n drv = PICInterface.PIC_JY2;\r\n break;\r\n\r\n case 4:\r\n drv = PICInterface.PIC_JY4;\r\n break;\r\n\r\n default:\r\n i = 0;\r\n isJpnEraYear = false;\r\n break;\r\n }\r\n\r\n this._formatIdx += count;\r\n this.pik_drv_fill(drv, i);\r\n }\r\n else {\r\n this.pik_mask();\r\n }\r\n break;\r\n\r\n\r\n default:\r\n this.pik_mask();\r\n break;\r\n }\r\n }\r\n\r\n if (!this._needLength && isJpnEraYear)\r\n// JPN: Japanese date picture support\r\n {\r\n for (i = 0;\r\n i < this._msk.length;\r\n i++) {\r\n if (this._msk[i].charCodeAt(0) === PICInterface.PIC_YY)\r\n this._msk[i] = String.fromCharCode( PICInterface.PIC_YJ);\r\n else if (this._msk[i].charCodeAt(0) === PICInterface.PIC_YYYY)\r\n this._msk[i] = 'Y';\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Parse a numeric picture format\r\n /// </summary>\r\n private time_prs(): void {\r\n // -----------------------------------------------------------------------\r\n // Original vars\r\n // -----------------------------------------------------------------------\r\n let drv: number;\r\n let NoFormat: string;\r\n // -----------------------------------------------------------------------\r\n // Added vars\r\n // -----------------------------------------------------------------------\r\n let currChr: string;\r\n\r\n this._zero = ' ';\r\n\r\n // -----------------------------------------------------------------------\r\n // Use a default format, if one is not specified\r\n // -----------------------------------------------------------------------\r\n if (this._format.length === 0 || this._format[0].charCodeAt(0) === 0) {\r\n NoFormat = \"HH:MM:SS\";\r\n if (this._mskLen < 8)\r\n NoFormat = NoFormat.substr(0, this._mskLen); // NoFormat[this->msk_len] = 0; // Original Line\r\n this._format = NString.ToCharArray(NoFormat);\r\n }\r\n\r\n while (this._formatIdx < this._format.length) {\r\n currChr = this._format[this._formatIdx];\r\n\r\n let maskLength: number;\r\n switch (currChr) {\r\n case 'H':\r\n case 'M':\r\n case 'S':\r\n maskLength = 2;\r\n /* we parse 'H/M/S' only if it has one similar character after it (i.e. 'HH'/'MM'/'SS') */\r\n if (this._formatIdx + 1 < this._format.length && this._format[this._formatIdx] === this._format[this._formatIdx + 1]) {\r\n switch (currChr) {\r\n case 'H':\r\n drv = PICInterface.PIC_HH;\r\n break;\r\n\r\n case 'M':\r\n drv = PICInterface.PIC_MMT;\r\n break;\r\n\r\n case 'S':\r\n drv = PICInterface.PIC_SS;\r\n break;\r\n\r\n default:\r\n drv = PICInterface.NULL_CHAR;\r\n break;\r\n }\r\n this._formatIdx += maskLength;\r\n this.pik_drv_fill(drv, maskLength);\r\n }\r\n else\r\n this.pik_mask();\r\n break;\r\n\r\n case 'm':\r\n maskLength = 3;\r\n /* we parse 'm' only if it has 2 similar characters after it (i.e. 'mmm') */\r\n if (this._formatIdx + 2 < this._format.length &&\r\n (this._format[this._formatIdx] === this._format[this._formatIdx + 1] &&\r\n this._format[this._formatIdx + 1] === this._format[this._formatIdx + 2])) {\r\n drv = PICInterface.PIC_MS;\r\n this._formatIdx += maskLength;\r\n this.pik_drv_fill(drv, maskLength);\r\n }\r\n else\r\n this.pik_mask();\r\n break;\r\n\r\n case ':':\r\n this._formatIdx++;\r\n this.pik_drv_fill(GuiEnvironment.Environment.GetTime().charCodeAt(0), 1);\r\n break;\r\n\r\n case 'Z':\r\n this._formatIdx++;\r\n this._zeroFill = true;\r\n if (this._formatIdx < this._format.length)\r\n this._zero = this._format[this._formatIdx++];\r\n break;\r\n\r\n case 'A':\r\n this._formatIdx++;\r\n this._autoSkip_ = true;\r\n break;\r\n\r\n case 'P':\r\n if (this._format[this._formatIdx + 1] === 'M')\r\n // changed from format_[1] -> format_[formatIdx_+1]\r\n {\r\n this._formatIdx += 2;\r\n this.pik_drv_fill(PICInterface.PIC_PM, 2);\r\n }\r\n else\r\n this.pik_mask();\r\n break;\r\n\r\n default:\r\n this.pik_mask();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Build Picture for the variable of the 'type' with 'value'\r\n /// </summary>\r\n /// <param name = \"type\">of the picture</param>\r\n /// <param name = \"value\">is needed to be evaluated with the picture</param>\r\n /// <returns> PICture of the needed 'type'</returns>\r\n public static buildPicture(type: StorageAttribute, val: string, compIdx: number, useDecimal: boolean): PIC {\r\n let pic: PIC = null;\r\n let mask: StringBuilder = new StringBuilder(10);\r\n let decimalSeparator: string;\r\n let thousands: string;\r\n let currChar: string;\r\n let counter: number;\r\n let length: number;\r\n let beforeDec: number;\r\n let afterDec: number;\r\n let decimalDelimFound: boolean;\r\n let isThousandsDelim: boolean;\r\n let isNegative: boolean;\r\n\r\n switch (type) {\r\n case StorageAttribute.NUMERIC:\r\n decimalSeparator = GuiEnvironment.Environment.GetDecimal();\r\n thousands = GuiEnvironment.Environment.GetThousands();\r\n beforeDec = afterDec = 0;\r\n decimalDelimFound = false;\r\n isThousandsDelim = false;\r\n isNegative = false;\r\n\r\n if (val === null || val.length === 0)\r\n beforeDec = afterDec = 1;\r\n else {\r\n length = val.length;\r\n counter = 0;\r\n\r\n while (counter < length) {\r\n currChar = val[counter];\r\n switch (currChar) {\r\n case '+':\r\n case '-':\r\n isNegative = true;\r\n break;\r\n\r\n\r\n default:\r\n if (useDecimal && currChar === decimalSeparator)\r\n decimalDelimFound = true;\r\n else if (currChar === thousands)\r\n isThousandsDelim = true;\r\n else if (decimalDelimFound)\r\n afterDec++;\r\n else\r\n beforeDec++;\r\n break;\r\n }\r\n counter++;\r\n } // end of while for looking in the value\r\n\r\n mask.Append(\"\" + beforeDec + decimalSeparator + afterDec);\r\n if (isNegative)\r\n mask.Append('N');\r\n if (isThousandsDelim)\r\n mask.Append('C');\r\n }\r\n break;\r\n\r\n\r\n case StorageAttribute.DATE:\r\n mask.Append(this.getDefaultDateMask(GuiEnvironment.Environment.GetDateMode(compIdx)));\r\n break;\r\n\r\n\r\n case StorageAttribute.TIME:\r\n mask.Append(\"HH\" + GuiEnvironment.Environment.GetTime() + \"MM\" + GuiEnvironment.Environment.GetTime() + \"SS\");\r\n\r\n break;\r\n\r\n\r\n default:\r\n Events.WriteDevToLog(\"Event.buildPicture() there is no PICTURE building for type :\" + type +\r\n \" and value :\" + val);\r\n return pic; // null, the PIC didn't build\r\n }\r\n\r\n pic = new PIC(mask.ToString(), type, compIdx);\r\n return pic;\r\n }\r\n\r\n/// <summary>\r\n/// set Hebrew to true\r\n/// </summary>\r\n setHebrew(): void {\r\n // Defect 116258. Set hebrew flag only for hebrew mgconst.\r\n if (GuiEnvironment.Environment.Language === 'H')\r\n this.hebrew = true;\r\n }\r\n\r\n/// <summary>\r\n/// get default mask for Date type\r\n/// </summary>\r\n/// <param name = \"dataMode\">- data mode (J,S,B,E,A)</param>\r\n/// <returns> mask of default date</returns>\r\n protected static getDefaultDateMask(dataMode: string) {\r\n let frmt: string;\r\n switch (dataMode) {\r\n case 'J':\r\n case 'S':\r\n frmt = \"####/##/##\";\r\n break;\r\n\r\n case 'B':\r\n case 'E':\r\n case 'A':\r\n default:\r\n frmt = \"##/##/####\";\r\n break;\r\n }\r\n return frmt;\r\n }\r\n\r\n/// <summary>\r\n/// Parse a numeric picture format\r\n/// </summary>\r\n private bool_prs(): void {\r\n // -----------------------------------------------------------------------\r\n // Original vars\r\n // -----------------------------------------------------------------------\r\n let count: number; // Count of direvtive or mask character\r\n // -----------------------------------------------------------------------\r\n // Added vars\r\n // -----------------------------------------------------------------------\r\n let currChr: string;\r\n\r\n while (this._formatIdx < this._format.length) {\r\n currChr = this._format[this._formatIdx];\r\n switch (currChr) {\r\n case 'H':\r\n this._formatIdx++;\r\n this.setHebrew();\r\n break;\r\n\r\n\r\n case 'A':\r\n this._formatIdx++;\r\n this._autoSkip_ = true;\r\n break;\r\n\r\n\r\n case 'X':\r\n this._formatIdx++;\r\n count = this.pik_count();\r\n this.pik_drv_fill(PICInterface.PIC_X, count);\r\n break;\r\n\r\n\r\n default:\r\n if (UtilStrByteMode.isDigit(currChr)) {\r\n count = this.pik_count();\r\n this.pik_drv_fill(PICInterface.PIC_X, count);\r\n }\r\n else\r\n this.pik_mask();\r\n break;\r\n }\r\n }\r\n\r\n // -----------------------------------------------------------------------\r\n // Fill in an empty format\r\n // -----------------------------------------------------------------------\r\n if (this._maskSize === 0)\r\n this.pik_drv_fill(PICInterface.PIC_X, this._mskLen);\r\n }\r\n\r\n/// <summary>\r\n/// Parse the sign prefix/suffix from the format\r\n/// </summary>\r\n private pik_sign(): void {\r\n let posSign: boolean;\r\n let signStr: StringBuilder;\r\n let currChr: string;\r\n\r\n posSign = this._format[this._formatIdx] === '+'\r\n ? true\r\n : false;\r\n this._formatIdx++;\r\n\r\n if (posSign)\r\n signStr = this._posPref;\r\n else {\r\n this._negPref.Remove(0, this._negPref.Length);\r\n signStr = this._negPref;\r\n }\r\n\r\n while (this._formatIdx < this._format.length) {\r\n currChr = this._format[this._formatIdx];\r\n switch (currChr) {\r\n case ';':\r\n this._formatIdx++;\r\n return;\r\n\r\n\r\n case ',':\r\n this._formatIdx++;\r\n if (posSign)\r\n signStr = this._posSuff;\r\n else\r\n signStr = this._negSuff;\r\n break;\r\n\r\n\r\n case '\\\\':\r\n this._formatIdx++;\r\n if (this._formatIdx >= this._format.length)\r\n return;\r\n currChr = this._format[this._formatIdx];\r\n /* falls through */\r\n default:\r\n signStr.Append(currChr);\r\n this._formatIdx++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n/// <summary>\r\n/// Parse a number which is a counter of specific char in the format\r\n/// </summary>\r\n private pik_count(): number {\r\n let specialValNewPolicy: boolean = GuiEnvironment.Environment.GetSpecialValNewPolicy();\r\n let val: number;\r\n let isDigit: boolean = false;\r\n\r\n val = 0;\r\n\r\n while (this._formatIdx < this._format.length && UtilStrByteMode.isDigit(this._format[this._formatIdx])) {\r\n val *= 10;\r\n isDigit = true;\r\n val += this._format[this._formatIdx].charCodeAt(0) - '0'.charCodeAt(0);\r\n this._formatIdx++;\r\n }\r\n\r\n if (val > 32000)\r\n val = 32000;\r\n else if (val <= 0) {\r\n // If flag SpecialValNewPolicy is set, then picture having whole/dec as 0 e.g. '3.0' should return as 0.\r\n if (specialValNewPolicy && isDigit && val === 0)\r\n return 0;\r\n else\r\n val = 1;\r\n }\r\n\r\n if (val > Int32.MaxValue)\r\n throw new ApplicationException(Events.GetMessageString(MsgInterface.STR_ERR_MAX_VAR_SIZE));\r\n\r\n return (val);\r\n }\r\n\r\n/// <summary>\r\n/// Fill a specific mask character in the mask string\r\n/// </summary>\r\n/// <param name = \"drv\"> The mask character to fill</param>\r\n/// <param name = \"count\"> Number of times for the mask character to apear</param>\r\n private pik_drv_fill(drv: number, count: number): void {\r\n\r\n let MskZ: number;\r\n let i: number = 0;\r\n\r\n\r\n if (this._needLength) {\r\n this._maskLength += count;\r\n return;\r\n }\r\n\r\n MskZ = this._maskSize;\r\n this._maskSize += count;\r\n\r\n if (MskZ + count > this._mskLen)\r\n count = this._mskLen - MskZ;\r\n\r\n if (count > 0) {\r\n // memset (&this->msk[this.MskZ], (Uchar) drv, count); // Original Line\r\n for (i = 0;\r\n i < count;\r\n i++)\r\n this._msk[MskZ + i] = String.fromCharCode(drv);\r\n return;\r\n }\r\n }\r\n\r\n/// <summary>\r\n/// Parse a general mask character\r\n/// </summary>\r\n private pik_mask(): void {\r\n let currChr: string;\r\n let count: number;\r\n\r\n if (this._format[this._formatIdx] === '\\\\')\r\n this._formatIdx++;\r\n if (this._formatIdx < this._format.length) {\r\n currChr = this._format[this._formatIdx];\r\n this._formatIdx++;\r\n count = this.pik_count();\r\n this.pik_drv_fill(currChr.charCodeAt(0), count);\r\n this._maskChars += count;\r\n }\r\n }\r\n\r\n/// <summary>\r\n/// Count continues occurrences of a mask character in the format string\r\n/// </summary>\r\n private pik_dup(): number {\r\n\r\n let dupCount = 1;\r\n\r\n let c: string;\r\n\r\n let tmpIdx = this._formatIdx;\r\n\r\n c = this._format[tmpIdx];\r\n tmpIdx++;\r\n while (tmpIdx < this._format.length && c === this._format[tmpIdx]) {\r\n dupCount++;\r\n tmpIdx++;\r\n }\r\n\r\n return dupCount;\r\n }\r\n\r\n/// <summary>\r\n/// set IME mode depends on K picture (K0 - K9)\r\n/// (JPN: IME support)\r\n/// </summary>\r\n private pic_kanji(): boolean {\r\n let count;\r\n\r\n if (this._formatIdx + 1 >= this._format.length)\r\n return false;\r\n\r\n if (!UtilStrByteMode.isDigit(this._format[this._formatIdx + 1]))\r\n return false;\r\n\r\n this._formatIdx++;\r\n\r\n if (this._format[this._formatIdx] === '0') // K0\r\n {\r\n this._imeMode = UtilImeJpn.IME_FORCE_OFF;\r\n this._formatIdx++;\r\n }\r\n else {\r\n count = this.pik_count();\r\n if (1 <= count && count <= 9) // K1 - K9\r\n this._imeMode = count;\r\n }\r\n return true;\r\n }\r\n\r\n/// <summary>\r\n/// Find length of the picture after parsing the picture\r\n/// </summary>\r\n/// <returns> length of the picture</returns>\r\n private getMaskLen(compIdx: number) {\r\n this._needLength = true;\r\n this._maskLength = 0;\r\n this._formatIdx = 0;\r\n\r\n this.prs_all(compIdx);\r\n\r\n // add prefix and suffix length to the mask\r\n if (this._picAttr === StorageAttribute.NUMERIC && (this._prefLen > 0 || this._suffLen > 0))\r\n this._maskLength += (this._prefLen + this._suffLen);\r\n\r\n this._needLength = false;\r\n // init for next running :\r\n this._formatIdx = this._maskChars = this._whole = this._decimalDigits = this._size = this._maskSize = this._prefLen = this._suffLen = 0;\r\n this._pad = this._zero = String.fromCharCode(0);\r\n this.hebrew = this._mixed = this._embeded = this._negative = this._comma = this._left = this._padFill = this._zeroFill = this._trim = this._autoSkip_ = this._decimal = this._termFlag = this._decPointIsFirst = false;\r\n this._posPref.Remove(0, this._posPref.Length);\r\n this._posSuff.Remove(0, this._posSuff.Length);\r\n this._negPref.Remove(0, this._negPref.Length);\r\n this._negSuff.Remove(0, this._negSuff.Length);\r\n return this._maskLength;\r\n }\r\n\r\n/// <summary>\r\n/// returns true if there is an embeded char in the mask in a givven position.\r\n/// </summary>\r\n/// <param name = \"pos\"></param>\r\n/// <returns> true if pic is mask</returns>\r\n public picIsMask(pos: number): boolean {\r\n if (pos < 0 || pos >= this._maskLength)\r\n pos = 0;\r\n return this._msk[pos].charCodeAt(0) > PICInterface.PIC_MAX_OP;\r\n }\r\n\r\n/// <summary>\r\n/// returns the number of chars till the end of the sequence.\r\n/// </summary>\r\n/// <param name = \"mskPos\"></param>\r\n/// <param name = \"bufPos\"></param>\r\n/// <param name = \"buf\"></param>\r\n/// <returns></returns>\r\n getDirectiveLen(pos: number): number;\r\n getDirectiveLen(mskPos: number, bufPos: number, buf: string): number;\r\n getDirectiveLen(posOrMskPos: number, bufPos?: number, buf?: string): number {\r\n if (arguments.length === 1)\r\n return this.getDirectiveLen_0(posOrMskPos);\r\n else\r\n return this.getDirectiveLen_1(posOrMskPos, bufPos, buf);\r\n }\r\n\r\n /// <summary>\r\n /// returns the number of chars till the end of the sequence.\r\n /// </summary>\r\n /// <param name = \"pos\"></param>\r\n /// <returns> number of chars till the end of the sequence</returns>\r\n private getDirectiveLen_0(pos: number): number {\r\n let c: string = this._msk[pos];\r\n let num: number = pos;\r\n while (num < this._maskSize && c === this._msk[num]) {\r\n num = num + 1;\r\n }\r\n return num - pos;\r\n }\r\n\r\n /// <summary>\r\n /// returns the number of chars till the end of the sequence.\r\n /// </summary>\r\n /// <param name = \"mskPos\"></param>\r\n /// <param name = \"bufPos\"></param>\r\n /// <param name = \"buf\"></param>\r\n /// <returns></returns>\r\n private getDirectiveLen_1(mskPos: number, bufPos: number, buf: string): number {\r\n let drv: string = this._msk[mskPos];\r\n let currMskPos: number = mskPos;\r\n let currBufPos: number = bufPos;\r\n\r\n // till the end of the mask, if mask[pos] has same directive as ours, this is the same sequence.\r\n while (currMskPos < this._maskSize && drv === this._msk[currMskPos]) {\r\n // Ignore the change of sequence if it is in-between a DBCS char.\r\n // If the current char is a Full Width char, then the next mask bit\r\n // is actually not used. So, ignore that bit and move on.\r\n if (currBufPos < buf.length && UtilStrByteMode.isLocaleDefLangDBCS() && this.isAttrAlphaOrDate()) {\r\n if (!UtilStrByteMode.isHalfWidth(buf[currBufPos++]))\r\n currMskPos++;\r\n }\r\n\r\n currMskPos++;\r\n }\r\n\r\n // return only how many chars to the end, including our pos.\r\n return (currMskPos - mskPos);\r\n }\r\n\r\n/// <summary>\r\n/// check if char is valid in the given mask position\r\n/// </summary>\r\n/// <param name = \"charToValidate\">\r\n/// </param>\r\n/// <param name = \"pos\">of directive mask to check\r\n/// The returned char might be different then the char that was checked.\r\n/// The reason is that 'U' and 'L' directive might change it, and in numeric,\r\n/// decimal separator and thousand separator might be changed as well while typing.\r\n/// </param>\r\n/// <returns> 0 if not valid or a char if valid.</returns>\r\n public validateChar(charToValidate: string, pos: number) {\r\n let charReturned = charToValidate;\r\n if (pos >= this.getMaskSize())\r\n return charReturned;\r\n\r\n // we need to skip any characters which are embeded into the picture\r\n while (this.picIsMask(pos))\r\n pos++;\r\n\r\n switch (this._msk[pos].charCodeAt(0)) {\r\n case PICInterface.PIC_U:\r\n charReturned = charToValidate.toUpperCase();\r\n break;\r\n\r\n case PICInterface.PIC_L:\r\n charReturned = charToValidate.toLowerCase();\r\n /* falls through */\r\n\r\n default:\r\n if (!UtilStrByteMode.isDigit(charToValidate))\r\n for (let i = 0; i < PICInterface.NumDirective.length; i++)\r\n if (this._msk[pos].charCodeAt(0) === PICInterface.NumDirective[i]) {\r\n charReturned = this.isValidInNum(charToValidate);\r\n break;\r\n }\r\n break;\r\n }\r\n return charReturned;\r\n }\r\n\r\n/// <summary>\r\n/// Checks whether a non digit character is valid in a numeric mask\r\n/// </summary>\r\n/// <param name = \"letter:\">a character to be checked.</param>\r\n/// <returns> 0 if not valid. char if valid. char might be different then letter.</returns>\r\n isValidInNum(letter: string): string {\r\n let charRet = '\\0';\r\n let decimalChar: string = GuiEnvironment.Environment.GetDecimal();\r\n\r\n /***********************************************************************/\r\n /* replace '.' with a different char for numeric seperator only if\r\n * SpecialModifiedDecimalSeparator = Y*/\r\n // for numeric, if '.' was entered, change it to the env seperator.\r\n // #931784: If SpecialModifiedDecimalSeparator = Y then replace '.' by decimal separator.\r\n if (GuiEnvironment.Environment.CanReplaceDecimalSeparator() && this.isAttrNumeric())\r\n if (letter === '.')\r\n letter = decimalChar;\r\n\r\n switch (letter) {\r\n case ' ':\r\n case '-':\r\n case '*':\r\n case '+':\r\n case '/':\r\n charRet = letter;\r\n break;\r\n\r\n default:\r\n // the env decimal seperator and thousands seperator are also valid\r\n if (letter === decimalChar || letter === GuiEnvironment.Environment.GetThousands())\r\n charRet = letter;\r\n break;\r\n }\r\n\r\n return charRet;\r\n }\r\n\r\n/// <summary>\r\n/// check if the attribute is logical\r\n/// </summary>\r\n/// <returns></returns>\r\n public isAttrLogical(): boolean {\r\n return (this._picAttr === StorageAttribute.BOOLEAN);\r\n }\r\n\r\n/// <summary>\r\n/// check if the attribute is numeric\r\n/// </summary>\r\n/// <returns></returns>\r\n public isAttrNumeric(): boolean {\r\n return (this._picAttr === StorageAttribute.NUMERIC);\r\n }\r\n\r\n/// <summary>\r\n/// check if the attribute is alpha\r\n/// </summary>\r\n/// <returns></returns>\r\n public isAttrAlpha(): boolean {\r\n return (this._picAttr === StorageAttribute.ALPHA);\r\n }\r\n\r\n/// <summary>\r\n/// check if the attribute is unicode\r\n/// </summary>\r\n/// <returns></returns>\r\n public isAttrUnicode(): boolean {\r\n return (this._picAttr === StorageAttribute.UNICODE);\r\n }\r\n\r\n/// <summary>\r\n/// check if the attribute is alpha or date\r\n/// </summary>\r\n/// <returns></returns>\r\n public isAttrAlphaOrDate(): boolean {\r\n return (this._picAttr === StorageAttribute.ALPHA || this._picAttr === StorageAttribute.DATE);\r\n }\r\n\r\n/// <summary>\r\n/// check if the attribute is time or date\r\n/// </summary>\r\n/// <returns></returns>\r\n public isAttrDateOrTime(): boolean {\r\n return (this._picAttr === StorageAttribute.TIME || this._picAttr === StorageAttribute.DATE);\r\n }\r\n\r\n/// <summary>\r\n/// check if the attribute is blob\r\n/// </summary>\r\n/// <returns></returns>\r\n public isAttrBlob(): boolean {\r\n return (this._picAttr === StorageAttribute.BLOB ||\r\n this._picAttr === StorageAttribute.BLOB_VECTOR);\r\n }\r\n\r\n/// <summary>\r\n/// check if the mask at a given position is numeric\r\n/// </summary>\r\n/// <param name = \"pos\"></param>\r\n/// <returns></returns>\r\n public isNumeric(pos: number): boolean {\r\n return this._msk [pos] === String.fromCharCode(PICInterface.PIC_N);\r\n }\r\n\r\n/// <summary>\r\n/// check if the mask is all X\r\n/// </summary>\r\n/// <returns></returns>\r\n public isAllX(): boolean {\r\n return (this._msk[0] === String.fromCharCode(PICInterface.PIC_X) && this.getDirectiveLen(0) === this._maskSize);\r\n }\r\n\r\n/// <summary>\r\n/// check is mask at position pos is same as parameter maskPic\r\n/// </summary>\r\n/// <param name = \"pos\"></param>\r\n/// <param name = \"maskPic\"></param>\r\n/// <returns></returns>\r\n public isMaskPicEq(pos: number, maskPic: number): boolean {\r\n return this._msk[pos] === String.fromCharCode(maskPic);\r\n }\r\n\r\n/// <summary>\r\n/// check if the input char is valid for local AS400 (system i) pictures.\r\n/// (DBCS Support)\r\n/// </summary>\r\n/// <param name = \"charToValidate\"></param>\r\n/// <param name = \"firstChar\"></param>\r\n/// <param name = \"pos\"></param>\r\n/// <returns> 0 if not valid or a char if valid.</returns>\r\n public isValidChar_as400(charToValidate: string, firstChar: string, pos: number): boolean {\r\n let ret = true;\r\n\r\n switch (this._msk[pos].charCodeAt(0)) {\r\n case PICInterface.PIC_J:\r\n // only full-width characters are allowed\r\n case PICInterface.PIC_G:\r\n ret = !UtilStrByteMode.isHalfWidth(charToValidate);\r\n break;\r\n\r\n case (PICInterface.PIC_T): // mixture of full-width and half-width is not allowed\r\n if (firstChar === '\\x0000')\r\n ret = true;\r\n else if (UtilStrByteMode.isHalfWidth(firstChar))\r\n ret = UtilStrByteMode.isHalfWidth(charToValidate);\r\n else\r\n ret = !UtilStrByteMode.isHalfWidth(charToValidate);\r\n break;\r\n\r\n case (PICInterface.PIC_S): // only half-width characters are allowed\r\n ret = UtilStrByteMode.isHalfWidth(charToValidate);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n return ret;\r\n }\r\n\r\n/// <summary>\r\n/// returns the minimum value length\r\n/// </summary>\r\n getMinimumValueLength(): number {\r\n let minLength = this.getMaskLength();\r\n\r\n // traverse from right till a valid mask char is encountered\r\n while (minLength > 0 && !this.picIsMask(minLength - 1))\r\n minLength--;\r\n\r\n return minLength;\r\n }\r\n\r\n public toString(): string {\r\n return \"{Picture: \" + this._format + \"}\";\r\n }\r\n}\r\n","import { Events } from \"../../Events\";\r\nimport { StrUtil, SEQ_2_HTML, HTML_2_STR } from \"@magic-xpa/utils\";\r\nimport { List, NString } from \"@magic-xpa/mscorelib\";\r\n\r\nexport class ValidationDetailsBase {\r\n\r\n protected _continuousRangeValues: List<string> = null; // can't use List<T> - uses Clone()\r\n protected _discreteRangeValues: List<string> = null; // can't use List<T> - uses Clone()\r\n protected _range: string = null; // 'compressed' string of the range\r\n\r\n constructor();\r\n constructor(rangeStr: string)\r\n constructor(rangeStr?: string) {\r\n if (arguments.length === 1) {\r\n this._range = rangeStr;\r\n if (this._range !== null)\r\n this.fillRange();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// ***********************Range*****************************************\r\n /// </summary>\r\n /// <summary>\r\n /// Fill Range structures in the class\r\n /// </summary>\r\n protected fillRange(): void {\r\n this._range = StrUtil.makePrintableTokens(this._range, SEQ_2_HTML)/*'\u0002'*/;\r\n // find delimiters ',' which has not '\\,' => RealDelimeters\r\n let from: number = 0;\r\n let prev: number = 0;\r\n while ((from = this.findDelimeter(from, \",\", this._range)) !== -1 && prev < this._range.length) {\r\n this.rangeForms(this._range.substr(prev, from - prev));\r\n from = (prev = from + 1);\r\n }\r\n // last element:\r\n if (prev < this._range.length) {\r\n this.rangeForms(this._range.substr(prev));\r\n }\r\n\r\n // range=null; // don't delete it\r\n if (this._discreteRangeValues != null) {\r\n StrUtil.makePrintableTokens(this._discreteRangeValues, HTML_2_STR /*'\\u0003*/);\r\n Events.WriteDevToLog(this._discreteRangeValues.toString());\r\n }\r\n if (this._continuousRangeValues !== null) {\r\n StrUtil.makePrintableTokens(this._continuousRangeValues, HTML_2_STR/*'\\u0003'*/)/*'\u0003'*/;\r\n Events.WriteDevToLog(this._continuousRangeValues.toString());\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Fill Vectors of DiscreterangeValues and ContinuousRangeValues\r\n /// DiscreteRangeValues: every member is discrete value of the range\r\n /// ContinuousRangeValues: [LOW border, TOP border, ...]\r\n /// </summary>\r\n /// <param name = \"found\">- String to insert to DiscreteRangeValues, or parse to ContinuousRangeValues</param>\r\n private rangeForms(found: string): void {\r\n let minus: number;\r\n if ((minus = this.findDelimeter(0, \"-\", found)) === -1)\r\n // not found continuous range: num1-num2\r\n {\r\n found = NString.TrimStart(found);// TODO - sadhana check if this is needed\r\n let todel: number = 0;\r\n while (todel < found.length && (todel = this.findDelimeter(todel, \"\\\\\", found)) !== -1) {\r\n // to delete '\\' and replace '\\\\' with '\\'\r\n found = found.substr(0, todel) + found.substr(todel = todel + 1);\r\n todel = todel + 1;\r\n }\r\n if (this._discreteRangeValues === null)\r\n this._discreteRangeValues = new List<string>();\r\n this._discreteRangeValues.push(found);\r\n }\r\n else {\r\n // index of minus found in if statement\r\n let val: string;\r\n for (let i: number = 0; i < 2; i = i + 1) {\r\n if (i === 0) {\r\n val = found.substr(0, minus);\r\n }\r\n else {\r\n minus = minus + 1;\r\n // skip blanks between '-' and the value. Heading blanks cause to wrong values.\r\n while (minus < found.length && found.charAt(minus) === \" \"/*' '*/) {\r\n minus = minus + 1;\r\n }\r\n val = found.substr(minus);\r\n }\r\n val = this.deleteChar(\"\\\\\", val);\r\n if (this._continuousRangeValues === null) {\r\n this._continuousRangeValues = new List<string>();\r\n }\r\n this._continuousRangeValues.push(val);\r\n }\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// delete String/char from the string\r\n /// </summary>\r\n /// <param name = \"delete\">String to delete</param>\r\n /// <param name = \"String\">delete from the String</param>\r\n private deleteChar(stringToDelete: string, from: string): string {\r\n let index: number = 0;\r\n while ((index = from.indexOf(stringToDelete, index)) !== -1)\r\n from = from.substr(0, index) + from.substr(index + stringToDelete.length);\r\n return from;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Find real delimiter, there is no symbol '\\' before REAL delimiter\r\n /// </summary>\r\n /// <param name = \"start\">of string, looking in</param>\r\n /// <param name = \"delim\">to found</param>\r\n /// <returns> place of found real delimiter, or -1 -> not found</returns>\r\n private findDelimeter(start: number, delim: string, str: string): number {\r\n let found: number = str.indexOf(delim, start);\r\n while (found < str.length && found > 0)\r\n // => found!=-1(not found); found!=0(not first letter)\r\n {\r\n if (str.charAt(found - 1) === \"\\\\\"/*'\\'*/) {\r\n found = str.indexOf(delim, found + 1);\r\n }\r\n else\r\n break;\r\n }\r\n return found;\r\n }\r\n\r\n\r\n getDiscreteRangeValues(): List<string> {\r\n return this._discreteRangeValues;\r\n }\r\n\r\n getContinuousRangeValues(): List<string> {\r\n return this._continuousRangeValues;\r\n }\r\n\r\n}\r\n","import { Int32, NNumber, NString, NumberStyles, StringBuilder } from '@magic-xpa/mscorelib';\r\nimport { Constants, PICInterface, Randomizer, StorageAttribute, UtilStrByteMode } from '@magic-xpa/utils';\r\nimport { PIC } from '../gui/PIC';\r\nimport { IEnvironment } from '../../env/IEnvironment';\r\nimport { Events } from '../../Events';\r\nimport { GuiEnvironment } from '../../GuiEnvironment';\r\n\r\n/// This class handles a Magic Number the identical way it's represented in Magic.\r\n/// Most of the methods in this class were copied from the C++ sources of Magic,\r\n/// in order to keep the exact logic used in order to implement all the functionality\r\n/// expected, which means that the exact methods names and variables names where used\r\n/// in order to make future debugging more easyer.\r\n/// Notice a long data type that is used in Magic C++ sources, is represented in java\r\n/// by the int data type.\r\n/// </summary>\r\n/// <author> Alon Bar-Nes\r\n/// </author>\r\n\r\nexport class NUM_TYPE {\r\n // --------------------------------------------------------------------------\r\n // Constants\r\n // --------------------------------------------------------------------------\r\n static INT_ZERO_HEX: string = \"00000000\";\r\n static NO_ROOM: number = -1;\r\n static ZERO_FILL: number = -2;\r\n static NUM_SIZE: number = 20;\r\n static NUM_LONG_TYPE: number = -1;\r\n static EXP_BIAS: number = 64;\r\n static SIGN_MASK: number = -128;\r\n\r\n COMMACHAR: string = ',';\r\n DECIMALCHAR: string = '.';\r\n private SIGNIFICANT_NUM_SIZE: number = 0;\r\n private _data: Int8Array = new Int8Array(NUM_TYPE.NUM_SIZE);\r\n\r\n set Data(value: Int8Array) {\r\n this._data = value;\r\n }\r\n\r\n get Data(): Int8Array {\r\n return this._data;\r\n }\r\n\r\n // --------------------------------------------------------------------------\r\n // Constructor list\r\n // --------------------------------------------------------------------------\r\n\r\n constructor();\r\n constructor(recordHexStr: string);\r\n constructor(byteVal: Int8Array, offset: number, length: number);\r\n constructor(byteVal: Int8Array);\r\n constructor(decStr: string, pic: PIC, compIdx: number);\r\n constructor(numFrom: NUM_TYPE);\r\n constructor(recordHexStrOrByteValOrDecStrOrNumFrom?: any, offsetOrPic?: any, lengthOrCompIdx?: number) {\r\n if (arguments.length === 0) {\r\n this.constructor_0();\r\n return;\r\n }\r\n if (arguments.length === 1 && (recordHexStrOrByteValOrDecStrOrNumFrom === null || recordHexStrOrByteValOrDecStrOrNumFrom.constructor === String)) {\r\n this.constructor_1(recordHexStrOrByteValOrDecStrOrNumFrom);\r\n return;\r\n }\r\n if (arguments.length === 3 && (recordHexStrOrByteValOrDecStrOrNumFrom === null || recordHexStrOrByteValOrDecStrOrNumFrom instanceof Int8Array) && (offsetOrPic === null || offsetOrPic.constructor === Number) && (lengthOrCompIdx === null || lengthOrCompIdx.constructor === Number)) {\r\n this.constructor_2(recordHexStrOrByteValOrDecStrOrNumFrom, offsetOrPic, lengthOrCompIdx);\r\n return;\r\n }\r\n if (arguments.length === 1 && (recordHexStrOrByteValOrDecStrOrNumFrom === null || recordHexStrOrByteValOrDecStrOrNumFrom instanceof Int8Array)) {\r\n this.constructor_3(recordHexStrOrByteValOrDecStrOrNumFrom);\r\n return;\r\n }\r\n if (arguments.length === 3 && (recordHexStrOrByteValOrDecStrOrNumFrom === null || recordHexStrOrByteValOrDecStrOrNumFrom.constructor === String) && (offsetOrPic === null || offsetOrPic instanceof PIC) && (lengthOrCompIdx === null || lengthOrCompIdx.constructor === Number)) {\r\n this.constructor_4(recordHexStrOrByteValOrDecStrOrNumFrom, offsetOrPic, lengthOrCompIdx);\r\n return;\r\n }\r\n this.constructor_5(recordHexStrOrByteValOrDecStrOrNumFrom);\r\n }\r\n\r\n /// <summary>\r\n /// Default constructor. Set value to 0\r\n /// </summary>\r\n private constructor_0(): void {\r\n this.initConst();\r\n this.NUM_ZERO();\r\n }\r\n\r\n /// <summary>\r\n /// Creates a Magic Number from a string got from the XML record value. The\r\n /// String is 40 characters long in an hexa representation.\r\n /// </summary>\r\n /// <param name = \"recordHexStr\"> Magic number in hex format, 40 characters long\r\n /// </param>\r\n private constructor_1(recordHexStr: string): void {\r\n let i: number = 0;\r\n let twoDigits: string;\r\n this.initConst();\r\n\r\n try {\r\n for (i = 0; i < this.SIGNIFICANT_NUM_SIZE; i = i + 1) {\r\n twoDigits = recordHexStr.substr( i * 2, 2);\r\n this._data[i] = NUM_TYPE.toSByte(NNumber.Parse(twoDigits, NumberStyles.HexNumber));\r\n }\r\n }\r\n catch (ex) {\r\n Events.WriteWarningToLog(ex);\r\n\r\n this.NUM_ZERO();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Creates a Magic Number from array of bytes. Used from the expression evaluator\r\n /// when a Magic Number value apears within an expression.\r\n /// </summary>\r\n /// <param name = \"byteVal\"> Array of bytes representing a Magic Number</param>\r\n /// <param name = \"offset\"> Index of the first byte </param>\r\n /// <param name = \"length\"> Number of bytes to use </param>\r\n private constructor_2(byteVal: Int8Array, offset: number, length: number): void {\r\n this.constructor_0();\r\n for (let i: number = 0; i < length; i = i + 1) {\r\n this._data[i] = byteVal[i + offset];\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Creates a Magic Number from array of bytes\r\n /// </summary>\r\n private constructor_3(byteVal: Int8Array): void {\r\n this.constructor_2(byteVal, 0, byteVal.length);\r\n }\r\n\r\n /// <summary>\r\n /// Creates a Magic Number from a decimal for number and its picture\r\n /// </summary>\r\n /// <param name = \"decStr\"> The number in a string decimal format </param>\r\n /// <param name = \"pic\"> The picture format to be used </param>\r\n private constructor_4(decStr: string, pic: PIC, compIdx: number): void {\r\n this.constructor_0();\r\n this.from_a(decStr, pic, compIdx);\r\n }\r\n\r\n /// <summary>\r\n /// Creates a Magic Number from a Magic Number\r\n /// </summary>\r\n /// <param name = \"numFrom\"> The source Magic Number </param>\r\n private constructor_5(numFrom: NUM_TYPE): void {\r\n this.initConst();\r\n this._data = new Int8Array(numFrom._data.length);\r\n for (let _ai: number = 0; _ai < this._data.length; ++_ai)\r\n this._data[_ai] = numFrom._data[_ai];\r\n }\r\n\r\n /// <summary>\r\n /// Build a decimal string from the number stored in a Magic Number.\r\n /// The string is build from the picture provided as a parameter.\r\n /// </summary>\r\n /// <param name = \"pic\">The picture to use for building the display string\r\n /// </param>\r\n /// <returns> The decimal form of the Magic Number in the specified format\r\n /// </returns>\r\n toDisplayValue(pic: PIC): string {\r\n return this.to_a(pic);\r\n }\r\n\r\n /// <summary>\r\n /// init constants of the class\r\n /// </summary>\r\n private initConst(): void {\r\n let env: IEnvironment = GuiEnvironment.Environment;\r\n this.DECIMALCHAR = env.GetDecimal();\r\n this.COMMACHAR = env.GetThousands();\r\n this.SIGNIFICANT_NUM_SIZE = env.GetSignificantNumSize();\r\n }\r\n\r\n /// <summary>\r\n /// Build an hexadecimal string from the Magic Number for the data record in\r\n /// the XML tag (to be sent to the Magic Server). The length of this string\r\n /// will allways be two times the length of the Magic Numbers (in bytes)\r\n /// because every byte in the Magic Number will be translated to two\r\n /// character hexadecimal string.\r\n /// </summary>\r\n /// <returns> the hexadecimal string\r\n /// </returns>\r\n toXMLrecord(): string {\r\n let hexStr: StringBuilder = new StringBuilder(this.SIGNIFICANT_NUM_SIZE * 2);\r\n let num: number;\r\n\r\n if (this.NUM_IS_LONG())\r\n num = 5;\r\n else\r\n num = this.SIGNIFICANT_NUM_SIZE;\r\n\r\n for (let i: number = 0; i < this.SIGNIFICANT_NUM_SIZE; i++) {\r\n if (i < num)\r\n hexStr.Append(('0' + (this._data[i] & 0xFF).toString(16)).slice(-2));\r\n else\r\n hexStr.Append(\"00\");\r\n }\r\n\r\n return hexStr.ToString().toUpperCase();\r\n }\r\n\r\n /// <summary>\r\n /// Transforming a decimal string number to a Magic Number using the format\r\n /// provided.\r\n /// </summary>\r\n /// <param name = \"Alpha\"> The number is decimal string form\r\n /// </param>\r\n /// <param name = \"pic\"> The picture fomat to use for the extracting the number\r\n /// </param>\r\n private from_a(Alpha: string, pic: PIC, compIdx: number): void {\r\n let i: number;\r\n let idx: number;\r\n let dec: boolean;\r\n let decs: number;\r\n let digit: number;\r\n let len: number;\r\n let no_pic: boolean;\r\n let Pos: number;\r\n let SType: boolean;\r\n let SPart: boolean;\r\n let Signed: number;\r\n let buf: string;\r\n let mask: string = \"\";\r\n let c: string;\r\n let NgtvPrmt: boolean;\r\n let Scan: string = \"\";\r\n let Pbuf: string = \"\";\r\n let is_negative: boolean;\r\n let negStr: string;\r\n let negPref: string;\r\n let posPref: string;\r\n let negSuff: string;\r\n let posSuff: string;\r\n let specialValNewPolicy: boolean = GuiEnvironment.Environment.GetSpecialValNewPolicy();\r\n\r\n // Parse the picture format\r\n no_pic = (pic == null);\r\n len = 0;\r\n SType = false; // PIC_PSTV : true, PIC_NGTV: false\r\n SPart = false; // PIC_PREF : true, PIC_SUF : false\r\n\r\n if (!no_pic) {\r\n mask = pic.getMask();\r\n if (!specialValNewPolicy)\r\n if (Alpha.length > pic.getMaskSize())\r\n Alpha = Alpha.substr(0, pic.getMaskSize());\r\n NgtvPrmt = pic.isNegative();\r\n if (NgtvPrmt) {\r\n negPref = pic.getNegPref_();\r\n posPref = pic.getPosPref_();\r\n negSuff = pic.getNegSuff_();\r\n posSuff = pic.getPosSuff_();\r\n\r\n if (negPref.length === posPref.length) {\r\n if (negPref.length === 0 || negPref === posPref)\r\n SPart = false;\r\n // PIC_SUF\r\n else SPart = true; // PIC_PREF\r\n }\r\n else SPart = true; // PIC_PREF\r\n\r\n if (SPart)\r\n negStr = negPref;\r\n else\r\n negStr = negSuff;\r\n\r\n if (negStr.length === 0)\r\n SType = true;\r\n // PIC_POSITIVE\r\n else\r\n SType = false; // PIC_NEGATIVE\r\n\r\n if (SType)\r\n Scan = (SPart ? posPref : posSuff);\r\n else\r\n Scan = (SPart ? negPref : negSuff);\r\n len = Scan.length;\r\n }\r\n }\r\n else {\r\n pic = new PIC(\"\", StorageAttribute.NUMERIC, compIdx);\r\n NgtvPrmt = false;\r\n }\r\n\r\n // Localize variables and flags\r\n dec = false;\r\n decs = 0;\r\n digit = 0;\r\n Signed = 0;\r\n\r\n // SpecialValNewPolicy = Y\r\n // Loop on input string of numbers and match them against the picture mask\r\n // It may happen that the picture mask is smaller than received number string\r\n // For example, if the string received is '1234.56' whereas picture is '2.1'\r\n // then the characters to parse from the input string is '1234.5' i.e. # digits\r\n // specified in picture before the decimal should be ignored. Parsing should\r\n // continue till # of digits after decimal point in picture match with those in\r\n // the input string or the end of the string\r\n for (idx = 0; idx < Alpha.length; ) {\r\n // As mentioned above, continue parsing even if mask length as exhausted by checking\r\n // idx >= pic.mask_size. However, as long as mask length is valid, match the mask\r\n if (no_pic || (specialValNewPolicy && idx >= pic.getMaskSize()) || mask[idx] === String.fromCharCode(PICInterface.PIC_N)) {\r\n c = Alpha[idx];\r\n if (specialValNewPolicy)\r\n {\r\n // stop parsing if # of decs already reached\r\n if (dec && decs === pic.getDec())\r\n {\r\n // Finally, stop parsing on matching required no. of decimal digits\r\n break;\r\n }\r\n }\r\n if (UtilStrByteMode.isDigit(c)) {\r\n digit++;\r\n Pbuf += c;\r\n if (dec)\r\n decs++;\r\n }\r\n else if (c === this.DECIMALCHAR) {\r\n Pbuf += this.DECIMALCHAR;\r\n dec = true;\r\n }\r\n else if (c !== this.COMMACHAR) {\r\n if (NgtvPrmt && Signed === 0) {\r\n Signed = 1;\r\n for (i = idx, Pos = 0; i <= Alpha.length && Pos < len; i++) {\r\n if (no_pic || mask[i] === String.fromCharCode(PICInterface.PIC_N)) {\r\n c = Alpha[i];\r\n if (c !== Scan[Pos]) {\r\n if (c === '-' && !SType)\r\n break;\r\n if (c === '+' && SType)\r\n break;\r\n Signed = -1;\r\n break;\r\n }\r\n Pos++;\r\n }\r\n }\r\n if (Pos > 0 && Pos < len)\r\n Signed = -1;\r\n }\r\n else {\r\n // QCR # 309623 : If prefix/suffix strings contains digits in it, it is considered as part of data.\r\n // In order to avoid it skip the prefix / suffix strings while extracting the data part to build NUM_TYPE.\r\n if (idx === 0) {\r\n if (pic.getNegPref_().length > 0)\r\n if (Alpha.startsWith(pic.getNegPref_())) {\r\n idx += pic.getNegPref_().length;\r\n continue;\r\n }\r\n if (pic.getPosPref_().length > 0)\r\n if (Alpha.startsWith(pic.getPosPref_())) {\r\n idx += pic.getPosPref_().length;\r\n continue;\r\n }\r\n }\r\n else {\r\n if (pic.getNegSuff_().length > 0)\r\n if (Alpha.endsWith(pic.getNegSuff_())) {\r\n idx += pic.getNegSuff_().length;\r\n continue;\r\n }\r\n if (pic.getPosSuff_().length > 0)\r\n if (Alpha.endsWith(pic.getPosSuff_())) {\r\n idx += pic.getPosSuff_().length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n idx++;\r\n }\r\n\r\n if (Signed === 0 && SType)\r\n Signed = 1;\r\n\r\n // Return result of decoded digits\r\n is_negative = (Signed === 1 && !SType) || (Signed !== 1 && SType);\r\n if (decs > 0 || digit > 9) {\r\n buf = (is_negative ? '-' : ' ') + Pbuf;\r\n this.num_4_a_std(buf);\r\n }\r\n else\r\n this.NUM_4_LONG((is_negative ? -1 : 1) * this.a_2_long(Pbuf));\r\n }\r\n\r\n /// <summary>\r\n /// Extracting a non long number from a decimal string number (numbers with\r\n /// decimal point, etc...)\r\n /// </summary>\r\n /// <param name = \"str\"> The decimal string number\r\n /// </param>\r\n num_4_a_std(str: string): void {\r\n let digstr: string = \"\";\r\n let diglen: number = 0;\r\n let wholes: number = 0;\r\n let decs: number = 0;\r\n let isDec: boolean = false;\r\n let isminus: boolean = false;\r\n let pos: number;\r\n\r\n for (pos = 0; pos < str.length; pos++) {\r\n let c: string = str.charAt(pos);\r\n if (UtilStrByteMode.isDigit(c)) {\r\n if (diglen > 0 || c !== '0') {\r\n diglen++;\r\n digstr = digstr + c;\r\n if (!isDec)\r\n wholes++;\r\n }\r\n else if (isDec)\r\n decs = decs + 1;\r\n }\r\n else if (c === this.DECIMALCHAR)\r\n isDec = true;\r\n else if (c === '-')\r\n isminus = true;\r\n }\r\n\r\n this.NUM_ZERO();\r\n if (diglen === 0)\r\n return;\r\n\r\n if (((wholes + decs) & 1) > 0) {\r\n this._data[1] = NUM_TYPE.toSByte(digstr.charCodeAt(0) - '0'.charCodeAt(0));\r\n pos = 1;\r\n }\r\n else\r\n pos = 0;\r\n\r\n let numptr: number = 1 + pos;\r\n diglen = Math.min(diglen, (this.SIGNIFICANT_NUM_SIZE - 1) * 2 - pos);\r\n while (pos < diglen) {\r\n let digit1: number = NUM_TYPE.toSByte((digstr.charCodeAt(pos++) - '0'.charCodeAt(0)));\r\n let digit2: number = NUM_TYPE.toSByte(((pos < diglen)\r\n ? (digstr.charCodeAt(pos++) - '0'.charCodeAt(0))\r\n : '\\0'.charCodeAt(0)));\r\n this._data[numptr++] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(digit1) * 10 + NUM_TYPE.toUByte(digit2));\r\n }\r\n\r\n if (wholes > 0)\r\n this._data[0] = NUM_TYPE.toSByte(<number>NUM_TYPE.EXP_BIAS + ((wholes + 1) >> 1));\r\n else\r\n this._data[0] = NUM_TYPE.toSByte(<number>NUM_TYPE.EXP_BIAS - (decs >> 1));\r\n\r\n if (isminus)\r\n this._data[0] |= NUM_TYPE.SIGN_MASK;\r\n }\r\n\r\n /// <summary>\r\n /// Translating a long value into an internal Magic Number form\r\n /// </summary>\r\n /// <param name = \"longVal\"> The number to be kept\r\n /// </param>\r\n NUM_4_LONG(longVal: number): void {\r\n let hexStr: string;\r\n this.NUM_ZERO();\r\n\r\n if (longVal !== 0) {\r\n if (longVal < 0)\r\n longVal = (0xFFFFFFFF + longVal + 1);\r\n\r\n hexStr = longVal.toString(16);\r\n if (longVal > 0)\r\n hexStr = NUM_TYPE.INT_ZERO_HEX.substr(hexStr.length) + hexStr;\r\n\r\n this._data[1] = NUM_TYPE.toSByte(parseInt(hexStr.substr(6, (8) - (6)), 16));\r\n this._data[2] = NUM_TYPE.toSByte(parseInt(hexStr.substr(4, (6) - (4)), 16));\r\n this._data[3] = NUM_TYPE.toSByte(parseInt(hexStr.substr(2, (4) - (2)), 16));\r\n this._data[4] = NUM_TYPE.toSByte(parseInt(hexStr.substr(0, (2) - (0)), 16));\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Getting a long value from a decimal string representing a long value\r\n /// </summary>\r\n /// <param name = \"str\"> the string representing a long value\r\n /// </param>\r\n /// <returns> the long number\r\n /// </returns>\r\n a_2_long(str: string): number {\r\n let n: number = 0;\r\n for (let pos: number = 0; pos < str.length; pos++) {\r\n if (UtilStrByteMode.isDigit(str.charAt(pos))) {\r\n n = n * 10;\r\n n = n + str.charCodeAt(pos) - '0'.charCodeAt(0);\r\n }\r\n }\r\n return n;\r\n }\r\n\r\n /// <summary>\r\n /// Activating the process of building a decimal string by the format indicated\r\n /// </summary>\r\n /// <param name = \"pic\">a numeric picture to use for building the display string\r\n /// </param>\r\n to_a(pic: PIC): string {\r\n return this.to_a_pic(pic);\r\n }\r\n\r\n /// <summary>\r\n /// Performs the process of building a decimal string by the picture provided\r\n /// </summary>\r\n /// <param name = \"pic\"> the picture class holding the information about the picture\r\n /// </param>\r\n /// <returns> the string form of the Magic Number\r\n /// </returns>\r\n protected to_a_pic(pic: PIC): string {\r\n let buf: string[] = new Array<string>(128);\r\n let remains: number;\r\n let sign_n: boolean;\r\n let pref_len: number;\r\n let suff_len: number;\r\n let pref_str: String;\r\n let suff_str: String;\r\n let str_pos: number;\r\n let str_len: number;\r\n let out_pos: number;\r\n let out_buf: string[];\r\n let tmp_out_buf: string[];\r\n let pad: string;\r\n let left: boolean;\r\n let pfill: boolean;\r\n let mask_chars: number;\r\n let len: number;\r\n let res: string[];\r\n let i: number;\r\n let isOut: boolean;\r\n let outVal: string[];\r\n\r\n len = pic.getMaskSize();\r\n\r\n // Set signs of number\r\n sign_n = (pic.isNegative() && this.num_is_neg() ? false : true);\r\n\r\n pref_len = (sign_n ? pic.getPosPref_().length : pic.getNegPref_().length); // pic_sign[PIC_PREF].len;\r\n suff_len = (sign_n ? pic.getPosSuff_().length : pic.getNegSuff_().length); // pic_sign[PIC_SUFF].len;\r\n\r\n left = pic.isLeft();\r\n pfill = pic.padFill();\r\n mask_chars = pic.getMaskChars();\r\n outVal = NString.ToCharArray(pic.getMask().substr(0, len));\r\n out_buf = ((left || (mask_chars > 0)) ? buf : outVal);\r\n if (left)\r\n {\r\n for (i=0; i < out_buf.length; i++ )\r\n out_buf[i] = (<string>'0'.toLowerCase());\r\n }\r\n isOut = ((left || (mask_chars > 0)) ? false : true);\r\n\r\n // Convert to string\r\n str_pos = pref_len;\r\n str_len = len - pref_len - suff_len;\r\n tmp_out_buf = out_buf.slice(str_pos, out_buf.length);\r\n if (this.NUM_IS_LONG())\r\n remains = this.num_l_2_str(this.NUM_LONG(), tmp_out_buf, str_len, pic);\r\n else\r\n remains = this.to_str(tmp_out_buf, str_len, pic);\r\n\r\n for (i = str_pos; i < out_buf.length; i++)\r\n out_buf[i] = tmp_out_buf[i - str_pos];\r\n tmp_out_buf = null;\r\n\r\n if (remains < mask_chars) {\r\n res = new Array(len);\r\n for (i = 0; i < len; i++)\r\n res[i] = (remains === NUM_TYPE.ZERO_FILL ? pic.getZeroPad() : '*');\r\n return NString.FromChars(res);\r\n }\r\n\r\n if (mask_chars > 0) {\r\n remains -= mask_chars;\r\n str_pos += mask_chars;\r\n str_len -= mask_chars;\r\n }\r\n\r\n // take care of pad after and before number\r\n if (pfill) {\r\n pad = pic.getPad();\r\n if (left) {\r\n for (i = 0; i < remains; i++)\r\n out_buf [str_pos + str_len + i] = pad;\r\n str_pos += remains;\r\n }\r\n else {\r\n for (i = 0; i < remains; i++)\r\n out_buf[str_pos + i] = pad;\r\n }\r\n }\r\n else {\r\n pad = ' ';\r\n str_pos += remains;\r\n str_len -= remains;\r\n }\r\n\r\n // take care of suffix and prefix\r\n if (suff_len > 0) {\r\n suff_str = sign_n ? pic.getPosSuff_() : pic.getNegSuff_();\r\n if (suff_len === 1)\r\n out_buf[str_pos + str_len] = suff_str[0];\r\n else {\r\n for (i = 0; i < suff_len; i++)\r\n out_buf[str_pos + str_len + i] = suff_str[i];\r\n }\r\n str_len += suff_len;\r\n }\r\n if (pref_len > 0) {\r\n str_pos -= pref_len;\r\n str_len += pref_len;\r\n pref_str = sign_n ? pic.getPosPref_() : pic.getNegPref_();\r\n if (pref_len === 1)\r\n out_buf[str_pos] = pref_str[0];\r\n else\r\n for (i = 0; i < pref_len; i++)\r\n out_buf[str_pos + i] = pref_str[i];\r\n }\r\n\r\n // str_pos now points to beginning of result str\r\n // take care of final pad after and before number\r\n if (!pfill) {\r\n let outBufLen: number = out_buf.length;\r\n\r\n if (left) {\r\n for (i = 0; i < remains && (str_pos + str_len + i < outBufLen); i++)\r\n out_buf[str_pos + str_len + i] = pad;\r\n }\r\n else {\r\n str_pos -= remains;\r\n\r\n for (i = 0; i < remains && (str_pos + i < outBufLen); i++)\r\n out_buf[str_pos + i] = pad;\r\n }\r\n }\r\n\r\n // result built, finish\r\n if (isOut)\r\n return NString.FromChars(out_buf);\r\n\r\n // Copy result to output buffer\r\n if (mask_chars === 0) {\r\n if (str_pos + len > out_buf.length)\r\n len = out_buf.length - str_pos;\r\n return NString.FromChars(out_buf, str_pos, len);\r\n }\r\n\r\n for (out_pos = 0; out_pos < len && str_pos < out_buf.length; out_pos++)\r\n if (outVal[out_pos] === String.fromCharCode(PICInterface.PIC_N))\r\n outVal[out_pos] = out_buf[str_pos++];\r\n\r\n return NString.FromChars(outVal);\r\n }\r\n\r\n /// <summary>\r\n /// Bulding the basic decimal string number from a long value (without\r\n /// the special picture features).\r\n /// </summary>\r\n /// <param name = \"num\"> The number to be translated\r\n /// </param>\r\n /// <param name = \"str\"> The mask to use for building the string number\r\n /// </param>\r\n /// <len> len the len to use in the str char array </len>\r\n /// <param name = \"pic\"> The picture class holding the information about the picture\r\n /// </param>\r\n /// <returns> the length of the result string\r\n /// </returns>\r\n protected num_l_2_str(num: number, str: string[], len: number, pic: PIC): number {\r\n let commas: boolean;\r\n let digits: number;\r\n let i: number;\r\n let decs: number;\r\n let j: number;\r\n\r\n if (num < 0)\r\n num = -num;\r\n commas = pic.withComa();\r\n decs = Math.min(pic.getDec(), len - 1);\r\n if (decs > 0)\r\n len -= (decs + 1);\r\n i = len;\r\n\r\n // 26/11/97 Shay Z. Bug #770526 - If The decimal point is the first\r\n // in the picture's format - assume that the input value is legal !!\r\n if (num === 0 && !pic.decInFirstPos()) {\r\n if (pic.zeroFill())\r\n return (NUM_TYPE.ZERO_FILL);\r\n if (len === 0)\r\n return (NUM_TYPE.NO_ROOM);\r\n\r\n if (i > str.length)\r\n i = str.length;\r\n\r\n str[--i] = '0';\r\n }\r\n\r\n if (decs > 0) {\r\n str[len] = this.DECIMALCHAR;\r\n for (j = 0; j < decs; j++)\r\n str[len + 1 + j] = '0';\r\n }\r\n\r\n digits = 0;\r\n for (; num > 0; num = Math.floor(num / 10)) {\r\n i--;\r\n if (commas) {\r\n if (digits === 3) {\r\n if (i < 0)\r\n return (NUM_TYPE.NO_ROOM);\r\n digits = 0;\r\n str[i--] = this.COMMACHAR;\r\n }\r\n digits++;\r\n }\r\n if (i < 0)\r\n return (NUM_TYPE.NO_ROOM);\r\n str[i] = ((num % 10).toString());\r\n }\r\n\r\n return i;\r\n }\r\n\r\n /// <summary>\r\n /// Bulding the basic decimal string number from a non long value (without\r\n /// the special picture features).\r\n /// </summary>\r\n /// <param name = \"str\"> The mask to use for building the string number\r\n /// </param>\r\n /// <len> len the len to use in the str char array </len>\r\n /// <param name = \"pic\"> The picture class holding the information about the picture\r\n /// </param>\r\n /// <returns> the length of the result string\r\n /// </returns>\r\n protected to_str(str: string[], len: number, pic: PIC): number {\r\n let tmp: NUM_TYPE;\r\n let commas: boolean;\r\n let digits: number;\r\n let decpos: number;\r\n let last: number;\r\n let first: number;\r\n let j: number;\r\n let i: number;\r\n let decs: number;\r\n let num_char: number;\r\n\r\n commas = pic.withComa();\r\n decs = pic.getDec();\r\n if (decs >= len)\r\n decs = len - 1;\r\n\r\n tmp = new NUM_TYPE(this);\r\n tmp.round(decs);\r\n if (tmp.NUM_IS_LONG())\r\n return tmp.num_l_2_str(tmp.NUM_LONG(), str, len, pic);\r\n\r\n if (pic.zeroFill() && tmp._data[0] === 0)\r\n return (NUM_TYPE.ZERO_FILL);\r\n\r\n i = len - 1;\r\n digits = 0;\r\n decpos = ((tmp._data[0] & ~NUM_TYPE.SIGN_MASK) - NUM_TYPE.EXP_BIAS + 1) * 2;\r\n last = decpos - 1 + decs;\r\n first = decpos - 1;\r\n if (first > 2)\r\n first = (tmp._data[1] < 10) ? 3 : 2;\r\n\r\n for (j = last; j >= first; j--) {\r\n if (i < 0)\r\n return (NUM_TYPE.NO_ROOM);\r\n\r\n if (commas && (j < decpos)) {\r\n if (digits === 3) {\r\n digits = 0;\r\n str[i--] = this.COMMACHAR;\r\n }\r\n digits++;\r\n }\r\n\r\n // JPN:15/08/1996 Yama (JpnID:ZA0815001)\r\n // When Format=\"N12C\" and num is bigger than 12 digits.\r\n // MAGIC crushes. Because the var i becomes negative.\r\n if (i < 0)\r\n return (NUM_TYPE.NO_ROOM);\r\n\r\n if ((j < 2) || (j >= this.SIGNIFICANT_NUM_SIZE * 2))\r\n str[i--] = '0';\r\n else {\r\n if (i < 0)\r\n return (NUM_TYPE.NO_ROOM);\r\n num_char = tmp._data[j >> 1];\r\n str[i--] = (((j & 1) !== 0) ? (num_char % 10) : (Math.floor(num_char / 10))).toString();\r\n }\r\n\r\n if (j === decpos) {\r\n if (i < 0)\r\n return (NUM_TYPE.NO_ROOM);\r\n str[i--] = this.DECIMALCHAR;\r\n\r\n // 26/11/97 Shay Z. Bug #770526 - If The decimal point is the first\r\n // in the picture's format - assume that the input value is legal !\r\n if (i < 0 && pic.decInFirstPos())\r\n return (0);\r\n }\r\n }\r\n\r\n return (i + 1);\r\n }\r\n\r\n /// <summary>\r\n /// Performing an Add operation on two magic numbers\r\n /// </summary>\r\n /// <param name = \"num1\"> the first number\r\n /// </param>\r\n /// <param name = \"num2\"> the first number\r\n /// </param>\r\n /// <returns> the result\r\n /// </returns>\r\n static add(num1: NUM_TYPE, num2: NUM_TYPE): NUM_TYPE {\r\n let sign1: number;\r\n let sign2: number;\r\n let l: number;\r\n let l1: number;\r\n let l2: number;\r\n let SIGNIFICANT_NUM_SIZE: number;\r\n // null values\r\n if (num1 === null || num2 === null)\r\n return null;\r\n\r\n SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();\r\n let tmpres: NUM_TYPE = new NUM_TYPE();\r\n let res: NUM_TYPE = new NUM_TYPE();\r\n let operData: OperData = new OperData();\r\n if (num1.NUM_IS_LONG()) {\r\n if (num2.NUM_IS_LONG()) {\r\n\r\n l = l1 = num1.NUM_LONG();\r\n if (l < 0)\r\n l = -l;\r\n\r\n if (l < 0x40000000) {\r\n l = l2 = num2.NUM_LONG();\r\n if (l < 0)\r\n l = -l;\r\n if (l < 0x40000000) {\r\n l1 += l2;\r\n res.NUM_4_LONG(l1);\r\n return res;\r\n }\r\n }\r\n num2.num_4_std_long();\r\n }\r\n num1.num_4_std_long();\r\n }\r\n else if (num2.NUM_IS_LONG())\r\n num2.num_4_std_long();\r\n\r\n sign1 = NUM_TYPE.toSByte(num1._data[0] & NUM_TYPE.SIGN_MASK);\r\n operData.NUM_Exp1_ = NUM_TYPE.toSByte(num1._data[0] & ~NUM_TYPE.SIGN_MASK);\r\n sign2 = NUM_TYPE.toSByte(num2._data[0] & NUM_TYPE.SIGN_MASK);\r\n operData.NUM_Exp2_ = NUM_TYPE.toSByte(num2._data[0] & ~NUM_TYPE.SIGN_MASK);\r\n operData.NUM_Diff_ = <number>(operData.NUM_Exp1_ - operData.NUM_Exp2_);\r\n\r\n let cmpval: number = operData.NUM_Diff_;\r\n if (cmpval === 0) {\r\n cmpval = NUM_TYPE.toUByte(num1._data[1]) - NUM_TYPE.toUByte(num2._data[1]);\r\n if (cmpval === 0)\r\n cmpval = NUM_TYPE.memcmp(num1, 2, num2, 2, SIGNIFICANT_NUM_SIZE - 2);\r\n }\r\n\r\n if (cmpval >= 0) {\r\n if (sign1 === sign2)\r\n tmpres = NUM_TYPE.add_pos(num1, num2, operData);\r\n else\r\n tmpres = NUM_TYPE.sub_pos(num1, num2, operData);\r\n\r\n if (tmpres._data[0] !== 0)\r\n tmpres._data[0] = NUM_TYPE.toSByte(tmpres._data[0] | sign1);\r\n }\r\n else {\r\n let exp: number = operData.NUM_Exp1_;\r\n operData.NUM_Exp1_ = operData.NUM_Exp2_;\r\n operData.NUM_Exp2_ = exp;\r\n operData.NUM_Diff_ = -operData.NUM_Diff_;\r\n\r\n if (sign1 === sign2)\r\n tmpres = NUM_TYPE.add_pos(num2, num1, operData);\r\n else\r\n tmpres = NUM_TYPE.sub_pos(num2, num1, operData);\r\n\r\n if (tmpres._data[0] !== 0)\r\n tmpres._data[0] |= sign2;\r\n }\r\n\r\n return tmpres;\r\n }\r\n\r\n /// <summary>\r\n /// Performing a Subtract operation on two magic numbers\r\n /// </summary>\r\n /// <param name = \"num1\"> the first number\r\n /// </param>\r\n /// <param name = \"num2\"> the first number\r\n /// </param>\r\n /// <returns> the result\r\n /// </returns>\r\n static sub(num1: NUM_TYPE, num2: NUM_TYPE): NUM_TYPE {\r\n // null values\r\n if (num1 === null || num2 === null)\r\n return null;\r\n\r\n let tmpres: NUM_TYPE = new NUM_TYPE();\r\n let res: NUM_TYPE = new NUM_TYPE();\r\n let operData: OperData = new OperData();\r\n\r\n if (num1.NUM_IS_LONG()) {\r\n if (num2.NUM_IS_LONG()) {\r\n let l: number;\r\n let l1: number = l = num1.NUM_LONG();\r\n if (l < 0)\r\n l = -l;\r\n if (l < 0x40000000) {\r\n let l2: number = l = num2.NUM_LONG();\r\n if (l < 0)\r\n l = -l;\r\n if (l < 0x40000000) {\r\n l1 -= l2;\r\n res.NUM_4_LONG(l1);\r\n return res;\r\n }\r\n }\r\n num2.num_4_std_long();\r\n }\r\n num1.num_4_std_long();\r\n }\r\n else if (num2.NUM_IS_LONG())\r\n num2.num_4_std_long();\r\n\r\n let sign1: number = NUM_TYPE.toSByte(num1._data[0] & NUM_TYPE.SIGN_MASK);\r\n operData.NUM_Exp1_ = NUM_TYPE.toSByte(num1._data[0] & ~NUM_TYPE.SIGN_MASK);\r\n let sign2: number = NUM_TYPE.toSByte(num2._data[0] & NUM_TYPE.SIGN_MASK);\r\n operData.NUM_Exp2_ = NUM_TYPE.toSByte(num2._data[0] & ~NUM_TYPE.SIGN_MASK);\r\n operData.NUM_Diff_ = <number>(operData.NUM_Exp1_ - operData.NUM_Exp2_);\r\n\r\n let cmpval: number = operData.NUM_Diff_;\r\n if (cmpval === 0) {\r\n cmpval = NUM_TYPE.toUByte(num1._data[1]) - NUM_TYPE.toUByte(num2._data[1]);\r\n if (cmpval === 0)\r\n cmpval = NUM_TYPE.memcmp(num1, 2, num2, 2, GuiEnvironment.Environment.GetSignificantNumSize() - 2);\r\n }\r\n\r\n if (cmpval >= 0) {\r\n if (sign1 === sign2)\r\n tmpres = NUM_TYPE.sub_pos(num1, num2, operData);\r\n else\r\n tmpres = NUM_TYPE.add_pos(num1, num2, operData);\r\n\r\n }\r\n else {\r\n let exp: number = operData.NUM_Exp1_;\r\n operData.NUM_Exp1_ = operData.NUM_Exp2_;\r\n operData.NUM_Exp2_ = exp;\r\n operData.NUM_Diff_ = -operData.NUM_Diff_;\r\n if (sign1 === sign2) {\r\n tmpres = NUM_TYPE.sub_pos(num2, num1, operData);\r\n sign1 ^= (NUM_TYPE.SIGN_MASK);\r\n }\r\n else\r\n tmpres = NUM_TYPE.add_pos(num2, num1, operData);\r\n }\r\n\r\n if (tmpres._data[0] !== 0)\r\n tmpres._data[0] |= sign1;\r\n\r\n return tmpres;\r\n }\r\n\r\n /// <summary>\r\n /// Performing a Multiply operation on two magic numbers\r\n /// </summary>\r\n /// <param name = \"num1\"> the first number\r\n /// </param>\r\n /// <param name = \"num2\"> the first number\r\n /// </param>\r\n /// <returns> the result\r\n /// </returns>\r\n static mul(num1: NUM_TYPE, num2: NUM_TYPE): NUM_TYPE {\r\n\r\n let fullres: Int8Array = new Int8Array(38);\r\n let pwr: number;\r\n let len1: number;\r\n let len2: number;\r\n let pos1: number;\r\n let pos2: number;\r\n let pos: number;\r\n let digit1: number;\r\n let prod: number;\r\n let carry: number;\r\n let l: number;\r\n let l1: number;\r\n let l2: number;\r\n let SIGNIFICANT_NUM_SIZE: number;\r\n\r\n // null values\r\n if (num1 === null || num2 === null)\r\n return null;\r\n\r\n SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();\r\n\r\n let res: NUM_TYPE = new NUM_TYPE();\r\n let operData: OperData = new OperData();\r\n let i: number;\r\n let tmpByte: number;\r\n\r\n if (num1.NUM_IS_LONG()) {\r\n if (num2.NUM_IS_LONG()) {\r\n l = l1 = num1.NUM_LONG();\r\n if (l < 0)\r\n l = -l;\r\n if (l < 0xB000) {\r\n l = l2 = num2.NUM_LONG();\r\n if (l < 0)\r\n l = -l;\r\n if (l < 0xB000) {\r\n l1 = l1 * l2;\r\n res.NUM_4_LONG(l1);\r\n return res;\r\n }\r\n }\r\n num2.num_4_std_long();\r\n }\r\n num1.num_4_std_long();\r\n }\r\n else if (num2.NUM_IS_LONG())\r\n num2.num_4_std_long();\r\n\r\n operData.NUM_Exp1_ = NUM_TYPE.toSByte(num1._data[0] & ~NUM_TYPE.SIGN_MASK);\r\n operData.NUM_Exp2_ = NUM_TYPE.toSByte(num2._data[0] & ~NUM_TYPE.SIGN_MASK);\r\n if (operData.NUM_Exp1_ === 0 || operData.NUM_Exp2_ === 0) {\r\n res.NUM_ZERO();\r\n return res;\r\n }\r\n\r\n for (len1 = SIGNIFICANT_NUM_SIZE - 1;\r\n num1._data[len1] === 0;\r\n len1--) {\r\n }\r\n for (len2 = SIGNIFICANT_NUM_SIZE - 1;\r\n num2._data[len2] === 0;\r\n len2--) {\r\n }\r\n\r\n for (i = 0; i < (NUM_TYPE.NUM_SIZE - 1) * 2; i++)\r\n fullres[i] = 0;\r\n\r\n pos = 0;\r\n for (pos1 = len1; pos1 > 0; pos1--) {\r\n pos = pos1 + len2 - 1;\r\n digit1 = num1._data[pos1];\r\n carry = 0;\r\n\r\n for (pos2 = len2; pos2 > 0; pos2--) {\r\n prod = NUM_TYPE.toUByte(digit1) * NUM_TYPE.toUByte(num2._data[pos2]) + carry;\r\n carry = Math.floor(prod / 100);\r\n fullres[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(fullres[pos]) + prod % 100);\r\n tmpByte = fullres[pos];\r\n pos--;\r\n if (NUM_TYPE.toUByte(tmpByte) >= 100) {\r\n fullres[pos + 1] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(fullres[pos + 1]) - 100);\r\n carry++;\r\n }\r\n }\r\n fullres[pos] = NUM_TYPE.toSByte(carry);\r\n }\r\n\r\n pwr = NUM_TYPE.toUByte(operData.NUM_Exp1_) - NUM_TYPE.EXP_BIAS + (NUM_TYPE.toUByte(operData.NUM_Exp2_) - NUM_TYPE.EXP_BIAS);\r\n if (fullres[0] === 0) {\r\n pos++;\r\n pwr--;\r\n }\r\n\r\n if ((num1._data[0] & NUM_TYPE.SIGN_MASK) === (num2._data[0] & NUM_TYPE.SIGN_MASK))\r\n res._data[0] = 0;\r\n else\r\n res._data[0] = NUM_TYPE.SIGN_MASK;\r\n\r\n res._data[0] |= NUM_TYPE.toSByte(pwr + NUM_TYPE.EXP_BIAS);\r\n for (i = 0; i < SIGNIFICANT_NUM_SIZE - 1; i++)\r\n res._data[1 + i] = fullres[pos + i];\r\n\r\n return res;\r\n }\r\n\r\n /// <summary>\r\n /// Performing a Mod operation on two magic numbers\r\n /// </summary>\r\n /// <param name = \"num1\"> the first number\r\n /// </param>\r\n /// <param name = \"num2\"> the first number\r\n /// </param>\r\n /// <returns> the result\r\n /// </returns>\r\n static mod(num1: NUM_TYPE, num2: NUM_TYPE): NUM_TYPE {\r\n // null values\r\n if (num1 === null || num2 === null)\r\n return null;\r\n\r\n let res: NUM_TYPE = new NUM_TYPE();\r\n if (num2.num_is_zero()) {\r\n res.NUM_ZERO();\r\n return res;\r\n }\r\n\r\n if (num1.NUM_IS_LONG())\r\n num1.num_4_std_long();\r\n\r\n if (num2.NUM_IS_LONG())\r\n num2.num_4_std_long();\r\n\r\n res = NUM_TYPE.div(num1, num2);\r\n res.num_trunc(0);\r\n res = NUM_TYPE.mul(res, num2);\r\n res = NUM_TYPE.sub(num1, res);\r\n\r\n return res;\r\n }\r\n\r\n /// <summary>\r\n /// Performing a Divide operation on two magic numbers\r\n /// </summary>\r\n /// <param name = \"num1\"> the first number\r\n /// </param>\r\n /// <param name = \"num2\"> the first number\r\n /// </param>\r\n /// <returns> the result\r\n /// </returns>\r\n static div(num1: NUM_TYPE, num2: NUM_TYPE): NUM_TYPE {\r\n let dividend: Int8Array = new Int8Array((NUM_TYPE.NUM_SIZE - 1) * 2);\r\n let divisor: Int8Array = new Int8Array(NUM_TYPE.NUM_SIZE);\r\n let pwr: number;\r\n let len1: number;\r\n let len2: number;\r\n let pos1: number;\r\n let pos2: number;\r\n let pos: number;\r\n let quot: number;\r\n let prod: number;\r\n let carry: number;\r\n let SIGNIFICANT_NUM_SIZE: number;\r\n\r\n // null values\r\n if (num1 === null || num2 === null)\r\n return null;\r\n\r\n SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();\r\n\r\n let res: NUM_TYPE = new NUM_TYPE();\r\n let operData: OperData = new OperData();\r\n let i: number;\r\n let tmpByte: number;\r\n\r\n if (num1.NUM_IS_LONG())\r\n num1.num_4_std_long();\r\n if (num2.NUM_IS_LONG())\r\n num2.num_4_std_long();\r\n\r\n operData.NUM_Exp1_ = NUM_TYPE.toSByte(num1._data[0] & ~NUM_TYPE.SIGN_MASK);\r\n operData.NUM_Exp2_ = NUM_TYPE.toSByte(num2._data[0] & ~NUM_TYPE.SIGN_MASK);\r\n if (operData.NUM_Exp1_ === 0 || operData.NUM_Exp2_ === 0) {\r\n res.NUM_ZERO();\r\n return res;\r\n }\r\n\r\n for (len1 = SIGNIFICANT_NUM_SIZE - 1;\r\n num1._data[len1] === 0;\r\n len1--) {\r\n }\r\n for (len2 = SIGNIFICANT_NUM_SIZE - 1;\r\n num2._data[len2] === 0;\r\n len2--) {\r\n }\r\n\r\n pos = (NUM_TYPE.memcmp(num1, 1, num2, 1, len2) < 0) ? 0 : 1;\r\n for (i = 0; i < (NUM_TYPE.NUM_SIZE - 1) * 2; i++)\r\n dividend[i] = 0;\r\n\r\n for (i = 0; i < len1; i++)\r\n dividend[pos + i] = num1._data[1 + i];\r\n\r\n for (i = 0; i < len2; i++)\r\n divisor[1 + i] = num2._data[1 + i];\r\n\r\n res.NUM_SET_ZERO();\r\n pwr = NUM_TYPE.toUByte(operData.NUM_Exp1_) - NUM_TYPE.toUByte(operData.NUM_Exp2_) + pos;\r\n res._data[0] = NUM_TYPE.toSByte(pwr + NUM_TYPE.EXP_BIAS);\r\n if ((num1._data[0] & NUM_TYPE.SIGN_MASK) !== (num2._data[0] & NUM_TYPE.SIGN_MASK))\r\n res._data[0] |= NUM_TYPE.SIGN_MASK;\r\n\r\n // normalize dividend & divisor\r\n quot = Math.floor(100 / (NUM_TYPE.toUByte(divisor[1]) + 1));\r\n if (quot > 1) {\r\n carry = 0;\r\n for (pos2 = len2; pos2 > 0; pos2--) {\r\n prod = quot * NUM_TYPE.toUByte(divisor[pos2]) + carry;\r\n carry = Math.floor(prod / 100);\r\n divisor[pos2] = NUM_TYPE.toSByte(prod % 100);\r\n }\r\n\r\n carry = 0;\r\n for (pos1 = len1 + pos - 1; pos1 >= 0; pos1--) {\r\n prod = quot * NUM_TYPE.toUByte(dividend[pos1]) + carry;\r\n carry = Math.floor(prod / 100);\r\n dividend[pos1] = NUM_TYPE.toSByte(prod % 100);\r\n }\r\n }\r\n\r\n // divide dividend by divisor\r\n for (pos1 = 1; pos1 < SIGNIFICANT_NUM_SIZE; pos1++) {\r\n quot = NUM_TYPE.toUByte(dividend[pos1 - 1]) * 100 + Math.floor(NUM_TYPE.toUByte(dividend[pos1]) / NUM_TYPE.toUByte(divisor[1]));\r\n if (quot >= 100)\r\n quot = 99;\r\n\r\n if (quot !== 0) {\r\n // multiply divisor by quotient, and subtract from dividend\r\n pos = pos1 + len2 - 1;\r\n carry = 0;\r\n for (pos2 = len2; pos2 > 0; pos2--) {\r\n prod = quot * NUM_TYPE.toUByte(divisor[pos2]) + carry;\r\n carry = Math.floor(prod / 100);\r\n dividend[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(dividend[pos]) - prod % 100);\r\n tmpByte = dividend[pos];\r\n pos--;\r\n if (tmpByte < 0) {\r\n dividend[pos + 1] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(dividend[pos + 1]) + 100);\r\n carry++;\r\n }\r\n }\r\n dividend[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(dividend[pos]) - carry);\r\n\r\n // decrement quotient, and add back divisor to dividend\r\n while (dividend[pos] < 0) {\r\n quot--;\r\n pos = pos1 + len2 - 1;\r\n for (pos2 = len2; pos2 > 0; pos2--) {\r\n dividend[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(dividend[pos]) + NUM_TYPE.toUByte(divisor[pos2]));\r\n tmpByte = dividend[pos];\r\n pos--;\r\n if (NUM_TYPE.toUByte(tmpByte) >= 100) {\r\n dividend[pos + 1] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(dividend[pos + 1]) - 100);\r\n dividend[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(dividend[pos]) + 1);\r\n }\r\n }\r\n }\r\n }\r\n res._data[pos1] = NUM_TYPE.toSByte(quot);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n /// <summary>\r\n /// Compare two magic numbers\r\n /// </summary>\r\n /// <param name = \"num1\"> The first number\r\n /// </param>\r\n /// <param name = \"num2\"> The second number\r\n /// </param>\r\n /// <returns> 0 if num1=num2, 1 if num1>num2 or -1 if num1<num2\r\n /// </returns>\r\n static num_cmp(num1: NUM_TYPE, num2: NUM_TYPE): number {\r\n let sign1: number;\r\n let sign2: number;\r\n let cmpval: number;\r\n let l1: number;\r\n let l2: number;\r\n let tmp: number;\r\n let SIGNIFICANT_NUM_SIZE: number;\r\n\r\n if (num1 == null || num2 == null)\r\n return Int32.MinValue;\r\n\r\n SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();\r\n\r\n if (num1.NUM_IS_LONG()) {\r\n if (num2.NUM_IS_LONG()) {\r\n l1 = num1.NUM_LONG();\r\n l2 = num2.NUM_LONG();\r\n if (l1 >= 0 && l2 >= 0) {\r\n tmp = l1 - l2;\r\n if (tmp === 0)\r\n return (0);\r\n if (tmp > 0)\r\n return (1);\r\n return (-1);\r\n }\r\n num2.num_4_std_long();\r\n }\r\n num1.num_4_std_long();\r\n }\r\n else if (num2.NUM_IS_LONG())\r\n num2.num_4_std_long();\r\n\r\n sign1 = NUM_TYPE.toSByte(num1._data[0] & NUM_TYPE.SIGN_MASK);\r\n sign2 = NUM_TYPE.toSByte(num2._data[0] & NUM_TYPE.SIGN_MASK);\r\n cmpval = (sign1 === sign2)\r\n ? NUM_TYPE.memcmp(num1, 0, num2, 0, SIGNIFICANT_NUM_SIZE)\r\n : 1;\r\n if (sign1 !== 0)\r\n cmpval = -cmpval;\r\n return (cmpval);\r\n }\r\n\r\n /// <summary>\r\n /// Check if the given hex string represents a long number.\r\n /// </summary>\r\n /// <param name = \"numHexStr\"> The hex string to check.\r\n /// </param>\r\n /// <returns> true, if the string represents a 'long' number in NUM_TYPE.\r\n /// </returns>\r\n static numHexStrIsLong(numHexStr: string): boolean {\r\n return numHexStr.substr(0, 2) === \"FF\";\r\n }\r\n\r\n /// <summary>\r\n /// Zeroes the Magic Number as a long zero\r\n /// </summary>\r\n NUM_ZERO(): void {\r\n this.setZero(true);\r\n }\r\n\r\n /// <summary>\r\n /// Zeroes the Magic Number (all bytes will set to 0)\r\n /// </summary>\r\n NUM_SET_ZERO(): void {\r\n this.setZero(false);\r\n }\r\n\r\n /// <summary>\r\n /// Getting indication for the sign of the Magic Number\r\n /// </summary>\r\n /// <returns> true in the number is negative, false if positive\r\n /// </returns>\r\n num_is_neg(): boolean {\r\n if (this.NUM_IS_LONG())\r\n return ((this._data[4] & 0x80) !== 0);\r\n return ((this._data[0] & NUM_TYPE.SIGN_MASK) !== 0);\r\n }\r\n\r\n /// <summary>\r\n /// Getting indication if the Magic Number is ZERO (all bytes equals to 0)\r\n /// </summary>\r\n /// <returns> true in the number is ZERO, false if positive\r\n /// </returns>\r\n num_is_zero(): boolean {\r\n if (this.NUM_IS_LONG())\r\n return (this.NUM_LONG() === 0);\r\n return (this._data[0] === 0);\r\n }\r\n\r\n /// <summary>\r\n /// Changing sign of Magic Number\r\n /// </summary>\r\n num_neg(): void {\r\n let l: number;\r\n\r\n if (this.NUM_IS_LONG()) {\r\n l = -this.NUM_LONG();\r\n this.NUM_4_LONG(l);\r\n return;\r\n }\r\n if (this._data[0] !== 0)\r\n this._data[0] ^= NUM_TYPE.SIGN_MASK;\r\n }\r\n\r\n /// <summary>\r\n /// Is the number kept in in the NUM_TYPE is a long number?\r\n /// </summary>\r\n /// <returns> true in the number is long, false if not\r\n /// </returns>\r\n NUM_IS_LONG(): boolean {\r\n return this._data[0] === NUM_TYPE.NUM_LONG_TYPE;\r\n }\r\n\r\n /// <summary>\r\n /// Get the long value from the NUM_TYPE.\r\n /// THIS FUNCTION MUST BE WRITTEN DIFERENTLY!\r\n /// </summary>\r\n /// <returns> the long number\r\n /// </returns>\r\n NUM_LONG(): number {\r\n if (this._data[1] === 0 && this._data[2] === 0 && this._data[3] === 0 && this._data[4] === -128)\r\n return Int32.MinValue;\r\n\r\n let dataview = new DataView(this._data.buffer);\r\n return dataview.getInt32(1, true);\r\n }\r\n\r\n /// <summary>\r\n /// Rounds the NUM_TYPE number\r\n /// </summary>\r\n /// <param name = \"decs\"> number of digits after to decimal point to round to\r\n /// </param>\r\n round(decs: number): void {\r\n\r\n let addval: NUM_TYPE;\r\n\r\n if (this.NUM_IS_LONG())\r\n return;\r\n\r\n addval = new NUM_TYPE();\r\n addval._data[0] = NUM_TYPE.toSByte((this._data[0] & NUM_TYPE.SIGN_MASK) | (NUM_TYPE.EXP_BIAS - (decs >> 1)));\r\n addval._data[1] = NUM_TYPE.toSByte((decs & 1) !== 0 ? 5 : 50);\r\n\r\n let temp: NUM_TYPE = NUM_TYPE.add(this, addval);\r\n this._data = new Int8Array(temp._data.length);\r\n\r\n this._data = temp._data;\r\n this.num_trunc(decs);\r\n }\r\n\r\n /// <summary>\r\n /// Returns a numeric expression, rounded to the specified number of decimal places\r\n /// </summary>\r\n /// <param name = \"whole\">the number of decimal places to which the numeric expression is rounded\r\n /// </param>\r\n dbRound(whole: number): void {\r\n let addval: NUM_TYPE;\r\n let pwr: number;\r\n let num_diff: number;\r\n let i: number;\r\n\r\n if (this.NUM_IS_LONG())\r\n return;\r\n\r\n // Add 5 (in the corresponding to whole position)\r\n addval = new NUM_TYPE();\r\n addval._data[0] = NUM_TYPE.toSByte((this._data[0] & NUM_TYPE.SIGN_MASK) | (NUM_TYPE.EXP_BIAS + ((whole + 1) >> 1)));\r\n addval._data[1] = NUM_TYPE.toSByte(((whole & 1) !== 0) ? 5 : 50);\r\n\r\n let temp: NUM_TYPE = NUM_TYPE.add(this, addval);\r\n this._data = new Int8Array(temp._data.length);\r\n\r\n for (let _ai: number = 0; _ai < this._data.length; ++_ai)\r\n this._data[_ai] = temp._data[_ai];\r\n\r\n // Put 0 in the end of the number\r\n pwr = (this._data[0] & ~NUM_TYPE.SIGN_MASK) - NUM_TYPE.EXP_BIAS;\r\n\r\n if ((num_diff = pwr - ((whole + 1) >> 1)) >= 0) {\r\n if ((whole & 1) !== 0) {\r\n this._data[1 + num_diff] = NUM_TYPE.toSByte(this._data[1 + num_diff] - this._data[1 + num_diff] % 10);\r\n num_diff++;\r\n }\r\n for (i = 0;\r\n i < this.SIGNIFICANT_NUM_SIZE - (1 + num_diff);\r\n i++)\r\n this._data[1 + num_diff + i] = 0;\r\n }\r\n else\r\n this.NUM_SET_ZERO();\r\n }\r\n\r\n /// <summary>\r\n /// Truncates the NUM_TYPE number\r\n /// </summary>\r\n /// <param name = \"decs\"> number of digits after to decimal point to have\r\n /// </param>\r\n num_trunc(decs: number): void {\r\n let pwr: number;\r\n let num_diff: number;\r\n let i: number;\r\n\r\n if (this.NUM_IS_LONG())\r\n return;\r\n\r\n pwr = (this._data[0] & ~NUM_TYPE.SIGN_MASK) - NUM_TYPE.EXP_BIAS;\r\n if ((num_diff = this.SIGNIFICANT_NUM_SIZE - 1 - pwr - ((decs + 1) >> 1)) < 0)\r\n return;\r\n if ((num_diff < this.SIGNIFICANT_NUM_SIZE - 1) && ((decs & 1) !== 0)) {\r\n this._data[this.SIGNIFICANT_NUM_SIZE - 1 - num_diff] =\r\n NUM_TYPE.toSByte(this._data[this.SIGNIFICANT_NUM_SIZE - 1 - num_diff] - this._data[this.SIGNIFICANT_NUM_SIZE - 1 - num_diff] % 10);\r\n if (this._data[this.SIGNIFICANT_NUM_SIZE - 1 - num_diff] === 0)\r\n num_diff++;\r\n }\r\n if (num_diff >= this.SIGNIFICANT_NUM_SIZE - 1) {\r\n this.NUM_ZERO();\r\n return;\r\n }\r\n for (i = 0;\r\n i < num_diff;\r\n i++)\r\n this._data[this.SIGNIFICANT_NUM_SIZE - num_diff + i] = 0;\r\n }\r\n\r\n /// <summary>\r\n /// Converts a Magic number from std long\r\n /// </summary>\r\n /// <param name = \"num\"> The number to be translated\r\n /// </param>\r\n num_4_std_long(): void {\r\n let slong: number;\r\n\r\n slong = this.NUM_LONG();\r\n if (slong >= 0)\r\n this.num_4_ulong(slong);\r\n else {\r\n this.num_4_ulong(-slong);\r\n this._data[0] |= NUM_TYPE.SIGN_MASK;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Converts a Magic number from ulong\r\n /// </summary>\r\n /// <param name = \"num\"> The number to be translated\r\n /// </param>\r\n num_4_ulong(data: number): void {\r\n let pwr: number;\r\n let pos: number;\r\n let i: number;\r\n\r\n this.NUM_SET_ZERO();\r\n pos = pwr = 5;\r\n while (data > 0) {\r\n this._data[pos--] = NUM_TYPE.toSByte(data % 100);\r\n data = Math.floor(data / 100);\r\n }\r\n if (pos < pwr) {\r\n if (pos > 0) {\r\n for (i = 0; i < pwr - pos; i++)\r\n this._data[1 + i] = this._data[1 + pos + i];\r\n for (i = 0; i < pos; i++)\r\n this._data[pwr - pos + 1 + i] = 0;\r\n }\r\n this._data[0] = NUM_TYPE.toSByte(pwr - pos + NUM_TYPE.EXP_BIAS);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Get the long value from a Magic Number\r\n /// </summary>\r\n /// <returns> the long value of the number\r\n /// </returns>\r\n NUM_2_LONG(): number {\r\n if (this.NUM_IS_LONG())\r\n return this.NUM_LONG();\r\n else\r\n return this.num_2_long();\r\n }\r\n\r\n /// <summary>\r\n /// Get the Ulong value from a Magic Number\r\n /// </summary>\r\n /// <returns> the long value of the number\r\n /// </returns>\r\n NUM_2_ULONG(): number {\r\n if (this.NUM_IS_LONG())\r\n return this.NUM_LONG();\r\n else\r\n return this.num_2_ulong();\r\n }\r\n\r\n /// <summary>\r\n /// Get the long value from a non long Magic Number\r\n /// </summary>\r\n /// <returns> the long value of the number\r\n /// </returns>\r\n num_2_long(): number {\r\n let slong: number;\r\n let sign: number;\r\n\r\n sign = this._data[0] & NUM_TYPE.SIGN_MASK;\r\n this._data[0] &= NUM_TYPE.toSByte(~NUM_TYPE.SIGN_MASK);\r\n if (sign !== 0) {\r\n if (NUM_TYPE.memcmp(this, 0, NUM_TYPE.MinLONG(), 0, this.SIGNIFICANT_NUM_SIZE) > 0)\r\n return 0;\r\n }\r\n else {\r\n if (NUM_TYPE.memcmp(this, 0, NUM_TYPE.MaxLONG(), 0, this.SIGNIFICANT_NUM_SIZE) > 0)\r\n return 0;\r\n }\r\n slong = this.num_2_ulong();\r\n if (sign !== 0) {\r\n slong = -slong;\r\n this._data[0] |= NUM_TYPE.toSByte(sign);\r\n }\r\n return (slong);\r\n }\r\n\r\n /// <summary>\r\n /// Get the ulong value from a non long Magic Number\r\n /// </summary>\r\n /// <returns> the ulong value of the number\r\n /// </returns>\r\n num_2_ulong(): number {\r\n let val: number;\r\n let pwr: number;\r\n let pos: number;\r\n let last: boolean;\r\n\r\n pwr = this._data[0] - NUM_TYPE.EXP_BIAS;\r\n if (pwr > 5)\r\n return (0);\r\n last = (pwr === 5);\r\n if (last)\r\n pwr = 4;\r\n\r\n val = 0;\r\n for (pos = 1; pos <= pwr; pos++)\r\n val = val * 100 + NUM_TYPE.toUByte(this._data[pos]);\r\n\r\n if (last)\r\n if (val <= Math.floor((0xFFFFFFFF - NUM_TYPE.toUByte(this._data[5])) / 100))\r\n val = val * 100 + NUM_TYPE.toUByte(this._data[5]);\r\n else\r\n val = 0;\r\n return (val);\r\n }\r\n\r\n /// <summary>\r\n /// Perform the actuall add operation\r\n /// </summary>\r\n /// <param name = \"num1\"> The first number\r\n /// </param>\r\n /// <param name = \"num2\"> The second number\r\n /// </param>\r\n /// <param name = \"operData\"> Information for performing the operation\r\n /// </param>\r\n /// <returns> The two numbers added\r\n /// </returns>\r\n static add_pos(num1: NUM_TYPE, num2: NUM_TYPE, operData: OperData): NUM_TYPE {\r\n let len1: number;\r\n let len2: number;\r\n let len: number;\r\n let pos: number;\r\n let num1ptr: number;\r\n let resptr: number;\r\n let i: number;\r\n let SIGNIFICANT_NUM_SIZE: number;\r\n\r\n // null values\r\n if (num1 == null || num2 == null)\r\n return null;\r\n SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();\r\n\r\n let res: NUM_TYPE = new NUM_TYPE();\r\n\r\n if (operData.NUM_Exp2_ === 0 || (operData.NUM_Diff_ >= SIGNIFICANT_NUM_SIZE - 1)) {\r\n res = new NUM_TYPE(num1);\r\n res._data[0] = operData.NUM_Exp1_;\r\n return res;\r\n }\r\n\r\n len1 = 1;\r\n for (i = SIGNIFICANT_NUM_SIZE - 2; i > 0; i -= 2) {\r\n if (num1.SHRT_IS_ZERO(i))\r\n continue;\r\n else {\r\n len1 = i + 1;\r\n break;\r\n }\r\n }\r\n\r\n if (num1._data[len1] === 0)\r\n len1--;\r\n\r\n len2 = 1;\r\n for (i = SIGNIFICANT_NUM_SIZE - 2; i > 0; i -= 2) {\r\n if (num2.SHRT_IS_ZERO(i))\r\n continue;\r\n else {\r\n len2 = i + 1;\r\n break;\r\n }\r\n }\r\n\r\n if (num2._data[len2] === 0)\r\n len2--;\r\n\r\n if ((len = Math.max(len1, len2 + operData.NUM_Diff_)) > SIGNIFICANT_NUM_SIZE - 1)\r\n len = SIGNIFICANT_NUM_SIZE - 1;\r\n\r\n res.NUM_SET_ZERO();\r\n num1ptr = operData.NUM_Diff_;\r\n resptr = operData.NUM_Diff_;\r\n for (pos = len - operData.NUM_Diff_; pos > 0; pos--) {\r\n res._data[resptr + pos] =\r\n NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[resptr + pos]) + NUM_TYPE.toUByte(num1._data[num1ptr + pos]) + NUM_TYPE.toUByte(num2._data[pos]));\r\n if (NUM_TYPE.toUByte(res._data[resptr + pos]) >= 100) {\r\n res._data[resptr + pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[resptr + pos]) - 100);\r\n res._data[resptr + pos - 1] = 1;\r\n }\r\n }\r\n for (pos = operData.NUM_Diff_; pos > 0; pos--) {\r\n res._data[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[pos]) + NUM_TYPE.toUByte(num1._data[pos]));\r\n if (NUM_TYPE.toUByte(res._data[pos]) >= 100) {\r\n res._data[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[pos]) - 100);\r\n res._data[pos - 1] = 1;\r\n }\r\n }\r\n if (res._data[0] !== 0) {\r\n for (pos = Math.min(len, SIGNIFICANT_NUM_SIZE - 2); pos >= 0; pos--)\r\n res._data[pos + 1] = res._data[pos];\r\n operData.NUM_Exp1_++;\r\n }\r\n res._data[0] = operData.NUM_Exp1_;\r\n\r\n return res;\r\n }\r\n\r\n /// <summary>\r\n /// Perform the actuall sub operation\r\n /// </summary>\r\n /// <param name = \"num1\"> The first number\r\n /// </param>\r\n /// <param name = \"num2\"> The second number\r\n /// </param>\r\n /// <param name = \"operData\"> Information for performing the operation\r\n /// </param>\r\n /// <returns> The result of the subtraction operation\r\n /// </returns>\r\n static sub_pos(num1: NUM_TYPE, num2: NUM_TYPE, operData: OperData): NUM_TYPE {\r\n let len1: number;\r\n let len2: number;\r\n let len: number;\r\n let pos: number;\r\n let num1ptr: number;\r\n let resptr: number;\r\n let i: number;\r\n let SIGNIFICANT_NUM_SIZE: number;\r\n\r\n // null values\r\n if (num1 == null || num2 == null)\r\n return null;\r\n\r\n SIGNIFICANT_NUM_SIZE = GuiEnvironment.Environment.GetSignificantNumSize();\r\n\r\n let res: NUM_TYPE = new NUM_TYPE();\r\n let j: number;\r\n\r\n if (operData.NUM_Exp2_ === 0 || (operData.NUM_Diff_ >= SIGNIFICANT_NUM_SIZE - 1)) {\r\n res = new NUM_TYPE(num1);\r\n res._data[0] = operData.NUM_Exp1_;\r\n return res;\r\n }\r\n\r\n len1 = 1;\r\n for (i = SIGNIFICANT_NUM_SIZE - 2; i > 0; i -= 2) {\r\n if (num1.SHRT_IS_ZERO(i))\r\n continue;\r\n else {\r\n len1 = i + 1;\r\n break;\r\n }\r\n }\r\n\r\n if (num1._data[len1] === 0)\r\n len1--;\r\n\r\n len2 = 1;\r\n for (i = SIGNIFICANT_NUM_SIZE - 2; i > 0; i -= 2) {\r\n if (num2.SHRT_IS_ZERO(i))\r\n continue;\r\n else {\r\n len2 = i + 1;\r\n break;\r\n }\r\n }\r\n\r\n if (num2._data[len2] === 0)\r\n len2--;\r\n\r\n if ((len = Math.max(len1, len2 + operData.NUM_Diff_)) > SIGNIFICANT_NUM_SIZE - 1)\r\n len = SIGNIFICANT_NUM_SIZE - 1;\r\n\r\n res.NUM_SET_ZERO();\r\n num1ptr = operData.NUM_Diff_;\r\n resptr = operData.NUM_Diff_;\r\n for (pos = len - operData.NUM_Diff_; pos > 0; pos--) {\r\n\r\n res._data[resptr + pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[resptr + pos]) + NUM_TYPE.toUByte(num1._data[num1ptr + pos]) - NUM_TYPE.toUByte(num2._data[pos]));\r\n if (res._data[resptr + pos] < 0) {\r\n res._data[resptr + pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[resptr + pos]) + 100);\r\n res._data[resptr + pos - 1] = NUM_TYPE.toSByte(0xFF); // 255\r\n }\r\n }\r\n for (pos = operData.NUM_Diff_; pos > 0; pos--) {\r\n res._data[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[pos]) + NUM_TYPE.toUByte(num1._data[pos]));\r\n if (res._data[pos] < 0) {\r\n res._data[pos] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(res._data[pos]) + 100);\r\n res._data[pos - 1] = NUM_TYPE.toSByte(0xFF); // 255\r\n }\r\n }\r\n while ((++pos <= len) && res._data[pos] === 0) {\r\n }\r\n if (pos <= len) {\r\n operData.NUM_Diff_ = pos - 1;\r\n if (operData.NUM_Diff_ > 0) {\r\n for (j = 0; j < len - operData.NUM_Diff_; j++)\r\n res._data[1 + j] = res._data[pos + j];\r\n for (j = 0; j < operData.NUM_Diff_; j++)\r\n res._data[len - operData.NUM_Diff_ + 1 + j] = 0;\r\n }\r\n res._data[0] = NUM_TYPE.toSByte(NUM_TYPE.toUByte(operData.NUM_Exp1_) - operData.NUM_Diff_);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n /// <summary>\r\n /// Perform the actual FIX operation with whole part of the number\r\n /// </summary>\r\n /// <param name = \"wholes\">number of needed whole digits\r\n /// </param>\r\n num_fix(wholes: number): void {\r\n let pwr: number;\r\n let num_diff: number;\r\n\r\n if (this.NUM_IS_LONG())\r\n this.num_4_std_long();\r\n pwr = (this._data[0] & ~NUM_TYPE.SIGN_MASK) - NUM_TYPE.EXP_BIAS;\r\n\r\n if ((num_diff = pwr - ((wholes + 1) >> 1)) < 0)\r\n return;\r\n if (num_diff < this.SIGNIFICANT_NUM_SIZE - 1) {\r\n if ((wholes & 1) === 1)\r\n this._data[1 + num_diff] = NUM_TYPE.toSByte(this._data[1 + num_diff] % 10);\r\n while ((num_diff < this.SIGNIFICANT_NUM_SIZE - 1) && this._data[1 + num_diff] === 0)\r\n num_diff++;\r\n }\r\n if (num_diff >= this.SIGNIFICANT_NUM_SIZE - 1) {\r\n this.NUM_ZERO();\r\n return;\r\n }\r\n if (num_diff > 0) {\r\n let i: number;\r\n for (i = 0; i < this.SIGNIFICANT_NUM_SIZE - 1 - num_diff; i++)\r\n this._data[1 + i] = this._data[1 + num_diff + i];\r\n\r\n for (i = 0; i < num_diff; i++)\r\n this._data[this.SIGNIFICANT_NUM_SIZE - num_diff + i] = 0;\r\n this._data[0] = NUM_TYPE.toSByte(this._data[0] - NUM_TYPE.toSByte(num_diff));\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// check if byte on specific position is zero or 0xFF\r\n /// </summary>\r\n /// <param name = \"position\">in NUM to be checked\r\n /// </param>\r\n /// <returns> is the byte zero\r\n /// </returns>\r\n SHRT_IS_ZERO(pos: number): boolean {\r\n return this._data[pos] === 0 && this._data[pos + 1] === 0;\r\n }\r\n\r\n /// <summary>\r\n /// Zero a Magic Number. If the number should contain a long zero, the first\r\n /// byte is set to NUM_LONG_TYPE.\r\n /// </summary>\r\n /// <param name = \"asLong\"> set the Magic Number to contain a long zero value\r\n /// </param>\r\n private setZero(asLong: boolean): void {\r\n let i: number;\r\n\r\n for (i = 0; i < NUM_TYPE.NUM_SIZE; i++)\r\n this._data[i] = 0;\r\n\r\n if (asLong)\r\n this._data[0] = NUM_TYPE.NUM_LONG_TYPE;\r\n }\r\n\r\n /// <summary>\r\n /// Compare two Magic Numbers\r\n /// </summary>\r\n /// <param name = \"num1\"> The first number\r\n /// </param>\r\n /// <param name = \"pos1\"> The position of num1 to compare from\r\n /// </param>\r\n /// <param name = \"num2\"> The second number\r\n /// </param>\r\n /// <param name = \"pos3\"> The position of num2 to compare from\r\n /// </param>\r\n /// <returns> 0 if identical, 1 if num1>num2, -1 if num1<num2\r\n /// </returns>\r\n private static memcmp(num1: NUM_TYPE, pos1: number, num2: NUM_TYPE, pos2: number, len: number): number {\r\n let i: number = 0;\r\n\r\n while (i < len && num1._data[pos1] === num2._data[pos2] && pos1 < NUM_TYPE.NUM_SIZE && pos2 < NUM_TYPE.NUM_SIZE) {\r\n i++;\r\n pos1++;\r\n pos2++;\r\n }\r\n\r\n if (i === len)\r\n return 0;\r\n else if (this.toUByte(num1._data[pos1]) < this.toUByte(num2._data[pos2]))\r\n return -1;\r\n else\r\n return 1;\r\n }\r\n\r\n /// <summary>\r\n /// Get a unsigned value from a byte\r\n /// </summary>\r\n /// <param name = \"byteVal\"> A signed byte value\r\n /// </param>\r\n /// <returns> the unsigned value of the byte\r\n /// </returns>\r\n static toUByte(byteVal: number): number {\r\n let val: number = byteVal;\r\n\r\n if (byteVal < 0)\r\n val = 256 + byteVal;\r\n\r\n return val;\r\n }\r\n\r\n /// <summary>\r\n /// Get a signed byte value from a unsigned val\r\n /// </summary>\r\n /// <param name = \"signedVal\"> An unsigned byte value (as an integer)\r\n /// </param>\r\n /// <returns> the signed value as a byte\r\n /// </returns>\r\n static toSByte(unsignedVal: number): number {\r\n let val: number = 0;\r\n\r\n if (unsignedVal > Constants.SByteMaxValue)\r\n val = (unsignedVal - 256);\r\n else\r\n val = unsignedVal;\r\n\r\n return val;\r\n }\r\n\r\n /// <summary>\r\n /// Get the maximum long number in NUM_TYPE std format\r\n /// </summary>\r\n static MaxLONG(): NUM_TYPE {\r\n let nUM_TYPE: NUM_TYPE = new NUM_TYPE();\r\n nUM_TYPE._data[0] = NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 5);\r\n nUM_TYPE._data[1] = 21;\r\n nUM_TYPE._data[2] = 47;\r\n nUM_TYPE._data[3] = 48;\r\n nUM_TYPE._data[4] = 36;\r\n nUM_TYPE._data[5] = 47;\r\n return nUM_TYPE;\r\n }\r\n\r\n /// <summary>\r\n /// Get the minimum long number in NUM_TYPE std format\r\n /// </summary>\r\n static MinLONG(): NUM_TYPE {\r\n let num: NUM_TYPE = new NUM_TYPE();\r\n num._data[0] = NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 5);\r\n num._data[1] = 21;\r\n num._data[2] = 47;\r\n num._data[3] = 48;\r\n num._data[4] = 36;\r\n num._data[5] = 48;\r\n return num;\r\n }\r\n\r\n /// <summary>\r\n /// Get double number from Magic NUM_TYPE\r\n /// </summary>\r\n to_double(): number {\r\n return this.storage_mg_2_float(8); // Length of double is 8 byte\r\n }\r\n\r\n /// <summary>\r\n /// Get double number from Magic NUM_TYPE\r\n /// </summary>\r\n /// <param name = \"len\">of byte of needed number - USE 8\r\n /// </param>\r\n private storage_mg_2_float(len: number): number {\r\n let sign_pos: number;\r\n let sign: number;\r\n let compnum: NUM_TYPE = new NUM_TYPE();\r\n let tmpnum: NUM_TYPE = new NUM_TYPE();\r\n let divnum: NUM_TYPE = new NUM_TYPE();\r\n let pwr: number;\r\n let bits: number;\r\n let exp: number;\r\n let long1: number = 0;\r\n let long2: number = 0;\r\n let fltOut: number = 0;\r\n let cout: Int8Array = new Int8Array([0, 0, 0, 0, 0, 0, 0, 0]);\r\n let Num2Pwr23_: Int8Array = new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 4), 8, 38, 86, 8]);\r\n let Num2Pwr52_: Int8Array = new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 8), 45, 3, 59, 96, 27, 37, 4, 96]);\r\n let base_Num16Pwrs: Int8Array[] = [\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 1]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 16]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 2), 2, 56]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 2), 40, 96]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 3), 6, 55, 36]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 4), 1, 4, 85, 76]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 4), 16, 77, 72, 16]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 5), 2, 68, 43, 54, 56]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 5), 42, 94, 96, 72, 96]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 6), 6, 87, 19, 47, 67, 36]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 7), 1, 9, 95, 11, 62, 77, 76]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 7), 17, 59, 21, 86, 4, 44, 16]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 8), 2, 81, 47, 49, 76, 71, 6, 56]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 8), 45, 3, 59, 96, 27, 37, 4, 96]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 9), 7, 20, 57, 59, 40, 37, 92, 79, 36])\r\n ];\r\n\r\n let base_Num2Pwrs: Int8Array[] = [\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 1]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 2]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 4]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 8])\r\n ];\r\n\r\n if (this.NUM_IS_LONG())\r\n this.num_4_std_long();\r\n if (this._data[0] === 0)\r\n return 0;\r\n sign = NUM_TYPE.toSByte(this._data[0] & NUM_TYPE.SIGN_MASK);\r\n this._data[0] = NUM_TYPE.toSByte(this._data[0] & <number>(~NUM_TYPE.SIGN_MASK));\r\n if (len === 4) {\r\n bits = 24;\r\n compnum = new NUM_TYPE(Num2Pwr23_);\r\n }\r\n else {\r\n bits = 53;\r\n compnum = new NUM_TYPE(Num2Pwr52_);\r\n }\r\n pwr = (this._data[0] - NUM_TYPE.EXP_BIAS) << 1;\r\n if (pwr < 0)\r\n exp = pwr * 3 + Math.floor((pwr + 1) / 3);\r\n else exp = pwr * 3 + Math.floor((pwr + 2) / 3);\r\n pwr = bits - exp;\r\n if (pwr < 0) {\r\n pwr = -pwr;\r\n tmpnum = NUM_TYPE.div(this, new NUM_TYPE(base_Num16Pwrs[pwr >> 2]));\r\n tmpnum = NUM_TYPE.div(tmpnum, new NUM_TYPE(base_Num2Pwrs[pwr & 3]));\r\n }\r\n else {\r\n tmpnum = this;\r\n while (pwr >= 60) {\r\n tmpnum = NUM_TYPE.mul(tmpnum, new NUM_TYPE(base_Num16Pwrs[14]));\r\n pwr -= 56;\r\n }\r\n tmpnum = NUM_TYPE.mul(tmpnum, new NUM_TYPE(base_Num16Pwrs[pwr >> 2]));\r\n tmpnum = NUM_TYPE.mul(tmpnum, new NUM_TYPE(base_Num2Pwrs[pwr & 3]));\r\n }\r\n while (NUM_TYPE.num_cmp(tmpnum, compnum) < 0) {\r\n exp--;\r\n tmpnum = NUM_TYPE.add(tmpnum, tmpnum);\r\n }\r\n if (len === 4) {\r\n long1 = tmpnum.num_2_ulong();\r\n }\r\n else {\r\n divnum = NUM_TYPE.div(tmpnum, new NUM_TYPE(base_Num16Pwrs[8]));\r\n divnum.num_trunc(0);\r\n long1 = divnum.num_2_ulong();\r\n divnum = NUM_TYPE.mul(divnum, new NUM_TYPE(base_Num16Pwrs[8]));\r\n divnum = NUM_TYPE.sub(tmpnum, divnum);\r\n long2 = divnum.num_2_ulong();\r\n }\r\n sign_pos = len - 1;\r\n if (len === 4) {\r\n exp += 126;\r\n cout[3] = NUM_TYPE.toSByte(exp >> 1);\r\n cout[2] = NUM_TYPE.toSByte((this.LO_CHAR(this.HI_SHRT(long1)) & 0x7F) | ((exp & 0x01) << 7));\r\n cout[1] = NUM_TYPE.toSByte(this.HI_CHAR(this.LO_SHRT(long1)));\r\n cout[0] = NUM_TYPE.toSByte(this.LO_CHAR(this.LO_SHRT(long1)));\r\n }\r\n else {\r\n exp += 1022;\r\n cout[7] = NUM_TYPE.toSByte(exp >> 4);\r\n\r\n cout[6] = NUM_TYPE.toSByte((this.LO_CHAR(this.HI_SHRT(long1)) & 0x0F) | ((exp & 0x0F) << 4));\r\n\r\n cout[5] = NUM_TYPE.toSByte(this.HI_CHAR(this.LO_SHRT(long1)));\r\n\r\n cout[4] = NUM_TYPE.toSByte(this.LO_CHAR(this.LO_SHRT(long1)));\r\n cout[3] = NUM_TYPE.toSByte(this.HI_CHAR(this.HI_SHRT(long2)));\r\n cout[2] = NUM_TYPE.toSByte(this.LO_CHAR(this.HI_SHRT(long2)));\r\n cout[1] = NUM_TYPE.toSByte(this.HI_CHAR(this.LO_SHRT(long2)));\r\n cout[0] = NUM_TYPE.toSByte(this.LO_CHAR(this.LO_SHRT(long2)));\r\n }\r\n if (sign !== 0) {\r\n cout[sign_pos] |= NUM_TYPE.SIGN_MASK;\r\n this._data[0] |= NUM_TYPE.SIGN_MASK;\r\n }\r\n fltOut = this.sbyteArr_2_Double(cout);\r\n return fltOut;\r\n }\r\n\r\n /// <summary>\r\n /// Bit_Wise mask : Leave last byte in number\r\n /// </summary>\r\n private LO_CHAR(n: number): number {\r\n return n & 255;\r\n }\r\n\r\n /// <summary>\r\n /// Bit_Wise mask : Leave byte before last\r\n /// </summary>\r\n private HI_CHAR(n: number): number {\r\n return (n & 65280) >> 8;\r\n }\r\n\r\n /// <summary>\r\n /// Bit_Wise mask : Leave 2 last bytes\r\n /// </summary>\r\n private LO_SHRT(n: number): number {\r\n return <number>(n & 65535);\r\n }\r\n\r\n /// <summary>\r\n /// Bit_Wise mask\r\n /// </summary>\r\n private HI_SHRT(n: number): number {\r\n return <number>((n & -65536) >> 16);\r\n }\r\n\r\n /// <summary>\r\n /// Bit_Wise mask\r\n /// </summary>\r\n private static MK_SHRT(c1: number, c2: number): number {\r\n let strInt: string = (c1 << 8 | c2).toString();\r\n return NNumber.Parse(strInt);\r\n }\r\n\r\n /// <summary>\r\n /// Bit_Wise mask\r\n /// </summary>\r\n private static MK_LONG(s1: number, s2: number): number {\r\n let l1: number = <number>s1;\r\n let l2: number = <number>s2;\r\n let strLng: string = (l1 << 16 | l2).toString();\r\n return NNumber.Parse(strLng);\r\n }\r\n\r\n /// <summary>\r\n /// get the double from array of bytes\r\n /// </summary>\r\n /// <param name = \"array\">of bytes, inner representation of the double\r\n /// </param>\r\n /// <returns> double\r\n /// </returns>\r\n private sbyteArr_2_Double(array: Int8Array): number {\r\n let dataview = new DataView(array.buffer);\r\n return dataview.getFloat64(0, true);\r\n }\r\n\r\n /// <summary>\r\n /// get byte array for double (8 bytes in Java)\r\n /// </summary>\r\n /// <param name = \"double\">to get its byte representation\r\n /// </param>\r\n /// <returns> byte array\r\n /// </returns>\r\n private static double_2_sbyteArray(d: number): Int8Array {\r\n let buffer = new ArrayBuffer(8);\r\n let dataview = new DataView(buffer);\r\n dataview.setFloat64(0, d, true);\r\n return (new Int8Array(dataview.buffer));\r\n }\r\n\r\n /// <summary>\r\n /// Performing an Power operation on two magic numbers Val1^Val2\r\n /// </summary>\r\n /// <param name = \"num1\"> the first number - number\r\n /// </param>\r\n /// <param name = \"num2\"> the first number - power\r\n /// </param>\r\n /// <returns> the result\r\n /// </returns>\r\n static eval_op_pwr(num1: NUM_TYPE, num2: NUM_TYPE): NUM_TYPE {\r\n let d0: number;\r\n let d1: number;\r\n\r\n // null values\r\n if (num1 == null || num2 == null)\r\n return null;\r\n\r\n // If second operator is an integer (which is so in most of the cases)\r\n // and it is not -ve, then calculate power using simple multiplication\r\n // There is a problem in from_double as it doesn't return exact\r\n // values (for example, passing 1.002441 in num to from_double would\r\n // return 1.00244099999999). btw, this problem exists even in Visual studio's\r\n // watch window (try typing 1.002441 in Name column of watch window).\r\n if (num2.NUM_IS_LONG() && !num2.num_is_neg()) {\r\n d1 = num2.to_double();\r\n let result: NUM_TYPE = NUM_TYPE.from_double(1);\r\n for (let i: number = 0; i < d1; i++)\r\n result = this.mul(result, num1);\r\n return result;\r\n }\r\n else {\r\n d0 = num1.to_double();\r\n d1 = num2.to_double();\r\n if (d0 < 0.0 && d1 !== <number> d1)\r\n d0 = 0.0;\r\n /* pwr (0.0, 0.0) -> error */\r\n /* ----------------------- */\r\n else if (d0 !== 0.0)\r\n d0 = Math.pow(d0, d1);\r\n }\r\n\r\n return NUM_TYPE.from_double(d0);\r\n }\r\n\r\n /// <summary>\r\n /// translate double to NUM_TYPE\r\n /// </summary>\r\n /// <param name = \"double\">to translate\r\n /// </param>\r\n /// <returns> NUM_TYPE of the double\r\n /// </returns>\r\n static from_double(d0: number): NUM_TYPE {\r\n let array: Int8Array = NUM_TYPE.double_2_sbyteArray(d0);\r\n return NUM_TYPE.storage_mg_4_float(8, array);\r\n }\r\n\r\n /// <summary>\r\n /// translate byte array to NUM_TYPE\r\n /// </summary>\r\n /// <param name = \"len\">of the needed number(8)\r\n /// </param>\r\n /// <param name = \"byte\">array mask\r\n /// </param>\r\n /// <returns> NUM_TYPE for the needed attributes\r\n /// </returns>\r\n private static storage_mg_4_float(len: number, inp: Int8Array): NUM_TYPE {\r\n let cinp: number[];\r\n let sign: number;\r\n let tmp1: number;\r\n let exp: number;\r\n let bias: number;\r\n let long1: number;\r\n let long2: number;\r\n\r\n cinp = new Array<number>(inp.length);\r\n for (tmp1 = 0;\r\n tmp1 < inp.length;\r\n tmp1++)\r\n cinp[tmp1] = NUM_TYPE.toUByte(inp[tmp1]);\r\n\r\n sign = cinp[len - 1];\r\n if (len === 4) {\r\n exp = <number>((cinp[2] >> 7) | ((cinp[3] & 0x7F) << 1));\r\n bias = 150; // 126 + (1 + 23);\r\n long1 = 0;\r\n long2 = NUM_TYPE.MK_LONG(NUM_TYPE.MK_SHRT(0, cinp[2] | 0x80), NUM_TYPE.MK_SHRT(cinp[1], cinp[0]));\r\n }\r\n else {\r\n exp = <number>(((cinp[7] & 0x7F) << 4) | (cinp[6] >> 4));\r\n bias = 1075; // 1022 + (1 + 20 + 32);\r\n long1 = NUM_TYPE.MK_LONG(NUM_TYPE.MK_SHRT(0, (cinp[6] & 0x0F) | 0x10), NUM_TYPE.MK_SHRT(cinp[5], cinp[4]));\r\n long2 = NUM_TYPE.MK_LONG(NUM_TYPE.MK_SHRT(cinp[3], cinp[2]), NUM_TYPE.MK_SHRT(cinp[1], cinp[0]));\r\n }\r\n return NUM_TYPE.storage_num_4_fld_flt(long1, long2, 18, sign, bias, exp);\r\n }\r\n\r\n /// <summary>\r\n /// translate byte array to NUM_TYPE (like in Magic Souce code).\r\n /// </summary>\r\n private static storage_num_4_fld_flt(long1: number, long2: number, dec: number, sign: number, bias: number, expr: number): NUM_TYPE {\r\n let base_Num16Pwrs: Int8Array[] = [\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 1]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 16]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 2), 2, 56]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 2), 40, 96]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 3), 6, 55, 36]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 4), 1, 4, 85, 76]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 4), 16, 77, 72, 16]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 5), 2, 68, 43, 54, 56]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 5), 42, 94, 96, 72, 96]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 6), 6, 87, 19, 47, 67, 36]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 7), 1, 9, 95, 11, 62, 77, 76]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 7), 17, 59, 21, 86, 4, 44, 16]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 8), 2, 81, 47, 49, 76, 71, 6, 56]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 8), 45, 3, 59, 96, 27, 37, 4, 96]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 9), 7, 20, 57, 59, 40, 37, 92, 79, 36])\r\n ];\r\n\r\n let base_Num2Pwrs: Int8Array[] = [\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 1]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 2]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 4]),\r\n new Int8Array([NUM_TYPE.toSByte(NUM_TYPE.EXP_BIAS + 1), 8])\r\n ];\r\n let tmpnum: NUM_TYPE = new NUM_TYPE();\r\n let outVal: NUM_TYPE = new NUM_TYPE();\r\n let exp: number = <number>expr;\r\n if (exp === 0) {\r\n outVal.NUM_ZERO();\r\n return outVal;\r\n }\r\n outVal.num_4_ulong(long2);\r\n if (long1 !== 0) {\r\n tmpnum.num_4_ulong(long1);\r\n tmpnum = NUM_TYPE.mul(tmpnum, new NUM_TYPE(base_Num16Pwrs[8]));\r\n outVal = NUM_TYPE.add(tmpnum, outVal);\r\n }\r\n exp = <number>(exp - bias);\r\n if (exp < 0) {\r\n exp = -exp;\r\n while (exp >= 60) {\r\n outVal = NUM_TYPE.div(outVal, new NUM_TYPE(base_Num16Pwrs[14]));\r\n exp -= 56;\r\n }\r\n tmpnum = NUM_TYPE.mul(new NUM_TYPE(base_Num16Pwrs[exp >> 2]),\r\n new NUM_TYPE(base_Num2Pwrs[exp & 3]));\r\n outVal = NUM_TYPE.div(outVal, tmpnum);\r\n }\r\n else {\r\n if (exp >= 60) {\r\n outVal.NUM_ZERO();\r\n return outVal;\r\n }\r\n tmpnum = NUM_TYPE.mul(new NUM_TYPE(base_Num16Pwrs[exp >> 2]),\r\n new NUM_TYPE(base_Num2Pwrs[exp & 3]));\r\n outVal = NUM_TYPE.mul(outVal, tmpnum);\r\n }\r\n if ((sign & 0x80) !== 0)\r\n outVal._data[0] = outVal._data[0] | NUM_TYPE.SIGN_MASK;\r\n outVal.round(dec);\r\n return outVal;\r\n }\r\n\r\n /// <summary>\r\n /// Mathematical functions implementation\r\n /// </summary>\r\n static eval_op_log(val1: NUM_TYPE): NUM_TYPE {\r\n if (val1 == null)\r\n return null;\r\n let resVal: NUM_TYPE = new NUM_TYPE();\r\n let d: number = val1.to_double();\r\n\r\n if (d > 0.0)\r\n resVal = NUM_TYPE.from_double(Math.log(d));\r\n else\r\n resVal.NUM_ZERO();\r\n return resVal;\r\n }\r\n\r\n static eval_op_exp(val1: NUM_TYPE): NUM_TYPE {\r\n let resVal: NUM_TYPE;\r\n\r\n if (val1 === null)\r\n return null;\r\n let d: number = val1.to_double();\r\n resVal = NUM_TYPE.from_double(Math.exp(d));\r\n return resVal;\r\n }\r\n\r\n static eval_op_abs(val1: NUM_TYPE): NUM_TYPE {\r\n if (val1 === null)\r\n return null;\r\n let resVal: NUM_TYPE = new NUM_TYPE(val1);\r\n resVal.num_abs();\r\n return resVal;\r\n }\r\n\r\n static eval_op_sin(val1: NUM_TYPE): NUM_TYPE {\r\n if (val1 === null)\r\n return null;\r\n let resVal: NUM_TYPE = new NUM_TYPE();\r\n let d: number = val1.to_double();\r\n resVal = NUM_TYPE.from_double(Math.sin(d));\r\n return resVal;\r\n }\r\n\r\n static eval_op_cos(val1: NUM_TYPE): NUM_TYPE {\r\n if (val1 === null)\r\n return null;\r\n let resVal: NUM_TYPE = new NUM_TYPE();\r\n let d: number = val1.to_double();\r\n resVal = NUM_TYPE.from_double(Math.cos(d));\r\n return resVal;\r\n }\r\n\r\n static eval_op_tan(val1: NUM_TYPE): NUM_TYPE {\r\n if (val1 == null)\r\n return null;\r\n let resVal: NUM_TYPE = new NUM_TYPE();\r\n let d: number = val1.to_double();\r\n resVal = NUM_TYPE.from_double(Math.tan(d));\r\n return resVal;\r\n }\r\n\r\n static eval_op_asin(val1: NUM_TYPE): NUM_TYPE {\r\n if (val1 === null)\r\n return null;\r\n let resVal: NUM_TYPE = new NUM_TYPE();\r\n let d: number = val1.to_double();\r\n if (d <= 1.0 && d >= -1.0)\r\n resVal = NUM_TYPE.from_double(Math.asin(d));\r\n else\r\n resVal = NUM_TYPE.from_double(0.0);\r\n return resVal;\r\n }\r\n\r\n static eval_op_acos(val1: NUM_TYPE): NUM_TYPE {\r\n if (val1 === null)\r\n return null;\r\n let resVal: NUM_TYPE = new NUM_TYPE();\r\n let d: number = val1.to_double();\r\n\r\n if (d <= 1.0 && d >= -1.0)\r\n resVal = NUM_TYPE.from_double(Math.acos(d));\r\n else\r\n resVal = NUM_TYPE.from_double(0.0);\r\n return resVal;\r\n }\r\n\r\n static eval_op_atan(val1: NUM_TYPE): NUM_TYPE {\r\n if (val1 === null)\r\n return null;\r\n let resVal: NUM_TYPE = new NUM_TYPE();\r\n let d: number = val1.to_double();\r\n resVal = NUM_TYPE.from_double(Math.atan(d));\r\n return resVal;\r\n }\r\n\r\n num_abs(): void {\r\n let l: number;\r\n if (this.NUM_IS_LONG()) {\r\n l = this.NUM_LONG();\r\n if (l < 0)\r\n l = -l;\r\n this.NUM_4_LONG(l);\r\n return;\r\n }\r\n this._data[0] &= NUM_TYPE.toSByte(~NUM_TYPE.SIGN_MASK);\r\n }\r\n\r\n /// <summary>\r\n /// Randomal Math function\r\n /// </summary>\r\n static eval_op_rand(val1: NUM_TYPE): NUM_TYPE {\r\n if (val1 === null)\r\n return null;\r\n\r\n let rand_initialized: boolean = Randomizer.get_initialized();\r\n let rand_mod: NUM_TYPE;\r\n let rand_mul: NUM_TYPE;\r\n let rand_seed: NUM_TYPE;\r\n\r\n let tmp_num: NUM_TYPE = new NUM_TYPE();\r\n\r\n if (!rand_initialized) {\r\n Randomizer.set_initialized(); // set to true\r\n rand_mod = new NUM_TYPE();\r\n rand_mul = new NUM_TYPE();\r\n rand_seed = new NUM_TYPE();\r\n rand_mod.num_4_a_std(\"100000007\");\r\n rand_mul.num_4_a_std(\"75000007\");\r\n rand_seed.num_4_a_std(\"12345678\");\r\n\r\n Randomizer.set_mod(rand_mod.to_double());\r\n Randomizer.set_mul(rand_mul.to_double());\r\n Randomizer.set_seed(rand_seed.to_double());\r\n }\r\n else {\r\n rand_mod = NUM_TYPE.from_double(Randomizer.get_mod());\r\n rand_mul = NUM_TYPE.from_double(Randomizer.get_mul());\r\n rand_seed = NUM_TYPE.from_double(Randomizer.get_seed());\r\n }\r\n\r\n if (!val1.num_is_zero()) {\r\n if (val1.num_is_neg())\r\n rand_seed.NUM_4_LONG(NUM_TYPE.hash_rand());\r\n else\r\n rand_seed = new NUM_TYPE(val1);\r\n }\r\n else {\r\n if (rand_seed.num_is_neg()) {\r\n tmp_num.NUM_4_LONG(-1);\r\n rand_seed = NUM_TYPE.mul(rand_seed, tmp_num);\r\n }\r\n }\r\n\r\n rand_seed = NUM_TYPE.mul(rand_seed, rand_mul);\r\n rand_seed = NUM_TYPE.mod(rand_seed, rand_mod);\r\n tmp_num = NUM_TYPE.div(rand_seed, rand_mod);\r\n // reset globals variables\r\n Randomizer.set_mod(rand_mod.to_double());\r\n Randomizer.set_mul(rand_mul.to_double());\r\n Randomizer.set_seed(rand_seed.to_double());\r\n return tmp_num;\r\n }\r\n\r\n /// <summary>\r\n /// get a random value to use as the ctl encription key\r\n /// </summary>\r\n private static hash_rand(): number {\r\n return ((new Date().getMilliseconds()) ^ Math.random() * 12345678);\r\n // let array: number[] = new Array<number>(100);\r\n // for (let _ai: number = 0; _ai < array.length; ++_ai)\r\n // array[_ai] = 0;\r\n // new Random().NextBytes(array);\r\n // return <number>(Misc.getSystemMilliseconds() ^ NUM_TYPE.hash_str_new(array));\r\n }\r\n}\r\n\r\nexport class OperData {\r\n NUM_Diff_: number = 0;\r\n NUM_Exp1_: number = 0;\r\n NUM_Exp2_: number = 0;\r\n}\r\n\r\n","export class MemoryUtil {\r\n/// <summary>\r\n/// Java version of memset function to char[]\r\n/// </summary>\r\n/// <param name = \"charArray\"> A character array\r\n/// </param>\r\n/// <param name = \"pos\"> Position to start\r\n/// </param>\r\n/// <param name = \"charToSet\"> Character to set\r\n/// </param>\r\n/// <param name = \"len\"> number of Characters to set\r\n/// </param>\r\n static char_memset(charArray: string[], pos: number, charToSet: string, len: number): void {\r\n\r\n if (len <= 0)\r\n return;\r\n\r\n for (let i: number = 0; i < len; i = i + 1) {\r\n charArray[pos + i] = charToSet;\r\n }\r\n }\r\n\r\n/// <summary>\r\n/// Java version of memcopy function to char[]\r\n/// </summary>\r\n/// <param name = \"to\"> destination array\r\n/// </param>\r\n/// <param name = \"pos1\"> Position to start in destination\r\n/// </param>\r\n/// <param name = \"from\"> source array\r\n/// </param>\r\n/// <param name = \"pos2\"> Position to start in source\r\n/// </param>\r\n/// <param name = \"len\"> number of Characters to copy\r\n/// </param>\r\n static char_memcpy(to: string[], pos1: number, from: string[], pos2: number, len: number): void {\r\n if (len <= 0)\r\n return;\r\n\r\n for (let i: number = 0; i < len; i = i + 1) {\r\n to[pos1 + i] = from[pos2 + i];\r\n }\r\n }\r\n\r\n/// <summary>\r\n/// Java version of memmove function to char[]\r\n/// </summary>\r\n/// <param name = \"to\"> destination array\r\n/// </param>\r\n/// <param name = \"pos1\"> Position to start in destination\r\n/// </param>\r\n/// <param name = \"from\"> source array\r\n/// </param>\r\n/// <param name = \"pos2\"> Position to start in source\r\n/// </param>\r\n/// <param name = \"len\"> number of Characters to move\r\n/// </param>\r\n static char_memmove(to: string[], pos1: number, from: string[], pos2: number, len: number): void {\r\n\r\n if (len <= 0)\r\n return;\r\n\r\n let tmp: string[] = new Array<string>(len);\r\n for (let i: number = 0; i < len; i = i + 1) {\r\n tmp[i] = from[pos2 + i];\r\n }\r\n for (let i: number = 0; i < len; i = i + 1) {\r\n to[pos1 + i] = tmp[i];\r\n }\r\n }\r\n\r\n\r\n/// <summary>\r\n/// Magic's mem_trim function\r\n/// </summary>\r\n static mem_trim(s: string[], sPos: number, len: number): number {\r\n let i: number;\r\n\r\n for (i = sPos + len - 1; len > 0 && i < s.length; i--, len--)\r\n if (s[i] !== \" \" && s[i] !== \"\\x0000\")\r\n break;\r\n return len;\r\n }\r\n}\r\n","import { Events } from '../../Events';\r\nimport { MsgInterface } from '@magic-xpa/utils';\r\nimport { RefParam} from '@magic-xpa/mscorelib';\r\nimport { MemoryUtil } from '../../util/MemoryUtil';\r\n\r\nexport class HebrewDate {\r\n private static PARTS_PER_HOUR: number = 1080;\r\n private static HOURS_PER_DAY: number = 24;\r\n private static PARTS_PER_DAY: number = (HebrewDate.HOURS_PER_DAY * HebrewDate.PARTS_PER_HOUR);\r\n private static MONTH_DAYS: number = 29;\r\n private static MONTH_EXTRA_PARTS: number = (12 * HebrewDate.PARTS_PER_HOUR + 793);\r\n private static PARTS_PER_MONTH: number = (HebrewDate.MONTH_DAYS * HebrewDate.PARTS_PER_DAY + HebrewDate.MONTH_EXTRA_PARTS);\r\n private static MONTHS_PER_NORM_YEAR: number = 12;\r\n private static MONTHS_PER_LEAP_YEAR: number = 13;\r\n private static NORM_YEARS_PER_CYCLE: number = 12;\r\n private static LEAP_YEARS_PER_CYCLE: number = 7;\r\n private static YEARS_PER_CYCLE: number = (HebrewDate.NORM_YEARS_PER_CYCLE + HebrewDate.LEAP_YEARS_PER_CYCLE);\r\n private static MONTHS_PER_CYCLE: number = (HebrewDate.NORM_YEARS_PER_CYCLE * HebrewDate.MONTHS_PER_NORM_YEAR + HebrewDate.LEAP_YEARS_PER_CYCLE * HebrewDate.MONTHS_PER_LEAP_YEAR);\r\n private static PARTS_PER_LEAP_YEAR: number = (HebrewDate.MONTHS_PER_LEAP_YEAR * HebrewDate.PARTS_PER_MONTH);\r\n private static DAYS_PER_LEAP_YEAR: number = Math.floor(HebrewDate.PARTS_PER_LEAP_YEAR / HebrewDate.PARTS_PER_DAY);\r\n private static PARTS_PER_CYCLE: number = (HebrewDate.MONTHS_PER_CYCLE * HebrewDate.PARTS_PER_MONTH);\r\n private static DAYS_PER_CYCLE: number = Math.floor(HebrewDate.PARTS_PER_CYCLE / HebrewDate.PARTS_PER_DAY);\r\n private static CREATION_DOW: number = 2;\r\n private static CREATION_PARTS: number = (5 * HebrewDate.PARTS_PER_HOUR + 204);\r\n private static DAYS_TIL_JESUS: number = 1373428;\r\n\r\n private static HESHVAN: number = 2;\r\n private static KISLEV: number = 3;\r\n private static ADAR: number = 6;\r\n private static ADAR_B: number = 13;\r\n\r\n /*-----------------------------------------------------*/\r\n /* Hebrew numeric representation of each Hebrew letter */\r\n /* --------------------------------------------------- */\r\n private static DATEHEB_letters: number[] = [\r\n 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 20, 30, 40, 40, 50, 50, 60, 70,\r\n 80, 80, 90, 90, 100, 200, 300, 400\r\n ];\r\n\r\n private static ALEF: string = 'א';\r\n private static TAV: string = 'ת';\r\n\r\n /* ------------------------------------------------ */\r\n /* N of Months from beginning of 19 years cycle, to */\r\n /* the beginning of a year (in the range 0 - 18) */\r\n /* ------------------------------------------------ */\r\n private static DATEHEB_months_n: number[] = [\r\n 0, 12, 24, 37, 49, 61, 74, 86, 99, 111, 123, 136, 148, 160, 173, 185, 197, 210, 222,\r\n 235\r\n ];\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* N of days from the beginning of a year to the beginning of a month */\r\n /* Tishrei, Heshvan, Kislev, Tevet, Shvat, Adar, */\r\n /* Nisan, Iyar, Sivan, Tamuz, Av, Elul */\r\n /* ------------------------------------------------------------------ */\r\n private static DATEHEB_norm_days_in_month: number[] = [\r\n 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 0\r\n ];\r\n private static DATEHEB_leap_days_in_month: number[] = [\r\n 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29\r\n ];\r\n\r\n private static MONTH_LEN: number = 5;\r\n private static _localMonths: string[] = new Array<string>(15);\r\n private static DOW_LEN: number = 5;\r\n private static _localDows: string[] = new Array<string>(8);\r\n\r\n /// <summary>\r\n /// calculate if year is leap\r\n /// </summary>\r\n /// <param name=\"year\"></param>\r\n /// <returns></returns>\r\n private static dateheb_year_is_leap(year: number): boolean {\r\n year = year % HebrewDate.YEARS_PER_CYCLE;\r\n return (HebrewDate.DATEHEB_months_n[(year + 1)] - HebrewDate.DATEHEB_months_n[year] === 13);\r\n }\r\n\r\n /// <summary>\r\n /// calculate days in month\r\n /// </summary>\r\n /// <param name=\"month\"></param>\r\n /// <param name=\"leap\"></param>\r\n /// <param name=\"days_in_year\"></param>\r\n /// <returns></returns>\r\n private static dateheb_days_in_month(month: number, leap: boolean, days_in_year: number): number {\r\n let days_in_month: number = leap ? HebrewDate.DATEHEB_leap_days_in_month[month - 1] : HebrewDate.DATEHEB_norm_days_in_month[month - 1];\r\n\r\n if (leap)\r\n days_in_year = days_in_year - 30;\r\n\r\n switch (days_in_year) {\r\n case 353:\r\n if (month === HebrewDate.KISLEV)\r\n days_in_month = 29;\r\n break;\r\n case 355:\r\n if (month === HebrewDate.HESHVAN)\r\n days_in_month = 30;\r\n break;\r\n }\r\n return days_in_month;\r\n }\r\n\r\n /// <summary>\r\n /// calculate days from creation till start of the year\r\n /// </summary>\r\n /// <param name=\"year\"></param>\r\n /// <returns></returns>\r\n private static dateheb_year_start(year: number): number {\r\n\r\n /*---------------------------*/\r\n /* calculate \"molad\" of year */\r\n /*---------------------------*/\r\n year = year - 1;\r\n let cycle: number = Math.floor(year / HebrewDate.YEARS_PER_CYCLE);\r\n year = year % HebrewDate.YEARS_PER_CYCLE;\r\n\r\n /*---------------------------------------*/\r\n /* How many months passed since creation */\r\n /*---------------------------------------*/\r\n let months: number = cycle * HebrewDate.MONTHS_PER_CYCLE + HebrewDate.DATEHEB_months_n[year];\r\n\r\n /*-------------------------------------*/\r\n /* How many days passed since creation */\r\n /*-------------------------------------*/\r\n let days: number = months * HebrewDate.MONTH_DAYS;\r\n\r\n /*--------------------------------------------*/\r\n /* How many extra parts passed since creation */\r\n /*--------------------------------------------*/\r\n let parts: number = months * HebrewDate.MONTH_EXTRA_PARTS + HebrewDate.CREATION_PARTS;\r\n\r\n days = days + Math.floor(parts / HebrewDate.PARTS_PER_DAY);\r\n parts = parts % HebrewDate.PARTS_PER_DAY;\r\n\r\n /*---------------------------*/\r\n /* Reminder > 3/4 of a day ? */\r\n /*---------------------------*/\r\n if (<number>parts >= Math.floor(HebrewDate.PARTS_PER_DAY * 3 / 4)) {\r\n parts = 0;\r\n days = days + 1;\r\n }\r\n\r\n /*--------------------------------------------------*/\r\n /* verify day-of-week not Sunday, Wednesday, Friday */\r\n /*--------------------------------------------------*/\r\n let dow: number = (days - 1 + HebrewDate.CREATION_DOW) % 7 + 1;\r\n if ((dow === 1) || (dow === 4) || (dow === 6)) {\r\n parts = 0;\r\n days = days + 1;\r\n }\r\n\r\n /*-------------------------------*/\r\n /* verify if year too long/long */\r\n /*-------------------------------*/\r\n if (!HebrewDate.dateheb_year_is_leap(<number>year)) {\r\n if (dow === 3 && <number>parts >= (9 * HebrewDate.PARTS_PER_HOUR + 204))\r\n days = days + 2;\r\n }\r\n\r\n if (HebrewDate.dateheb_year_is_leap(<number>year + HebrewDate.YEARS_PER_CYCLE - 1)) {\r\n if (dow === 2 && <number>parts >= (15 * HebrewDate.PARTS_PER_HOUR + 589))\r\n days = days + 1;\r\n }\r\n\r\n return days;\r\n }\r\n\r\n /// <summary>\r\n /// Convert a Magic internal Date to a Hebrew date (year, month, day)\r\n /// Note that ADAR_B is represented by month = 13\r\n /// </summary>\r\n /// <param name=\"date\"></param>\r\n /// <param name=\"hday\"></param>\r\n /// <param name=\"hmonth\"></param>\r\n /// <param name=\"hyear\"></param>\r\n /// <returns>TRUE if leap year</returns>\r\n static dateheb_4_d(date: number, day: RefParam<number>, month: RefParam<number>, year: RefParam<number>): boolean {\r\n /*--------------------*/\r\n /* Days from creation */\r\n /*--------------------*/\r\n date = date + HebrewDate.DAYS_TIL_JESUS;\r\n\r\n /*--------------------------------*/\r\n /* Guess a year (<= correct year) */\r\n /*--------------------------------*/\r\n let cycle: number = Math.floor(date / (HebrewDate.DAYS_PER_CYCLE + 1));\r\n let days: number = date % (HebrewDate.DAYS_PER_CYCLE + 1);\r\n year.value = cycle * HebrewDate.YEARS_PER_CYCLE;\r\n year.value = year.value + Math.floor(days / (HebrewDate.DAYS_PER_LEAP_YEAR + 1));\r\n\r\n /*----------------------------*/\r\n /* Advance year until correct */\r\n /*----------------------------*/\r\n let next_year_start: number;\r\n while (true) {\r\n next_year_start = HebrewDate.dateheb_year_start(year.value + 1);\r\n if (next_year_start >= date)\r\n break;\r\n year.value = year.value + 1;\r\n }\r\n let curr_year_start: number = HebrewDate.dateheb_year_start(year.value);\r\n day.value = date - curr_year_start;\r\n let days_in_year: number = next_year_start - curr_year_start;\r\n let leap: boolean = days_in_year > 355;\r\n\r\n /*------------*/\r\n /* Find Month */\r\n /*------------*/\r\n let i: number;\r\n for (i = 1; i < 13; i = i + 1) {\r\n let days_in_month: number = HebrewDate.dateheb_days_in_month(i, leap, days_in_year);\r\n if (day.value <= days_in_month)\r\n break;\r\n day.value = day.value - days_in_month;\r\n }\r\n\r\n if (!leap || i <= HebrewDate.ADAR)\r\n month.value = i;\r\n else if (i === HebrewDate.ADAR + 1)\r\n month.value = HebrewDate.ADAR_B;\r\n else\r\n month.value = i - 1;\r\n\r\n return leap;\r\n }\r\n\r\n /// <summary>\r\n /// Compute a Hebrew letter to add to string, representing a numeric value\r\n /// </summary>\r\n /// <param name=\"val\"></param>\r\n /// <param name=\"str\"></param>\r\n /// <param name=\"strPos\"></param>\r\n /// <param name=\"use_ending\"></param>\r\n /// <param name=\"quote\"></param>\r\n /// <returns></returns>\r\n static dateheb_i_2_h(val: number, str: string[], strPos: number, use_ending: boolean, quote: boolean): number {\r\n let let_idx: number = 0;\r\n let len: number = 0;\r\n\r\n while (val > 0) {\r\n for (let_idx = HebrewDate.DATEHEB_letters.length; let_idx > 0; let_idx = let_idx - 1) {\r\n let letter: number = HebrewDate.DATEHEB_letters[let_idx - 1];\r\n if (val >= letter) {\r\n val = val - letter;\r\n str[strPos++] = String.fromCharCode(HebrewDate.ALEF.charCodeAt(0) + let_idx - 1);\r\n len = len + 1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (len > 0) {\r\n if (len >= 2) {\r\n if (str[strPos - 2] === 'י')\r\n if (str[strPos - 1] === 'ה' || str[strPos - 1] === 'ו') {\r\n str[strPos - 2] = String.fromCharCode(str[strPos - 2].charCodeAt(0) - 1);\r\n str[strPos - 1] = str[strPos - 1] + '\\u0001';\r\n }\r\n }\r\n\r\n // Final letters: only from 'מ'.\r\n if (let_idx > 10 && use_ending) {\r\n if (HebrewDate.DATEHEB_letters[let_idx - 1] === HebrewDate.DATEHEB_letters[let_idx - 2]) {\r\n str[strPos - 1] = String.fromCharCode(str[strPos - 1].charCodeAt(0) - 1);\r\n }\r\n }\r\n\r\n if (quote) {\r\n if (len === 1)\r\n str[strPos] = '\\'';\r\n else {\r\n str[strPos] = str[strPos - 1];\r\n str[strPos - 1] = '\"';\r\n }\r\n len = len + 1;\r\n }\r\n }\r\n return len;\r\n }\r\n\r\n /// <summary>\r\n /// Convert Hebrew year/day to a string\r\n /// </summary>\r\n /// <param name=\"outStr\"></param>\r\n /// <param name=\"len\"></param>\r\n /// <param name=\"full_len\"></param>\r\n /// <param name=\"hyear\"></param>\r\n /// <param name=\"trim\"></param>\r\n /// <param name=\"use_ending\"></param>\r\n /// <returns>length</returns>\r\n static dateheb_2_str(outStr: string[], strPos: number, len: number, out_len: RefParam<number>, full_len: number, hyear: number, trim: boolean, use_ending: boolean): number {\r\n let quote: boolean = len > full_len && outStr[strPos + full_len] === outStr[strPos];\r\n if (quote)\r\n full_len = full_len + 1;\r\n let heb_len: number = HebrewDate.dateheb_i_2_h(hyear % 1000, outStr, strPos, use_ending, quote);\r\n\r\n let rem_len: number = full_len - heb_len;\r\n if (rem_len > 0) {\r\n if (trim) {\r\n out_len.value = out_len.value - rem_len;\r\n let tmp_out_len: number = len - full_len;\r\n if (tmp_out_len > 0)\r\n MemoryUtil.char_memcpy(outStr, strPos + heb_len, outStr, strPos + full_len, tmp_out_len);\r\n else\r\n heb_len = full_len;\r\n }\r\n else {\r\n // Do not over the string length. It may be when YYYY in the end. (DDD MMMMM YYYY)\r\n if (rem_len > outStr.length - strPos - heb_len)\r\n rem_len = outStr.length - strPos - heb_len;\r\n MemoryUtil.char_memset(outStr, strPos + heb_len, ' ', /*' '*/rem_len);\r\n heb_len = full_len;\r\n }\r\n }\r\n return heb_len;\r\n }\r\n\r\n /// <summary>\r\n /// Cut the month string from 'const' into separate values\r\n /// </summary>\r\n /// <returns></returns>\r\n static GetLocalMonths(): string[] {\r\n let monthLen: number = HebrewDate.MONTH_LEN;\r\n\r\n if (HebrewDate._localMonths[0] === null) {\r\n let monthStr: string = Events.GetMessageString(MsgInterface.DATEHEB_MONTH_STR);\r\n if (monthStr !== null) {\r\n HebrewDate._localMonths[0] = \" \";\r\n for (let i: number = 1; i < HebrewDate._localMonths.length; i = i + 1)\r\n HebrewDate._localMonths[i] = monthStr.substr((i - 1) * monthLen, i * monthLen - (i - 1) * monthLen);\r\n }\r\n }\r\n return HebrewDate._localMonths;\r\n }\r\n\r\n /// <summary>\r\n /// Cut the day of week string from 'const' into separate values\r\n /// </summary>\r\n /// <returns></returns>\r\n static GetLocalDows(): string[] {\r\n let dowLen: number = HebrewDate.DOW_LEN;\r\n\r\n if (HebrewDate._localDows[0] === null) {\r\n let dowsStr: string = Events.GetMessageString(MsgInterface.DATEHEB_DOW_STR);\r\n if (dowsStr !== null) {\r\n HebrewDate._localDows[0] = \" \";\r\n for (let i: number = 1; i < HebrewDate._localDows.length; i = i + 1)\r\n HebrewDate._localDows[i] = dowsStr.substr((i - 1) * dowLen, i * dowLen - (i - 1) * dowLen);\r\n }\r\n }\r\n return HebrewDate._localDows;\r\n }\r\n\r\n /// <summary>\r\n /// Convert a hebrew string -> integer\r\n /// </summary>\r\n /// <param name=\"str\"></param>\r\n /// <param name=\"len\"></param>\r\n /// <param name=\"pos\"></param>\r\n /// <returns>converted to integer</returns>\r\n static dateheb_h_2_i(str: string[], len: number, pos: number): number {\r\n let val: number;\r\n let has_1_to_9: boolean = false;\r\n let has_10_to_90: boolean = false;\r\n let has_100_to_300: boolean = false;\r\n let cnt_400: number = 0;\r\n let last_val: number = 1000;\r\n let let_val: number;\r\n\r\n for (val = 0; len > 0 && pos < str.length; pos++, len--)\r\n if (str[pos] >= HebrewDate.ALEF && str[pos] <= HebrewDate.TAV) {\r\n let_val = HebrewDate.DATEHEB_letters[<number>(str[pos].charCodeAt(0) - HebrewDate.ALEF.charCodeAt(0))];\r\n if (let_val > last_val)\r\n return 0;\r\n\r\n if (let_val === 400) {\r\n if (cnt_400 === 2)\r\n return 0;\r\n cnt_400 = cnt_400 + 1;\r\n }\r\n else if (let_val >= 100) {\r\n if (has_100_to_300)\r\n return 0;\r\n has_100_to_300 = true;\r\n } else if (let_val >= 10) {\r\n if (has_10_to_90)\r\n return 0;\r\n has_10_to_90 = true;\r\n }\r\n else {\r\n if (has_1_to_9) {\r\n if (has_10_to_90 || last_val !== 9)\r\n return 0;\r\n if (let_val !== 6 && let_val !== 7)\r\n return 0;\r\n }\r\n has_1_to_9 = true;\r\n }\r\n val = val + let_val;\r\n last_val = let_val;\r\n }\r\n\r\n return val;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Convert a Hebrew date (year, month, day) to Magic internal date\r\n /// </summary>\r\n /// <param name=\"year\"></param>\r\n /// <param name=\"month\"></param>\r\n /// <param name=\"day\"></param>\r\n /// <returns></returns>\r\n static dateheb_2_d(year: number, month: number, day: number): number {\r\n\r\n if (day === 0 && month === 0 && year === 0)\r\n return 0;\r\n\r\n if (day === 0 || month === 0 || year === 0)\r\n return 1000000000;\r\n\r\n /*--------------------------------------------------------*/\r\n /* How many days from creation, to begining of the year ? */\r\n /*--------------------------------------------------------*/\r\n let days_from_creation: number = HebrewDate.dateheb_year_start(year);\r\n\r\n /*------------------------*/\r\n /* How days in the year ? */\r\n /*------------------------*/\r\n let days_in_year: number = HebrewDate.dateheb_year_start(year + 1) - days_from_creation;\r\n let leap: boolean = days_in_year > 355;\r\n\r\n /*-----------------*/\r\n /* Add month + day */\r\n /*-----------------*/\r\n if (leap && month > HebrewDate.ADAR)\r\n if (month === HebrewDate.ADAR_B)\r\n month = HebrewDate.ADAR + 1;\r\n else\r\n month = month + 1;\r\n\r\n if (day > HebrewDate.dateheb_days_in_month(month, leap, days_in_year))\r\n return 1000000000;\r\n\r\n for (let i: number = 1; i < month; i = i + 1)\r\n days_from_creation = days_from_creation + HebrewDate.dateheb_days_in_month(i, leap, days_in_year);\r\n days_from_creation = days_from_creation + day;\r\n\r\n /*-------------------------------*/\r\n /* Convert to Christian calender */\r\n /*-------------------------------*/\r\n return Math.max(days_from_creation - HebrewDate.DAYS_TIL_JESUS, 0);\r\n }\r\n\r\n}\r\n","import {IEnvironment} from '../../env/IEnvironment';\r\nimport {PIC} from './PIC';\r\nimport {DateTime, List, NString, RefParam, StringBuilder} from '@magic-xpa/mscorelib';\r\nimport {\r\n DateUtil,\r\n HTML_2_STR,\r\n MsgInterface,\r\n PICInterface,\r\n SEQ_2_HTML,\r\n StorageAttribute,\r\n StrUtil,\r\n UtilDateJpn,\r\n UtilStrByteMode\r\n} from '@magic-xpa/utils';\r\nimport {BlobType} from '../data/BlobType';\r\nimport {ValidationDetailsBase} from './ValidationDetailsBase';\r\nimport {NUM_TYPE} from '../data/NUM_TYPE';\r\nimport {HebrewDate} from './HebrewDate';\r\nimport {Events} from '../../Events';\r\nimport {GuiEnvironment} from '../../GuiEnvironment';\r\nimport {MemoryUtil} from '../../util/MemoryUtil';\r\n\r\n// @dynamic\r\nexport class DisplayConvertor {\r\n private _environment: IEnvironment = null;\r\n private DATECHAR: number = 0;\r\n private static _instance: DisplayConvertor = null;\r\n\r\n static get Instance(): DisplayConvertor {\r\n if (DisplayConvertor._instance === null) {\r\n DisplayConvertor._instance = new DisplayConvertor();\r\n }\r\n return DisplayConvertor._instance;\r\n }\r\n\r\n constructor() {\r\n this._environment = GuiEnvironment.Environment;\r\n }\r\n\r\n getNewDateBreakParams(): DateBreakParams {\r\n return new DateBreakParams();\r\n }\r\n\r\n getNewTimeBreakParams(): TimeBreakParams {\r\n return new TimeBreakParams();\r\n }\r\n\r\n /// <summary>\r\n /// Build a display string of a value from its picture format\r\n /// </summary>\r\n /// <param name = \"mgValue\"> the internal value (as sent in the XML)\r\n /// </param>\r\n /// <param name = \"rangeStr\"> value range\r\n /// </param>\r\n /// <param name = \"pic\"> the picture format\r\n /// </param>\r\n /// <returns> string to display\r\n /// </returns>\r\n mg2disp(mgValue: string, rangeStr: string, pic: PIC, useNative: boolean, compIdx: number, time_date_pic_Z_edt: boolean): any;\r\n mg2disp(mgValue: string, rangeStr: string, pic: PIC, useNative: boolean, alwaysFill: boolean, compIdx: number, time_date_pic_Z_edt: boolean): any;\r\n mg2disp(mgValue: string, rangeStr: string, pic: PIC, useNative: boolean, alwaysFill: boolean, compIdx: number, convertCase: boolean, time_date_num_pic_Z_edt: boolean): any;\r\n mg2disp(mgValue: string, rangeStr: string, pic: PIC, useNative: boolean, compIdxOrAlwaysFill: any, time_date_pic_Z_edtOrCompIdx: any, time_date_pic_Z_edtOrConvertCase?: boolean, time_date_num_pic_Z_edt?: boolean): any {\r\n if (arguments.length === 6)\r\n return this.mg2disp_0(mgValue, rangeStr, pic, useNative, compIdxOrAlwaysFill, time_date_pic_Z_edtOrCompIdx);\r\n\r\n else if (arguments.length === 7)\r\n return this.mg2disp_1(mgValue, rangeStr, pic, useNative, compIdxOrAlwaysFill, time_date_pic_Z_edtOrCompIdx, time_date_pic_Z_edtOrConvertCase);\r\n\r\n else\r\n return this.mg2disp_2(mgValue, rangeStr, pic, useNative, compIdxOrAlwaysFill, time_date_pic_Z_edtOrCompIdx, time_date_pic_Z_edtOrConvertCase, time_date_num_pic_Z_edt);\r\n }\r\n\r\n private mg2disp_0(mgValue: string, rangeStr: string, pic: PIC, useNative: boolean, compIdx: number, time_date_pic_Z_edt: boolean): any {\r\n return this.mg2disp(mgValue, rangeStr, pic, useNative, false, compIdx, time_date_pic_Z_edt);\r\n }\r\n\r\n private mg2disp_1(mgValue: string, rangeStr: string, pic: PIC, useNative: boolean, alwaysFill: boolean, compIdx: number, time_date_pic_Z_edt: boolean): any {\r\n return this.mg2disp(mgValue, rangeStr, pic, useNative, alwaysFill, compIdx, false, time_date_pic_Z_edt);\r\n\r\n }\r\n\r\n /// <summary>\r\n /// Build a display string of a value from its picture format\r\n /// </summary>\r\n /// <param name = \"mgValue\">the internal value (as sent in the XML)\r\n /// </param>\r\n /// <param name = \"rangeStr\">value range\r\n /// </param>\r\n /// <param name = \"pic\">the picture format\r\n /// </param>\r\n /// <param name = \"alwaysFill\">Always auto fill alpha over its picture (used for select controls)\r\n /// </param>\r\n /// <returns> string to display\r\n /// </returns>\r\n public mg2disp_2(mgValue: string, rangeStr: string, pic: PIC, useNative: boolean, alwaysFill: boolean, compIdx: number, convertCase: boolean, time_date_num_pic_Z_edt: boolean): any {\r\n let str: string = \"\";\r\n let tmpRange: string = (rangeStr === null) ? \"\" : rangeStr;\r\n\r\n switch (pic.getAttr()) {\r\n\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n str = this.fromAlpha(mgValue, pic, tmpRange, alwaysFill, convertCase);\r\n break;\r\n\r\n case StorageAttribute.NUMERIC: {\r\n\r\n // Now, currecy directive supported, but this will be handled by angular packages like ng-currency\r\n // here it should simply pass the actual native value of number and masks should not be applied\r\n // So, prepare temporary picture to generate native value.\r\n let newPic = pic.getUnformattedNumericPic();\r\n\r\n //store and restore decimal sep and thou. sep\r\n let dec: string = GuiEnvironment.Environment.GetDecimal();\r\n let thou:string = GuiEnvironment.Environment.GetThousands();\r\n\r\n //set default values\r\n GuiEnvironment.Environment.setDecimalSeparator('.');\r\n GuiEnvironment.Environment.setThousandsSeparator(',');\r\n\r\n str = this.fromNum(mgValue, newPic);\r\n GuiEnvironment.Environment.setDecimalSeparator(dec);\r\n GuiEnvironment.Environment.setThousandsSeparator(thou);\r\n // Value should be trimmed when we are displaying control in order to display alignment properly. But while entering control, it should not be trimmed\r\n // in order to read it properly.\r\n if (newPic.getMaskChars() === 0 || !time_date_num_pic_Z_edt)\r\n str = StrUtil.ltrim(str);\r\n\r\n if (useNative) {\r\n if (str == \"\")\r\n return null;\r\n\r\n let dbl: number = Number(str);\r\n return dbl;\r\n }\r\n else\r\n return str;\r\n }\r\n case StorageAttribute.DATE: {\r\n if (useNative) {\r\n let dt: Date;\r\n dt = this.fromMgDateToNativeDate(mgValue, pic, compIdx);\r\n return dt;\r\n }\r\n else {\r\n str = this.fromDate(mgValue, pic, compIdx, time_date_num_pic_Z_edt);\r\n break;\r\n }\r\n }\r\n case StorageAttribute.TIME: {\r\n if (useNative) {\r\n let dt: Date;\r\n dt = this.fromMgTimeToNativeTime(mgValue, pic);\r\n return dt;\r\n }\r\n else {\r\n str = this.fromTime(mgValue, pic, time_date_num_pic_Z_edt);\r\n break;\r\n }\r\n }\r\n case StorageAttribute.BOOLEAN: {\r\n let logVal: boolean;\r\n logVal = this.fromMgLogicalToNativeLogical(mgValue);\r\n return logVal;\r\n }\r\n\r\n case StorageAttribute.BLOB:\r\n str = BlobType.getString(mgValue);\r\n break;\r\n case StorageAttribute.BLOB_VECTOR:\r\n str = mgValue;\r\n break;\r\n }\r\n return str;\r\n }\r\n\r\n /// <summary>\r\n /// Build an internal representation of a display value from its picture format\r\n /// </summary>\r\n /// <param name = \"dispValue\">the value as entered by user\r\n /// </param>\r\n /// <param name = \"rangeStr\">value range\r\n /// </param>\r\n /// <param name = \"pic\">the picture format\r\n /// </param>\r\n /// <param name = \"blobContentType\">if the attribute is blob, its content type\r\n /// </param>\r\n /// <returns> internal form of data (as used in the XML)\r\n /// </returns>\r\n disp2mg(dispValue: any, pic: PIC, compIdx: number, blobContentType: string): string {\r\n let str: string = \"\";\r\n\r\n switch (pic.getAttr()) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n str = this.toAlpha(dispValue, pic);\r\n break;\r\n\r\n\r\n case StorageAttribute.NUMERIC: {\r\n dispValue = String(dispValue);\r\n // Remove the mask from display value.\r\n let len: number = dispValue.length;\r\n while (len > 0) {\r\n if (!pic.picIsMask(len - 1) && dispValue[len - 1] !== (' '))\r\n break;\r\n len--;\r\n }\r\n if (dispValue.length > len)\r\n dispValue = NString.Remove(dispValue, len, (dispValue.length - len));\r\n\r\n if (pic.isNegative() && dispValue.trim().startsWith(\"-\"))\r\n dispValue = StrUtil.ltrim(dispValue);\r\n\r\n //store and restore decimal sep and thou. sep\r\n let dec: string = GuiEnvironment.Environment.GetDecimal();\r\n let thou:string = GuiEnvironment.Environment.GetThousands();\r\n\r\n //set default values\r\n GuiEnvironment.Environment.setDecimalSeparator('.');\r\n GuiEnvironment.Environment.setThousandsSeparator(',');\r\n\r\n // Now, currecy directive supported, but this will be handled by angular packages like ng-currency\r\n // here it should simply pass the actual native value of number and masks should not be applied\r\n // So, prepare temporary picture to generate native value.\r\n let newPic = pic.getUnformattedNumericPic();\r\n\r\n str = this.toNum(dispValue, newPic, compIdx);\r\n\r\n GuiEnvironment.Environment.setDecimalSeparator(dec);\r\n GuiEnvironment.Environment.setThousandsSeparator(thou);\r\n }\r\n break;\r\n\r\n\r\n case StorageAttribute.DATE:\r\n {\r\n let dt: Date;\r\n //when date is in item list for choice ctrl, it will come here as string. so convert it to Date.\r\n if (typeof dispValue === 'string')\r\n dt = new Date (dispValue);\r\n else\r\n dt = dispValue;\r\n str = this.fromNativeDateToMgDate(dt, pic);\r\n }\r\n break;\r\n\r\n\r\n case StorageAttribute.TIME: {\r\n let dt: Date;\r\n\r\n //when date is in item list for choice ctrl, it will come here as string. so convert it to Date.\r\n if (typeof dispValue === 'string')\r\n {\r\n dt = new Date();\r\n if (dispValue !== null) {\r\n dt.setHours(+String(dispValue).substr(0, 2));\r\n dt.setMinutes(+String(dispValue).substr(0, 2));\r\n if (String(dispValue).length > 5)\r\n dt.setSeconds(+String(dispValue).substr(0, 2));\r\n }\r\n }\r\n\r\n else\r\n dt = dispValue;\r\n\r\n str = this.fromNativeTimeToMgTime(dt);\r\n }\r\n break;\r\n\r\n\r\n case StorageAttribute.BOOLEAN:\r\n str = this.fromNativeLogicalToMgLogical(dispValue);\r\n break;\r\n\r\n\r\n case StorageAttribute.BLOB:\r\n str = BlobType.createFromString(dispValue, blobContentType);\r\n break;\r\n }\r\n return str;\r\n }\r\n\r\n // --------------------------------------------------------------------------\r\n // Methods for coverting INTERNAL ---> DIPLAY\r\n // --------------------------------------------------------------------------\r\n\r\n /// <summary>\r\n /// Handles magic number value\r\n /// </summary>\r\n /// <param name = \"mgNum\"> A Magic Number</param>\r\n /// <param name = \"picStr\"> The picture to use</param>\r\n /// <returns> the string to be displayed</returns>\r\n public fromNum(mgValue: string, pic: PIC): string {\r\n let mgNum: NUM_TYPE = new NUM_TYPE(mgValue);\r\n return mgNum.toDisplayValue(pic);\r\n }\r\n\r\n /// <summary>\r\n /// Build a display string for an alpha value according to the picture\r\n /// </summary>\r\n /// <param name = \"dataStr\"> The source data\r\n /// </param>\r\n /// <param name = \"picStr\"> The picture to use for the value to display\r\n /// </param>\r\n /// <param name = \"rangeStr\"> The range of values to check\r\n /// </param>\r\n /// <param name = \"alwaysFill\">Always auto fill alpha over its picture (used for select controls)\r\n /// </param>\r\n /// <returns> the string to be displayed\r\n /// </returns>\r\n private fromAlpha(dataStr: string, pic: PIC, rangeStr: string, alwaysFill: boolean, convertCase: boolean): string {\r\n let len: number = pic.getMaskSize();\r\n let min_len: number = len;\r\n let maskStr: string = pic.getMask();\r\n let resStr: string;\r\n\r\n if (pic.getMaskChars() > 0) {\r\n resStr = this.win_data_cpy(NString.ToCharArray(maskStr), len, NString.ToCharArray(dataStr), pic.isAttrAlpha(), convertCase);\r\n }\r\n else {\r\n if (UtilStrByteMode.isLocaleDefLangDBCS() && pic.isAttrAlpha())\r\n // JPN: DBCS support\r\n {\r\n // substring by the number of bytes\r\n let intDataStrLenB: number = UtilStrByteMode.lenB(dataStr);\r\n if (min_len > intDataStrLenB) {\r\n min_len = intDataStrLenB;\r\n }\r\n resStr = UtilStrByteMode.leftB(dataStr, min_len);\r\n }\r\n else if (dataStr !== null) {\r\n if (min_len > dataStr.length) {\r\n min_len = dataStr.length;\r\n }\r\n if (convertCase) {\r\n resStr = this.win_data_cpy(NString.ToCharArray(maskStr), len, NString.ToCharArray(dataStr), pic.isAttrAlpha(), convertCase);\r\n }\r\n else {\r\n resStr = dataStr.substr(0, min_len);\r\n }\r\n }\r\n }\r\n\r\n // We do not fill Alpha filed over control's picture length QCR # 295408\r\n if (alwaysFill || (rangeStr !== null && rangeStr.length > 0 && resStr.length < len)) {\r\n let vd: ValidationDetailsBase = new ValidationDetailsBase(rangeStr);\r\n let continuousRangeValues: List<string> = vd.getContinuousRangeValues();\r\n let discreteRangeValues: List<string> = vd.getDiscreteRangeValues();\r\n if (continuousRangeValues !== null || discreteRangeValues !== null) {\r\n resStr = this.fillAlphaByRange(continuousRangeValues, discreteRangeValues, resStr);\r\n }\r\n }\r\n return resStr;\r\n }\r\n\r\n private caseConvertedChar(data: string, mask: string): string {\r\n\r\n let ch: string;\r\n if (mask.charCodeAt(0) === PICInterface.PIC_U) {\r\n ch = data.toUpperCase();\r\n }\r\n else {\r\n if (mask.charCodeAt(0) === PICInterface.PIC_L) {\r\n ch = data.toLowerCase();\r\n }\r\n else {\r\n ch = data;\r\n }\r\n }\r\n return ch;\r\n }\r\n\r\n private win_data_cpy(maskStr: string[], maskLen: number, dataStr: string[], isAttrAlpha: boolean): string;\r\n private win_data_cpy(maskStr: string[], maskLen: number, dataStr: string[], isAttrAlpha: boolean, convertCase: boolean): string;\r\n private win_data_cpy(maskStr: any, maskLen: number, dataStr: any, isAttrAlpha: boolean, convertCase?: boolean): string {\r\n if (arguments.length === 4)\r\n return this.win_data_cpy_0(maskStr, maskLen, dataStr, isAttrAlpha);\r\n\r\n return this.win_data_cpy_1(maskStr, maskLen, dataStr, isAttrAlpha, convertCase);\r\n }\r\n\r\n private win_data_cpy_0(maskStr: string[], maskLen: number, dataStr: string[], isAttrAlpha: boolean): string {\r\n return this.win_data_cpy(maskStr, maskLen, dataStr, isAttrAlpha, false);\r\n }\r\n\r\n /// <summary>\r\n /// Handles alpha value\r\n /// </summary>\r\n /// <param name = \"maskStr\"> The mask to be used in order to build the string\r\n /// </param>\r\n /// <param name = \"picStr\"> The picture to use\r\n /// </param>\r\n /// <returns> the string to be displayed\r\n /// </returns>\r\n private win_data_cpy_1(maskStr: string[], maskLen: number, dataStr: string[], isAttrAlpha: boolean, convertCase: boolean): string {\r\n let maskIdx: number = 0;\r\n let dataIdx: number = 0;\r\n let resStr: string[] = new Array<string>(maskLen);\r\n\r\n if (isAttrAlpha && UtilStrByteMode.isLocaleDefLangDBCS()) {\r\n let num2: number = 0;\r\n while (maskIdx < maskLen && num2 < maskLen) {\r\n if (maskStr[maskIdx].charCodeAt(0) <= PICInterface.PIC_MAX_OP) {\r\n if (dataIdx < dataStr.length) {\r\n let strVal: string = NString.FromChars(dataStr, dataIdx, 1);\r\n if (UtilStrByteMode.lenB(strVal) === 2) {\r\n if (maskIdx + 1 < maskLen) {\r\n if (maskStr[maskIdx + 1].charCodeAt(0) <= PICInterface.PIC_MAX_OP) {\r\n if (convertCase) {\r\n resStr[num2++] = this.caseConvertedChar(dataStr[dataIdx++], maskStr[maskIdx + 1]);\r\n }\r\n else {\r\n resStr[num2++] = dataStr[dataIdx++];\r\n }\r\n maskIdx = maskIdx + 1;\r\n }\r\n else {\r\n resStr[num2++] = ' ';\r\n }\r\n }\r\n else {\r\n resStr[num2++] = ' ';\r\n }\r\n }\r\n else {\r\n if (convertCase) {\r\n resStr[num2++] = this.caseConvertedChar(dataStr[dataIdx++], maskStr[maskIdx + 1]);\r\n }\r\n else {\r\n resStr[num2++] = dataStr[dataIdx++];\r\n }\r\n }\r\n }\r\n else {\r\n resStr[num2++] = ' '/*' '*/;\r\n }\r\n }\r\n else {\r\n resStr[num2++] = maskStr[maskIdx];\r\n }\r\n maskIdx = maskIdx + 1;\r\n }\r\n return NString.FromChars(resStr).substr(0, num2);\r\n }\r\n\r\n while (maskIdx < maskLen) {\r\n if (maskStr[maskIdx].charCodeAt(0) <= PICInterface.PIC_MAX_OP) {\r\n if (dataIdx < dataStr.length) {\r\n resStr[maskIdx] = dataStr[dataIdx];\r\n if (convertCase) {\r\n resStr[maskIdx] = this.caseConvertedChar(dataStr[dataIdx], maskStr[maskIdx]);\r\n }\r\n else {\r\n resStr[maskIdx] = dataStr[dataIdx];\r\n }\r\n dataIdx = dataIdx + 1;\r\n }\r\n else {\r\n resStr[maskIdx] = ' '/*' '*/;\r\n }\r\n }\r\n else {\r\n resStr[maskIdx] = maskStr[maskIdx];\r\n }\r\n maskIdx = maskIdx + 1;\r\n }\r\n return NString.FromChars(resStr);\r\n }\r\n\r\n /// <summary>\r\n /// Build a display string for an date value according to the picture\r\n /// </summary>\r\n /// <param name = \"dataStr\"> The source data</param>\r\n /// <param name = \"picStr\"> The picture to use for the value to display</param>\r\n /// <returns> the string to be displayed</returns>\r\n fromDate(dataStr: string, pic: PIC, compIdx: number, time_date_pic_Z_edt: boolean): string {\r\n let mask: string = pic.getMask();\r\n let maskSize: number = pic.getMaskSize();\r\n let date: number = new NUM_TYPE(dataStr).NUM_2_ULONG();\r\n return this.to_a_pic_datemode(mask, maskSize, date, pic, time_date_pic_Z_edt, false, compIdx);\r\n }\r\n\r\n /// <summary>\r\n /// Build a display string for an time value according to the picture\r\n /// </summary>\r\n /// <param name = \"dataStr\"> The source data</param>\r\n /// <param name = \"picStr\"> The picture to use for the value to display</param>\r\n /// <returns> the string to be displayed</returns>\r\n fromTime(dataStr: string, pic: PIC, time_date_pic_Z_edt: boolean): string {\r\n let mask: string = pic.getMask();\r\n let maskSize: number = pic.getMaskSize();\r\n let time: number = new NUM_TYPE(dataStr).NUM_2_ULONG();\r\n return this.time_2_a_pic(mask, maskSize, time, pic, time_date_pic_Z_edt, false);\r\n }\r\n\r\n /// <summary>\r\n /// Build a display string for the date value according to the picture\r\n /// </summary>\r\n /// <param name = \"dataStr\"> The source data</param>\r\n /// <param name = \"picStr\"> The picture to use for the value to display</param>\r\n /// <returns> the string to be displayed</returns>\r\n fromMgDateToNativeDate(dataStr: string, pic: PIC, compIdx: number): Date {\r\n\r\n let date: number = new NUM_TYPE(dataStr).NUM_2_ULONG();\r\n let breakParams: DateBreakParams;\r\n // Break data into its components\r\n breakParams = new DateBreakParams();\r\n this.date_break_datemode(breakParams, date, false, compIdx);\r\n if (breakParams.month > 0)\r\n breakParams.month = breakParams.month - 1; //month is 0 based in Date class\r\n\r\n if (breakParams.year == 0 && breakParams.month == 0 && breakParams.day == 0)\r\n return null;\r\n\r\n return new Date(breakParams.year, breakParams.month, breakParams.day);\r\n\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Build a display string for an date value according to the picture\r\n /// </summary>\r\n /// <param name = \"dataStr\"> The source data</param>\r\n /// <param name = \"picStr\"> The picture to use for the value to display</param>\r\n /// <returns> the string to be displayed</returns>\r\n fromNativeDateToMgDateNumber(nativeDate: Date, pic: PIC): number {\r\n let numVal: number;\r\n let dateParams: DateBreakParams;\r\n let millenium: number = 0;\r\n let year: number = nativeDate.getFullYear();\r\n let day: number = nativeDate.getDate();\r\n let month: number = nativeDate.getMonth() + 1;\r\n\r\n // Hebrew Year\r\n if (pic.isHebrew()) {\r\n if (year > 0) {\r\n if (millenium === 0)\r\n millenium = 5;\r\n year += millenium * 1000;\r\n }\r\n numVal = (HebrewDate.dateheb_2_d(year, month, day));\r\n }\r\n else {\r\n // the next 2 lines support 4.xx DD/MM pictures\r\n if (year === 0) {\r\n dateParams = this.date_sys();\r\n year = dateParams.year;\r\n }\r\n\r\n numVal = this.date_4_calender(year, month, day, 0, false); // we are adding a little empty space to the variable, because we might later\r\n }\r\n return numVal;\r\n }\r\n\r\n /// <summary>\r\n /// Build a display string for an date value according to the picture\r\n /// </summary>\r\n /// <param name = \"dataStr\"> The source data</param>\r\n /// <param name = \"picStr\"> The picture to use for the value to display</param>\r\n /// <returns> the string to be displayed</returns>\r\n fromNativeDateToMgDate(nativeDate: Date, pic: PIC): string {\r\n\r\n let mgNum: NUM_TYPE = new NUM_TYPE();\r\n let numVal: number = nativeDate == null ? 0 : this.fromNativeDateToMgDateNumber(nativeDate, pic);\r\n mgNum.NUM_4_LONG(numVal);\r\n\r\n return mgNum.toXMLrecord();\r\n }\r\n\r\n /// <summary>\r\n /// Handle date value\r\n /// </summary>\r\n /// <param name = \"outStr\"> The mask to be used\r\n /// </param>\r\n /// <param name = \"out_len\"> Mask length\r\n /// </param>\r\n /// <param name = \"pic\"> The picure information\r\n /// </param>\r\n /// <param name = \"date_pic_Z_edt\">\r\n /// </param>\r\n /// <param name = \"ignore_dt_fmt\">\r\n /// </param>\r\n /// <returns> the string to be displayed\r\n /// </returns>\r\n to_a_pic_datemode(outStr: string, out_len: number, date: number, pic: PIC, date_pic_Z_edt: boolean, ignore_dt_fmt: boolean, compIdx: number): string {\r\n let len: number;\r\n let day: number = 0;\r\n let doy: number = 0;\r\n let dow: number = 0;\r\n let year: number = 0;\r\n let month: number = 0;\r\n let hday: number = 0;\r\n let hyear: number = 0;\r\n let hmonth: number = 0;\r\n let leap: Boolean = false;\r\n let i: number;\r\n let p: string[];\r\n let outVal: string[] = NString.ToCharArray(outStr);\r\n let breakParams: DateBreakParams;\r\n let dateNameParams: DateNameParams;\r\n let outIdx: number = 0;\r\n let strOut: string = null;\r\n\r\n // If result overflows return buffer, fill with asterixs and bail out\r\n if (pic.getMaskSize() > out_len) {\r\n for (; i < out_len; i++)\r\n outVal[i] = '*';\r\n return NString.FromChars(outVal);\r\n }\r\n\r\n // If zero fill requested and date value is zero, fill it and bail out\r\n out_len = len = pic.getMaskSize();\r\n if (pic.zeroFill() && date === 0 && !date_pic_Z_edt) {\r\n for (; i < out_len; i++)\r\n outVal[i] = pic.getZeroPad();\r\n return NString.FromChars(outVal);\r\n }\r\n if (pic.isHebrew() && (date === 0 || date === 1000000000)) {\r\n for (; i < out_len; i++)\r\n outVal[i] = ' ';\r\n return NString.FromChars(outVal);\r\n }\r\n\r\n // Break data into its components\r\n breakParams = new DateBreakParams(year, month, day, doy, dow);\r\n this.date_break_datemode(breakParams, date, ignore_dt_fmt, compIdx);\r\n if (pic.isHebrew()) {\r\n let refhday: RefParam<number> = new RefParam<number>(hday);\r\n let refhmonth: RefParam<number> = new RefParam<number>(hmonth);\r\n let refhyear: RefParam<number> = new RefParam<number>(hyear);\r\n leap = HebrewDate.dateheb_4_d(date, refhday, refhmonth, refhyear);\r\n\r\n hday = refhday.value;\r\n hmonth = refhmonth.value;\r\n hyear = refhyear.value;\r\n }\r\n\r\n year = breakParams.year;\r\n month = breakParams.month;\r\n day = breakParams.day;\r\n doy = breakParams.doy;\r\n dow = breakParams.dow;\r\n breakParams = null;\r\n while (len > 0) {\r\n let refOutLen: RefParam<number> = new RefParam<number>(out_len);\r\n switch (outVal[outIdx].charCodeAt(0)) {\r\n case PICInterface.PIC_YY:\r\n if (pic.zeroFill() && date === 0 && date_pic_Z_edt)\r\n MemoryUtil.char_memset(outVal, outIdx, pic.getZeroPad(), 2);\r\n else\r\n this.int_2_a(outVal, outIdx, 2, year, '0');\r\n outIdx += 2;\r\n len -= 2;\r\n break;\r\n case PICInterface.PIC_HYYYYY:\r\n i = HebrewDate.dateheb_2_str(outVal, outIdx, len, refOutLen, 5, hyear, pic.isTrimed(), true);\r\n out_len = refOutLen.value;\r\n outIdx += i;\r\n len -= i;\r\n break;\r\n case PICInterface.PIC_HL:\r\n i = HebrewDate.dateheb_i_2_h((hyear / 1000) % 10, outVal, outIdx, false, false);\r\n outIdx++;\r\n len--;\r\n break;\r\n case PICInterface.PIC_HDD:\r\n i = HebrewDate.dateheb_2_str(outVal, outIdx, len, refOutLen, 2, hday, pic.isTrimed(), false);\r\n out_len = refOutLen.value;\r\n outIdx += i;\r\n len -= i;\r\n break;\r\n case PICInterface.PIC_YYYY:\r\n if (pic.zeroFill() && date === 0 && date_pic_Z_edt)\r\n MemoryUtil.char_memset(outVal, outIdx, pic.getZeroPad(), 4);\r\n else\r\n this.int_2_a(outVal, outIdx, 4, year, '0');\r\n outIdx += 4;\r\n len -= 4;\r\n break;\r\n case PICInterface.PIC_MMD:\r\n if (pic.zeroFill() && date === 0 && date_pic_Z_edt)\r\n MemoryUtil.char_memset(outVal, outIdx, pic.getZeroPad(), 2);\r\n else\r\n this.int_2_a(outVal, outIdx, 2, month, '0');\r\n outIdx += 2;\r\n len -= 2;\r\n break;\r\n case PICInterface.PIC_MMM:\r\n if (pic.isHebrew()) {\r\n if (leap && hmonth === 6)\r\n hmonth = 14;\r\n let monthNames: string[] = HebrewDate.GetLocalMonths();\r\n p = NString.ToCharArray(monthNames[hmonth]);\r\n }\r\n else {\r\n let monthStr: string = Events.GetMessageString(MsgInterface.MONTHS_PTR);\r\n let monthNames: string[] = DateUtil.getLocalMonths(monthStr);\r\n p = NString.ToCharArray(monthNames[month]);\r\n }\r\n dateNameParams = new DateNameParams(outVal, outIdx, len);\r\n out_len -= this.date_i_2_nm(dateNameParams, p, pic.isTrimed());\r\n outIdx = dateNameParams.outIdx;\r\n len = dateNameParams.len;\r\n dateNameParams = null;\r\n break;\r\n case PICInterface.PIC_DD:\r\n let isZero: boolean = pic.zeroFill();\r\n if (isZero && date === 0 && date_pic_Z_edt)\r\n MemoryUtil.char_memset(outVal, outIdx, pic.getZeroPad(), 2);\r\n else\r\n this.int_2_a(outVal, outIdx, 2, day, '0');\r\n outIdx += 2;\r\n len -= 2;\r\n break;\r\n case PICInterface.PIC_DDD:\r\n if (pic.zeroFill() && date === 0 && date_pic_Z_edt)\r\n MemoryUtil.char_memset(outVal, outIdx, pic.getZeroPad(), 3);\r\n else\r\n this.int_2_a(outVal, outIdx, 3, doy, '0');\r\n len -= 3;\r\n outIdx += 3;\r\n break;\r\n case PICInterface.PIC_DDDD:\r\n i = this.date_2_DDDD(day, outVal, outIdx, len, pic.isTrimed());\r\n outIdx += i;\r\n out_len += i - 4;\r\n len -= 4;\r\n break;\r\n case PICInterface.PIC_W:\r\n if (pic.zeroFill() && date === 0 && date_pic_Z_edt)\r\n MemoryUtil.char_memset(outVal, outIdx, pic.getZeroPad(), 1);\r\n else\r\n this.int_2_a(outVal, outIdx, 1, dow, '0');\r\n len--;\r\n outIdx++;\r\n break;\r\n case PICInterface.PIC_WWW:\r\n if (pic.isHebrew()) {\r\n let dowsNames: string[] = HebrewDate.GetLocalDows();\r\n p = NString.ToCharArray(dowsNames[dow]);\r\n }\r\n else {\r\n let dayStr: string = Events.GetMessageString(MsgInterface.DAYS_PTR);\r\n let dayNames: string[] = DateUtil.getLocalDays(dayStr);\r\n p = NString.ToCharArray(dayNames[dow]);\r\n }\r\n dateNameParams = new DateNameParams(outVal, outIdx, len);\r\n out_len -= this.date_i_2_nm(dateNameParams, p, pic.isTrimed());\r\n outIdx = dateNameParams.outIdx;\r\n len = dateNameParams.len;\r\n dateNameParams = null;\r\n break;\r\n case PICInterface.PIC_BB: // JPN: Japanese date picture support\r\n // Japanese day of the week\r\n p = NString.ToCharArray(UtilDateJpn.getStrDow(dow));\r\n strOut = null;\r\n dateNameParams = new DateNameParams(outVal, outIdx, len);\r\n strOut = this.date_i_2_nm_bytemode(strOut, dateNameParams, NString.FromChars(p), out_len);\r\n outVal = new Array(strOut.length);\r\n NString.CopyTo(strOut, 0, outVal, 0, strOut.length);\r\n\r\n outIdx = dateNameParams.outIdx;\r\n len = dateNameParams.len;\r\n strOut = null;\r\n dateNameParams = null;\r\n break;\r\n case PICInterface.PIC_JY1:\r\n case PICInterface.PIC_JY2:\r\n case PICInterface.PIC_JY4:\r\n // Japanese the name of an era\r\n let strNum: string = null;\r\n if (outVal[outIdx].charCodeAt(0) === PICInterface.PIC_JY1)\r\n strNum = UtilDateJpn.getInstance().date_jpn_yr_2_a(year, doy, false);\r\n else\r\n strNum = UtilDateJpn.getInstance().date_jpn_yr_2_a(year, doy, true);\r\n strOut = null;\r\n dateNameParams = new DateNameParams(outVal, outIdx, len);\r\n strOut = this.date_i_2_nm_bytemode(strOut, dateNameParams, strNum, out_len);\r\n outVal = null;\r\n outVal = new Array(strOut.length);\r\n NString.CopyTo(strOut, 0, outVal, 0, strOut.length);\r\n outIdx = dateNameParams.outIdx;\r\n len = dateNameParams.len;\r\n strOut = null;\r\n dateNameParams = null;\r\n break;\r\n case PICInterface.PIC_YJ:\r\n if (pic.zeroFill() && date === 0 && date_pic_Z_edt)\r\n MemoryUtil.char_memset(outVal, outIdx, pic.getZeroPad(), 2);\r\n else\r\n this.int_2_a(outVal, outIdx, 2, UtilDateJpn.getInstance().date_jpn_year_ofs(year, doy), '0');\r\n outIdx += 2;\r\n len -= 2;\r\n break;\r\n default:\r\n outIdx++;\r\n len--;\r\n break;\r\n }\r\n }\r\n if (out_len < outVal.length)\r\n MemoryUtil.char_memset(outVal, out_len, ' ', outVal.length - out_len);\r\n\r\n return NString.FromChars(outVal);\r\n }\r\n\r\n /// <summary>\r\n /// Break a date into Year, Month, Day in month, Day in year and Day in week\r\n /// </summary>\r\n date_break_datemode(breakParams: DateBreakParams, date: number, ignore_dt_fmt: boolean, compIdx: number): void {\r\n\r\n let year: number = breakParams.year;\r\n let month: number = breakParams.month;\r\n let day: number = breakParams.day;\r\n let doy: number = breakParams.doy;\r\n let dow: number = breakParams.dow;\r\n\r\n if (date <= 0) {\r\n breakParams.day = 0;\r\n breakParams.doy = 0;\r\n breakParams.dow = 0;\r\n breakParams.year = 0;\r\n breakParams.month = 0;\r\n }\r\n else {\r\n dow = date % 7 + 1;\r\n date = date - 1;\r\n let cent4: number = Math.floor(date / PICInterface.DAYSINFOURCENT);\r\n date = date - cent4 * PICInterface.DAYSINFOURCENT;\r\n let cent: number = Math.floor(date / PICInterface.DAYSINCENTURY);\r\n if (cent > 3) {\r\n cent = 3;\r\n }\r\n date = date - cent * PICInterface.DAYSINCENTURY;\r\n let year4: number = Math.floor(date / PICInterface.DAYSINFOURYEAR);\r\n date = date - year4 * PICInterface.DAYSINFOURYEAR;\r\n year = Math.floor(date / PICInterface.DAYSINYEAR);\r\n if (year > 3) {\r\n year = 3;\r\n }\r\n date = date - year * PICInterface.DAYSINYEAR;\r\n year = cent4 * 400 + cent * 100 + year4 * 4 + year + 1;\r\n let leapyear: number = 0;\r\n if (year % 4 === 0) {\r\n if (year % 100 !== 0 || year % 400 === 0) {\r\n leapyear = 1;\r\n }\r\n }\r\n\r\n if (!ignore_dt_fmt && this._environment.GetDateMode(compIdx) === 'B') {\r\n year = year + PICInterface.DATE_BUDDHIST_GAP;\r\n }\r\n month = (Math.floor(date / PICInterface.DAYSINMONTH) + 1);\r\n day = PICInterface.date_day_tab[month];\r\n if (leapyear > 0) {\r\n if (month > 1) {\r\n day = day + 1;\r\n }\r\n }\r\n\r\n if (date >= day) {\r\n month = month + 1;\r\n }\r\n else {\r\n day = PICInterface.date_day_tab[month - 1];\r\n if (leapyear > 0) {\r\n if (month > 2) {\r\n day = day + 1;\r\n }\r\n }\r\n }\r\n day = date - day + 1;\r\n doy = date + 1;\r\n breakParams.year = year;\r\n breakParams.month = month;\r\n breakParams.day = day;\r\n breakParams.doy = doy;\r\n breakParams.dow = dow;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// get alpha string from int value\r\n /// </summary>\r\n /// <param name = \"str\"> the output string (as an char array)\r\n /// </param>\r\n /// <param name = \"strPos\"> starting position\r\n /// </param>\r\n /// <param name = \"len\"> string length\r\n /// </param>\r\n /// <param name = \"n\"> the number to convert\r\n /// </param>\r\n /// <param name = \"lead\"> leading character\r\n /// </param>\r\n /// <returns> the result string length\r\n /// </returns>\r\n private int_2_a(str: string[], strPos: number, len: number, n: number, lead: string): number {\r\n let neg: boolean = n < 0;\r\n\r\n if (len <= 0)\r\n return;\r\n\r\n n = Math.abs(n);\r\n let pos: number = len;\r\n\r\n do {\r\n str[strPos + (pos = pos - 1)] = String.fromCharCode(48 + n % 10);\r\n n = Math.floor(n / 10);\r\n }\r\n while (pos > 0 && n > 0);\r\n\r\n if (neg && pos > 0) {\r\n str[strPos + (pos = pos - 1)] = '-'/*'-'*/;\r\n }\r\n return this.lib_a_fill(str, strPos, len, pos, lead.charCodeAt(0));\r\n\r\n }\r\n\r\n /// <summary>\r\n /// Fill the char array for the converting of int->string\r\n /// </summary>\r\n /// <param name = \"str\"> the output string (as an char array)\r\n /// </param>\r\n /// <param name = \"strPos\"> starting position\r\n /// </param>\r\n /// <param name = \"len\"> string length\r\n /// </param>\r\n /// <param name = \"lead\"> leading character\r\n /// </param>\r\n /// <returns> the result string length\r\n /// </returns>\r\n private lib_a_fill(str: string[], strPos: number, len: number, pos: number, lead: number): number {\r\n\r\n if (lead === 0) {\r\n len = len - pos;\r\n\r\n if (len > 0 && pos > 0) {\r\n MemoryUtil.char_memcpy(str, strPos, str, pos, len);\r\n MemoryUtil.char_memset(str, strPos + len, ' ', /*' '*/pos);\r\n }\r\n }\r\n else {\r\n if (pos > 0) {\r\n MemoryUtil.char_memset(str, strPos, String.fromCharCode(lead), pos);\r\n }\r\n }\r\n return len;\r\n }\r\n\r\n /// <summary>\r\n /// Convert index to Name\r\n /// </summary>\r\n /// <param name = \"dateNameParams\"> output sting details\r\n /// </param>\r\n /// <param name = \"nm\"> name\r\n /// </param>\r\n /// <param name = \"trim\"> output string should be trimed\r\n /// </param>\r\n /// </param>\r\n /// <returns> the length of the string\r\n /// </returns>\r\n private date_i_2_nm(dateNameParams: DateNameParams, nm: string[], trim: boolean): number {\r\n\r\n let n: number = this.date_msk_cnt(dateNameParams.outVal, dateNameParams.outIdx, <number>dateNameParams.len);\r\n let l: number;\r\n if (trim) {\r\n l = MemoryUtil.mem_trim(nm, 0, n);\r\n }\r\n else {\r\n l = n;\r\n }\r\n l = Math.min(l, dateNameParams.len);\r\n MemoryUtil.char_memcpy(dateNameParams.outVal, dateNameParams.outIdx, nm, 0, l);\r\n dateNameParams.outIdx = dateNameParams.outIdx + l;\r\n dateNameParams.len = dateNameParams.len - n;\r\n\r\n // -----------------------------------------------------------------------\r\n // Trimed ? Jump other trimed mask : nothing\r\n // -----------------------------------------------------------------------\r\n\r\n n = n - l;\r\n\r\n if (n > 0) {\r\n MemoryUtil.char_memcpy(dateNameParams.outVal, dateNameParams.outIdx, dateNameParams.outVal, dateNameParams.outIdx + n, dateNameParams.len);\r\n }\r\n return <number>n;\r\n }\r\n\r\n /// <summary>\r\n /// JPN: Japanese date picture support\r\n /// Convert index to Name\r\n /// </summary>\r\n /// <param name = \"strOut\"> output sting (original)\r\n /// </param>\r\n /// <param name = \"dateNameParams\"> output sting details\r\n /// </param>\r\n /// <param name = \"strNm\"> name which will be embedded in output string\r\n /// </param>\r\n /// <param name = \"intOutLen\"> the remaining length of the output string\r\n /// </param>\r\n /// <returns> output sting (processed)\r\n /// </returns>\r\n private date_i_2_nm_bytemode(strOut: string, dateNameParams: DateNameParams, strNm: string, intOutLen: number): string {\r\n let intMskCnt: number = this.date_msk_cnt(dateNameParams.outVal, dateNameParams.outIdx, <number>dateNameParams.len);\r\n let strWork: string = NString.FromChars(dateNameParams.outVal);\r\n\r\n strWork = strWork.substr(0, dateNameParams.outIdx);\r\n\r\n let intOfs: number = UtilStrByteMode.lenB(strWork);\r\n strNm = UtilStrByteMode.leftB(strNm, intMskCnt);\r\n strOut = UtilStrByteMode.repB(NString.FromChars(dateNameParams.outVal), strNm, intOfs + 1, intMskCnt);\r\n\r\n dateNameParams.outIdx = dateNameParams.outIdx + strNm.length;\r\n dateNameParams.len = dateNameParams.len - intMskCnt;\r\n intOutLen = intOutLen - intMskCnt;\r\n return strOut;\r\n }\r\n\r\n /// <summary>\r\n /// Return N of consecutive Mask characters\r\n /// </summary>\r\n /// <param name = \"msk\"> the mask to check\r\n /// </param>\r\n /// <param name = \"mskPos\"> index of first char to check\r\n /// </param>\r\n /// <param name = \"len\"> length of the mask\r\n /// </param>\r\n /// <returns> number of consecutive Mask characters\r\n /// </returns>\r\n private date_msk_cnt(msk: string[], mskPos: number, len: number): number {\r\n let c: string = msk[mskPos++];\r\n let i: number = 1;\r\n while (<number>i < len) {\r\n if (msk[mskPos] !== c) {\r\n break;\r\n }\r\n mskPos = mskPos + 1;\r\n i = i + 1;\r\n }\r\n return i;\r\n }\r\n\r\n /// <summary>\r\n /// Compute Day name\r\n /// </summary>\r\n private date_2_DDDD(day: number, outVal: string[], outIdx: number, len: number, trim: boolean): number {\r\n\r\n\r\n let ret: number = 4;\r\n let ext: string[];\r\n\r\n if (day > 9) {\r\n this.int_2_a(outVal, outIdx, 2, day, (<number>0).toString());\r\n outIdx += 2;\r\n }\r\n else {\r\n if (trim) {\r\n MemoryUtil.char_memcpy(outVal, outIdx, outVal, outIdx + 1, len - 1);\r\n /*17-May-90*/\r\n ret--;\r\n }\r\n else {\r\n // *(out++) = ' '; // Original Line\r\n outVal[outIdx++] = ' ';\r\n }\r\n this.int_2_a(outVal, outIdx, 1, day, (<number>0).toString());\r\n outIdx++;\r\n }\r\n switch (day) {\r\n case 1:\r\n case 21:\r\n case 31:\r\n ext = NString.ToCharArray(\"st\");\r\n break;\r\n\r\n case 2:\r\n case 22:\r\n ext = NString.ToCharArray(\"nd\");\r\n break;\r\n\r\n case 3:\r\n case 23:\r\n ext = NString.ToCharArray(\"rd\");\r\n break;\r\n\r\n default:\r\n ext = NString.ToCharArray(\"th\");\r\n break;\r\n }\r\n outVal[outIdx++] = ext[0];\r\n outVal[outIdx] = ext[1];\r\n\r\n return (ret);\r\n\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Build a display string for an time value according to the picture\r\n /// </summary>\r\n /// <param name = \"dataStr\"> The source data</param>\r\n /// <param name = \"picStr\"> The picture to use for the value to display</param>\r\n /// <returns> the string to be displayed</returns>\r\n fromMgTimeToNativeTime(dataStr: string, pic: PIC): Date {\r\n let time: number = new NUM_TYPE(dataStr).NUM_2_ULONG();\r\n let breakParams: TimeBreakParams = new TimeBreakParams();\r\n\r\n DisplayConvertor.time_break(breakParams, time);\r\n\r\n let nativeDt: Date = new Date(0);\r\n\r\n let maskStr = pic.getMask();\r\n let outVal: string[] = NString.ToCharArray(maskStr);\r\n let len = pic.getMaskSize();\r\n let outIdx = 0;\r\n\r\n while (len > 0) {\r\n switch (outVal[outIdx].charCodeAt(0)) {\r\n case (PICInterface.PIC_HH):\r\n nativeDt.setHours(breakParams.hour);\r\n outIdx += 2;\r\n len -= 2;\r\n break;\r\n case (PICInterface.PIC_MMT):\r\n nativeDt.setMinutes(breakParams.minute);\r\n outIdx += 2;\r\n len -= 2;\r\n break;\r\n\r\n case (PICInterface.PIC_SS):\r\n nativeDt.setSeconds(breakParams.second);\r\n outIdx += 2;\r\n len -= 2;\r\n break;\r\n default:\r\n outIdx ++;\r\n len --;\r\n }\r\n }\r\n\r\n return nativeDt; }\r\n\r\n /// <summary>\r\n /// Handle time value\r\n /// </summary>\r\n /// <param name = \"AsciiStr\"> The mask to be used</param>\r\n /// <param name = \"AsciiL\"> Mask length</param>\r\n /// <param name = \"pic\"> The picure information</param>\r\n /// <param name = \"time_pic_Z_edt\"></param>\r\n /// <param name = \"seconds\">/ milliSeconds flag</param>\r\n /// <returns> the string to be displayed\r\n /// </returns>\r\n private time_2_a_pic(AsciiStr: string, AsciiL: number, time: number, pic: PIC, time_pic_Z_edt: boolean, milliSeconds: boolean): string {\r\n\r\n // Original vars\r\n let hour: number = 0;\r\n let minute: number = 0;\r\n let second: number = 0;\r\n let millisec: number = 0;\r\n\r\n let Ascii: string[] = NString.ToCharArray(AsciiStr);\r\n let breakParams: TimeBreakParams = new TimeBreakParams(hour, minute, second);\r\n let timeSec: number;\r\n if (milliSeconds) {\r\n timeSec = Math.floor(time / 1000);\r\n millisec = time - timeSec * 1000;\r\n }\r\n else {\r\n timeSec = time;\r\n }\r\n\r\n DisplayConvertor.time_break(breakParams, timeSec);\r\n hour = breakParams.hour;\r\n minute = breakParams.minute;\r\n second = breakParams.second;\r\n\r\n // If ascii representation overflows output buffer\r\n // fill with '*' and bail out\r\n\r\n let result: string;\r\n if (pic.getMaskSize() > AsciiL) {\r\n MemoryUtil.char_memset(Ascii, 0, '*', /*'*'*/AsciiL);\r\n result = NString.FromChars(Ascii);\r\n }\r\n else {\r\n if (pic.zeroFill()) {\r\n if (timeSec === 0 && (!milliSeconds || millisec === 0)) {\r\n if (time_pic_Z_edt) {\r\n for (let intx: number = 0; intx < pic.getMaskSize(); intx = intx + 1) {\r\n if (Ascii[intx] <= '\\u001f') {\r\n Ascii[intx] = pic.getZeroPad();\r\n }\r\n }\r\n result = NString.FromChars(Ascii);\r\n return result;\r\n }\r\n MemoryUtil.char_memset(Ascii, 0, pic.getZeroPad(), pic.getMaskSize());\r\n result = NString.FromChars(Ascii);\r\n return result;\r\n }\r\n }\r\n let I: number = 0;\r\n let am: number = 0;\r\n let len: number = pic.getMaskSize();\r\n let HourI: number = -1;\r\n\r\n while (I < len) {\r\n switch (Ascii[I].charCodeAt(0)) {\r\n case (PICInterface.PIC_HH):\r\n HourI = I;\r\n I += 2;\r\n break;\r\n\r\n\r\n case (PICInterface.PIC_MMT):\r\n this.int_2_a(Ascii, I, 2, minute, '0');\r\n I += 2;\r\n break;\r\n\r\n case (PICInterface.PIC_SS):\r\n this.int_2_a(Ascii, I, 2, second, '0');\r\n I += 2;\r\n break;\r\n\r\n case (PICInterface.PIC_MS):\r\n this.int_2_a(Ascii, I, 3, millisec, '0');\r\n I += 3;\r\n break;\r\n\r\n case (PICInterface.PIC_PM):\r\n am = 1;\r\n let tmpHour: number = hour % 24;\r\n if (tmpHour < 12 || tmpHour === 0)\r\n MemoryUtil.char_memcpy(Ascii, I, NString.ToCharArray(\"am\"), 0, 2);\r\n else\r\n MemoryUtil.char_memcpy(Ascii, I, NString.ToCharArray(\"pm\"), 0, 2);\r\n I += 2;\r\n break;\r\n\r\n default:\r\n I++;\r\n break;\r\n }\r\n }\r\n if (HourI >= 0) {\r\n if (am > 0) {\r\n hour = hour % 24;\r\n if (hour === 0) {\r\n hour = 12;\r\n }\r\n else {\r\n hour = hour % 12;\r\n if (hour === 0) {\r\n hour = 12;\r\n }\r\n }\r\n }\r\n this.int_2_a(Ascii, HourI, 2, hour, (am !== 0 && hour < 10) ? ' ' : /*' '*/'0'/*'0'*/);\r\n }\r\n result = NString.FromChars(Ascii);\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// Break time into its components\r\n /// </summary>\r\n static time_break(breakParams: TimeBreakParams, time: number): void {\r\n\r\n if (time <= 0) {\r\n breakParams.second = 0;\r\n breakParams.minute = 0;\r\n breakParams.hour = 0;\r\n }\r\n else {\r\n breakParams.hour = Math.floor(time / 3600);\r\n time = time - breakParams.hour * 3600;\r\n breakParams.minute = Math.floor(time / 60);\r\n breakParams.second = time - breakParams.minute * 60;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Build a display string for a logical value according to the picture\r\n /// </summary>\r\n /// <param name = \"dataStr\"> \"0\" for false or \"1\" for true\r\n /// </param>\r\n /// <returns> boolean\r\n /// </returns>\r\n private fromMgLogicalToNativeLogical(dataStr: string): boolean {\r\n\r\n let nativeVal: boolean;\r\n nativeVal = (dataStr.charAt(0) === '1') ? true : false;\r\n return nativeVal;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Build a mg string for a logical value according to the boolean value\r\n /// </summary>\r\n /// <param name = \"dispVal\"> boolean\r\n /// </param>\r\n /// <returns> string\r\n /// </returns>\r\n private fromNativeLogicalToMgLogical(dispVal: boolean): string {\r\n\r\n let mgVal: string;\r\n mgVal = (dispVal === true) ? \"1\" : \"0\";\r\n\r\n return mgVal;\r\n }\r\n\r\n\r\n\r\n /// <summary>\r\n /// Get the default range for logical values\r\n /// </summary>\r\n /// <param name = \"rng\"> current range</param>\r\n /// <returns> the default range if the input range is empty</returns>\r\n private win_rng_bool(rng: string): string {\r\n\r\n if (rng === null || rng.length === 0) {\r\n rng = \"True, False\";\r\n }\r\n return rng;\r\n }\r\n\r\n\r\n // --------------------------------------------------------------------------\r\n // Methods for coverting DIPLAY ---> INTERNAL\r\n // --------------------------------------------------------------------------\r\n\r\n /// <summary>\r\n /// Translates a string number to magic number\r\n /// </summary>\r\n /// <param name = \"dispValue\"> A string number</param>\r\n /// <param name = \"picStr\"> The picture to use</param>\r\n /// <returns> the magic number</returns>\r\n toNum(dispValue: string, pic: PIC, compIdx: number): string {\r\n let mgNum: NUM_TYPE = new NUM_TYPE(dispValue, pic, compIdx);\r\n return mgNum.toXMLrecord();\r\n }\r\n\r\n\r\n /// <summary>\r\n /// builds the date magic number from the string value\r\n /// </summary>\r\n /// <param name = \"str\"> the date string</param>\r\n /// <param name = \"str_len\"> length of string</param>\r\n /// <param name = \"pic\"> the picture info</param>\r\n /// <param name = \"mask\"> the mask of the string</param>\r\n /// <param name = \"ignore_dt_fmt\"></param>\r\n /// <returns> the magic number</returns>\r\n a_2_date_pic_datemode(str: string[], str_len: number, pic: PIC, mask: string[], compIdx: number): number {\r\n let pos: number = 0;\r\n let year_in_pic: boolean = false;\r\n let month_in_pic: boolean = false;\r\n let day_in_pic: boolean = false;\r\n let inp: boolean = false;\r\n let bYearIsZero: boolean = false;\r\n let era_year: number = 0;\r\n let intRef: IntRef = new IntRef(0);\r\n let intPicIdxOfs: number = 0;\r\n let millenium: number = 0;\r\n let dateParams: DateBreakParams;\r\n\r\n let len: number = Math.min(str.length, pic.getMaskSize());\r\n\r\n if (str.length < mask.length)\r\n str.length = mask.length;\r\n\r\n let year: number = 0;\r\n let month: number = 1;\r\n let day: number = 1;\r\n let doy: number = 1;\r\n let usedoy: boolean = false;\r\n\r\n let i: number;\r\n for (i = 0; i < str_len; i = i + 1) {\r\n if (str[i] !== '0' && str[i] !== ' ') {\r\n break;\r\n }\r\n }\r\n\r\n if (i === str_len)\r\n return 0;\r\n\r\n while (pos < str_len && pos + intPicIdxOfs < len) {\r\n\r\n switch (mask[pos + intPicIdxOfs].charCodeAt(0)) {\r\n case PICInterface.PIC_YY:\r\n year_in_pic = true;\r\n inp = true;\r\n year = this.date_a_2_i(str, 2, pos);\r\n pos += 2;\r\n // Hen 16/11/97 : Fix #768442\r\n if (year === 0)\r\n bYearIsZero = true;\r\n let century_year: number = this._environment.GetCentury(compIdx) % 100; // DEF_century\r\n if (year < century_year)\r\n year += 100;\r\n year += this._environment.GetCentury(compIdx) - century_year; // DEF_century\r\n if (this._environment.GetDateMode(compIdx) === 'B')\r\n // DEF_date_mode\r\n year -= PICInterface.DATE_BUDDHIST_GAP;\r\n break;\r\n\r\n\r\n case (PICInterface.PIC_YYYY):\r\n year_in_pic = true;\r\n inp = true;\r\n let YearDigitsNo: number;\r\n // --------------------------------------------------------------\r\n // Make sure we have 4 year digit. If not, adjust it\r\n // according to the 'century year'\r\n // --------------------------------------------------------------\r\n if (UtilStrByteMode.isLocaleDefLangJPN()) {\r\n for (YearDigitsNo = 0; YearDigitsNo < 4 && pos + YearDigitsNo < str.length && UtilStrByteMode.isDigit(str[pos + YearDigitsNo]); YearDigitsNo++) {\r\n }\r\n i = YearDigitsNo;\r\n }\r\n else {\r\n for (i = 0; pos + i < str.length && str[pos + i] !== this.DATECHAR.toString() && i < 4; i++) {\r\n }\r\n\r\n for (YearDigitsNo = 0;\r\n pos + YearDigitsNo < str.length && UtilStrByteMode.isDigit(str[pos + YearDigitsNo]) &&\r\n YearDigitsNo < 4;\r\n YearDigitsNo++) {\r\n }\r\n }\r\n\r\n if (UtilStrByteMode.isLocaleDefLangJPN()) {\r\n if (i < 4 && str.length < mask.length)\r\n this.move_date(str, pos, 4 - i, str.length);\r\n }\r\n else {\r\n if (i < 4 && len < mask.length) {\r\n this.move_date(str, pos, 4 - i, len);\r\n len = len + 4 - i;\r\n }\r\n }\r\n\r\n year = this.date_a_2_i(str, 4, pos);\r\n pos += 4;\r\n\r\n // Hen 16/11/97 : Fix #768442\r\n if (year === 0)\r\n bYearIsZero = true;\r\n\r\n if (YearDigitsNo <= 2) {\r\n century_year = this._environment.GetCentury(compIdx) % 100; // DEF_century\r\n if (year < century_year)\r\n year += 100;\r\n year += this._environment.GetCentury(compIdx) - century_year; // DEF_century\r\n }\r\n\r\n if (this._environment.GetDateMode(compIdx) === 'B')\r\n // DEF_date_mode\r\n year -= PICInterface.DATE_BUDDHIST_GAP;\r\n break;\r\n\r\n\r\n case PICInterface.PIC_HYYYYY:\r\n inp = true;\r\n let quotes: number = 0;\r\n if (len > pos + 5 && mask[pos + 5].charCodeAt(0) === (PICInterface.PIC_HYYYYY))\r\n quotes = 1;\r\n year = HebrewDate.dateheb_h_2_i(str, 5 + quotes, pos);\r\n pos += 5 + quotes;\r\n if (year === 0)\r\n bYearIsZero = true;\r\n break;\r\n\r\n case PICInterface.PIC_HL:\r\n intPicIdxOfs = HebrewDate.dateheb_h_2_i(str, 1, pos);\r\n pos++;\r\n break;\r\n\r\n case PICInterface.PIC_HDD:\r\n inp = true;\r\n quotes = 0;\r\n if (len > pos + 2 && mask[pos + 2].charCodeAt(0) === PICInterface.PIC_HDD)\r\n quotes = 1;\r\n day = HebrewDate.dateheb_h_2_i(str, 2 + quotes, pos);\r\n pos += 2 + quotes;\r\n break;\r\n\r\n case PICInterface.PIC_MMD:\r\n inp = true;\r\n month_in_pic = true;\r\n if (UtilStrByteMode.isLocaleDefLangJPN()) {\r\n if ((str.length === pos + 1 || str[pos + 1].charCodeAt(0) === this.DATECHAR || !UtilStrByteMode.isDigit(str[pos + 1])) && str.length < mask.length)\r\n this.move_date(str, pos, 1, str.length);\r\n }\r\n else {\r\n if (str[pos + 1].charCodeAt(0) === this.DATECHAR && len < mask.length) {\r\n this.move_date(str, pos, 1, len);\r\n len += 1;\r\n }\r\n }\r\n month = this.date_a_2_i(str, 2, pos);\r\n pos += 2;\r\n break;\r\n\r\n\r\n case PICInterface.PIC_MMM:\r\n inp = true;\r\n month_in_pic = true;\r\n intRef.val = pos;\r\n month = this.date_MMM_2_m(str, mask, intRef, len, pic.isHebrew());\r\n pos = intRef.val;\r\n if (pic.isHebrew() && month === 14)\r\n month = 6;\r\n break;\r\n\r\n\r\n case (PICInterface.PIC_DD):\r\n inp = true;\r\n day_in_pic = true;\r\n if (UtilStrByteMode.isLocaleDefLangJPN()) {\r\n if ((str.length === pos + 1 || str[pos + 1].charCodeAt(0) === this.DATECHAR || !UtilStrByteMode.isDigit(str[pos + 1])) && str.length < mask.length)\r\n this.move_date(str, pos, 1, str.length);\r\n }\r\n else {\r\n if (str[pos + 1].charCodeAt(0) === this.DATECHAR && len < mask.length) {\r\n this.move_date(str, pos, 1, len);\r\n len += 1;\r\n }\r\n }\r\n day = this.date_a_2_i(str, 2, pos);\r\n pos += 2;\r\n break;\r\n\r\n\r\n case (PICInterface.PIC_DDD):\r\n inp = true;\r\n usedoy = true;\r\n day_in_pic = true;\r\n doy = this.date_a_2_i(str, 3, pos);\r\n pos += 3;\r\n break;\r\n\r\n\r\n case (PICInterface.PIC_DDDD):\r\n inp = true;\r\n day_in_pic = true;\r\n day = this.date_a_2_i(str, 2, pos);\r\n pos += 2 + 2;\r\n break;\r\n\r\n\r\n case (PICInterface.PIC_YJ): // JPN: Japanese date picture support\r\n year_in_pic = true;\r\n inp = true;\r\n if (UtilStrByteMode.isLocaleDefLangJPN()) {\r\n if ((str.length === pos + 1 || str[pos + 1].charCodeAt(0) === this.DATECHAR || !UtilStrByteMode.isDigit(str[pos + 1])) && str.length < mask.length)\r\n this.move_date(str, pos, 1, str.length);\r\n }\r\n year = this.date_a_2_i(str, 2, pos);\r\n pos += 2;\r\n\r\n let str1: string = NString.FromChars(str);\r\n era_year = UtilDateJpn.getInstance().getStartYearOfEra(str1, pic.getMask());\r\n\r\n if (era_year === 0)\r\n return 0;\r\n year += era_year - 1;\r\n\r\n if (year === 0)\r\n bYearIsZero = true;\r\n break;\r\n\r\n\r\n default:\r\n if (UtilStrByteMode.isLocaleDefLangDBCS()) {\r\n // if \"str[pos]\" contains DBCS, the next index of \"mask\" has to be skipped.\r\n if (UtilStrByteMode.isHalfWidth(str[pos]) === false &&\r\n UtilStrByteMode.isHalfWidth(mask[pos + intPicIdxOfs]))\r\n intPicIdxOfs++;\r\n }\r\n\r\n pos += 1;\r\n break;\r\n }\r\n }\r\n\r\n if (bYearIsZero) {\r\n if (!month_in_pic)\r\n month = 0;\r\n if (!day_in_pic && month === 0)\r\n day = 0;\r\n }\r\n\r\n // Hen 16/11/97 : Fix #768442\r\n // Zero date is valid and should return 0L. This check must be here\r\n // because the year value may be changed because of century year.\r\n if (day === 0 && month === 0 && (bYearIsZero || year === 0))\r\n return (0);\r\n\r\n if (!inp)\r\n return (0);\r\n\r\n // Hebrew Year\r\n if (pic.isHebrew()) {\r\n if (year > 0) {\r\n if (millenium === 0)\r\n millenium = 5;\r\n year += millenium * 1000;\r\n }\r\n return (HebrewDate.dateheb_2_d(year, month, day));\r\n }\r\n\r\n // the next 2 lines support 4.xx DD/MM pictures\r\n if ((year === 0) && !year_in_pic) {\r\n dateParams = this.date_sys();\r\n year = dateParams.year;\r\n }\r\n return (this.date_4_calender(year, month, day, doy, usedoy));\r\n }\r\n\r\n /// <summary>\r\n /// Decode digits from a date string\r\n /// </summary>\r\n private date_a_2_i(s: string[], len: number, pos: number): number;\r\n private date_a_2_i(s: string, len: number, pos: number): number;\r\n private date_a_2_i(s: any, len: number, pos: number): number {\r\n if (arguments.length === 3 && (s === null || s instanceof Array) && (len === null || len.constructor === Number) && (pos === null || pos.constructor === Number)) {\r\n return this.date_a_2_i_0(s, len, pos);\r\n }\r\n return this.date_a_2_i_1(s, len, pos);\r\n }\r\n\r\n /// <summary>\r\n /// Decode digits from a date string\r\n /// </summary>\r\n private date_a_2_i_0(s: string[], len: number, pos: number): number {\r\n let array: string[] = new Array<string>(len);\r\n let mgNum: NUM_TYPE = new NUM_TYPE();\r\n for (let i: number = 0; i < len; i = i + 1) {\r\n array[i] = s[pos + i];\r\n }\r\n return mgNum.a_2_long(NString.FromChars(array));\r\n }\r\n\r\n /// <summary>\r\n /// moving part of the date string\r\n /// </summary>\r\n private move_date(str: string[], pos: number, moveby: number, len: number): void;\r\n private move_date(str: string, pos: number, moveby: number, len: number): void;\r\n private move_date(str: any, pos: number, moveby: number, len: number): void {\r\n if (arguments.length === 4 && (str === null || str instanceof Array) && (pos === null || pos.constructor === Number) && (moveby === null || moveby.constructor === Number) && (len === null || len.constructor === Number)) {\r\n this.move_date_0(str, pos, moveby, len);\r\n return;\r\n }\r\n this.move_date_1(str, pos, moveby, len);\r\n }\r\n\r\n /// <summary>\r\n /// moving part of the date string\r\n /// </summary>\r\n private move_date_0(str: string[], pos: number, moveby: number, len: number): void {\r\n MemoryUtil.char_memmove(str, pos + moveby, str, pos, len - (pos + moveby) + 1);\r\n MemoryUtil.char_memset(str, pos, '0', /*'0'*/moveby);\r\n }\r\n\r\n /// <summary>\r\n /// Translate a month name -> month index\r\n /// </summary>\r\n /// <param name = \"string\">to evaluate\r\n /// </param>\r\n /// <param name = \"picture\">mask\r\n /// </param>\r\n /// <param name = \"pos\">current position in the string the intRef not exactly the same reference to integer , like in C++,\r\n /// so the global pos MUST be updated by the pos.value after the function returns.\r\n /// </param>\r\n private date_MMM_2_m(str: string[], mask: string[], pos: IntRef, len: number, isHebrew: boolean): number {\r\n let l: number;\r\n\r\n if (UtilStrByteMode.isLocaleDefLangJPN()) {\r\n let maskPos: number = UtilStrByteMode.convPos(NString.FromChars(str), NString.FromChars(mask), pos.val, false);\r\n l = this.date_msk_cnt(mask, maskPos, <number>(len - maskPos));\r\n }\r\n else {\r\n l = this.date_msk_cnt(mask, pos.val, <number>(len - pos.val));\r\n }\r\n let strPos: number = pos.val;\r\n pos.val = pos.val + l;\r\n len = MemoryUtil.mem_trim(str, strPos, l);\r\n\r\n if (len === 0) {\r\n return 0;\r\n }\r\n else {\r\n let strB: string = NString.FromChars(str, strPos, len);\r\n let monthNames: string[];\r\n if (isHebrew) {\r\n monthNames = HebrewDate.GetLocalMonths();\r\n }\r\n else {\r\n let months: string = Events.GetMessageString(MsgInterface.MONTHS_PTR);\r\n monthNames = DateUtil.getLocalMonths(months);\r\n }\r\n\r\n for (let i: number = 1; i < monthNames.length; i = i + 1) {\r\n if (NString.Compare(monthNames[i].substr(0, len), strB, true) === 0)\r\n return i;\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n /// <summary>\r\n /// Get the curret daye seperated to year, month, day\r\n /// </summary>\r\n date_sys(): DateBreakParams {\r\n let date: DateBreakParams = new DateBreakParams();\r\n let CurrDate: DateTime = DateTime.Now;\r\n\r\n date.year = CurrDate.Year;\r\n date.month = CurrDate.Month;\r\n date.day = CurrDate.Day;\r\n\r\n return date;\r\n }\r\n\r\n /// <summary>\r\n /// to get current date in magic representation Query Magic's Date\r\n /// </summary>\r\n /// <returns> the 'Magic' current date\r\n /// </returns>\r\n date_magic(utcDate: boolean): number {\r\n let dateTime: DateTime;\r\n if (utcDate) {\r\n dateTime = DateTime.UtcNow;\r\n }\r\n else {\r\n dateTime = DateTime.Now;\r\n }\r\n\r\n let year: number = dateTime.Year;\r\n let month: number = dateTime.Month;\r\n let day: number = dateTime.Day;\r\n\r\n return this.date_4_calender(year, month, day, 1, false);\r\n }\r\n\r\n /// <summary>\r\n /// to get the system time\r\n /// </summary>\r\n /// <returns> the 'Magic' current time\r\n /// </returns>\r\n time_magic(utcTime: boolean): number {\r\n return DateTime.GetTotalSecondsFromMidnight(utcTime, new Date());\r\n }\r\n\r\n mtime_magic(utcTime: boolean): number {\r\n return DateTime.GetTotalMilliSecondsFromMidnight(utcTime, new Date()) ;\r\n }\r\n\r\n /// <summary>\r\n /// Compute MAGIC date\r\n /// </summary>\r\n date_4_calender(year: number, month: number, day: number, doy: number, usedoy: boolean): number {\r\n\r\n let LeapYear: boolean = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\r\n\r\n // 3.11.97 - Hen (Fixed bug #764265 and #8186) :\r\n // If the date is 0 then return 0L (zero value is valid), else if the date\r\n // is illegal then return 1000000000L (wrong date).\r\n if (usedoy) {\r\n if (doy === 0) {\r\n return 0;\r\n }\r\n if (doy > 366 || (!LeapYear && doy > 365)) {\r\n return (1000000000);\r\n }\r\n }\r\n else {\r\n if (day === 0 && month === 0 && year === 0) {\r\n return 0;\r\n }\r\n if (day === 0 || month === 0 || year === 0 || month > 12) {\r\n return 1000000000;\r\n }\r\n }\r\n year = year - 1;\r\n let num: number = Math.floor(year / 400);\r\n year = year - num * 400;\r\n let num2: number = Math.floor(year / 100);\r\n year = year - num2 * 100;\r\n let num3: number = Math.floor(year / 4);\r\n year = year - num3 * 4;\r\n\r\n if (!usedoy) {\r\n let num4: number = PICInterface.date_day_tab[month - 1];\r\n let num5: number = PICInterface.date_day_tab[month];\r\n\r\n if (LeapYear) {\r\n if (month > 1) {\r\n num5 = num5 + 1;\r\n if (month > 2) {\r\n num4 = num4 + 1;\r\n }\r\n }\r\n }\r\n\r\n if (day > num5 - num4) {\r\n return 1000000000;\r\n }\r\n doy = num4 + day;\r\n }\r\n return num * 146097 + num2 * 36524 + num3 * 1461 + year * 365 + doy;\r\n }\r\n\r\n /// <summary>\r\n /// Translates a string time to magic number\r\n /// </summary>\r\n /// <param name = \"dispValue\"> A string value</param>\r\n /// <param name = \"picStr\"> The picture to use</param>\r\n /// <returns> the magic number</returns>\r\n fromNativeTimeToMgTime(dispValue: Date): string {\r\n let mgNum: NUM_TYPE = new NUM_TYPE();\r\n let numVal: number = this.fromNativeTimeToMgTimeNumber(dispValue);\r\n mgNum.NUM_4_LONG(numVal);\r\n return mgNum.toXMLrecord();\r\n }\r\n\r\n fromNativeTimeToMgTimeNumber(dispValue: Date): number {\r\n let numVal: number = this.time_2_int(dispValue.getHours(), dispValue.getMinutes(), dispValue.getSeconds());\r\n return numVal;\r\n }\r\n\r\n /// <summary>\r\n /// Convert Alpha into a Time according to a given picture\r\n /// </summary>\r\n a_2_time(Ascii: string, pic: PIC, milliSeconds: boolean): number;\r\n a_2_time(Ascii: string, AsciiL: number, mask: string[], milliSeconds: boolean): number;\r\n a_2_time(Ascii: any, picOrAsciiL: any, milliSecondsOrMask: any, milliSeconds?: boolean): number {\r\n if (arguments.length === 3)\r\n return this.a_2_time_0(Ascii, picOrAsciiL, milliSecondsOrMask);\r\n\r\n return this.a_2_time_1(Ascii, picOrAsciiL, milliSecondsOrMask, milliSeconds);\r\n }\r\n\r\n /// <summary>\r\n /// Convert Alpha into a Time according to a given picture\r\n /// </summary>\r\n private a_2_time_0(Ascii: string, pic: PIC, milliSeconds: boolean): number {\r\n return this.a_2_time(Ascii, Ascii.length, NString.ToCharArray(pic.getMask()), milliSeconds);\r\n }\r\n\r\n /// <summary>\r\n /// Convert Alpha into a Time according to a given picture\r\n /// </summary>\r\n private a_2_time_1(Ascii: string, AsciiL: number, mask: string[], milliSeconds: boolean): number {\r\n let mgNum: NUM_TYPE = new NUM_TYPE();\r\n let I: number = 0;\r\n let len: number = mask.length; // Length of mask or string to scan\r\n\r\n // Initialize counters and flags\r\n if (len > AsciiL) {\r\n len = AsciiL;\r\n }\r\n let ampm: number = 0; // AM/PM indicator\r\n let hour: number = 0;\r\n let minute: number = 0;\r\n let second: number = 0;\r\n let millisecond: number = 0;\r\n\r\n while (I < len) {\r\n let maskLength: number;\r\n let maxMaskLen: number;\r\n\r\n // To get the maximum possible length of the constants in the mask\r\n switch (mask[I].charCodeAt(0)) {\r\n case (PICInterface.PIC_HH):\r\n case (PICInterface.PIC_MMT):\r\n case (PICInterface.PIC_SS):\r\n case (PICInterface.PIC_PM):\r\n maxMaskLen = 2;\r\n break;\r\n\r\n case (PICInterface.PIC_MS):\r\n maxMaskLen = 3;\r\n break;\r\n\r\n default:\r\n maxMaskLen = 1;\r\n break;\r\n }\r\n\r\n /* To get the minimum of maxMaskLen & number of characters remained in string\r\n because if the Ascii is shorter(has less characters)then create String only\r\n of that no. of characters (maskLength), not of maxMaskLength */\r\n maskLength = Math.min(maxMaskLen, len - I);\r\n\r\n switch (mask[I].charCodeAt(0)) {\r\n case (PICInterface.PIC_HH): {\r\n hour = mgNum.a_2_long(Ascii.substr(I, maskLength));\r\n }\r\n break;\r\n\r\n case (PICInterface.PIC_MMT): {\r\n minute = mgNum.a_2_long(Ascii.substr(I, maskLength));\r\n }\r\n break;\r\n\r\n case (PICInterface.PIC_SS): {\r\n second = mgNum.a_2_long(Ascii.substr(I, maskLength));\r\n }\r\n break;\r\n\r\n case (PICInterface.PIC_MS): {\r\n millisecond = mgNum.a_2_long(Ascii.substr(I, maskLength));\r\n }\r\n break;\r\n\r\n case (PICInterface.PIC_PM):\r\n ampm = 0;\r\n let c0: string = Ascii[I];\r\n let c1: string;\r\n c0 = c0.toUpperCase();\r\n if (I + 1 < len) {\r\n c1 = Ascii[I + 1];\r\n c1 = c1.toUpperCase();\r\n\r\n if (c1 === 'M') {\r\n if (c0 === 'A')\r\n ampm = -1;\r\n if (c0 === 'P')\r\n ampm = 1;\r\n }\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n I += maskLength;\r\n }\r\n\r\n // Check validity of minutes and seconds\r\n if (second > 59 || minute > 59)\r\n return (0);\r\n\r\n // Convert hour to PM if specified as AM\r\n if (ampm !== 0)\r\n if (ampm === -1)\r\n // AM\r\n {\r\n if (hour === 12)\r\n hour = 0;\r\n }\r\n else if (hour < 12)\r\n // PM\r\n hour += 12;\r\n if (milliSeconds)\r\n return this.time_2_int(hour, minute, second) * 1000 + millisecond;\r\n else\r\n return this.time_2_int(hour, minute, second);\r\n }\r\n\r\n time_2_int(hour: number, minute: number, second: number): number {\r\n return hour * 3600 + minute * 60 + second;\r\n }\r\n\r\n /// <summary>\r\n /// Convert \"0\"/\"1\" to false/true\r\n /// </summary>\r\n /// <param name = \"boolStr\"> \"0\"/\"1\"\r\n /// </param>\r\n /// <returns> true if \"1\" or false if others\r\n /// </returns>\r\n static toBoolean(boolStr: string): boolean {\r\n return boolStr !== null && boolStr === \"1\";\r\n }\r\n\r\n /// <summary>\r\n /// String to Date function\r\n /// </summary>\r\n a_2_date(str: string, Format: string, compIdx: number): number {\r\n return this.a_2_date_datemode(str, Format, compIdx);\r\n }\r\n\r\n a_2_date_pic(str: string, pic: PIC, mask: string, compIdx: number): number {\r\n if (str === null) {\r\n str = \"\";\r\n }\r\n return this.a_2_date_pic_datemode(NString.ToCharArray(str), str.length, pic, NString.ToCharArray(mask), compIdx);\r\n }\r\n\r\n to_a(outVal: string, out_len: number, date: number, Format: string, compIdx: number): string {\r\n return this.to_a_datemode(outVal, out_len, date, Format, false, compIdx);\r\n }\r\n\r\n /// <summary>\r\n /// Convert string -> date using a format string\r\n /// </summary>\r\n private a_2_date_datemode(str: string, Format: string, compIdx: number): number {\r\n let pIC: PIC = new PIC(Format, StorageAttribute.DATE, compIdx);\r\n if (str === null) {\r\n str = \"\";\r\n }\r\n return this.a_2_date_pic_datemode(NString.ToCharArray(str), str.length, pIC, NString.ToCharArray(pIC.getMask()), compIdx);\r\n }\r\n\r\n /// <summary>\r\n /// String to a datemode\r\n /// </summary>\r\n private to_a_datemode(outVal: string, out_len: number, date: number, Format: string, ignore_dt_fmt: boolean, compIdx: number): string {\r\n\r\n // Parse the picture\r\n let pic: PIC = new PIC(Format, StorageAttribute.DATE, compIdx);\r\n\r\n // Convert the date -> string\r\n if (outVal === null) {\r\n outVal = pic.getMask();\r\n }\r\n return this.to_a_pic_datemode(outVal, out_len, date, pic, true, ignore_dt_fmt, compIdx);\r\n }\r\n\r\n /// <summary>\r\n /// Decode digits from a date string\r\n /// </summary>\r\n private date_a_2_i_1(s: string, len: number, pos: number): number {\r\n\r\n // don't forget to include 'pos+=len' after the using of the function\r\n let mgNum: NUM_TYPE = new NUM_TYPE();\r\n let str: string;\r\n\r\n str = s.substr(pos, len);\r\n return mgNum.a_2_long(str);\r\n }\r\n\r\n private move_date_1(str: string, pos: number, moveby: number, len: number): string {\r\n str = StrUtil.memmove(str, pos + moveby, str, pos, len - pos);\r\n\r\n str = StrUtil.memset(str, pos, '0', moveby);\r\n return str;\r\n }\r\n\r\n time_2_a(Ascii: string, AsciiL: number, time: number, Format: string, compIdx: number, milliSeconds: boolean): string {\r\n\r\n if (StrUtil.rtrim(Format).length === 0) {\r\n Format = \"HH:MM:SS\";\r\n }\r\n let pic: PIC = new PIC(Format, StorageAttribute.TIME, compIdx);\r\n if (Ascii === null) {\r\n Ascii = pic.getMask();\r\n }\r\n return this.time_2_a_pic(Ascii, AsciiL, time, pic, false, milliSeconds);\r\n }\r\n\r\n /// <summary>\r\n /// Translates a string to magic logical\r\n /// </summary>\r\n /// <param name = \"dispValue\"> A string value\r\n /// </param>\r\n /// <param name = \"pic\"> The picture to use\r\n /// </param>\r\n /// <param name = \"rangeStr\"> The range\r\n /// </param>\r\n /// <returns> the logical value\r\n /// </returns>\r\n toLogical(dispValue: string, pic: PIC, rangeStr: string): string {\r\n dispValue = dispValue.trim();\r\n if (dispValue === null || dispValue.length === 0) {\r\n dispValue = \"False\";\r\n }\r\n return this.disp_2_logical(dispValue, pic.getMask(), rangeStr);\r\n }\r\n\r\n /// <summary>\r\n /// translate the displayed value to a magic logical value\r\n /// </summary>\r\n /// <param name = \"dispValue\">the displayed value </param>\r\n /// <param name = \"mask\">the mask of the displayed value </param>\r\n /// <param name = \"rangeStr\">the range string </param>\r\n private disp_2_logical(dispValue: string, mask: string, rangeStr: string): string {\r\n\r\n let strippedValue: StringBuilder = new StringBuilder(dispValue.length);\r\n\r\n rangeStr = this.win_rng_bool(rangeStr);\r\n rangeStr = StrUtil.makePrintableTokens(rangeStr, SEQ_2_HTML);\r\n let i: number = rangeStr.indexOf(',');\r\n let trueStr: string = rangeStr.substr(0, i);\r\n trueStr = StrUtil.makePrintableTokens(trueStr, HTML_2_STR);\r\n i = 0;\r\n\r\n for (i = 0; i < dispValue.length && i < mask.length; i++) {\r\n if (mask.charCodeAt(i) === PICInterface.PIC_X) {\r\n strippedValue.Append(dispValue.charAt(i));\r\n }\r\n }\r\n let val: string = strippedValue.ToString();\r\n if (trueStr.length < val.length) {\r\n val = val.substr(0, trueStr.length);\r\n }\r\n else {\r\n if (val.length < trueStr.length) {\r\n trueStr = trueStr.substr(0, val.length);\r\n }\r\n }\r\n return (val.toUpperCase() === trueStr.toUpperCase()) ? \"1\" : \"0\";\r\n }\r\n\r\n /// <summary>\r\n /// converting the displayed value of a string to internal\r\n /// representation must remove the masking characters from it\r\n /// </summary>\r\n private toAlpha(dispValue: string, pic: PIC): string {\r\n\r\n let picture: string = pic.getMask();\r\n let buffer: StringBuilder = new StringBuilder(pic.getMaskSize());\r\n let IsAlphaDBCS: boolean = UtilStrByteMode.isLocaleDefLangDBCS() && pic.isAttrAlpha();\r\n let currPicture: number;\r\n let i: number = currPicture = 0;\r\n\r\n for (currPicture = i = 0; i < dispValue.length && currPicture < picture.length; i++, currPicture++) {\r\n if (DisplayConvertor.isAlphaPositionalDirective(picture.charAt(currPicture))) {\r\n buffer.Append(dispValue.charAt(i));\r\n\r\n if (IsAlphaDBCS) {\r\n // a DBCS character in \"dispValue\" consumes two characters in \"picture\"\r\n let strDspValOneChar: string = dispValue.substr(i, 1);\r\n if (UtilStrByteMode.lenB(strDspValOneChar) === 2) {\r\n currPicture = currPicture + 1;\r\n }\r\n }\r\n }\r\n }\r\n return buffer.ToString();\r\n }\r\n\r\n /// <summary>is checked char Alpha Positional Directive</summary>\r\n static isAlphaPositionalDirective(toCheck: string): boolean {\r\n let ascii: number = toCheck.charCodeAt(0);\r\n return (ascii === PICInterface.PIC_X || ascii === PICInterface.PIC_U || ascii === PICInterface.PIC_L ||\r\n ascii === PICInterface.PIC_N || ascii === PICInterface.PIC_J || ascii === PICInterface.PIC_G || ascii === PICInterface.PIC_S || ascii === PICInterface.PIC_T);\r\n\r\n }\r\n\r\n /// <summary>\r\n /// Comparative newValue with possible Range in ContinuousRangeValues/discreteRangeValues\r\n /// </summary>\r\n /// <returns> newValue if it possible, old value owervise\r\n /// </returns>\r\n private fillAlphaByRange(ContinuousRangeValues: List<string>, discreteRangeValues: List<string>, newValue: string): string {\r\n\r\n let tmpBuffer: string = this.fillAlphaByDiscreteRangeValues(discreteRangeValues, newValue);\r\n if (tmpBuffer !== null) {\r\n return tmpBuffer;\r\n }\r\n else {\r\n tmpBuffer = this.fillAlphaByContinuousRangeValues(ContinuousRangeValues, newValue);\r\n if (tmpBuffer !== null) {\r\n return tmpBuffer;\r\n }\r\n else {\r\n if (discreteRangeValues !== null) {\r\n tmpBuffer = this.completeAlphaByRange(discreteRangeValues, newValue);\r\n if (tmpBuffer !== null) {\r\n return tmpBuffer;\r\n }\r\n }\r\n }\r\n }\r\n // unpossible to find it in the range return not changed oldvalue\r\n return newValue;\r\n }\r\n\r\n /// <summary>\r\n /// fill Alpha string by discrete range\r\n /// </summary>\r\n /// <param name = \"discreteRangeValues\">vector of discrete range values\r\n /// </param>\r\n /// <param name = \"newValue\">value, try found in the vector of discrete ranges\r\n /// </param>\r\n /// <returns> found value or null(not found)\r\n /// </returns>\r\n fillAlphaByDiscreteRangeValues(discreteRangeValues: List<string>, newValue: string): string {\r\n if (discreteRangeValues !== null) {\r\n for (let i: number = 0; i < discreteRangeValues.length; i = i + 1) {\r\n let discreteValue: string = discreteRangeValues.get_Item(i);\r\n let truncatedValue: string = discreteValue.substr(0, Math.min(newValue.length, discreteValue.length));\r\n if (newValue.toUpperCase() === truncatedValue.toUpperCase()) {\r\n return discreteValue;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /// <summary>\r\n /// fill Alpha string by continuous range\r\n /// </summary>\r\n /// <param name = \"ContinuousRangeValues\">vector of continuous range values\r\n /// </param>\r\n /// <param name = \"newValue\">value, try found in the vector of continuous ranges\r\n /// </param>\r\n /// <returns> found value or null(not found)\r\n /// </returns>\r\n fillAlphaByContinuousRangeValues(ContinuousRangeValues: List<string>, newValue: string): string {\r\n newValue = StrUtil.rtrim(newValue);\r\n\r\n\r\n if (ContinuousRangeValues !== null) {\r\n for (let i: number = 0; i < ContinuousRangeValues.length; i = i + 1) {\r\n let from: string = ContinuousRangeValues.get_Item(i);\r\n let to: string = ContinuousRangeValues.get_Item(i = i + 1);\r\n if (NString.CompareOrdinal(newValue, from) >= 0 && NString.CompareOrdinal(newValue, to) <= 0) {\r\n return newValue;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /// <summary>\r\n /// Try to complete the newValue using the Range\r\n /// first try to comlete the value for case meaning and after that for ignore case\r\n /// </summary>\r\n /// <param name = \"vector\">of ranges\r\n /// </param>\r\n /// <param name = \"checked\">value\r\n /// </param>\r\n /// <returns> value completed by range\r\n /// </returns>\r\n completeAlphaByRange(discreteRangeValues: List<string>, newValue: string): string {\r\n\r\n let maxCoincide: number[] = new Array<number>(2);\r\n for (let _ai: number = 0; _ai < maxCoincide.length; ++_ai)\r\n maxCoincide[_ai] = 0;\r\n\r\n let bestItem: string[] = new Array<string>(2);\r\n for (let _ai: number = 0; _ai < bestItem.length; ++_ai)\r\n bestItem[_ai] = null;\r\n\r\n let CHECK_CASE: number = 0;\r\n let IGNORE_CASE: number = 1;\r\n\r\n let caseLetters: number = CHECK_CASE;\r\n\r\n while (caseLetters === CHECK_CASE || caseLetters === IGNORE_CASE) {\r\n let lowerValue: string;\r\n if (caseLetters === CHECK_CASE) {\r\n lowerValue = newValue;\r\n }\r\n else {\r\n lowerValue = newValue.toLowerCase();\r\n }\r\n lowerValue = StrUtil.rtrim(lowerValue);\r\n for (let i: number = 0; i < discreteRangeValues.length; i = i + 1) {\r\n let wrongLetter: boolean = false;\r\n let currCoincide: number = 0;\r\n let rangeItem: string;\r\n if (caseLetters === CHECK_CASE) {\r\n rangeItem = discreteRangeValues.get_Item(i);\r\n }\r\n else {\r\n rangeItem = discreteRangeValues.get_Item(i).toLowerCase();\r\n }\r\n let lowLength: number = lowerValue.length;\r\n let rangeLength: number = rangeItem.length;\r\n if (lowLength < rangeLength) {\r\n for (let j: number = 0; j < lowLength; j = j + 1) {\r\n if (!(lowerValue.charAt(j) === rangeItem.charAt(j))) {\r\n wrongLetter = true;\r\n break;\r\n }\r\n currCoincide = currCoincide + 1;\r\n }\r\n }\r\n else {\r\n wrongLetter = true;\r\n }\r\n\r\n if (currCoincide > maxCoincide[caseLetters] && !wrongLetter) {\r\n bestItem[caseLetters] = discreteRangeValues.get_Item(i);\r\n maxCoincide[caseLetters] = currCoincide;\r\n }\r\n }\r\n caseLetters = caseLetters + 1;\r\n }\r\n\r\n\r\n if (bestItem[CHECK_CASE] !== null)\r\n return bestItem[CHECK_CASE];\r\n else {\r\n if (bestItem[IGNORE_CASE] !== null)\r\n return bestItem[IGNORE_CASE];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n setDateChar(dateChar: number): void {\r\n this.DATECHAR = dateChar;\r\n }\r\n\r\n getDateChar(): number {\r\n return this.DATECHAR;\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"value\"></param>\r\n /// <param name=\"storageAttribute\"></param>\r\n /// <returns></returns>\r\n static StringValueToMgValue(value: string, storageAttribute: StorageAttribute, filler: string, length: number): any {\r\n switch (storageAttribute) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE: {\r\n let newVal: string = value;\r\n newVal = NString.PadRight(newVal, length, filler);\r\n return newVal;\r\n }\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n return new NUM_TYPE(value);\r\n default:\r\n return value;\r\n }\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// Being used to send parameters to the 'time_break' method\r\n/// </summary>\r\nexport class TimeBreakParams {\r\n hour: number = 0;\r\n minute: number = 0;\r\n second: number = 0;\r\n\r\n constructor();\r\n constructor(hour_: number, minute_: number, second_: number);\r\n constructor(hour_?: number, minute_?: number, second_?: number) {\r\n if (arguments.length === 0) {\r\n this.constructor_0();\r\n return;\r\n }\r\n this.constructor_1(hour_, minute_, second_);\r\n }\r\n\r\n private constructor_0(): void {\r\n }\r\n\r\n private constructor_1(hour_: number, minute_: number, second_: number): void {\r\n this.hour = hour_;\r\n this.minute = minute_;\r\n this.second = second_;\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// Being used to send int by Ref\r\n/// </summary>\r\nclass IntRef {\r\n val: number = 0;\r\n\r\n constructor(val_: number) {\r\n this.val = val_;\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// Being used to send parameters to the 'date_i_2_nm' method\r\n/// </summary>\r\nclass DateNameParams {\r\n outVal: string[] = null;\r\n len: number = 0;\r\n outIdx: number = 0;\r\n\r\n constructor(out_: string[], outIdx_: number, len_: number) {\r\n this.outVal = out_;\r\n this.outIdx = outIdx_;\r\n this.len = len_;\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// Being used to send parameters to the 'date_break_datemode' method\r\n/// it's struct\r\n/// </summary>\r\nexport class DateBreakParams {\r\n day: number = 0;\r\n dow: number = 0;\r\n doy: number = 0;\r\n month: number = 0;\r\n year: number = 0;\r\n\r\n constructor();\r\n constructor(year_: number, month_: number, day_: number, doy_: number, dow_: number);\r\n constructor(year_?: number, month_?: number, day_?: number, doy_?: number, dow_?: number) {\r\n if (arguments.length === 0) {\r\n this.constructor_0();\r\n return;\r\n }\r\n this.constructor_1(year_, month_, day_, doy_, dow_);\r\n }\r\n\r\n private constructor_0(): void {\r\n }\r\n\r\n private constructor_1(year_: number, month_: number, day_: number, doy_: number, dow_: number): void {\r\n this.year = year_;\r\n this.month = month_;\r\n this.day = day_;\r\n this.doy = doy_;\r\n this.dow = dow_;\r\n }\r\n}\r\n","import { BlobType } from './BlobType';\r\nimport { NNumber, NString, StringBuilder } from '@magic-xpa/mscorelib';\r\nimport { StorageAttribute, StrUtil, UtilStrByteMode } from '@magic-xpa/utils';\r\n\r\nexport class VectorTypeBase\r\n{\r\n // NOTE: the BLOB_TABLE_STR was deliberately set to lower case (while the server uses upper case\r\n // this is a patch to distinguish between \"FLAT DATA\" built by the client (therefore are already unicode)\r\n // and between flat data accepted from the server (therefore are not unicode).\r\n // global variables\r\n static BLOB_TABLE_STR: string = \"mgbt\";\r\n static BLOB_TABLE_STR_LEN: number = 4;\r\n static VECTOR_STR: string = \"MGVEC\";\r\n static VECTOR_STR_LEN: number = 5;\r\n\r\n /// <summary>\r\n /// this method checks if contents of a blob indicate that it is a valid verctor i.e. if the blob is in\r\n /// vector's flatten format\r\n /// </summary>\r\n /// <param name = \"blob\">the string representation of contents of the blob</param>\r\n /// <returns> true if valid vector</returns>\r\n static validateBlobContents(blob: string): boolean {\r\n let valid: boolean = false;\r\n\r\n if (!NString.IsNullOrEmpty(blob)) {\r\n let start: number = BlobType.blobPrefixLength(blob);\r\n valid = (NString.Compare(blob, (VectorTypeBase.BLOB_TABLE_STR + VectorTypeBase.VECTOR_STR), true, start, 0, (VectorTypeBase.BLOB_TABLE_STR_LEN + VectorTypeBase.VECTOR_STR_LEN)) === 0);\r\n }\r\n return valid;\r\n }\r\n\r\n /// <summary>\r\n /// Trim cell strings in the vector if the cells are alpha or memo.\r\n /// Their length should be adjusted in the number of bytes, not the number of characters.\r\n /// (DBCS support)\r\n /// </summary>\r\n /// <param name = \"srcBlob\">a vector in a flattened format</param>\r\n /// <returns> String</returns>\r\n static adjustAlphaStringsInFlatData(srcBlob: string): string {\r\n if (VectorTypeBase.validateBlobContents(srcBlob)) {\r\n let destBuf: StringBuilder = new StringBuilder();\r\n\r\n // copy Blob prefix\r\n let pos: number = BlobType.blobPrefixLength(srcBlob);\r\n let strToken: string = srcBlob.substr(0, pos);\r\n destBuf.Append(strToken);\r\n\r\n let tokens: string[] = StrUtil.tokenize(srcBlob.substr(pos), \",\");\r\n let tokenIdx: number = 0;\r\n\r\n // copy the MGBTMGVEC\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx];\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // copy the version\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx];\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // copy the ColumnsCount_\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx];\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // check the cells type\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx];\r\n if (strToken.charAt(0) !== StorageAttribute.ALPHA && strToken.charAt(0) !== StorageAttribute.MEMO)\r\n return srcBlob;\r\n\r\n // copy the cells type\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // copy the cells size\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx];\r\n let len: number = NNumber.Parse(strToken);\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // copy the default value\r\n // note: the default value may contain the delimiter character as data\r\n strToken = UtilStrByteMode.leftB(srcBlob.substr(pos), len);\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n tokens = StrUtil.tokenize(srcBlob.substr(pos), \",\");\r\n tokenIdx = 0;\r\n\r\n // copy the cells null default flag\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx];\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // copy the cells null allowed flag\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx];\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // copy the column's total length\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx];\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // copy the vector size\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx];\r\n let vecSize: number = NNumber.Parse(strToken);\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // copy blobs_\r\n tokenIdx++;\r\n strToken = tokens[tokenIdx++];\r\n destBuf.Append(strToken + \",\");\r\n pos = pos + (strToken.length + 1);\r\n\r\n // copy each vector\r\n for (let i: number = 0; i < vecSize; i = i + 1) {\r\n // note: the default value may contain the delimiter character as data\r\n strToken = UtilStrByteMode.leftB(srcBlob.substr(pos), len);\r\n destBuf.Append(strToken);\r\n pos = pos + strToken.length;\r\n }\r\n\r\n // copy the rest\r\n strToken = srcBlob.substr(pos);\r\n destBuf.Append(strToken);\r\n\r\n let destBlob: string = destBuf.ToString();\r\n return destBlob;\r\n }\r\n else\r\n return srcBlob;\r\n }\r\n}\r\n","import {\r\n ApplicationException,\r\n Debug,\r\n Encoding,\r\n ISO_8859_1_Encoding,\r\n NNumber,\r\n NumberStyles,\r\n RefParam,\r\n StringBuilder\r\n} from \"@magic-xpa/mscorelib\";\r\nimport {\r\n Base64,\r\n StorageAttribute,\r\n StorageAttributeCheck,\r\n StrUtil,\r\n UtilStrByteMode,\r\n XmlParser\r\n} from \"@magic-xpa/utils\";\r\nimport {GuiEnvironment} from \"../../GuiEnvironment\";\r\nimport {VectorTypeBase} from \"./VectorTypeBase\";\r\n\r\nexport class RecordUtils {\r\n static byteStreamToString(stream: StringBuilder): string;\r\n static byteStreamToString(stream: string): string;\r\n static byteStreamToString(stream: any): string {\r\n if (arguments.length === 1 && (stream === null || stream instanceof StringBuilder)) {\r\n return RecordUtils.byteStreamToString_0(stream);\r\n }\r\n return RecordUtils.byteStreamToString_1(stream);\r\n }\r\n\r\n /// <summary>\r\n /// translate byte stream to String\r\n /// </summary>\r\n /// <param name = \"result\">of the translation</param>\r\n /// <param name = \"stream\">(in StringBuffer form) to translate from</param>\r\n private static byteStreamToString_0(stream: StringBuilder): string {\r\n let currStr: string;\r\n let currChar: string;\r\n let result: StringBuilder = new StringBuilder(Math.floor(stream.Length / 2));\r\n\r\n for (let indx: number = 0; indx < stream.Length; indx = indx + 2) {\r\n currStr = stream.get_Item(indx) + stream.get_Item(indx + 1);\r\n currChar = String.fromCharCode(NNumber.Parse(currStr, NumberStyles.HexNumber));\r\n result.Append(currChar);\r\n }\r\n return result.ToString();\r\n }\r\n\r\n /// <summary>\r\n /// translate byte stream to String\r\n /// </summary>\r\n private static byteStreamToString_1(stream: string): string {\r\n return RecordUtils.byteStreamToString(new StringBuilder(stream));\r\n }\r\n\r\n /// <summary>\r\n /// serialize an item (field/global param/...) to an XML format (applicable to be passed to the server).\r\n /// </summary>\r\n /// <param name = \"itemVal\">item's value</param>\r\n /// <param name = \"itemAttr\">item's attribute</param>\r\n /// <param name = \"cellAttr\">cell's attribute - relevant only if 'itemAttr' is vector</param>\r\n /// <param name = \"toBase64\">decide Base64 encoding is to be done</param>\r\n /// <returns>serialized buffer</returns>\r\n static serializeItemVal(itemVal: string, itemAttr: StorageAttribute, cellAttr: StorageAttribute, toBase64: boolean): string {\r\n Debug.Assert(itemVal != null);\r\n\r\n let significantNumSize: number = GuiEnvironment.Environment.GetSignificantNumSize() * 2;\r\n\r\n let valueSize: string;\r\n let j: number;\r\n let tmpBuf = new StringBuilder();\r\n let pos: number;\r\n let fldValLen: number ;\r\n\r\n // for alpha type add the length of the value as hex number of 4 digits\r\n switch (itemAttr) {\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n itemVal = !toBase64\r\n ? itemVal.substr(0, significantNumSize)\r\n : Base64.encode(this.byteStreamToString(itemVal.substr(0, significantNumSize)));\r\n break;\r\n\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n itemVal = StrUtil.rtrim(itemVal);\r\n pos = 0;\r\n fldValLen = itemVal.length;\r\n\r\n do {\r\n let nullChrPos: number = itemVal.indexOf(String.fromCharCode(0), pos);\r\n if (nullChrPos === -1) {\r\n valueSize = (fldValLen - pos).toString(16).toUpperCase();\r\n // add leading zeros (if needed)\r\n for (j = 0; j < 4 - valueSize.length; j++)\r\n tmpBuf.Append('0');\r\n tmpBuf.Append(valueSize);\r\n\r\n if (pos > 0)\r\n itemVal = itemVal.substr(pos, (fldValLen) - (pos));\r\n\r\n pos = fldValLen;\r\n }\r\n else {\r\n // If NULL chars exist in the middle of the value - create a spanned record\r\n // Turn on the high most bit in the length (to indicate a segment)\r\n valueSize = (nullChrPos - pos + 0x8000).toString (16).toUpperCase();\r\n tmpBuf.Append(valueSize);\r\n tmpBuf.Append(itemVal.substr(pos, (nullChrPos) - (pos)));\r\n\r\n // Count number of consecutive NULL chars, and add their count to XML\r\n for (j = 1; j < fldValLen - nullChrPos && itemVal.charCodeAt(nullChrPos + j) === 0; j++) {\r\n }\r\n // add leading zeros (if needed)\r\n valueSize = \"0000\" + (j.toString(16)).toUpperCase();\r\n tmpBuf.Append(valueSize.substr(valueSize.length - 4));\r\n\r\n // Append a hex dump of special chars\r\n for (pos = nullChrPos; j > 0; j--, pos++) {\r\n let tmpStr: string = \"0\" + itemVal.charCodeAt(nullChrPos).toString(16);\r\n tmpBuf.Append(tmpStr.substr(tmpStr.length - 2));\r\n }\r\n\r\n // If special chars were last, add the length of the last segment (zero)\r\n if (pos >= fldValLen) {\r\n tmpBuf.Append(\"0000\");\r\n itemVal = \"\";\r\n break;\r\n }\r\n }\r\n } while (pos < fldValLen);\r\n break;\r\n\r\n case StorageAttribute.BLOB:\r\n case StorageAttribute.BLOB_VECTOR:\r\n case StorageAttribute.DOTNET:\r\n pos = 0;\r\n\r\n fldValLen = itemVal.length;\r\n\r\n if (UtilStrByteMode.isLocaleDefLangDBCS() && itemAttr === StorageAttribute.BLOB_VECTOR) {\r\n if (cellAttr === StorageAttribute.ALPHA || cellAttr === StorageAttribute.MEMO) {\r\n itemVal = VectorTypeBase.adjustAlphaStringsInFlatData(itemVal);\r\n\r\n // The flat data will be divided by 0x3FFF characters.\r\n // Each segment will be size in 0x3FFF ~ 0x7FFF bytes.\r\n // The size depends on the number of DBCS characters, not fixed in 0x7FFF.\r\n do {\r\n if (itemVal.length < pos + 0x3FFF)\r\n // (0x8000 - 1) / 2 = 0x3FFF\r\n {\r\n if (pos > 0)\r\n itemVal = itemVal.substr(pos);\r\n\r\n valueSize = (UtilStrByteMode.lenB(itemVal).toString(16)).toUpperCase();\r\n // add leading zeros (if needed)\r\n for (j = 0; j < 4 - valueSize.length; j++)\r\n tmpBuf.Append('0');\r\n tmpBuf.Append(valueSize);\r\n\r\n // hex encoding\r\n itemVal = !toBase64\r\n ? StrUtil.stringToHexaDump(itemVal, 4)\r\n : Base64.encode(itemVal, true, GuiEnvironment.Environment.GetEncoding());\r\n\r\n pos = fldValLen;\r\n }\r\n else {\r\n let strSub: string = itemVal.substr(pos, 0x3FFF);\r\n // + 0x8000 ... to indicate not the last segment\r\n valueSize = ((UtilStrByteMode.lenB(strSub) + 0x8000).toString(16)).toUpperCase();\r\n tmpBuf.Append(valueSize);\r\n\r\n // hex or base64 encoding\r\n tmpBuf.Append(!toBase64\r\n ? StrUtil.stringToHexaDump(strSub, 4)\r\n : Base64.encode(strSub, true, GuiEnvironment.Environment.GetEncoding()));\r\n\r\n tmpBuf.Append(\"0000\");\r\n pos += 0x3FFF;\r\n }\r\n } while (pos < fldValLen) ;\r\n\r\n break;\r\n }\r\n }\r\n\r\n do {\r\n if (fldValLen < pos + 0x7FFF)\r\n // 0x8000 -1 = 0x7FFF\r\n {\r\n valueSize = ((fldValLen - pos).toString(16)).toUpperCase();\r\n // add leading zeros (if needed)\r\n for (j = 0; j < 4 - valueSize.length; j++)\r\n tmpBuf.Append('0');\r\n tmpBuf.Append(valueSize);\r\n\r\n if (pos > 0)\r\n itemVal = itemVal.substr(pos, (fldValLen) - (pos));\r\n\r\n // hex encoding\r\n itemVal = !toBase64\r\n ? StrUtil.stringToHexaDump(itemVal, 4)\r\n : Base64.encode(itemVal);\r\n\r\n pos = fldValLen;\r\n }\r\n else {\r\n // to indicate the full segment\r\n valueSize = \"FFFF\"; // (Integer.toHexString (0xFFFF)).toUpperCase()\r\n tmpBuf.Append(valueSize);\r\n\r\n // hex or base64 encoding\r\n if (!toBase64)\r\n tmpBuf.Append(StrUtil.stringToHexaDump(itemVal.substr(pos, 0x7FFF), 4));\r\n else\r\n tmpBuf.Append(Base64.encode(itemVal.substr(pos, 0x7FFF)));\r\n\r\n tmpBuf.Append(\"0000\");\r\n pos += 0x7FFF;\r\n }\r\n } while (pos < fldValLen);\r\n break;\r\n } // end of the type case block\r\n tmpBuf.Append(itemVal);\r\n return tmpBuf.ToString();\r\n }\r\n\r\n /// <summary> Deserializes an item's (field/global param/...) value </summary>\r\n /// <param name=\"itemVal\">item's value</param>\r\n /// <param name=\"itemAttr\">item's attribute</param>\r\n /// <param name=\"itemLen\">item's length</param>\r\n /// <param name=\"useHex\">indicates whether the itemVal is in Hex or Base64</param>\r\n /// <param name=\"cellAttr\">cell's attribute - relevant only if 'itemAttr' is vector</param>\r\n /// <param name=\"parsedLen\">out parameter. Returns the length of itemVal parsed</param>\r\n /// <returns></returns>\r\n static deSerializeItemVal(itemVal: string, itemAttr: StorageAttribute, itemLen: number, useHex: boolean, cellAttr: StorageAttribute, parsedLen: RefParam<number>): string {\r\n let val: string = null;\r\n let idx: number = 0;\r\n let len: number, endIdx: number;\r\n let suffixBuf: StringBuilder = null;\r\n let tmp: string = null;\r\n\r\n if (itemAttr === StorageAttribute.ALPHA\r\n || itemAttr === StorageAttribute.UNICODE\r\n || itemAttr === StorageAttribute.BLOB\r\n || itemAttr === StorageAttribute.BLOB_VECTOR\r\n || itemAttr === StorageAttribute.DOTNET\r\n ) {\r\n // first 4 characters are the length of the string (hex number)\r\n endIdx = idx + 4;\r\n tmp = itemVal.substr(idx, (endIdx) - (idx));\r\n len = NNumber.Parse(tmp, NumberStyles.HexNumber);\r\n idx = endIdx;\r\n }\r\n else if (itemAttr === StorageAttribute.BOOLEAN)\r\n len = 1;\r\n else {\r\n let significantNumSize: number = GuiEnvironment.Environment.GetSignificantNumSize();\r\n if (useHex)\r\n len = significantNumSize * 2;\r\n else\r\n // if working in base64\r\n len = (Math.floor((significantNumSize + 2) / 3) * 4);\r\n }\r\n // Oops, did we bumped into a spanned record (We identify it when the high-most bit is on)?\r\n if ((len & 0x8000) > 0) {\r\n suffixBuf = new StringBuilder();\r\n len = (len & 0x7FFF);\r\n\r\n if (itemAttr === StorageAttribute.BLOB || itemAttr === StorageAttribute.BLOB_VECTOR\r\n || itemAttr === StorageAttribute.DOTNET)\r\n if (useHex)\r\n len *= 2;\r\n else\r\n len = (Math.floor((len + 2) / 3) * 4);\r\n\r\n parsedLen.value = this.getSpannedField(itemVal, len, idx, itemAttr, suffixBuf, useHex);\r\n val = suffixBuf.ToString();\r\n endIdx = idx + parsedLen.value;\r\n }\r\n else {\r\n if (itemAttr === StorageAttribute.BLOB\r\n || itemAttr === StorageAttribute.BLOB_VECTOR\r\n || itemAttr === StorageAttribute.DOTNET\r\n )\r\n if (useHex)\r\n len *= 2;\r\n else\r\n len = (Math.floor((len + 2) / 3) * 4);\r\n\r\n endIdx = idx + len;\r\n if (endIdx > itemVal.length)\r\n throw new ApplicationException(\"in Record.fillFieldsData() data string too short:\\n\" + itemVal);\r\n\r\n if (UtilStrByteMode.isLocaleDefLangDBCS() && itemAttr === StorageAttribute.BLOB_VECTOR)\r\n val = this.getString(itemVal.substr(idx, (endIdx) - (idx)), itemAttr, useHex, (cellAttr === StorageAttribute.ALPHA));\r\n else\r\n val = this.getString(itemVal.substr(idx, (endIdx) - (idx)), itemAttr, useHex);\r\n }\r\n\r\n idx = endIdx;\r\n\r\n if (itemAttr === StorageAttribute.ALPHA || itemAttr === StorageAttribute.UNICODE) {\r\n len = itemLen;\r\n val = StrUtil.padStr(val, len);\r\n\r\n if (itemAttr === StorageAttribute.ALPHA && UtilStrByteMode.isLocaleDefLangDBCS())\r\n val = UtilStrByteMode.leftB(val, len);\r\n }\r\n\r\n parsedLen.value = endIdx;\r\n return val;\r\n }\r\n static getString(str: string, type: StorageAttribute): string;\r\n static getString(str: string, type: StorageAttribute, useHex: boolean): string;\r\n static getString(str: string, type: StorageAttribute, useHex: boolean, useEnvCharset: boolean): string;\r\n static getString(str: string, type: StorageAttribute, useHex?: boolean, useEnvCharset?: boolean): string {\r\n if (arguments.length === 3)\r\n return RecordUtils.getString_0(str, type, useHex);\r\n\r\n if(arguments.length === 2)\r\n return RecordUtils.getString_2(str, type);\r\n\r\n return RecordUtils.getString_1(str, type, useHex, useEnvCharset);\r\n }\r\n\r\n /// <returns> right string in confidence with the type</returns>\r\n private static getString_0(str: string, type: StorageAttribute, useHex: boolean): string {\r\n return RecordUtils.getString(str, type, useHex, false);\r\n }\r\n\r\n /// <returns> right string in confidence with the type</returns>\r\n private static getString_1(str: string, type: StorageAttribute, useHex: boolean, useEnvCharset: boolean): string {\r\n let result: string;\r\n if (useHex) {\r\n if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR\r\n || type === StorageAttribute.DOTNET)\r\n result = RecordUtils.byteStreamToString(str);\r\n else\r\n result = str;\r\n }\r\n else {\r\n if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR\r\n || type === StorageAttribute.DOTNET)\r\n result = Base64.decode(str, useEnvCharset ? GuiEnvironment.Environment.GetEncoding() : null);\r\n else\r\n result = Base64.decodeToHex(str);\r\n }\r\n return result;\r\n }\r\n\r\n static getSpannedField(fldsVal: string, firstSegLen: number, idx: number, type: StorageAttribute, result: StringBuilder, useHex: boolean): number;\r\n static getSpannedField(fldsVal: Uint8Array, firstSegLen: number, idx: number, type: StorageAttribute, result: StringBuilder, useHex: boolean, noOfPackets: number): number;\r\n static getSpannedField(fldsVal: any, firstSegLen: number, idx: number, type: StorageAttribute, result: StringBuilder, useHex: boolean, noOfPackets?: number): number {\r\n if (arguments.length === 6)\r\n return RecordUtils.getSpannedField_0(fldsVal, firstSegLen, idx, type, result, useHex);\r\n\r\n return RecordUtils.getSpannedField_1(fldsVal, firstSegLen, idx, type, result, useHex, noOfPackets);\r\n }\r\n\r\n /// <summary>\r\n /// Translate XML -> field value for a spanned ALPHA field, and return the actual\r\n /// field's length. A spanned field may be accepted from the server when an\r\n /// ALPHA includes special chars such as NULL which cannot be escaped using a '\\' (like,\r\n /// for example, '\\\"').\r\n /// </summary>\r\n /// <param name = \"fldsVal\">string for parsing</param>\r\n /// <param name = \"firstSegLen\">length (in chars) of first segment.</param>\r\n /// <param name = \"idx\">index in string, from which the first segments data starts.</param>\r\n /// <param name = \"type\">of variable is looking for</param>\r\n /// <param name = \"result\">the result string, which will contain the parsed field content.</param>\r\n private static getSpannedField_0(fldsVal: string, firstSegLen: number, idx: number, type: StorageAttribute, result: StringBuilder, useHex: boolean): number {\r\n let endIdx: number = idx + firstSegLen;\r\n let len: number;\r\n let begin: number = idx;\r\n let asciiCode: string;\r\n let tmp: string;\r\n let suffixBuf: StringBuilder = null;\r\n let parsedLen: number;\r\n\r\n if (endIdx > fldsVal.length) {\r\n throw new ApplicationException(\"in Record.getSpannedField() data string too short:\\n\" + fldsVal);\r\n }\r\n\r\n // append first segment\r\n result.Remove(0, result.Length);\r\n result.Append(RecordUtils.getString(fldsVal.substr(idx, endIdx - idx), type, useHex));\r\n\r\n idx = idx + firstSegLen;\r\n\r\n // next 4 characters are the length of the string (hex number) of special bytes.\r\n endIdx = idx + 4;\r\n tmp = fldsVal.substr(idx, endIdx - idx);\r\n len = NNumber.Parse(tmp, NumberStyles.HexNumber);\r\n idx = endIdx;\r\n\r\n // if working in hex\r\n if (useHex)\r\n endIdx = idx + len * 2;\r\n else\r\n endIdx = idx + Math.floor((len + 2) / 3 ) * 4;\r\n\r\n if (endIdx > fldsVal.length)\r\n throw new ApplicationException(\"in Record.getSpannedField() data string too short:\\n\" + fldsVal);\r\n\r\n // append special chars, one by one\r\n while (idx < endIdx) {\r\n tmp = fldsVal.substr(idx, 2);\r\n asciiCode = String.fromCharCode(NNumber.Parse(tmp, NumberStyles.HexNumber));\r\n result.Append(asciiCode);\r\n idx = idx + 2;\r\n }\r\n\r\n // next 4 chars are the length of next segment\r\n endIdx = idx + 4;\r\n tmp = fldsVal.substr(idx, endIdx - idx);\r\n len = NNumber.Parse(tmp, NumberStyles.HexNumber);\r\n idx = endIdx;\r\n\r\n if ((len & 0x8000) > 0) {\r\n // Oops, next segment may also be spanned\r\n suffixBuf = new StringBuilder();\r\n len = (len & 0x7FFF);\r\n\r\n if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR)\r\n if (useHex)\r\n len = len * 2;\r\n // working in base64\r\n else\r\n len = Math.floor((len + 2) / 3) * 4;\r\n\r\n parsedLen = RecordUtils.getSpannedField(fldsVal, len, idx, type, suffixBuf, useHex);\r\n // after using recursive function teh suffixBuf is in the right transformed form\r\n result.Append(suffixBuf.ToString());\r\n\r\n idx = idx + parsedLen;\r\n }\r\n else {\r\n if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR)\r\n if (useHex)\r\n len = len * 2;\r\n else\r\n len = Math.floor((len + 2) / 3) * 4;\r\n\r\n // next segment isn't spanned. It must be the last one.\r\n endIdx = idx + len;\r\n if (endIdx > fldsVal.length)\r\n throw new ApplicationException(\"in Record.fillFieldsData() data string too short:\\n\" + fldsVal);\r\n\r\n result.Append(RecordUtils.getString(fldsVal.substr(idx, endIdx - idx), type, useHex));\r\n idx = endIdx;\r\n }\r\n\r\n return idx - begin;\r\n }\r\n\r\n /// <summary>\r\n /// Translate value of the spanned field to actual value. Field value will be in the format of length and data\r\n /// [ (Length | data) ((Length | data)).....]\r\n /// This function will read length and data of each packet and return actual value.\r\n /// </summary>\r\n /// <param name=\"fldsVal\"></param>\r\n /// <param name=\"firstSegLen\"></param>\r\n /// <param name=\"idx\"></param>\r\n /// <param name=\"type\"></param>\r\n /// <param name=\"result\"></param>\r\n /// <param name=\"useHex\"></param>\r\n /// <param name=\"noOfPackets\"> Total number of packets sent from the server</param>\r\n /// <returns></returns>\r\n private static getSpannedField_1(fldsVal: Uint8Array, firstSegLen: number, idx: number, type: StorageAttribute, result: StringBuilder, useHex: boolean, noOfPackets: number): number {\r\n let endIdx: number = idx + firstSegLen;\r\n let len: number;\r\n let begin: number = idx;\r\n let tmp: string;\r\n let suffixBuf: StringBuilder = null;\r\n let parsedLen: number;\r\n let tmpEnc: Encoding;\r\n if (UtilStrByteMode.isLocaleDefLangDBCS())\r\n tmpEnc = ISO_8859_1_Encoding.ISO_8859_1;\r\n else\r\n tmpEnc = GuiEnvironment.Environment.GetEncoding();\r\n\r\n if (endIdx > fldsVal.length)\r\n throw new ApplicationException(\"in Record.getSpannedField() data string too short:\\n\" + fldsVal);\r\n\r\n // append first segment\r\n result.Remove(0, result.Length);\r\n result.Append(tmpEnc.GetString(fldsVal, idx, firstSegLen));\r\n noOfPackets = noOfPackets - 1;\r\n\r\n if (noOfPackets <= 0)\r\n return 0;\r\n\r\n idx = idx + firstSegLen;\r\n\r\n // next 4 characters are the length of the string (hex number) of special bytes.\r\n endIdx = idx + 4;\r\n tmp = tmpEnc.GetString(fldsVal, idx, 4);\r\n len = NNumber.Parse(tmp, NumberStyles.HexNumber);\r\n idx = endIdx;\r\n\r\n if (endIdx > fldsVal.length)\r\n throw new ApplicationException(\"in Record.getSpannedField() data string too short:\\n\" + fldsVal);\r\n\r\n // next 4 chars are the length of next segment\r\n endIdx = idx + 4;\r\n tmp = tmpEnc.GetString(fldsVal, idx, 4);\r\n len = NNumber.Parse(tmp, NumberStyles.HexNumber);\r\n idx = endIdx;\r\n\r\n if ((len & 0x8000) > 0) {\r\n // Oops, next segment may also be spanned\r\n suffixBuf = new StringBuilder();\r\n\r\n parsedLen = RecordUtils.getSpannedField(fldsVal, len, idx, type, suffixBuf, useHex, noOfPackets);\r\n // after using recursive function teh suffixBuf is in the right transformed form\r\n result.Append(suffixBuf.ToString());\r\n idx = idx + parsedLen;\r\n }\r\n else {\r\n // next segment isn't spanned. It must be the last one.\r\n endIdx = idx + len;\r\n if (endIdx > fldsVal.length)\r\n throw new ApplicationException(\"in Record.fillFieldsData() data string too short:\\n\" + fldsVal);\r\n\r\n result.Append(tmpEnc.GetString(fldsVal, idx, len));\r\n idx = endIdx;\r\n }\r\n\r\n return idx - begin;\r\n }\r\n\r\n /// <summary>\r\n /// serialize an item (field/global param/...) to an XML format (applicable to be passed to the server).\r\n /// </summary>\r\n /// <param name = \"val\">item's value</param>\r\n /// <param name = \"itemAttr\">item's attribute</param>\r\n /// <param name = \"cellAttr\">cell's attribute - relevant only if 'itemAttr' is vector</param>\r\n /// <param name = \"ToBase64\">>decide Base64 encoding is to be done</param>\r\n /// <returns>serialized XML format</returns>\r\n static itemValToXML(itemVal: string, itemAttr: StorageAttribute, cellAttr: StorageAttribute, ToBase64: boolean): string {\r\n let tmpBuf: string = RecordUtils.serializeItemVal(itemVal, itemAttr, cellAttr, ToBase64);\r\n return XmlParser.escape(tmpBuf).toString();\r\n }\r\n\r\n /// <returns> get the actual string according to 'type'</returns>\r\n static getString_2(str: string, type: StorageAttribute): string {\r\n let useHex: boolean = GuiEnvironment.Environment.GetDebugLevel() > 1 || type === StorageAttribute.ALPHA\r\n || type === StorageAttribute.UNICODE || StorageAttributeCheck.isTypeLogical(type);\r\n\r\n // first 4 characters are the length of the string (hex number)\r\n let tmp: string;\r\n if (type === StorageAttribute.ALPHA || type === StorageAttribute.UNICODE ||\r\n type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR) {\r\n tmp = str.substr(4);\r\n }\r\n else\r\n tmp = str;\r\n\r\n return RecordUtils.getString(tmp, type, useHex);\r\n }\r\n\r\n}\r\n","import {\r\n ApplicationException,\r\n Encoding,\r\n ISO_8859_1_Encoding,\r\n List,\r\n NNumber,\r\n NString,\r\n StringBuilder\r\n} from '@magic-xpa/mscorelib';\r\nimport { FieldDef } from './FieldDef';\r\nimport { BlobType } from './BlobType';\r\nimport { StorageAttribute, StorageAttributeCheck, StrUtil, UtilStrByteMode } from '@magic-xpa/utils';\r\nimport { DisplayConvertor } from '../gui/DisplayConvertor';\r\nimport { RecordUtils } from './RecordUtils';\r\nimport { GuiConstants } from '../../GuiConstants';\r\nimport { GuiEnvironment } from '../../GuiEnvironment';\r\nimport { VectorTypeBase } from './VectorTypeBase';\r\n\r\n\r\n/// <summary>\r\n/// represents the magic vector type\r\n/// </summary>\r\nexport class VectorType extends VectorTypeBase {\r\n\r\n static VERSION: number = 5; // version no 5 includes the content field\r\n static EMPTY_BLOB_PREFIX_LEN: number = 7;\r\n\r\n // FOR EXPLANATIONS REGARDING THIS NUMBER PLEAS SEE DOCUMENTATION INSIDE init METHOD\r\n static BLOB_TYPE_STRUCT_SIZE: number = 28;\r\n\r\n private _cells: List<CellElement> = null; // a vector containing CellElements\r\n private _encoding: Encoding = null; // to be used only with alpha or memo\r\n private _allowNull: boolean = false;\r\n private _cellContentType: string = null;\r\n private _cellSize: number = 0;\r\n private _cellsAttr: StorageAttribute = null; // all cells in the vector must be of the same type\r\n private _cellsDefaultVal: string = null; // all cells in the magic vector has the same default value\r\n private _cellsIsNullDefault: boolean = false; // null default definition for all cells in the magic vector\r\n\r\n // data buffers that we change Dynamically to facilitate\r\n // the creation of a string representation of the vector\r\n private _dataBuf: StringBuilder = null;\r\n private _initialized: boolean = false; // marks whether the vector was initialized if it was not that it is an invalid vector\r\n private _nullBuf: StringBuilder = null;\r\n private _originalflatData: string = null;\r\n\r\n constructor(cellsType: StorageAttribute, contentType: string, defualt: string, isDefNull: boolean, nullAlowed: boolean, length: number);\r\n constructor(blobString: string);\r\n constructor(fld: FieldDef);\r\n constructor(cellsTypeOrBlobStringOrFld: any, contentType?: string, defualt?: string, isDefNull?: boolean, nullAlowed?: boolean, length?: number) {\r\n super();\r\n if (arguments.length === 6)\r\n this.constructor_0(cellsTypeOrBlobStringOrFld, contentType, defualt, isDefNull, nullAlowed, length);\r\n\r\n else if (arguments.length === 1 && (cellsTypeOrBlobStringOrFld === null || cellsTypeOrBlobStringOrFld.constructor === String))\r\n this.constructor_1(cellsTypeOrBlobStringOrFld);\r\n\r\n else\r\n this.constructor_2(cellsTypeOrBlobStringOrFld);\r\n }\r\n\r\n /// <summary>\r\n /// construct the object but does not fill it with data in order to initialize the Vector we must invoke on\r\n /// it the its init method a VectorType which was not initialized is an unvalid vector.\r\n /// </summary>\r\n private constructor_0(cellsType: StorageAttribute, contentType: string, defualt: string, isDefNull: boolean, nullAlowed: boolean, length: number): void {\r\n this._cells = new List<CellElement>();\r\n this._cellsAttr = cellsType;\r\n this._cellContentType = contentType;\r\n this._cellsDefaultVal = defualt;\r\n this._cellsIsNullDefault = isDefNull;\r\n this._cellSize = ((this._cellsAttr === StorageAttribute.UNICODE) ? (length * 2) : length);\r\n this._initialized = true;\r\n this._allowNull = nullAlowed;\r\n this._nullBuf = new StringBuilder();\r\n this._dataBuf = new StringBuilder();\r\n this._originalflatData = this.toString();\r\n this._encoding = GuiEnvironment.Environment.GetEncoding();\r\n }\r\n\r\n /// <summary>\r\n /// construct the object but does not fill it with data in order to initialize the Vector we must invoke on\r\n /// it the its init method a VectorType which was not initialized is an invalid vector.\r\n /// </summary>\r\n /// <param name = \"blobString\">a string representation of the blob's data bytes</param>\r\n private constructor_1(blobString: string): void {\r\n this._cells = new List<CellElement>();\r\n this._initialized = false;\r\n this._originalflatData = blobString;\r\n this._encoding = GuiEnvironment.Environment.GetEncoding();\r\n }\r\n\r\n /// <summary>\r\n /// construct the object with a field\r\n /// </summary>\r\n /// <param name = \"fld\"></param>\r\n /// <param name = \"chars\"></param>\r\n private constructor_2(fld: FieldDef): void {\r\n this._cells = new List<CellElement>();\r\n this._cellsAttr = fld.getCellsType();\r\n this._cellContentType = fld.getVecCellsContentType();\r\n this._cellsDefaultVal = fld.getCellDefualtValue();\r\n this._cellsIsNullDefault = fld.isNullDefault();\r\n this._cellSize = <number>((this._cellsAttr === StorageAttribute.UNICODE) ? (fld.getVecCellsSize() * 2) : fld.getVecCellsSize());\r\n this._initialized = true;\r\n this._allowNull = fld.NullAllowed;\r\n this._nullBuf = new StringBuilder();\r\n this._dataBuf = new StringBuilder();\r\n this._originalflatData = this.toString();\r\n this._encoding = GuiEnvironment.Environment.GetEncoding();\r\n }\r\n\r\n /// <summary>\r\n /// builds a VectorType from its flattened blob representation\r\n /// </summary>\r\n /// <param name = \"blobString\">a string representation of the blob's data bytes</param>\r\n /// <returns> false is the given blob is not a vector (the flatten format is wrong)</returns>\r\n private init(): void {\r\n let tokens: string[] = null;\r\n let tokenIdx: number = 0;\r\n let currentToken: string = null; // the current token we are paring\r\n let isFlatDataTranslated: boolean = this.isUnicode(this._originalflatData);\r\n let isDbcsAlpha: boolean = false; // JPN: DBCS support\r\n\r\n // pos is position in the originalflatData string\r\n let pos: number = BlobType.blobPrefixLength(this._originalflatData);\r\n // blob\r\n tokens = StrUtil.tokenize(this._originalflatData.substr(pos), \",\");\r\n let vecSize: number = 0;\r\n\r\n if (!this._initialized) {\r\n if (VectorType.validateBlobContents(this._originalflatData)) {\r\n let blobPrefix: string = BlobType.getPrefix(this._originalflatData);\r\n this._cellContentType = BlobType.getContentType(blobPrefix);\r\n\r\n // skip the the headers of the table and the vector and the first ',';\r\n pos = <number>(<number>pos + 4 + 5 + 1);\r\n\r\n // skip the version\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n pos = pos + (currentToken.length + 1);\r\n\r\n // skip the ColumnsCount_ in vectors always contain value of 1\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n pos = pos + (currentToken.length + 1);\r\n\r\n // parse the cell attribute in vector there is only one attribute fo the entire vector\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n this._cellsAttr = <StorageAttribute>currentToken.charAt(0);\r\n pos = pos + 2;\r\n\r\n // parse the ColumnsLen_ that contains the number of cells in the vector\r\n // since there is only one column we increase pos by currentToken.length()\r\n // this number is same as the ColumnsTotalLen_ for vectors\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n this._cellSize = <number>NNumber.Parse(currentToken);\r\n pos = pos + (currentToken.length + 1);\r\n\r\n // parse the cell default value is it is numeric it is sent as NUM_TYPE\r\n // since the default value may contain as value charcters as the delimeter\r\n // we can not use the StringTokenizer.\r\n if (this._cellsAttr === StorageAttribute.NUMERIC || this._cellsAttr === StorageAttribute.DATE || this._cellsAttr === StorageAttribute.TIME)\r\n this._cellsDefaultVal = StrUtil.stringToHexaDump(this._originalflatData.substr(pos, <number>this._cellSize), 2);\r\n else if (this._cellsAttr === StorageAttribute.ALPHA || this._cellsAttr === StorageAttribute.MEMO) {\r\n // QCR 429445 since the vector is encoded to base64/hex when it is recived from the server\r\n // we must use the correct char-set when reciving vector of alpha or memo from the server\r\n // in vectors we must concider the char set since when we got it from the server it was encoded\r\n if (UtilStrByteMode.isLocaleDefLangDBCS()) {\r\n isDbcsAlpha = true;\r\n isFlatDataTranslated = true;\r\n this._cellsDefaultVal = UtilStrByteMode.leftB(this._originalflatData.substr(pos), <number>this._cellSize);\r\n }\r\n else\r\n this._cellsDefaultVal = this._originalflatData.substr(pos, <number>this._cellSize);\r\n if (this._encoding !== null && !isFlatDataTranslated) {\r\n try {\r\n let ba: Uint8Array = ISO_8859_1_Encoding.ISO_8859_1.GetBytes(this._cellsDefaultVal);\r\n this._cellsDefaultVal = this._encoding.GetString(ba, 0, ba.length);\r\n }\r\n catch (Exception) {\r\n }\r\n }\r\n }\r\n else if (this._cellsAttr === StorageAttribute.UNICODE) {\r\n this._cellsDefaultVal = this._originalflatData.substr(pos, <number>this._cellSize);\r\n\r\n try {\r\n let ba: Uint8Array = ISO_8859_1_Encoding.ISO_8859_1.GetBytes(this._cellsDefaultVal);\r\n this._cellsDefaultVal = Encoding.Unicode.GetString(ba, 0, ba.length);\r\n }\r\n catch (Exception) {\r\n }\r\n }\r\n else\r\n this._cellsDefaultVal = this._originalflatData.substr(pos, <number>this._cellSize);\r\n if (isDbcsAlpha)\r\n pos = pos + this._cellsDefaultVal.length + 1;\r\n else\r\n pos = <number>(<number>pos + this._cellSize + 1); // sikp the ending ','\r\n\r\n // inrorder to continue using the tokenizer for the rest of the headers parsing\r\n // reinit it\r\n tokens = StrUtil.tokenize(this._originalflatData.substr(pos), \",\");\r\n tokenIdx = 0;\r\n\r\n // parse the cells null default flag\r\n currentToken = tokens[tokenIdx];\r\n this._cellsIsNullDefault = DisplayConvertor.toBoolean(currentToken);\r\n pos = pos + (currentToken.length + 1);\r\n\r\n // parse the cells null allowed flag\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n this._allowNull = DisplayConvertor.toBoolean(currentToken);\r\n pos = pos + (currentToken.length + 1);\r\n\r\n // skip the parsing of ColumnsTotalLen_\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n pos = pos + (currentToken.length + 1);\r\n\r\n // parse the size of the vector ( RecordsCount_)\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n vecSize = <number>NNumber.Parse(currentToken);\r\n pos = pos + (currentToken.length + 1);\r\n\r\n // the blobs_ will always contain value of 1 sine we have in vectors only one colmn\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n pos = pos + (currentToken.length + 1);\r\n\r\n // blobs offset table in the vector case will alway contain only one value equals to 0\r\n // since there is only one colms in the vector\r\n if (this._cellsAttr === StorageAttribute.BLOB || this._cellsAttr === StorageAttribute.BLOB_VECTOR) {\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n pos = pos + (currentToken.length + 1);\r\n }\r\n\r\n // parse the data array\r\n let data: string;\r\n if (isDbcsAlpha) {\r\n data = UtilStrByteMode.leftB(this._originalflatData.substr(pos), <number>(vecSize * this._cellSize));\r\n pos = pos + data.length + 1;\r\n }\r\n else {\r\n data = this._originalflatData.substr(pos, <number>(vecSize * this._cellSize));\r\n pos = <number>(<number>pos + vecSize * this._cellSize + 1);\r\n }\r\n\r\n // allocate the dataBuf\r\n this._dataBuf = new StringBuilder(data.length);\r\n\r\n if (this._cellsAttr !== StorageAttribute.ALPHA && this._cellsAttr !== StorageAttribute.MEMO && this._cellsAttr !== StorageAttribute.UNICODE)\r\n this._dataBuf.Append(data);\r\n\r\n // parse the null buf\r\n let nullBuf: string = this._originalflatData.substr(pos, <number>vecSize);\r\n pos = <number>(<number>pos + vecSize + 1);\r\n\r\n // save the nullBuf\r\n this._nullBuf = new StringBuilder(nullBuf);\r\n\r\n // check the type of the cells\r\n if (this._cellsAttr !== StorageAttribute.BLOB && this._cellsAttr !== StorageAttribute.BLOB_VECTOR) {\r\n for (let i: number = 0; i < vecSize; i++) {\r\n let isNull: boolean = nullBuf.charAt(i) > '\\0';\r\n // numeric type are sent as NUM_TYPE so we translate them to hex\r\n if (this._cellsAttr === StorageAttribute.NUMERIC || this._cellsAttr === StorageAttribute.DATE || this._cellsAttr === StorageAttribute.TIME)\r\n this._cells.push(new CellElement(StrUtil.stringToHexaDump(data.substr(<number>(<number>i * this._cellSize), <number>this._cellSize), 2), isNull));\r\n else if (this._cellsAttr === StorageAttribute.ALPHA || this._cellsAttr === StorageAttribute.MEMO) {\r\n // QCR 429445 since the vector is encoded to base64/hex when it is recived from the\r\n // server we must use the correct char-set when reciving vector of alpha or memo from the server\r\n let cellData: string;\r\n if (isDbcsAlpha)\r\n cellData = UtilStrByteMode.midB(data, <number>(<number>i * this._cellSize), <number>this._cellSize);\r\n else\r\n cellData = data.substr(<number>(<number>i * this._cellSize), <number>this._cellSize);\r\n\r\n if (this._encoding !== null && !isFlatDataTranslated) {\r\n try {\r\n let ba: Uint8Array = ISO_8859_1_Encoding.ISO_8859_1.GetBytes(cellData);\r\n cellData = this._encoding.GetString(ba, 0, ba.length);\r\n }\r\n catch (SystemException) {\r\n }\r\n }\r\n this._dataBuf.Append(cellData);\r\n this._cells.push(new CellElement(cellData, isNull));\r\n }\r\n else if (this._cellsAttr === StorageAttribute.UNICODE) {\r\n let cellData: string = data.substr(<number>(<number>i * this._cellSize), <number>this._cellSize);\r\n try {\r\n let ba: Uint8Array = ISO_8859_1_Encoding.ISO_8859_1.GetBytes(cellData);\r\n cellData = Encoding.Unicode.GetString(ba, 0, ba.length);\r\n }\r\n catch (SystemException) {\r\n }\r\n this._dataBuf.Append(cellData);\r\n this._cells.push(new CellElement(cellData, isNull));\r\n }\r\n else\r\n this._cells.push(new CellElement(data.substr(<number>(<number>i * this._cellSize), <number>this._cellSize), isNull));\r\n }\r\n }\r\n else {\r\n // in case of vectors orf vectors or vectors of blobs we need to treat them differentlly\r\n // each blob or vector is \"flattened in the end of the null buff\r\n // as a string in the following format:\r\n // Blob_Size,ObjHandle,VariantIdx,Type,VecCellAttr,....data....;next_blob;\r\n // we need to remember that er a blob come to the client noy via vector its format is:\r\n // ObjHandle,VariantIdx,Type,VecCellAttr;data there for we need to make the adjustments\r\n // in the parsing process and in vecGet and in toString\r\n for (let i: number = 0; i < vecSize; i++) {\r\n tokens = StrUtil.tokenize(this._originalflatData.substr(pos), \",\");\r\n tokenIdx = 0;\r\n\r\n // parse blob size\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n let size: number = <number>NNumber.Parse(currentToken);\r\n pos = pos + (currentToken.length + 1);\r\n\r\n // parse the rest of the blob header\r\n let blobHeader: string = \"\";\r\n for (let j: number = 0; j < GuiConstants.BLOB_PREFIX_ELEMENTS_COUNT; j++) {\r\n tokenIdx++;\r\n currentToken = tokens[tokenIdx];\r\n blobHeader = blobHeader + currentToken;\r\n pos = pos + (currentToken.length + 1);\r\n\r\n if (j !== GuiConstants.BLOB_PREFIX_ELEMENTS_COUNT - 1) {\r\n blobHeader = blobHeader + \",\";\r\n }\r\n }\r\n\r\n let cellData: string = this._originalflatData.substr(pos, <number>size);\r\n\r\n // add the cell to the vec\r\n let isNull: boolean = nullBuf.charAt(i) > '\\0';\r\n this._cells.push(new CellElement(cellData, isNull, blobHeader));\r\n pos = <number>(<number>pos + size + 1);\r\n }\r\n }\r\n // If dataBuf was not built during \"cells growth\" - allocate it right now, in one-shot.\r\n if (this._dataBuf.Length === 0)\r\n this._dataBuf = new StringBuilder(data.length);\r\n\r\n this._initialized = true;\r\n }\r\n else\r\n throw new ApplicationException(\"in VectorType.init wrong vector format\");\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// return a flatten blob string representation we assume here that all changes are dynamically save into the\r\n /// buffs each time the vector changes\r\n /// </summary>\r\n toString(): string {\r\n let res: string = \"\"; // take\r\n\r\n // lazy evaluation if the vector was not initialized it wasn't changed so return the original\r\n if (this._initialized) {\r\n // build the headers\r\n res = res + 0 + \",\" + 0 + \",\" + \"0\" + \",\" + <string>this._cellsAttr + \",\" + this._cellContentType + \";\";\r\n // the blob header of this blob\r\n res = res + this.buildHeadersString();\r\n // + dataBuf.toString() + \",\" + nullBuf.toString() + \",\";\r\n\r\n if (this._cellsAttr === StorageAttribute.UNICODE) {\r\n let dataBufCharArry: string[] = new Array<string>(this._dataBuf.Length * 2);\r\n\r\n for (let i: number = 0; i < this._dataBuf.Length; i = i + 1) {\r\n dataBufCharArry[i * 2] = String.fromCharCode((this._dataBuf.get_Item(i).charCodeAt(0)) % 256);\r\n dataBufCharArry[i * 2 + 1] = String.fromCharCode((this._dataBuf.get_Item(i).charCodeAt(0)) / 256);\r\n }\r\n res = res + NString.FromChars(dataBufCharArry) + \",\";\r\n }\r\n else\r\n res = res + this._dataBuf + \",\";\r\n\r\n res = res + this._nullBuf + \",\";\r\n\r\n // in blobs and vector we do not update\r\n if (this._cellsAttr === StorageAttribute.BLOB || this._cellsAttr === StorageAttribute.BLOB_VECTOR)\r\n res = res + this.getBlobsBuf();\r\n\r\n res = res + VectorType.BLOB_TABLE_STR;\r\n }\r\n else\r\n res = this._originalflatData;\r\n\r\n return res;\r\n }\r\n\r\n /// <summary>\r\n /// returns the cells attribute ( the sane for all cells in the vector)\r\n /// </summary>\r\n getCellsAttr(): StorageAttribute {\r\n if (!this._initialized)\r\n return VectorType.getCellsAttr(this._originalflatData);\r\n else\r\n return this._cellsAttr;\r\n }\r\n\r\n /// <summary>\r\n /// returns the cells size ( same size for all cells)\r\n /// </summary>\r\n getCellSize(): number {\r\n let retVal: number;\r\n\r\n if (!this._initialized)\r\n retVal = VectorType.getCellSize(this._originalflatData);\r\n else\r\n retVal = this._cellSize;\r\n\r\n // unicode cell size is saved internally as byte length since that is the way the server save it\r\n if (this.getCellsAttr() === StorageAttribute.UNICODE)\r\n retVal = Math.floor(retVal / 2);\r\n\r\n return retVal;\r\n }\r\n\r\n /// <summary>\r\n /// returns the vector size\r\n /// </summary>\r\n getVecSize(): number {\r\n if (!this._initialized)\r\n return VectorType.getVecSize(this._originalflatData);\r\n else\r\n return <number>this._cells.length;\r\n }\r\n\r\n /// <summary>\r\n /// returns the value of a give cell cells indexes start from 1 wrong indexes or indexes the does not exist\r\n /// will return default value\r\n /// </summary>\r\n /// <param name = \"idx\">the cell index</param>\r\n /// <returns> a string representation of the cell value TODO: yariv check with rina what we should do with\r\n /// blobs extra fields\r\n /// </returns>\r\n getVecCell(idx: number): string {\r\n let retVal: string = null;\r\n if (idx > 0) {\r\n this.init();\r\n if (<number>idx <= this.getVecSize()) {\r\n retVal = this._cells.get_Item(idx - 1).data;\r\n\r\n if (this._cellsAttr === StorageAttribute.BLOB || this._cellsAttr === StorageAttribute.BLOB_VECTOR)\r\n retVal = this._cells.get_Item(idx - 1).blobFieldPrefix + \";\" + retVal;\r\n\r\n // QCR 503691 the value of true or false in the server are the numeric values of 1 and 0\r\n if (StorageAttributeCheck.isTypeLogical(this._cellsAttr))\r\n retVal = ((retVal.charAt(0) === '\\0') ? \"0\" : \"1\");\r\n\r\n if (this._cells.get_Item(idx - 1).isNull)\r\n retVal = null;\r\n }\r\n else if (!this._cellsIsNullDefault)\r\n retVal = this._cellsDefaultVal;\r\n }\r\n return retVal;\r\n }\r\n\r\n /// <summary>\r\n /// Returns the cell values of a vector in string array.\r\n /// </summary>\r\n /// <returns></returns>\r\n GetCellValues(): string[] {\r\n let retVal: string = null;\r\n let cellValues: string[] = null;\r\n\r\n this.init();\r\n\r\n if (this.getVecSize() > 0)\r\n {\r\n cellValues = new Array<string>(this.getVecSize());\r\n\r\n // Get the vector value\r\n for (let idx: number = 0; idx < this.getVecSize(); idx++)\r\n {\r\n retVal = this._cells.get_Item(idx).data;\r\n\r\n if (this._cellsAttr === StorageAttribute.BLOB || this._cellsAttr === StorageAttribute.BLOB_VECTOR)\r\n retVal = this._cells.get_Item(idx).blobFieldPrefix + \";\" + retVal;\r\n\r\n // QCR 503691 the value of true or false in the server are the numeric values of 1 and 0\r\n if (StorageAttributeCheck.isTypeLogical(this._cellsAttr))\r\n retVal = ((retVal.charAt(0) === '\\0') ? \"0\" : \"1\");\r\n\r\n if (this._cells.get_Item(idx).isNull)\r\n retVal = null;\r\n\r\n cellValues[idx] = retVal;\r\n }\r\n }\r\n else if (!this._cellsIsNullDefault)\r\n {\r\n cellValues = [\r\n this._cellsDefaultVal\r\n ];\r\n }\r\n\r\n return cellValues;\r\n }\r\n\r\n /// <summary>\r\n /// inserts or changes a cells value\r\n /// </summary>\r\n /// <param name = \"idx\">the cell index if the index is not sequential creats empty cell till the index</param>\r\n /// <param name = \"newValue\">the new value ( if it is a blob type or vector it contains the prefix of the control data</param>\r\n /// <retuns> false if the index is wrong or the vector illformed </retuns>\r\n setVecCell(idx: number, newValue: string, isNull: boolean): boolean {\r\n let res: boolean = false;\r\n let createBufferValForNumType: boolean = true;\r\n try {\r\n if (idx > 0) {\r\n this.init();\r\n let localCellSize: number = (this._cellsAttr === StorageAttribute.UNICODE) ? Math.floor(this._cellSize / 2) : this._cellSize;\r\n // trying to set null value when not allowed\r\n if (isNull && !this._allowNull) {\r\n isNull = false;\r\n newValue = this._cellsDefaultVal;\r\n }\r\n\r\n if (idx <= this._cells.length) {\r\n let curr: CellElement = this._cells.get_Item(idx - 1);\r\n // if the value passed is not null\r\n if (!isNull) {\r\n // special treatment for blobs and vectors\r\n if (this._cellsAttr === StorageAttribute.BLOB || this._cellsAttr === StorageAttribute.BLOB_VECTOR) {\r\n // set the data in the cell\r\n let blobPrefixLength: number = BlobType.blobPrefixLength(newValue);\r\n curr.blobFieldPrefix = newValue.substr(0, blobPrefixLength - 1);\r\n\r\n // treat empty blob\r\n if (newValue.length > blobPrefixLength)\r\n curr.data = newValue.substr(blobPrefixLength);\r\n else\r\n curr.data = \"\";\r\n }\r\n // simple type\r\n else {\r\n // QCR 503691 the value of true or false in the server are the numeric values of 1 and 0\r\n if (StorageAttributeCheck.isTypeLogical(this._cellsAttr)) {\r\n curr.data = (DisplayConvertor.toBoolean(newValue) ? new StringBuilder().Append(1).ToString() : new StringBuilder().Append('\\0').ToString());\r\n newValue = curr.data;\r\n }\r\n else\r\n curr.data = newValue;\r\n\r\n // numeric types are represented in the data buf as num type so we\r\n // translate them before inserting them to the buf\r\n let dataBufVal: string = newValue;\r\n if (this._cellsAttr === StorageAttribute.NUMERIC || this._cellsAttr === StorageAttribute.DATE || this._cellsAttr === StorageAttribute.TIME)\r\n dataBufVal = RecordUtils.byteStreamToString(dataBufVal);\r\n\r\n if (UtilStrByteMode.isLocaleDefLangDBCS() && (this._cellsAttr === StorageAttribute.ALPHA || this._cellsAttr === StorageAttribute.MEMO)) {\r\n let baDataBuf: Uint8Array = this._encoding.GetBytes(this._dataBuf.ToString());\r\n let baDataBufVal: Uint8Array = this._encoding.GetBytes(dataBufVal);\r\n\r\n // update data buf\r\n for (let i: number = 0; i < baDataBufVal.length && <number>i < localCellSize; i++)\r\n baDataBuf[<number>(<number>(idx - 1) * localCellSize) + i] = baDataBufVal[i];\r\n\r\n // we do not keep the whole size of the alpha\r\n for (let i: number = baDataBufVal.length; <number>i < localCellSize; i++)\r\n baDataBuf[<number>(<number>(idx - 1) * localCellSize) + i] = ((this._cellsAttr === StorageAttribute.ALPHA) ? 32 : 0);\r\n\r\n this._dataBuf = new StringBuilder(this._encoding.GetString(baDataBuf, 0, baDataBuf.length));\r\n curr.data = this._encoding.GetString(baDataBuf, <number>(<number>(idx - 1) * localCellSize), <number>localCellSize);\r\n }\r\n else {\r\n // update data buf\r\n // QCR 987943 trim the value if it is longer the the cell length\r\n for (let i: number = 0; i < dataBufVal.length && <number>i < localCellSize; i++)\r\n this._dataBuf.set_Item(<number>(<number>(idx - 1) * localCellSize) + i, dataBufVal.charAt(i));\r\n\r\n // in alpha and num type we do not keep the whole size of the alpha/NUM_TYPE\r\n for (let i: number = dataBufVal.length; <number>i < localCellSize; i++)\r\n this._dataBuf.set_Item(<number>(<number>(idx - 1) * localCellSize) + i, (this._cellsAttr === StorageAttribute.ALPHA || this._cellsAttr === StorageAttribute.UNICODE) ? ' ' : '\\0');\r\n\r\n // QCR 987943 trim the value if it is longer the the cell length\r\n if (this._cellsAttr === StorageAttribute.ALPHA || this._cellsAttr === StorageAttribute.UNICODE || this._cellsAttr === StorageAttribute.MEMO)\r\n curr.data = this._dataBuf.ToString().substr(<number>(<number>(idx - 1) * localCellSize), <number>localCellSize);\r\n }\r\n }\r\n // update the null buf\r\n this._nullBuf.set_Item(idx - 1, '\\0');\r\n curr.isNull = false;\r\n }\r\n // if the value passed is null\r\n else {\r\n curr.data = null;\r\n\r\n // set the prefix flag that indicates whether the blob is vector or not\r\n if (this._cellsAttr === StorageAttribute.BLOB_VECTOR)\r\n curr.blobFieldPrefix = BlobType.getEmptyBlobPrefix('\\u0001');\r\n else\r\n curr.blobFieldPrefix = BlobType.getEmptyBlobPrefix('\\0');\r\n curr.isNull = true;\r\n this._nullBuf.set_Item(idx - 1, '\\u0001');\r\n\r\n // relevant only for none blobs\r\n for (let i: number = 0; <number>i < localCellSize; i++)\r\n this._dataBuf.set_Item(<number>(<number>(idx - 1) * localCellSize) + i, '\\0');\r\n\r\n // update the null buf\r\n this._nullBuf.set_Item(idx - 1, '\\u0001');\r\n }\r\n res = true;\r\n }\r\n // new record\r\n else {\r\n let insertVal: string;\r\n // chooses the value inserted to the skipped cells\r\n if (this._cellsAttr === StorageAttribute.BLOB || this._cellsAttr === StorageAttribute.BLOB_VECTOR) {\r\n // append the is vector flag\r\n if (this._cellsAttr === StorageAttribute.BLOB_VECTOR)\r\n insertVal = BlobType.getEmptyBlobPrefix('\\u0001');\r\n else\r\n insertVal = BlobType.getEmptyBlobPrefix('\\0');\r\n\r\n if (!this._cellsIsNullDefault)\r\n insertVal = insertVal + this._cellsDefaultVal; // concat regolar blob cntrol data\r\n }\r\n else if (this._cellsIsNullDefault)\r\n insertVal = null;\r\n // simple null value\r\n else\r\n insertVal = this._cellsDefaultVal; // default simple value\r\n\r\n // QCR 503691 the value of true or false in the server are the numeric values of 1 and 0\r\n if (insertVal !== null && StorageAttributeCheck.isTypeLogical(this._cellsAttr))\r\n insertVal = (DisplayConvertor.toBoolean(insertVal) ? new StringBuilder().Append('\\u0001').ToString() : new StringBuilder().Append('\\0').ToString());\r\n\r\n // create skipped records\r\n // when a vector cell is set , if the cell is beyond the existing vector.\r\n // we will fill the cells between vector size and set cell with default value.\r\n // for example : if vector size is 0, and we do vecset (vec[5]). cell 5 needs to be set\r\n // with the value. cells 1 to 4 will be created and set with the default value.\r\n let dataBufVal: string = insertVal;\r\n\r\n while (this._cells.length < idx) {\r\n if (this._cellsAttr === StorageAttribute.BLOB || this._cellsAttr === StorageAttribute.BLOB_VECTOR) {\r\n this._cells.push(new CellElement(insertVal.substr(VectorType.EMPTY_BLOB_PREFIX_LEN), this._cellsIsNullDefault, insertVal.substr(0, VectorType.EMPTY_BLOB_PREFIX_LEN)));\r\n this._dataBuf.Append(this.getNullString(VectorType.BLOB_TYPE_STRUCT_SIZE));\r\n }\r\n else {\r\n this._cells.push(new CellElement(insertVal, this._cellsIsNullDefault));\r\n\r\n // update the data buf\r\n if (insertVal !== null) {\r\n // numeric types are represented in the data buf as num type so we\r\n // translate them before inserting them to the buf\r\n if (this._cellsAttr === StorageAttribute.NUMERIC || this._cellsAttr === StorageAttribute.DATE || this._cellsAttr === StorageAttribute.TIME) {\r\n if (createBufferValForNumType) {\r\n // create a buffer value for num type only once, and use it\r\n // over and over again for all the cells to be initialized.\r\n // do the translation only once to improve performance.\r\n createBufferValForNumType = false;\r\n dataBufVal = RecordUtils.byteStreamToString(insertVal);\r\n }\r\n }\r\n\r\n // dataBufVal either contains original insertVal, or a string of\r\n // byteStream for num types.\r\n this._dataBuf.Append(dataBufVal);\r\n\r\n // since we don't alway keep the whole alpha\r\n let valLen: number;\r\n if (UtilStrByteMode.isLocaleDefLangDBCS() && (this._cellsAttr === StorageAttribute.ALPHA || this._cellsAttr === StorageAttribute.MEMO))\r\n valLen = UtilStrByteMode.lenB(dataBufVal);\r\n else\r\n valLen = dataBufVal.length;\r\n\r\n for (let i: number = valLen; <number>i < localCellSize; i++)\r\n this._dataBuf.Append((this._cellsAttr === StorageAttribute.ALPHA || this._cellsAttr === StorageAttribute.UNICODE) ? ' ' : '\\0');\r\n }\r\n else\r\n this._dataBuf.Append(this.getNullString(localCellSize));\r\n }\r\n\r\n // update the null buf\r\n this._nullBuf.Insert(this._cells.length - 1,\r\n this._cellsIsNullDefault ? '\\u0001' : '\\0'\r\n );\r\n }\r\n\r\n // vector has been filled till the requested idx.\r\n // now its time to set the requested cell.\r\n res = this.setVecCell(idx, newValue, isNull);\r\n }\r\n }\r\n }\r\n catch (ApplicationException) {\r\n res = false;\r\n }\r\n return res;\r\n }\r\n\r\n /// <summary>\r\n /// change the vector to fit the definitions of a different vector field\r\n /// </summary>\r\n /// <param name=\"field\">the new field</param>\r\n adjustToFit(field: FieldDef): void {\r\n if (field.getType() === StorageAttribute.BLOB_VECTOR) {\r\n let srcAttr: StorageAttribute = this.getCellsAttr();\r\n let dstAttr: StorageAttribute = field.getCellsType();\r\n\r\n if (StorageAttributeCheck.isTheSameType(srcAttr, dstAttr)) {\r\n this.init();\r\n\r\n // trim data if needed ( only for alpha or memo)\r\n if (StorageAttributeCheck.IsTypeAlphaOrUnicode(srcAttr) && StorageAttributeCheck.IsTypeAlphaOrUnicode(dstAttr)) {\r\n let dstSizeInChars: number = field.getVecCellsSize();\r\n let srcSizeInChars: number = ((this._cellsAttr === StorageAttribute.UNICODE) ? Math.floor(this._cellSize / 2) : this._cellSize);\r\n let isByteMode: boolean = UtilStrByteMode.isLocaleDefLangDBCS() && StorageAttributeCheck.isTypeAlpha(dstAttr);\r\n\r\n if (srcSizeInChars !== dstSizeInChars) {\r\n let adjData: StringBuilder = new StringBuilder();\r\n\r\n // goes over all cells in the vector\r\n for (let i: number = 0; i < dstSizeInChars; i = i + 1) {\r\n let curr: CellElement = this._cells.get_Item(i);\r\n // trim is needed\r\n if (!curr.isNull) { // unicode cell size are saved internally as byte length while the field returns char\r\n // length\r\n if (srcSizeInChars > dstSizeInChars) {\r\n if (isByteMode)\r\n curr.data = UtilStrByteMode.leftB(curr.data, dstSizeInChars);\r\n else\r\n curr.data = curr.data.substr(0, dstSizeInChars);\r\n adjData.Append(curr.data);\r\n }\r\n // padding is needed\r\n else {\r\n let tmpData: StringBuilder = new StringBuilder();\r\n tmpData.Append(curr.data);\r\n let dataLen: number = isByteMode ? UtilStrByteMode.lenB(curr.data) : curr.data.length;\r\n\r\n // pad with blanks\r\n for (let j: number = dataLen; j < dstSizeInChars; j = j + 1)\r\n tmpData.Append(' ');\r\n adjData.Append(tmpData.ToString());\r\n\r\n // update the data in the vector cell\r\n curr.data = tmpData.ToString();\r\n }\r\n }\r\n else {\r\n let tmpData: StringBuilder = new StringBuilder();\r\n for (let j: number = 0; j < dstSizeInChars; j = j + 1)\r\n tmpData.Append('\\0');\r\n adjData.Append(tmpData.ToString());\r\n\r\n // update the data in the vector cell\r\n curr.data = tmpData.ToString();\r\n }\r\n }// end loop\r\n this._dataBuf = adjData;\r\n }\r\n }\r\n\r\n // QCR 747801 in the filed the size of numeric/date/time is thier hex size\r\n // whereas here it is their NUM_TYPE size\r\n let newSize: number = field.getVecCellsSize();\r\n\r\n // change the headers data such as cell type and cells size\r\n this._cellsAttr = field.getCellsType();\r\n this._cellSize = <number>((this._cellsAttr === StorageAttribute.UNICODE) ? (newSize * 2) : newSize);\r\n this._cellsDefaultVal = field.getCellDefualtValue();\r\n this._cellsIsNullDefault = field.isNullDefault();\r\n this._allowNull = field.NullAllowed;\r\n this._originalflatData = this.toString();\r\n return;\r\n }\r\n else\r\n throw new ApplicationException(\"in VectorType.adjustToFit vector basic types does not agree\");\r\n }\r\n else\r\n throw new ApplicationException(\"in VectorType.adjustToFit \" + field.getName() + \" is not of type vector\");\r\n }\r\n\r\n /// <summary>\r\n /// update the vec size in the headers buf\r\n /// </summary>\r\n /// <param name = \"idx\">the new size</param>\r\n private buildHeadersString(): string {\r\n let res: string = VectorType.BLOB_TABLE_STR + VectorType.VECTOR_STR + \",\" + VectorType.VERSION + \",\" + 1 + \",\" + <string>this._cellsAttr + \",\";\r\n res = res + this._cellSize + \",\";\r\n\r\n // append the default value\r\n let def: string = \"\";\r\n if (this._cellsDefaultVal !== null)\r\n if (this._cellsAttr === StorageAttribute.NUMERIC || this._cellsAttr === StorageAttribute.DATE || this._cellsAttr === StorageAttribute.TIME)\r\n def = RecordUtils.byteStreamToString(this._cellsDefaultVal);\r\n else\r\n def = this._cellsDefaultVal;\r\n\r\n // in string we do not keep the full length of the string in brwoser client\r\n if (UtilStrByteMode.isLocaleDefLangDBCS() && (this._cellsAttr === StorageAttribute.ALPHA || this._cellsAttr === StorageAttribute.MEMO))\r\n def = def + this.getEmptyString(this._cellSize - <number>UtilStrByteMode.lenB(def));\r\n else\r\n def = def + this.getEmptyString(this._cellSize - <number>def.length);\r\n\r\n // continue building the headers\r\n res = res + def + \",\" + (this._cellsIsNullDefault ? \"1\" : \"0\") + \",\";\r\n res = res + (this._allowNull ? \"1\" : \"0\") + \",\" + this._cellSize + \",\" + this._cells.length + \",\";\r\n res = res + ((this._cellsAttr === StorageAttribute.BLOB || this._cellsAttr === StorageAttribute.BLOB_VECTOR) ? \"1\" : \"0\") + \",\";\r\n\r\n if (this._cellsAttr === StorageAttribute.BLOB || this._cellsAttr === StorageAttribute.BLOB_VECTOR)\r\n res = res + \"0,\";\r\n\r\n return res;\r\n }\r\n\r\n // returns a string with size null charecters\r\n private getNullString(size: number): string {\r\n let res: StringBuilder = new StringBuilder();\r\n for (let i: number = 0; i < size; i = i + 1)\r\n res.Append('\\0');\r\n return res.ToString();\r\n }\r\n\r\n // returns a string with size blank charecters\r\n private getEmptyString(size: number): string {\r\n let res: StringBuilder = new StringBuilder();\r\n for (let i: number = 0; i < size; i = i + 1)\r\n res.Append(' ');\r\n return res.ToString();\r\n }\r\n\r\n /// <summary>\r\n /// goes over the cells of the vectors and builds the data buf of blobs since it is the only thing not\r\n /// updated dynamically\r\n /// </summary>\r\n private getBlobsBuf(): string {\r\n let res: StringBuilder = new StringBuilder();\r\n for (let i: number = 0; i < this._cells.length; i = i + 1) {\r\n let data: string = \"\";\r\n let blobSize: number = 0;\r\n let curr: CellElement = this._cells.get_Item(i);\r\n\r\n if (curr.data !== null) {\r\n data = curr.data;\r\n blobSize = data.length;\r\n }\r\n\r\n res.Append(blobSize);\r\n res.Append(\",\" + curr.blobFieldPrefix + \",\" + data + \";\");\r\n }\r\n return (res + \",\");\r\n }\r\n\r\n /*-------------------------------------------------------------------------------------*/\r\n /* */\r\n /* static utility methods */\r\n /* */\r\n /*-------------------------------------------------------------------------------------*/\r\n\r\n\r\n /// <summary>\r\n /// parses the cell attribute of the vector\r\n /// </summary>\r\n /// <param name = \"blob\">a vector in a flattened format</param>\r\n /// <returns> att the the vector's cells attribute</returns>\r\n static getCellsAttr(blob: string): StorageAttribute {\r\n if (VectorType.validateBlobContents(blob)) {\r\n let tokens: string[] = StrUtil.tokenize(blob.substr(BlobType.blobPrefixLength(blob)), \",\");\r\n\r\n // skip the MGBTMGVEC\r\n\r\n // skip the version\r\n\r\n // skip the ColumnsCount_\r\n\r\n // the next token is the cells attribute\r\n return <StorageAttribute>tokens[3].charAt(0);\r\n }\r\n else\r\n throw new ApplicationException(\"in static getCellsAttr the blob is in the wrong format\");\r\n }\r\n\r\n /// <summary>\r\n /// parses the size of each cell in the vector all cell has the same size except when the vector cells are\r\n /// of type blob or vector\r\n /// </summary>\r\n /// <param name = \"blob\">a vector in a flattened format</param>\r\n /// <returns> the cells size or -1 if there is encoding problem</returns>\r\n static getCellSize(blob: string): number {\r\n let cellsType: StorageAttribute = VectorType.getCellsAttr(blob);\r\n if (cellsType !== StorageAttribute.BLOB && cellsType !== StorageAttribute.BLOB_VECTOR) {\r\n let tokens: string[] = StrUtil.tokenize(blob.substr(BlobType.blobPrefixLength(blob)), \",\");\r\n\r\n // skip the MGBTMGVEC\r\n\r\n // skip the version\r\n\r\n // skip the ColumnsCount_\r\n\r\n // skip the cells type\r\n\r\n // the next element is the cells size\r\n return NNumber.Parse(tokens[4]);\r\n }\r\n else { // =============================>\r\n return 2147483647;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// parses the size of the vector\r\n /// </summary>\r\n /// <param name = \"blob\">a vector in a flattened format</param>\r\n /// <returns> the size of the vector</returns>\r\n static getVecSize(blob: string): number {\r\n\r\n if (VectorType.validateBlobContents(blob)) {\r\n let pos: number = BlobType.blobPrefixLength(blob);\r\n let tokens: string[] = StrUtil.tokenize(blob.substr(pos), \",\");\r\n\r\n // skip the MGBTMGVEC\r\n pos = pos + (tokens[0].length + 1);\r\n\r\n // skip the version\r\n pos = pos + (tokens[1].length + 1);\r\n\r\n // skip the ColumnsCount_\r\n pos = pos + (tokens[2].length + 1);\r\n\r\n // skip the cells type\r\n pos = pos + (tokens[3].length + 1);\r\n\r\n // skip the cells size\r\n let cellsSize: string = tokens[4];\r\n pos = pos + (cellsSize.length + 1);\r\n\r\n // skip the cell default value and re-init the tokenizer\r\n // since the default value may contain the delimeter charecter as data\r\n pos = pos + (NNumber.Parse(cellsSize) + 1);\r\n tokens = StrUtil.tokenize(blob.substr(pos), \",\");\r\n\r\n // skip is cell null default\r\n\r\n // skip is null allowed\r\n\r\n // skip columns total length\r\n\r\n // the next element is the vector size\r\n return NNumber.Parse(tokens[3]);\r\n }\r\n throw new ApplicationException(\"in static getVecSize the blob is in the wrong format\");\r\n }\r\n\r\n /// <summary>\r\n /// check if flatData content was translated to unicode or not. flatData contains the vector's cells in flat\r\n /// (non-array) format. This is how the server sends us the data. However the server does not send it to us\r\n /// in a UNICODE format. Thus we translate it to unicode during the first time we \"de-serialize\" the\r\n /// flat-data into a vector. During the de-serialization operation during the first time we \"de-serialize\"\r\n /// the flat-data into a vector. During the de-serialization operation we modify the BLOB-TABLe eye catcher\r\n /// from upper case to lower case, this way we know if a translation was done or is needed.\r\n /// </summary>\r\n /// <param name = \"name\">flatData The vector's flat data</param>\r\n /// <returns> TRUE if the flat data is already in unicode format</returns>\r\n isUnicode(flatData: string): boolean {\r\n let start: number = BlobType.blobPrefixLength(flatData);\r\n let catcher: string = flatData.substr(start, VectorType.BLOB_TABLE_STR_LEN);\r\n return (catcher === VectorType.BLOB_TABLE_STR);\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// this inner class represents a cell in the magic vector each data that the magic vector keeps per cell\r\n/// will be kept in the CellElement\r\n/// </summary>\r\nexport class CellElement {\r\n blobFieldPrefix: string = null;\r\n data: string = null;\r\n isNull: boolean = false;\r\n\r\n // all this variables are used only if the vector cell is of type vector or blob\r\n\r\n constructor(val: string, is_null: boolean);\r\n constructor(val: string, is_null: boolean, ctrlData: string);\r\n constructor(val: string, is_null: boolean, ctrlData?: string) {\r\n if (arguments.length === 2)\r\n this.constructor_0(val, is_null);\r\n this.constructor_1(val, is_null, ctrlData);\r\n }\r\n\r\n // constructs a new cell element for vectors whos cells are not of type blob or vector\r\n private constructor_0(val: string, is_null: boolean): void {\r\n this.data = val;\r\n this.isNull = is_null;\r\n }\r\n\r\n // constructs a new cell element for vectors whos cells are of type blob or vector\r\n private constructor_1(val: string, is_null: boolean, ctrlData: string): void {\r\n this.data = val;\r\n this.isNull = is_null;\r\n this.blobFieldPrefix = ctrlData;\r\n }\r\n}\r\n","import {BlobType} from \"./BlobType\";\r\nimport {FldStorage, StorageAttribute, StrUtil, XmlParser, Base64, XMLConstants} from \"@magic-xpa/utils\";\r\nimport {List, NNumber, NString, Int32} from \"@magic-xpa/mscorelib\";\r\nimport {Events} from \"../../Events\";\r\nimport {DisplayConvertor} from \"../gui/DisplayConvertor\";\r\nimport {VectorType} from \"./VectorType\";\r\nimport { GuiEnvironment } from \"../../GuiEnvironment\";\r\n\r\nexport class FieldDef {\r\n DefaultValue: string = null;\r\n NullAllowed: boolean = false;\r\n protected _nullDefault: boolean = false;\r\n protected _nullValue: string = null;\r\n protected _nullDisplay: string = null;\r\n\r\n // true, if field is modifiable on field level\r\n set DbModifiable(value: boolean) {\r\n this._dbModifiable = value;\r\n }\r\n get DbModifiable(): boolean {\r\n return this._dbModifiable;\r\n }\r\n private _dbModifiable: boolean = true;\r\n\r\n private _partOfDataview: boolean = true;\r\n protected _picture: string = null;\r\n protected _size: number = 0;\r\n protected _varName: string = null;\r\n\r\n // Only for BLOB field. Does it contain a unicode or ANSI data?\r\n private _contentType: string = BlobType.CONTENT_TYPE_UNKNOWN;\r\n protected _vecCellsContentType: string = BlobType.CONTENT_TYPE_UNKNOWN;\r\n protected _vecCellsSize: number = 0;\r\n protected _vecCellsType: StorageAttribute = StorageAttribute.NONE;\r\n protected _type: StorageAttribute = StorageAttribute.NONE;\r\n Storage: FldStorage ;\r\n VarDisplayName: string = null;\r\n\r\n protected static _default_date: string = null;\r\n protected readonly _id: number = 0;\r\n protected _spaces: string[] = null;\r\n\r\n /// <summary>\r\n /// CTOR\r\n /// </summary>\r\n /// <param name=\"id_\"> idx in FieldsTable </param>\r\n constructor(id: number) {\r\n this._id = id;\r\n this.VarDisplayName = NString.Empty;\r\n }\r\n\r\n get PartOfDataview(): boolean {\r\n return this._partOfDataview;\r\n }\r\n\r\n /// <summary>\r\n /// returns the id of the field\r\n /// </summary>\r\n getId(): number {\r\n return this._id;\r\n }\r\n\r\n /// <summary>\r\n /// size type of current Field: A, N, L, D, T\r\n /// </summary>\r\n /// <returns> size member of current Field\r\n /// </returns>\r\n getType(): StorageAttribute {\r\n return this._type;\r\n }\r\n\r\n /// <summary>\r\n /// return the magic default null display value according to the type\r\n /// </summary>\r\n /// <param name = \"type\">of the data</param>\r\n static getMagicDefaultNullDisplayValue(type: StorageAttribute): string {\r\n let val: string;\r\n\r\n switch (type) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n case StorageAttribute.BOOLEAN:\r\n val = \"\";\r\n break;\r\n\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n // zero\r\n val = \"\";\r\n break;\r\n }\r\n return val;\r\n }\r\n\r\n /// <summary>\r\n /// return the magic default value according to the type\r\n /// </summary>\r\n /// <param name = \"type\">of the data</param>\r\n static getMagicDefaultValue(type: StorageAttribute): string {\r\n let val: string = null;\r\n switch (type) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n val = \"\";\r\n break;\r\n case StorageAttribute.BLOB:\r\n case StorageAttribute.BLOB_VECTOR:\r\n val = BlobType.getEmptyBlobPrefix('\\0') + \";\";\r\n break;\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.TIME:\r\n val = \"FF00000000000000000000000000000000000000\";\r\n break;\r\n case StorageAttribute.DATE:\r\n val = FieldDef._default_date;\r\n break;\r\n case StorageAttribute.BOOLEAN:\r\n val = \"0\";\r\n break;\r\n }\r\n return val;\r\n }\r\n\r\n /// <summary>\r\n /// returns the default value of this field\r\n /// </summary>\r\n getDefaultValue(): string {\r\n let val: string = null;\r\n if (this._type !== StorageAttribute.BLOB_VECTOR) {\r\n if (this._nullDefault && this._nullValue !== null)\r\n val = this._nullValue;\r\n else if (this.DefaultValue !== null)\r\n val = this.DefaultValue;\r\n else\r\n val = this.getMagicDefaultValue();\r\n }\r\n else\r\n val = this.getMagicDefaultValue();\r\n\r\n return val;\r\n }\r\n\r\n /// <summary>\r\n /// returns the vectors cells default value\r\n /// if the field is not a vector returns field default value\r\n /// </summary>\r\n getCellDefualtValue(): string {\r\n let val: string;\r\n if (this._type === StorageAttribute.BLOB_VECTOR) {\r\n if (this._nullDefault && this._nullValue !== null)\r\n val = this._nullValue;\r\n else if (this.DefaultValue !== null)\r\n val = this.DefaultValue;\r\n else {\r\n val = FieldDef.getMagicDefaultValue(this._vecCellsType);\r\n if (this._vecCellsType === StorageAttribute.BLOB)\r\n val = BlobType.setContentType(val, this._vecCellsContentType);\r\n }\r\n }\r\n else\r\n val = this.getDefaultValue();\r\n return val;\r\n }\r\n\r\n /// <summary>\r\n /// return the magic default value according to the type\r\n /// </summary>\r\n getMagicDefaultValue(): string {\r\n let val: string = FieldDef.getMagicDefaultValue(this._type);\r\n if (this._type === StorageAttribute.BLOB)\r\n val = BlobType.setContentType(val, this._contentType);\r\n else {\r\n if (this._type === StorageAttribute.BLOB_VECTOR) {\r\n val = BlobType.SetVecCellAttr(val, this._vecCellsType);\r\n if (this._vecCellsType === StorageAttribute.BLOB)\r\n val = BlobType.setContentType(val, this._vecCellsContentType);\r\n }\r\n }\r\n return val;\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n /// <returns> the contentType </returns>\r\n getContentType(): string {\r\n return this._contentType;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if the nullDisplay has a value\r\n /// </summary>\r\n hasNullDisplayValue(): boolean {\r\n return this._nullDisplay !== null;\r\n }\r\n\r\n /// <summary>\r\n /// size member of current Field\r\n /// </summary>\r\n /// <returns> size member of current Field </returns>\r\n getSize(): number {\r\n return this._size;\r\n }\r\n\r\n /// <summary>\r\n /// returns the vector cells size\r\n /// </summary>\r\n getVecCellsSize(): number {\r\n return (this._type === StorageAttribute.BLOB_VECTOR) ? this._vecCellsSize : this._size;\r\n }\r\n\r\n setLengths(type: StorageAttribute, vecCells: boolean): void {\r\n let res: number = this._size;\r\n\r\n switch (type) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.MEMO:\r\n case StorageAttribute.UNICODE:\r\n if (vecCells) {\r\n res = this._vecCellsSize;\r\n this._spaces = new Array<string>(this._vecCellsSize);\r\n }\r\n else\r\n this._spaces = new Array<string>(this._size);\r\n\r\n for (let i: number = 0; i < this._size; i = i + 1) {\r\n this._spaces[i] = ' ';\r\n }\r\n break;\r\n\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n res = GuiEnvironment.Environment.GetSignificantNumSize() * 2;\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n res = (!vecCells ? 1 : 4);\r\n break;\r\n\r\n case StorageAttribute.BLOB:\r\n // QCR 758913 FOR VECTORS INTERNAL USE ONLY THE SIZE OF BLOBS AND VECTOR\r\n // IS THE SIZE OF THIER STRUCTS IN THE MAGIC ENGIN\r\n res = (!vecCells ? Int32.MaxValue : VectorType.BLOB_TYPE_STRUCT_SIZE);\r\n break;\r\n\r\n case StorageAttribute.BLOB_VECTOR:\r\n res = Int32.MaxValue;\r\n if (!vecCells)\r\n this.setLengths(this._vecCellsType, true);\r\n else\r\n res = VectorType.BLOB_TYPE_STRUCT_SIZE;\r\n break;\r\n }\r\n\r\n if (vecCells)\r\n this._vecCellsSize = res;\r\n else\r\n this._size = res;\r\n }\r\n\r\n /// <summary>\r\n /// returns the cells type of vectors elese returns the field type\r\n /// </summary>\r\n getCellsType(): StorageAttribute {\r\n return (this._type === StorageAttribute.BLOB_VECTOR) ? this._vecCellsType : this._type;\r\n }\r\n\r\n /// <summary>\r\n /// returns the cell content type of vector field\r\n /// </summary>\r\n /// <returns>vector's cell content type</returns>\r\n getVecCellsContentType(): string {\r\n return this._vecCellsContentType;\r\n }\r\n\r\n /// <summary>\r\n /// returns Null Value value of this field\r\n /// </summary>\r\n getNullValue(): string {\r\n return this._nullValue;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if the field is a Null Default\r\n /// </summary>\r\n isNullDefault(): boolean {\r\n return this._nullDefault;\r\n }\r\n\r\n /// <summary>\r\n /// returns Null Display value of this field\r\n /// </summary>\r\n getNullDisplay(): any {\r\n let val: any;\r\n\r\n switch (this._type) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n case StorageAttribute.BOOLEAN:\r\n val = \"\";\r\n break;\r\n\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n // zero\r\n val = null;\r\n break;\r\n }\r\n return val;\r\n }\r\n\r\n /// <summary>\r\n /// For BLOB fields, check if they contain UNICODE or ANSI chars.\r\n /// </summary>\r\n /// <returns>TRUE if content is UNICODE. False otherwise</returns>\r\n IsContentUnicode(): boolean {\r\n if (this._type === StorageAttribute.BLOB && this._contentType !== BlobType.CONTENT_TYPE_UNICODE)\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n GetPicture(): string {\r\n return this._picture;\r\n }\r\n\r\n /// <summary>\r\n /// set the field attribute in parsing\r\n /// </summary>\r\n protected setAttribute(attribute: string, valueStr: string): boolean {\r\n let isTagProcessed: boolean = true;\r\n\r\n switch (attribute) {\r\n case XMLConstants.MG_ATTR_TYPE:\r\n this._type = <StorageAttribute>valueStr.charAt(0);\r\n break;\r\n case XMLConstants.MG_ATTR_SIZE:\r\n this._size = XmlParser.getInt(valueStr);\r\n if (this._size <= 0)\r\n Events.WriteExceptionToLog(\"in Field.initElements(): size must be greater than zero\");\r\n break;\r\n case XMLConstants.MG_ATTR_VAR_NAME:\r\n this._varName = XmlParser.unescape(valueStr).toString();\r\n break;\r\n case XMLConstants.MG_ATTR_VAR_DISP_NAME:\r\n this.VarDisplayName = XmlParser.unescape(valueStr).toString();\r\n break;\r\n case XMLConstants.MG_ATTR_PICTURE:\r\n this._picture = XmlParser.unescape(valueStr).toString();\r\n break;\r\n case XMLConstants.MG_ATTR_VEC_CELLS_SIZE:\r\n this._vecCellsSize = NNumber.Parse(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_VEC_CELLS_ATTR:\r\n this._vecCellsType = <StorageAttribute>valueStr.charAt(0);\r\n break;\r\n case XMLConstants.MG_ATTR_VEC_CELLS_CONTENT:\r\n this._vecCellsContentType = valueStr.charAt(0);\r\n break;\r\n case XMLConstants.MG_ATTR_NULLVALUE:\r\n if (this._type === StorageAttribute.NUMERIC || this._type === StorageAttribute.DATE || this._type === StorageAttribute.TIME) {\r\n if (GuiEnvironment.Environment.GetDebugLevel() > 1)\r\n this._nullValue = XmlParser.unescape(valueStr).toString();\r\n else\r\n this._nullValue = Base64.decodeToHex(valueStr);\r\n }\r\n else\r\n this._nullValue = XmlParser.unescape(valueStr).toString();\r\n break;\r\n case XMLConstants.MG_ATTR_NULLDISPLAY:\r\n this._nullDisplay = XmlParser.unescape(valueStr).toString();\r\n break;\r\n case XMLConstants.MG_ATTR_NULLDEFAULT:\r\n this._nullDefault = DisplayConvertor.toBoolean(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_DB_MODIFIABLE:\r\n this.DbModifiable = DisplayConvertor.toBoolean(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_DEFAULTVALUE:\r\n this.DefaultValue = valueStr;\r\n if (this._type === StorageAttribute.ALPHA || this._type === StorageAttribute.UNICODE) {\r\n this.DefaultValue = XmlParser.unescape(valueStr).toString();\r\n this.DefaultValue = StrUtil.padStr(this.DefaultValue, this._size);\r\n }\r\n else if (this._type !== StorageAttribute.BLOB && this._type !== StorageAttribute.BOOLEAN) {\r\n // working in hex or base64\r\n if ((this._type === StorageAttribute.BLOB_VECTOR &&\r\n (this._vecCellsType === StorageAttribute.NUMERIC || this._vecCellsType === StorageAttribute.DATE || this._vecCellsType === StorageAttribute.TIME)) ||\r\n (this._type === StorageAttribute.NUMERIC || this._type === StorageAttribute.DATE || this._type === StorageAttribute.TIME)) {\r\n if (GuiEnvironment.Environment.GetDebugLevel() < 1)\r\n this.DefaultValue = Base64.decodeToHex(valueStr);\r\n }\r\n }\r\n else if (this.DefaultValue.length === 0 && this._type !== StorageAttribute.BLOB)\r\n this.DefaultValue = null;\r\n else if (this._type === StorageAttribute.BLOB)\r\n this.DefaultValue = BlobType.createFromString(this.DefaultValue, this._contentType);\r\n break;\r\n case XMLConstants.MG_ATTR_NULLALLOWED:\r\n this.NullAllowed = DisplayConvertor.toBoolean(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_BLOB_CONTENT:\r\n this._contentType = valueStr.charAt(0);\r\n break;\r\n case XMLConstants.MG_ATTR_PART_OF_DATAVIEW:\r\n this._partOfDataview = DisplayConvertor.toBoolean(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_STORAGE:\r\n this.Storage = <FldStorage>XmlParser.getInt(valueStr);\r\n break;\r\n default:\r\n isTagProcessed = false;\r\n break;\r\n }\r\n\r\n return isTagProcessed;\r\n }\r\n\r\n /// <summary>\r\n /// Need part input String to relevant for the Field class data\r\n /// </summary>\r\n fillData(parser: XmlParser): void {\r\n let text: string = parser.ReadToEndOfCurrentElement();\r\n text = text.substr(text.indexOf(XMLConstants.MG_TAG_FLDH) + XMLConstants.MG_TAG_FLDH.length);\r\n let tokens: List<string> = XmlParser.getTokens(text, XMLConstants.XML_ATTR_DELIM);\r\n this.initElements(tokens);\r\n }\r\n\r\n /// <summary>\r\n /// Make initialization of private elements by found tokens\r\n /// </summary>\r\n /// <param name = \"tokensVector\">found tokens, which consist attribute/value of every foundelement</param>\r\n /// <param name = \"expTab\">reference to relevant exp. table</param>\r\n initElements(tokensVector: List<string>): void {\r\n for (let i: number = 0; i < tokensVector.length; i = i + 2) {\r\n let attribute: string = tokensVector.get_Item(i);\r\n let valueStr: string = tokensVector.get_Item(i + 1);\r\n\r\n // the parsing is finished here\r\n this.setAttribute(attribute, valueStr);\r\n }\r\n this.SetAfterParsing();\r\n }\r\n\r\n /// <summary>\r\n /// some properties are needed to be set after parsing\r\n /// </summary>\r\n SetAfterParsing(): void {\r\n this.setLengths(this._type, false);\r\n if (this.NullAllowed && this._nullDisplay === null)\r\n this._nullDisplay = \"\";\r\n }\r\n\r\n /// <summary>\r\n /// get name of variable\r\n /// </summary>\r\n getVarName(): string {\r\n return this._varName || \"\";\r\n }\r\n\r\n /// <summary>\r\n /// for get VARNAME function use\r\n /// A string containing the table name where the variable originates,\r\n /// concatenated with '.' and the variable description of the variable in that table.\r\n /// If the variable is a virtual one, then the table name would indicate 'Virtual'.\r\n /// </summary>\r\n getName(): string {\r\n return this.getVarName();\r\n }\r\n}\r\n","import {FieldDef} from \"./FieldDef\";\r\nimport {GuiDataViewBase} from \"./GuiDataViewBase\";\r\nimport {MgControlBase} from \"../gui/MgControlBase\";\r\nimport {ITask} from \"../tasks/ITask\";\r\nimport {List, NString} from \"@magic-xpa/mscorelib\";\r\nimport {GuiConstants} from \"../../GuiConstants\";\r\n\r\nexport abstract class GuiFieldBase extends FieldDef {\r\n ControlToFocus: MgControlBase = null;\r\n protected _controls: List<MgControlBase> = null;\r\n protected _dataview: GuiDataViewBase = null; // reference to the dataview in order to access record data (updating, etc...)\r\n\r\n /// <summary>\r\n /// CTOR\r\n /// </summary>\r\n /// <param name=\"id\"> idx in FieldsTable </param>\r\n constructor(id: number) {\r\n super(id);\r\n }\r\n\r\n /// <summary>\r\n /// get the task which the field belongs to\r\n /// </summary>\r\n getTask(): ITask {\r\n return this._dataview.getTask();\r\n }\r\n\r\n /// <summary>\r\n /// update the display\r\n /// </summary>\r\n async updateDisplayWithValue(displayValue: string, isNull: boolean): Promise<void> {\r\n let ctrl: MgControlBase = null;\r\n let ctrlValue: MgControlBase = null;\r\n let defaultValue: string = GuiConstants.DEFAULT_VALUE_INT.toString();\r\n\r\n if (this._controls !== null) {\r\n let firstControlValue: MgControlBase = null;\r\n let foundControlValue: boolean = false;\r\n let savedControlToFocus: MgControlBase = this.ControlToFocus;\r\n for (let i: number = 0; i < this._controls.length; i = i + 1) {\r\n ctrl = this._controls.get_Item(i);\r\n\r\n if (!ctrl.getForm().inRefreshDisplay()) {\r\n ctrl.resetPrevVal(); // force update of the display\r\n await ctrl.SetAndRefreshDisplayValue(displayValue, isNull);\r\n\r\n // Even if the control that contains the correct value is found we don't break the loop because:\r\n // (1) we need to refresh all the controls\r\n // (2) the last control that was focus with the correct value is the one that should be checked\r\n if (!ctrl.isRadio())\r\n if (ctrlValue === null || ctrl.Value !== null && !(ctrl.Value === defaultValue) && ctrl === savedControlToFocus)\r\n ctrlValue = ctrl;\r\n else {\r\n // Fixed bug#:780359, for radio control select the correct control\r\n // if not found any ctrlvalue(the control that was in focuse)\r\n // select the first control with the correct value if not exist select the first control.\r\n\r\n // a. save the first control (with or without the correct value)\r\n if (firstControlValue === null)\r\n firstControlValue = ctrl;\r\n if (ctrl.Value !== null && !(ctrl.Value === defaultValue)) {\r\n // b. save the first control with the correct value\r\n if (!foundControlValue) {\r\n firstControlValue = ctrl;\r\n foundControlValue = true;\r\n }\r\n // c.save the control that belong to the focus control\r\n if (ctrl === savedControlToFocus)\r\n ctrlValue = ctrl;\r\n else if (ctrlValue === null)\r\n ctrlValue = firstControlValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // if there was a control that had the correct value and this field is linked to more than one\r\n // control then it means that the control that contained the correct value might have been reset by\r\n // one of its siblings so there is a need to refresh its value again.\r\n if (ctrlValue !== null) {\r\n // save the control that belong to the value on the field.\r\n this.ControlToFocus = ctrlValue;\r\n if (this._controls.length > 1) {\r\n ctrlValue.resetPrevVal(); // force update of the display\r\n await ctrlValue.SetAndRefreshDisplayValue(displayValue, isNull);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// set a reference to a control attached to this field\r\n /// </summary>\r\n /// <param name = \"ctrl\">the control which is attached to this field</param>\r\n SetControl(ctrl: MgControlBase): void {\r\n if (this._controls === null)\r\n this._controls = new List<MgControlBase>();\r\n if (!this._controls.Contains(ctrl)) {\r\n this._controls.push(ctrl);\r\n\r\n // save the first ctrl\r\n if (this._controls.length === 1)\r\n this.ControlToFocus = ctrl;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// removes a reference to a control attached to this field\r\n /// </summary>\r\n /// <param name = \"ctrl\">the control which is attached to this field</param>\r\n RemoveControl(ctrl: MgControlBase): void {\r\n this._controls.Remove(ctrl);\r\n }\r\n\r\n /// <summary>\r\n /// Returns the list of radio controls which are attached to the same field and resides on the same task.\r\n /// </summary>\r\n GetRadioCtrls(): List<MgControlBase> {\r\n let list: List<MgControlBase> = new List<MgControlBase>();\r\n\r\n if (this._controls !== null) {\r\n for (let i: number = 0; i < this._controls.length; i = i + 1) {\r\n let ctrl: MgControlBase = this._controls[i];\r\n\r\n if (ctrl.isRadio())\r\n list.push(ctrl);\r\n }\r\n }\r\n return list;\r\n }\r\n\r\n toString(): string {\r\n return NString.Format(\"(Field {0}-{1}) in task {2}\", this._id, this._varName, this.getTask());\r\n }\r\n}\r\n","import {NString} from \"@magic-xpa/mscorelib\";\r\n\r\nexport class TaskDefinitionId {\r\n\r\n CtlIndex: number = 0;\r\n ProgramIsn: number = 0;\r\n TaskIsn: number = 0;\r\n IsProgram: boolean = false;\r\n\r\n /// <summary>\r\n /// CTOR\r\n /// </summary>\r\n /// <param name=\"ctlIndex\"></param>\r\n /// <param name=\"programIsn\"></param>\r\n /// <param name=\"taskIsn\"></param>\r\n /// <param name=\"isProgram\"></para\r\n constructor(ctlIndex: number, programIsn: number, taskIsn: number, isProgram: boolean);\r\n constructor();\r\n constructor(ctlIndex?: number, programIsn?: number, taskIsn?: number, isProgram?: boolean) {\r\n if (arguments.length === 4)\r\n this.constructor_0(ctlIndex, programIsn, taskIsn, isProgram);\r\n else\r\n this.constructor_1();\r\n }\r\n\r\n private constructor_0(ctlIndex: number, programIsn: number, taskIsn: number, isProgram: boolean): void {\r\n this.CtlIndex = ctlIndex;\r\n this.ProgramIsn = programIsn;\r\n this.IsProgram = isProgram;\r\n this.TaskIsn = (isProgram ? 0 : taskIsn);\r\n\r\n\r\n }\r\n\r\n private constructor_1(): void {\r\n }\r\n\r\n /// <summary>\r\n /// return true if this task definition id define main program\r\n /// </summary>\r\n /// <returns></returns>\r\n IsMainProgram(): boolean {\r\n return this.IsProgram && this.ProgramIsn === 1;\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"obj\"></param>\r\n /// <returns></returns>\r\n Equals(obj: any): boolean {\r\n if (obj === null || !(obj instanceof TaskDefinitionId))\r\n return false;\r\n return this.GetHashCode() === obj.GetHashCode();\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <returns></returns>\r\n GetHashCode(): number {\r\n let strHashCode: string = this.HashCodeString();\r\n return NString.GetHashCode(strHashCode);\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <returns></returns>\r\n private HashCodeString(): string {\r\n let strHashCode: string = this.CtlIndex + \".\" + this.IsProgram + \".\" + this.ProgramIsn + \".\" + this.TaskIsn;\r\n return strHashCode;\r\n }\r\n\r\n toString(): string {\r\n return NString.Format(\"{{Task ID: {0} ctl {1}/prg {2}{3} (hash: {4})}}\", [\r\n this.IsProgram ? \"Program\" : \"Task\",\r\n this.CtlIndex,\r\n this.ProgramIsn,\r\n this.IsProgram ? \"\" : NString.Format(\" Task {0}\", this.TaskIsn),\r\n this.HashCodeString()\r\n ]);\r\n }\r\n\r\n\r\n fromJSON(jsonStr:string): void {\r\n let obj = JSON.parse(jsonStr);\r\n this.CtlIndex = (<TaskDefinitionId>obj).CtlIndex;\r\n this.ProgramIsn = (<TaskDefinitionId>obj).ProgramIsn;\r\n this.TaskIsn = (<TaskDefinitionId>obj).TaskIsn;\r\n this.IsProgram = (<TaskDefinitionId>obj).IsProgram;\r\n\r\n }\r\n}\r\n","import { JSON_Utils, XMLConstants } from \"@magic-xpa/utils\";\r\nimport { TaskDefinitionId } from \"./TaskDefinitionId\";\r\nimport { Events } from \"../../Events\";\r\nimport { isNullOrUndefined } from \"@magic-xpa/mscorelib\";\r\n\r\n/// <summary>\r\n/// Handler for parsing XML serialized TaskDefinitionId (TDID) table. The parser will parse all\r\n/// TDID entries, invoking an assigned delegate for each one it parses.\r\n/// </summary>\r\nexport class TaskDefinitionIdTableSaxHandler {\r\n /// <summary>\r\n /// Handler to be invoked after parsing each TDID entry.\r\n /// </summary>\r\n private readonly _newTaskDefinitionIdHandler: (taskDefinitionId: TaskDefinitionId) => void = null;\r\n\r\n constructor(newTaskDefintionIdHandler: (taskDefinitionId: TaskDefinitionId) => void) {\r\n this._newTaskDefinitionIdHandler = newTaskDefintionIdHandler;\r\n }\r\n\r\n /// <summary>\r\n /// parse the supplied buffer using the previously supplied handler\r\n /// </summary>\r\n /// <param name=\"xmlSerializedTaskDefinitionsTable\"></param>\r\n parse (xmlSerializedTaskDefinitionsTable: string): void {\r\n try {\r\n if (xmlSerializedTaskDefinitionsTable !== null) {\r\n JSON_Utils.JSONFromXML(xmlSerializedTaskDefinitionsTable, this.ParseJSON.bind(this));\r\n }\r\n }\r\n catch (ex) {\r\n Events.WriteExceptionToLog(ex);\r\n }\r\n }\r\n\r\n private ParseJSON (error, result): void {\r\n\r\n // If there was an error in parsing the XML,\r\n if (error != null) {\r\n throw error;\r\n }\r\n\r\n let ctlIndex: number = 0;\r\n let isPrg: boolean = false;\r\n let prgIsn: number = 0;\r\n let taskIsn: number = 0;\r\n\r\n let taskDefId = result['taskDefinitionId']['$'];\r\n\r\n if (!isNullOrUndefined(taskDefId[XMLConstants.MG_ATTR_CTL_IDX]))\r\n ctlIndex = +taskDefId[XMLConstants.MG_ATTR_CTL_IDX];\r\n\r\n if (!isNullOrUndefined(taskDefId[XMLConstants.MG_ATTR_PROGRAM_ISN]))\r\n prgIsn = +taskDefId[XMLConstants.MG_ATTR_PROGRAM_ISN];\r\n\r\n if (!isNullOrUndefined(taskDefId[XMLConstants.MG_ATTR_TASK_ISN]))\r\n taskIsn = +taskDefId[XMLConstants.MG_ATTR_TASK_ISN];\r\n\r\n if (!isNullOrUndefined(taskDefId[XMLConstants.MG_ATTR_ISPRG]))\r\n isPrg = taskDefId[XMLConstants.MG_ATTR_ISPRG] === '1';\r\n\r\n let taskDefinitionId: TaskDefinitionId = new TaskDefinitionId(ctlIndex, prgIsn, taskIsn, isPrg);\r\n this._newTaskDefinitionIdHandler(taskDefinitionId);\r\n }\r\n}\r\n","import {StorageAttribute} from \"@magic-xpa/utils\";\r\nimport {PIC} from \"./PIC\";\r\nimport {GuiFieldBase} from \"../data/GuiFieldBase\";\r\nimport {CommandType} from \"../../GuiEnums\";\r\nimport {GuiMgControl} from \"../../gui/GuiMgControl\";\r\nimport {GuiFormPropertyAdapter} from \"./GuiFormPropertyAdapter\";\r\n\r\nexport abstract class GuiControlPropertyAdapter extends GuiMgControl {\r\n DataType: StorageAttribute;\r\n InControl: boolean;\r\n\r\n\r\n abstract setPicStr(format: string, expId: number): void;\r\n\r\n abstract setRange(newRange: string): void;\r\n\r\n abstract setValExp(expId: number): void;\r\n\r\n abstract setField(fieldOrFieldStrID: any): void;\r\n abstract getForm(): GuiFormPropertyAdapter;\r\n\r\n abstract getLayer(): number;\r\n\r\n abstract computePIC(picExpResult: string): PIC;\r\n\r\n abstract setImageList(url: string): void;\r\n\r\n abstract setImageWithFileName(fileName: string): void;\r\n\r\n abstract isDescendentOfControl(control: GuiControlPropertyAdapter): boolean;\r\n\r\n abstract getLinkedParent(checkSubformFather: boolean): GuiControlPropertyAdapter;\r\n\r\n abstract SetEnabled(val: boolean): void;\r\n\r\n async updatePropertyLogicNesting(propId: number, commandType: CommandType, val: boolean, updateThis: boolean): Promise<void>{\r\n return Promise.resolve();\r\n }\r\n\r\n abstract IsDateTimePicture(): boolean;\r\n\r\n abstract GetCurrReadOnly(): boolean;\r\n\r\n abstract SetCurrReadOnly(newVal: boolean): void;\r\n\r\n\r\n abstract getDisplayLine(useLineForItems: boolean): number;\r\n\r\n async refreshAndSetItemsList(line: number, execComputeChoice: boolean): Promise<void>{\r\n return Promise.resolve();\r\n }\r\n\r\n async refreshTabForLayerList(line: number): Promise<void>{\r\n return Promise.resolve();\r\n }\r\n\r\n abstract getPIC(): PIC;\r\n\r\n abstract resetPrevVal(): void;\r\n\r\n abstract getField(): GuiFieldBase;\r\n\r\n abstract expressionSetAsData(): boolean;\r\n\r\n abstract clearRange(line: number): void;\r\n\r\n async ComputeAndRefreshDisplayValue(forceRefresh: boolean): Promise<void>{\r\n return Promise.resolve();\r\n }\r\n\r\n async refreshDispRange(execComputeChoice: boolean): Promise<string[]>{\r\n return Promise.resolve([]);\r\n }\r\n\r\n abstract isPropertyRepeatable(propId: number): boolean;\r\n\r\n abstract isVisible(): boolean;\r\n\r\n abstract getProp(propId: number): any ;\r\n\r\n async isParkable(checkEnabledAndVisible: boolean): Promise<boolean>{\r\n return Promise.resolve(true);\r\n }\r\n}\r\n","import {Debug, NString, RefParam} from \"@magic-xpa/mscorelib\";\r\nimport {ListboxSelectionMode, MgControlType, StorageAttribute, TransMode} from \"@magic-xpa/utils\";\r\nimport {PropParentInterface} from \"../../gui/PropParentInterface\";\r\nimport {PIC} from \"./PIC\";\r\nimport {DisplayConvertor} from \"./DisplayConvertor\";\r\nimport {BlobType} from \"../data/BlobType\";\r\nimport {PropInterface} from \"./PropInterface\";\r\nimport {GuiConstants} from \"../../GuiConstants\";\r\nimport {GuiControlPropertyAdapter} from \"./GuiControlPropertyAdapter\";\r\n\r\n/// <summary>\r\n/// PropDefaults manages the default values of properties according to the model they belong to\r\n/// </summary>\r\nexport class PropDefaults {\r\n /// <summary>\r\n /// returns a numeric value in its magic internal format\r\n /// </summary>\r\n /// <param name = \"propParent\"></param>\r\n /// <param name = \"Value\"></param>\r\n /// <returns></returns>\r\n private static getNumericMgValue(propParent: PropParentInterface, Value: string): string {\r\n let pic: PIC = new PIC(\"3\", StorageAttribute.NUMERIC, propParent.getCompIdx());\r\n return DisplayConvertor.Instance.disp2mg(Value, pic, propParent.getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"propId\"></param>\r\n /// <returns></returns>\r\n private static getDefaultValueForTask(propId: number, handled: RefParam<boolean>): string {\r\n let val: string = null;\r\n handled.value = true;\r\n\r\n switch (propId) {\r\n // for task properties\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_EVENTS:\r\n case PropInterface.PROP_TYPE_ALLOW_LOCATE_IN_QUERY:\r\n case PropInterface.PROP_TYPE_PRINT_DATA:\r\n case PropInterface.PROP_TYPE_ALLOW_RANGE:\r\n case PropInterface.PROP_TYPE_ALLOW_LOCATE:\r\n case PropInterface.PROP_TYPE_ALLOW_SORT:\r\n case PropInterface.PROP_TYPE_PRELOAD_VIEW:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_INDEX:\r\n val = \"1\"; // yes boolean\r\n break;\r\n\r\n // for task properties\r\n case PropInterface.PROP_TYPE_CLOSE_TASKS_BY_MDI_MENU:\r\n val = \"0\"; // yes boolean\r\n break;\r\n\r\n default:\r\n handled.value = false;\r\n break;\r\n }\r\n\r\n return val;\r\n }\r\n\r\n /// <summary>\r\n /// getDefaultValue returns the default value of a property\r\n /// </summary>\r\n /// <param name = \"propId\">The property id</param>\r\n /// <param name = \"parentType\">PARENT_TYPE_CONTROL, PARENT_TYPE_FORM, PARENT_TYPE_TASK</param>\r\n /// <param name = \"propParent\"></param>\r\n /// <returns> The property default value String representation</returns>\r\n static getDefaultValue(propId: number, parentType: string, propParent: PropParentInterface): string {\r\n let val: string = null;\r\n let control: GuiControlPropertyAdapter = null;\r\n\r\n if (parentType === GuiConstants.PARENT_TYPE_TASK) {\r\n let handled: RefParam<boolean> = new RefParam<boolean>(false);\r\n\r\n val = this.getDefaultValueForTask(propId, handled);\r\n\r\n if (handled.value)\r\n return val;\r\n }\r\n\r\n switch (propId) {\r\n case PropInterface.PROP_TYPE_COLOR:\r\n val = this.getNumericMgValue(propParent, \"1\");\r\n if (parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n control = <GuiControlPropertyAdapter><any>propParent;\r\n if (control.Type === MgControlType.CTRL_TYPE_BUTTON && control.IsImageButton())\r\n val = this.getNumericMgValue(propParent, \"0\");\r\n }\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_BORDER:\r\n val = \"0\"; // no boolean\r\n if (parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n control = <GuiControlPropertyAdapter><any>propParent;\r\n switch (control.Type) {\r\n case MgControlType.CTRL_TYPE_SUBFORM:\r\n // fixed bug #777633, the default value of subform control is No and not Yes\r\n val = \"0\"; // no boolean\r\n break;\r\n\r\n case MgControlType.CTRL_TYPE_TEXT:\r\n case MgControlType.CTRL_TYPE_TABLE:\r\n case MgControlType.CTRL_TYPE_LIST:\r\n case MgControlType.CTRL_TYPE_BROWSER:\r\n val = \"1\"; // yes boolean\r\n break;\r\n }\r\n }\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_MAXBOX:\r\n case PropInterface.PROP_TYPE_MINBOX:\r\n case PropInterface.PROP_TYPE_MUST_INPUT:\r\n case PropInterface.PROP_TYPE_MULTILINE:\r\n case PropInterface.PROP_TYPE_PASSWORD:\r\n case PropInterface.PROP_TYPE_HEBREW:\r\n case PropInterface.PROP_TYPE_MULTILINE_VERTICAL_SCROLL:\r\n case PropInterface.PROP_TYPE_MULTILINE_ALLOW_CR:\r\n case PropInterface.PROP_TYPE_IS_CACHED:\r\n case PropInterface.PROP_TYPE_MODIFY_IN_QUERY:\r\n case PropInterface.PROP_TYPE_SHOW_FULL_ROW:\r\n case PropInterface.PROP_TYPE_TRACK_SELECTION:\r\n case PropInterface.PROP_TYPE_COLUMN_DIVIDER:\r\n case PropInterface.PROP_TYPE_LINE_DIVIDER:\r\n case PropInterface.PROP_TYPE_THREE_STATES:\r\n case PropInterface.PROP_TYPE_REFRESH_WHEN_HIDDEN:\r\n case PropInterface.PROP_TYPE_RETAIN_FOCUS:\r\n case PropInterface.PROP_TYPE_ROW_PLACEMENT:\r\n case PropInterface.PROP_TYPE_SHOW_IN_WINDOW_MENU:\r\n case PropInterface.PROP_TYPE_DATAVIEWCONTROL:\r\n case PropInterface.PROP_TYPE_SORT_COLUMN:\r\n case PropInterface.PROP_TYPE_BEFORE_900_VERSION:\r\n case PropInterface.PROP_TYPE_FILL_WIDTH:\r\n case PropInterface.PROP_TYPE_MULTI_COLUMN_DISPLAY:\r\n case PropInterface.PROP_TYPE_AUTO_COMPLETE_MODE_WC:\r\n val = \"0\"; // no boolean\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_SYSTEM_MENU:\r\n case PropInterface.PROP_TYPE_TITLE_BAR:\r\n case PropInterface.PROP_TYPE_ENABLED:\r\n case PropInterface.PROP_TYPE_VISIBLE:\r\n case PropInterface.PROP_TYPE_TAB_IN:\r\n case PropInterface.PROP_TYPE_MODIFIABLE:\r\n case PropInterface.PROP_TYPE_HIGHLIGHTING:\r\n case PropInterface.PROP_TYPE_AUTO_REFRESH:\r\n case PropInterface.PROP_TYPE_PARK_ON_CLICK:\r\n case PropInterface.PROP_TYPE_DISPLAY_MENU:\r\n case PropInterface.PROP_TYPE_DISPLAY_TOOLBAR:\r\n case PropInterface.PROP_TYPE_SHOW_BUTTONS:\r\n case PropInterface.PROP_TYPE_LINES_AT_ROOT:\r\n case PropInterface.PROP_TYPE_SCROLL_BAR:\r\n case PropInterface.PROP_TYPE_SHOW_LINES:\r\n case PropInterface.PROP_TYPE_ALLOW_QUERY:\r\n case PropInterface.PROP_TYPE_RIGHT_BORDER:\r\n case PropInterface.PROP_TYPE_TOP_BORDER:\r\n case PropInterface.PROP_TYPE_TOP_BORDER_MARGIN:\r\n case PropInterface.PROP_TYPE_SHOW_ELLIPISIS:\r\n val = \"1\"; // yes boolean\r\n break;\r\n\r\n // all those properties need not create a default\r\n case PropInterface.PROP_TYPE_TRIGGER:\r\n case PropInterface.PROP_TYPE_PROMPT:\r\n case PropInterface.PROP_TYPE_DISPLAY_LIST:\r\n case PropInterface.PROP_TYPE_DATA:\r\n case PropInterface.PROP_TYPE_IMAGE_FILENAME:\r\n case PropInterface.PROP_TYPE_LABEL:\r\n case PropInterface.PROP_TYPE_PLACEMENT:\r\n case PropInterface.PROP_TYPE_PULLDOWN_MENU:\r\n case PropInterface.PROP_TYPE_CONTEXT_MENU:\r\n case PropInterface.PROP_TYPE_NODE_ID:\r\n case PropInterface.PROP_TYPE_NODE_PARENTID:\r\n case PropInterface.PROP_TYPE_SELECT_PROGRAM:\r\n case PropInterface.PROP_TYPE_VISIBLE_LAYERS_LIST:\r\n case PropInterface.PROP_TYPE_EXPANDED_IMAGEIDX:\r\n case PropInterface.PROP_TYPE_COLLAPSED_IMAGEIDX:\r\n case PropInterface.PROP_TYPE_OBJECT_TYPE:\r\n case PropInterface.PROP_TYPE_TAB_ORDER:\r\n case PropInterface.PROP_TYPE_LOAD_IMAGE_FROM:\r\n case PropInterface.PROP_TYPE_FORM_NAME:\r\n case PropInterface.PROP_TYPE_COLUMN_TITLE:\r\n case PropInterface.PROP_TYPE_WIDTH:\r\n case PropInterface.PROP_TYPE_PRGTSK_NUM:\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_MULTILINE_WORDWRAP_SCROLL:\r\n // 2- HORIZONTAL_SCROLL_NO\r\n case PropInterface.PROP_TYPE_BORDER_STYLE: // BORDER_TYPE_THICK\r\n val = this.getNumericMgValue(propParent, \"2\");\r\n break;\r\n case PropInterface.PROP_TYPE_WINDOW_TYPE:\r\n val = this.getNumericMgValue(propParent, \"6\");\r\n break;\r\n case PropInterface.PROP_TYPE_ROW_HIGHLIGHT_STYLE:\r\n val = this.getNumericMgValue(propParent, \"4\");\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_GRADIENT_STYLE:\r\n case PropInterface.PROP_TYPE_TABBING_ORDER:\r\n case PropInterface.PROP_TYPE_STARTUP_MODE:\r\n // 1.DEFAULT\r\n case PropInterface.PROP_TYPE_CHOICE_COLUMNS:\r\n // 1\r\n case PropInterface.PROP_TYPE_HORIZONTAL_ALIGNMENT:\r\n // 1 ALIGNMENT_TYPE_HORI_LEFT\r\n case PropInterface.PROP_TYPE_FONT:\r\n // 1\r\n case PropInterface.PROP_TYPE_WALLPAPER_STYLE:\r\n // CTRL_IMAGE_STYLE_TILED\r\n case PropInterface.PROP_TYPE_CHECKBOX_MAIN_STYLE:\r\n // CHECKBOX_MAIN_STYLE_BOX\r\n case PropInterface.PROP_TYPE_TAB_CONTROL_SIDE:\r\n // SIDE_TYPE_TOP:\r\n case PropInterface.PROP_TYPE_RAISE_AT:\r\n case PropInterface.PROP_TYPE_ALLOWED_DIRECTION:\r\n case PropInterface.PROP_TYPE_SUBFORM_TYPE:\r\n case PropInterface.PROP_TYPE_UOM:\r\n case PropInterface.PROP_TYPE_BOTTOM_POSITION_INTERVAL:\r\n val = this.getNumericMgValue(propParent, \"1\");\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_TRANSACTION_MODE:\r\n val = TransMode.Physical;\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_PARKED_COLLAPSED_IMAGEIDX:\r\n case PropInterface.PROP_TYPE_PARKED_IMAGEIDX:\r\n case PropInterface.PROP_TYPE_MINIMUM_HEIGHT:\r\n case PropInterface.PROP_TYPE_TOP:\r\n case PropInterface.PROP_TYPE_LEFT:\r\n case PropInterface.PROP_TYPE_TITLE_HEIGHT:\r\n case PropInterface.PROP_TYPE_LAYER:\r\n case PropInterface.PROP_TYPE_VISIBLE_LINES:\r\n case PropInterface.PROP_TYPE_FRAMESET_STYLE:\r\n case PropInterface.PROP_TYPE_TRANSLATOR:\r\n case PropInterface.PROP_TYPE_HOR_FAC:\r\n case PropInterface.PROP_TYPE_VER_FAC:\r\n case PropInterface.PROP_TYPE_FOCUS_COLOR:\r\n val = this.getNumericMgValue(propParent, \"0\");\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_STYLE_3D:\r\n if (parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n control = <GuiControlPropertyAdapter><any>propParent;\r\n switch (control.Type) {\r\n case MgControlType.CTRL_TYPE_COMBO:\r\n val = this.getNumericMgValue(propParent, \"2\"); // CTRL_DIM_3D\r\n break;\r\n case MgControlType.CTRL_TYPE_RADIO:\r\n case MgControlType.CTRL_TYPE_CHECKBOX:\r\n val = this.getNumericMgValue(propParent, \"3\"); // CTRL_DIM_3D_SUNKEN\r\n break;\r\n }\r\n }\r\n break;\r\n case PropInterface.PROP_TYPE_IMAGE_LIST_INDEXES:\r\n case PropInterface.PROP_TYPE_WALLPAPER:\r\n case PropInterface.PROP_TYPE_TEXT:\r\n case PropInterface.PROP_TYPE_TOOLTIP:\r\n case PropInterface.PROP_TYPE_FORMAT:\r\n val = NString.Empty;\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_IMAGE_STYLE:\r\n val = this.getNumericMgValue(propParent, \"2\"); // CTRL_IMAGE_STYLE_COPIED\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_SELECTION_MODE:\r\n val = this.getNumericMgValue(propParent, String(ListboxSelectionMode.Single));\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_INDEX:\r\n case PropInterface.PROP_TYPE_LINK_FIELD:\r\n case PropInterface.PROP_TYPE_DISPLAY_FIELD:\r\n case PropInterface.PROP_TYPE_PERSISTENT_FORM_STATE_VERSION:\r\n val = this.getNumericMgValue(propParent, \"0\");\r\n break;\r\n default:\r\n Debug.Assert(false, \"Undefined default value\");\r\n break;\r\n }\r\n return val;\r\n }\r\n\r\n static GetPropertyName(propTypeId: number): string {\r\n return \"{Field ID \" + propTypeId + \"}\";\r\n }\r\n}\r\n","import {\r\n ApplicationException,\r\n Debug,\r\n Int32,\r\n List,\r\n NNumber,\r\n NString,\r\n RefParam,\r\n StringBuilder\r\n} from '@magic-xpa/mscorelib';\r\nimport {\r\n Constants,\r\n CtrlButtonTypeGui,\r\n Logger_LogLevels,\r\n MgControlType,\r\n StorageAttribute,\r\n StrUtil,\r\n UtilImeJpn,\r\n UtilStrByteMode,\r\n XMLConstants,\r\n XmlParser\r\n} from '@magic-xpa/utils';\r\nimport {TaskDefinitionIdTableSaxHandler} from '../tasks/TaskDefinitionIdTableSaxHandler';\r\nimport {PropParentInterface} from '../../gui/PropParentInterface';\r\nimport {PIC} from './PIC';\r\nimport {TaskDefinitionId} from '../tasks/TaskDefinitionId';\r\nimport {Events} from '../../Events';\r\nimport {GuiConstants} from '../../GuiConstants';\r\nimport {PropInterface} from './PropInterface';\r\nimport {GuiControlPropertyAdapter} from './GuiControlPropertyAdapter';\r\nimport {DisplayConvertor} from './DisplayConvertor';\r\nimport {GuiFormPropertyAdapter} from './GuiFormPropertyAdapter';\r\nimport {Commands} from '../../Commands';\r\nimport {CommandType, HtmlProperties} from '../../GuiEnums';\r\nimport {GuiTaskBase} from '../tasks/GuiTaskBase';\r\nimport {PropDefaults} from './PropDefaults';\r\nimport {ToolTipHelp} from './Helps';\r\nimport {MgControlBase} from './MgControlBase';\r\n\r\nexport class CustomValidatorProp {\r\n _exp: number;\r\n _errorMessageExp: number;\r\n _errorMessage: string;\r\n};\r\n\r\nexport class CustomValidator {\r\n _valid: boolean;\r\n _errorMessage: string;\r\n\r\n constructor(valid: boolean, errMessage: string) {\r\n this._valid = valid;\r\n this._errorMessage = errMessage;\r\n }\r\n\r\n public isValid(): boolean {return this._valid;}\r\n public getErrMessage(): string {return this._errorMessage;}\r\n}\r\n\r\n/// <summary>\r\n/// this class represents a Property object of control, form or task.\r\n/// </summary>\r\nexport class Property {\r\n private _id: number = Int32.MinValue;\r\n private _dataType: StorageAttribute = StorageAttribute.NONE;\r\n private _val: string = null;\r\n private _pic: PIC = null;\r\n private _expId: number = 0;\r\n private _parentObj: PropParentInterface = null; // a reference to the parent object (Control, Form, GuiTaskBase)\r\n private _parentType: string = null; // Control|Form|GuiTaskBase\r\n private _prevValues: List<string> = null; // reverence to property values in a table\r\n private _orgValue: string = null; // reverence to property values in a table\r\n private static _numericPropertyPic: PIC = null;\r\n private _taskDefinitionId: TaskDefinitionId = null; // task definition associated with the property.\r\n // studioValue for offline state\r\n // ToDo: comment says that it is for \"Offline state\". So, do we need it inWebClient?\r\n StudioValue: string = null;\r\n private _expAlreadyComputedOnce: boolean = false; // the expression is already computed once\r\n\r\n // for web client :\r\n // save the custom properties that define by the user\r\n private customProperties: Map<string, number> = new Map();\r\n private customPropertiesValues: Map<string, any> = new Map();\r\n\r\n // for web client :\r\n // save the custom validators that define by the user\r\n private customValidatorProperties: Map<string, CustomValidatorProp> = new Map();\r\n private customValidatorValues: Map<string, CustomValidator> = new Map();\r\n\r\n static UtilImeJpn: UtilImeJpn = (UtilStrByteMode.isLocaleDefLangJPN() ? new UtilImeJpn() : null); // JPN: IME support\r\n\r\n // task definition associated with the property.\r\n get TaskDefinitionId(): TaskDefinitionId {\r\n return this._taskDefinitionId;\r\n }\r\n\r\n constructor();\r\n constructor(cId: number, cParentObj: PropParentInterface, parType: string);\r\n constructor(cId: number, cParentObj: PropParentInterface, parType: string, val: string);\r\n constructor(cId?: number, cParentObj?: PropParentInterface, parType?: string, val?: string) {\r\n if (arguments.length === 0)\r\n this.constructor_0();\r\n\r\n else if (arguments.length === 3)\r\n this.constructor_1(cId, cParentObj, parType);\r\n else\r\n this.constructor_2(cId, cParentObj, parType, val);\r\n }\r\n\r\n private constructor_0(): void {\r\n this._prevValues = new List();\r\n }\r\n\r\n private constructor_1(cId: number, cParentObj: PropParentInterface, parType: string): void {\r\n this.constructor_0();\r\n this.setId(cId);\r\n this._parentObj = cParentObj;\r\n this._parentType = parType;\r\n this.setDataType();\r\n }\r\n\r\n private constructor_2(cId: number, cParentObj: PropParentInterface, parType: string, val: string): void {\r\n this.constructor_1(cId, cParentObj, parType);\r\n this.setValue(val);\r\n this.setOrgValue();\r\n }\r\n\r\n /// <summary>\r\n /// set the id of this property\r\n /// </summary>\r\n private setId(cId: number): void {\r\n this._id = cId;\r\n }\r\n\r\n /// <summary>\r\n /// Need part input String to relevant for the class data\r\n /// </summary>\r\n /// <param name = \"parentRef\">reference to parent </param>\r\n /// <param name=\"parType\"></param>\r\n /// <param name=\"task\"></param>\r\n fillData(parentRef: PropParentInterface, parType: string, parser: XmlParser) {\r\n let endContext: number = parser.getXMLdata().indexOf(\">\", parser.getCurrIndex());\r\n\r\n if (this._parentObj === null && parentRef !== null) {\r\n this._parentObj = parentRef;\r\n this._parentType = parType;\r\n }\r\n\r\n if (endContext !== -1 && endContext < parser.getXMLdata().length) {\r\n // last position of its tag\r\n let tag: string = parser.getXMLsubstring(endContext);\r\n parser.add2CurrIndex(tag.indexOf(XMLConstants.MG_TAG_PROP) + XMLConstants.MG_TAG_PROP.length);\r\n\r\n let tokensVector: List<string> = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);\r\n if (Events.ShouldLog(Logger_LogLevels.Development)) {\r\n Events.WriteDevToLog(NString.Format(\"In Prop.FillData(): {0}\", tokensVector.toString()));\r\n }\r\n\r\n this.initElements(tokensVector);\r\n\r\n parser.setCurrIndex(endContext + XMLConstants.TAG_CLOSE.length);\r\n\r\n // deal with internal tags\r\n this.InitInnerObjects(parser);\r\n\r\n // for the properties of this types need set parameters to the parent - CONTROL (in this case)\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL)\r\n this.setControlAttributes();\r\n else if (this._parentType === GuiConstants.PARENT_TYPE_FORM)\r\n this._prevValues.SetSize(1);\r\n }\r\n else\r\n Events.WriteExceptionToLog(\"In Property.FillData(): Out of string bounds\");\r\n }\r\n\r\n private InitInnerObjects(xmlParser: XmlParser): void {\r\n let nextTag: string = xmlParser.getNextTag();\r\n\r\n if (nextTag === XMLConstants.MG_TAG_TASKDEFINITIONID_ENTRY) {\r\n let xmlBuffer: string = xmlParser.ReadToEndOfCurrentElement();\r\n this.InitTaskDefinitionId(xmlBuffer);\r\n\r\n let endContext: number = xmlParser.getXMLdata().indexOf(XMLConstants.MG_TAG_PROP + XMLConstants.TAG_CLOSE, xmlParser.getCurrIndex());\r\n xmlParser.setCurrIndex(endContext + (XMLConstants.MG_TAG_PROP + XMLConstants.TAG_CLOSE).length);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Make initialization of private elements by found tokens\r\n /// </summary>\r\n /// <param name = \"tokensVector\">found tokens, which consist attribute/value of every found element </param>\r\n private initElements(tokensVector: List<string>): void {\r\n for (let j: number = 0; j < tokensVector.length; j += 2) {\r\n let attribute: string = (tokensVector.get_Item(j));\r\n let valueStr: string = (tokensVector.get_Item(j + 1));\r\n\r\n switch (attribute) {\r\n case XMLConstants.MG_ATTR_ID:\r\n this.setId(XmlParser.getInt(valueStr));\r\n this.setDataType(); // The 'name' member must be found in this point\r\n break;\r\n case XMLConstants.MG_ATTR_STUDIO_VALUE:\r\n this.StudioValue = XmlParser.unescape(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_VALUE:\r\n if (this._id === PropInterface.PROP_TYPE_CUSTOM_PROPERTIES) {\r\n this.InitCustomProperties(XmlParser.unescape(valueStr));\r\n }\r\n if (this._id === PropInterface.PROP_TYPE_CUSTOM_VALIDATORS) {\r\n this.InitCustomValidationProperties(XmlParser.unescape(valueStr));\r\n }\r\n else {\r\n this._val = XmlParser.unescape(valueStr);\r\n this._orgValue = this._val;\r\n }\r\n break;\r\n case XMLConstants.MG_ATTR_EXP:\r\n this._expId = XmlParser.getInt(valueStr);\r\n if (this._expId > 0 && this._id === PropInterface.PROP_TYPE_TOOLTIP)\r\n this.setDataType();\r\n break;\r\n case XMLConstants.MG_ATTR_NAME:\r\n // Name is only serialized for debug version .\r\n // To avoid exceptions, add a blank case for it\r\n break;\r\n case XMLConstants.MG_ATTR_CTL_IDX:\r\n this._taskDefinitionId.CtlIndex = XmlParser.getInt(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_PROGRAM_ISN:\r\n this._taskDefinitionId.ProgramIsn = XmlParser.getInt(valueStr);\r\n break;\r\n default:\r\n Events.WriteExceptionToLog(NString.Format(\"There is no such tag in Property class. Insert case to Property.initElements for {0}\",\r\n attribute));\r\n break;\r\n }\r\n\r\n // if the property is already compute in the server , then set _expAlreadyComputedOnce\r\n if (this.IsComputedOnceOnServer())\r\n this._expAlreadyComputedOnce = true;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// init the custom properties\r\n /// </summary>\r\n private InitCustomProperties(customProprtiesStr: string): void {\r\n this.customProperties = new Map<string, number>(JSON.parse(customProprtiesStr));\r\n if (this._parentObj.IsFirstRefreshOfProps())\r\n this.SetFirstValueForCustomProperties();\r\n }\r\n\r\n // Init CustomValidator\r\n private InitCustomValidator (parser : XmlParser): void {\r\n\r\n let text: string = parser.ReadToEndOfCurrentElement();\r\n text = text.substr(text.indexOf(XMLConstants.MG_TAG_CUSTOM_VALIDATOR) + XMLConstants.MG_TAG_CUSTOM_VALIDATOR.length);\r\n let tokens: List<string> = XmlParser.getTokens(text, XMLConstants.XML_ATTR_DELIM);\r\n\r\n let c = new CustomValidatorProp();\r\n let key;\r\n\r\n for (let j = 0; j < tokens.length; j += 2)\r\n {\r\n let attribute: string = tokens.get_Item(j);\r\n let valueStr: string = tokens.get_Item(j + 1);\r\n\r\n switch (attribute) {\r\n case XMLConstants.MG_ATTR_EXP:\r\n c._exp = XmlParser.getInt(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_NAME:\r\n key = XmlParser.unescape(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_ERROR_EXP:\r\n c._errorMessageExp = XmlParser.getInt(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_ERROR:\r\n c._errorMessage = XmlParser.unescape(valueStr);\r\n break;\r\n }\r\n }\r\n\r\n this.customValidatorProperties.set (key, c);\r\n }\r\n\r\n /// <summary>\r\n /// init the custom validation properties\r\n /// </summary>\r\n private InitCustomValidationProperties(customProprtiesStr: string): void {\r\n\r\n let parser = new XmlParser(customProprtiesStr);\r\n let currTagName = parser.getNextTag();\r\n while (currTagName != null)\r\n {\r\n switch (currTagName)\r\n {\r\n case XMLConstants.MG_TAG_CUSTOM_VALIDATORS:\r\n parser.setCurrIndex2EndOfTag();\r\n this.customValidatorProperties = new Map<string, CustomValidatorProp>();\r\n break;\r\n case XMLConstants.MG_TAG_CUSTOM_VALIDATOR:\r\n this.InitCustomValidator (parser);\r\n break;\r\n default:\r\n parser.setCurrIndex2EndOfTag();\r\n break;\r\n }\r\n currTagName = parser.getNextTag();\r\n }\r\n\r\n if (this._parentObj.IsFirstRefreshOfProps())\r\n this.SetFirstValueForCustomValidationProperties();\r\n }\r\n\r\n\r\n private SetFirstValueForCustomValidationProperties(): void {\r\n\r\n for (let customProperty of this.customValidatorProperties.keys()) {\r\n this.customValidatorValues.set(<string>customProperty, new CustomValidator(true, \"\"));\r\n }\r\n\r\n // create from the value string and save it in val & orgValue\r\n this._val = this.GetArrayValuesForCustomValidationProperties()\r\n this._orgValue = this._val;\r\n }\r\n\r\n private GetArrayValuesForCustomValidationProperties(): string{\r\n let values = Array.from(this.customValidatorValues.values());\r\n let valuesStr = JSON.stringify(values);\r\n return valuesStr;\r\n }\r\n\r\n private GetArrayValuesForCustomProperties(): string{\r\n let values = Array.from(this.customPropertiesValues.values());\r\n let valuesStr = JSON.stringify(values);\r\n return valuesStr;\r\n}\r\n\r\n private SetFirstValueForCustomProperties(): void {\r\n\r\n for (let customProperty of this.customProperties.keys())\r\n this.customPropertiesValues.set(<string>customProperty, \"\");\r\n\r\n // create from the value string and save it in val & orgValue\r\n this._val = this.GetArrayValuesForCustomProperties()\r\n this._orgValue = this._val;\r\n }\r\n\r\n\r\n\r\n private InitTaskDefinitionId(xmlBuffer: string): void {\r\n let taskDefinitionIdTableSaxHandler: TaskDefinitionIdTableSaxHandler = new TaskDefinitionIdTableSaxHandler(this.SetTaskDefinitionId);\r\n taskDefinitionIdTableSaxHandler.parse(xmlBuffer);\r\n }\r\n\r\n // callback for TaskDefinitionIdTableSaxHandler\r\n SetTaskDefinitionId(taskDefinitionId: TaskDefinitionId): void {\r\n this._taskDefinitionId = taskDefinitionId;\r\n }\r\n\r\n private setDataType(): void {\r\n let compIdx: number = this._parentObj.getCompIdx();\r\n\r\n this._pic = null;\r\n\r\n if (this._id === Int32.MinValue) {\r\n Events.WriteExceptionToLog(NString.Format(\"To fill dataType member in Property.FillDataType must id!={0}\", Int32.MinValue));\r\n return;\r\n }\r\n\r\n switch (this._id) {\r\n case PropInterface.PROP_TYPE_TITLE_BAR:\r\n case PropInterface.PROP_TYPE_DISPLAY_MENU:\r\n case PropInterface.PROP_TYPE_BORDER:\r\n case PropInterface.PROP_TYPE_HEBREW:\r\n case PropInterface.PROP_TYPE_MODIFY_IN_QUERY:\r\n\r\n\r\n case PropInterface.PROP_TYPE_SYSTEM_MENU:\r\n case PropInterface.PROP_TYPE_END_CONDITION:\r\n case PropInterface.PROP_TYPE_SELECTION:\r\n case PropInterface.PROP_TYPE_ALLOW_MODIFY:\r\n case PropInterface.PROP_TYPE_ALLOW_CREATE:\r\n case PropInterface.PROP_TYPE_ALLOW_DELETE:\r\n case PropInterface.PROP_TYPE_ALLOW_QUERY:\r\n case PropInterface.PROP_TYPE_ALLOW_RANGE:\r\n case PropInterface.PROP_TYPE_ALLOW_LOCATE:\r\n case PropInterface.PROP_TYPE_ALLOW_SORT:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_INDEX:\r\n case PropInterface.PROP_TYPE_ALLOW_LOCATE_IN_QUERY:\r\n case PropInterface.PROP_TYPE_CONFIRM_UPDATE:\r\n case PropInterface.PROP_TYPE_FORCE_SUFFIX:\r\n case PropInterface.PROP_TYPE_FORCE_DELETE:\r\n case PropInterface.PROP_TYPE_MUST_INPUT:\r\n case PropInterface.PROP_TYPE_MODIFIABLE:\r\n case PropInterface.PROP_TYPE_VISIBLE:\r\n case PropInterface.PROP_TYPE_ENABLED:\r\n case PropInterface.PROP_TYPE_CONFIRM_CANCEL:\r\n case PropInterface.PROP_TYPE_REPEATABLE:\r\n case PropInterface.PROP_TYPE_HIGHLIGHTING:\r\n case PropInterface.PROP_TYPE_PASSWORD:\r\n case PropInterface.PROP_TYPE_MULTILINE:\r\n case PropInterface.PROP_TYPE_IS_CACHED:\r\n case PropInterface.PROP_TYPE_PRELOAD_VIEW:\r\n case PropInterface.PROP_TYPE_MULTILINE_VERTICAL_SCROLL:\r\n case PropInterface.PROP_TYPE_MULTILINE_ALLOW_CR:\r\n case PropInterface.PROP_TYPE_ALLOW_COL_RESIZE:\r\n case PropInterface.PROP_TYPE_ALLOW_REORDER:\r\n case PropInterface.PROP_TYPE_SHOW_LINES:\r\n case PropInterface.PROP_TYPE_SORT_COLUMN:\r\n case PropInterface.PROP_TYPE_COL_ALLOW_FILTERING:\r\n case PropInterface.PROP_TYPE_DISPLAY_STATUS_BAR:\r\n case PropInterface.PROP_TYPE_AUTO_REFRESH:\r\n case PropInterface.PROP_TYPE_PARK_ON_CLICK:\r\n case PropInterface.PROP_TYPE_SHOW_FULL_ROW:\r\n case PropInterface.PROP_TYPE_TRACK_SELECTION:\r\n case PropInterface.PROP_TYPE_SHOW_BUTTONS:\r\n case PropInterface.PROP_TYPE_LINES_AT_ROOT:\r\n case PropInterface.PROP_TYPE_ALLOW_EMPTY_DATAVIEW:\r\n case PropInterface.PROP_TYPE_SCROLL_BAR:\r\n case PropInterface.PROP_TYPE_COLUMN_DIVIDER:\r\n case PropInterface.PROP_TYPE_LINE_DIVIDER:\r\n case PropInterface.PROP_TYPE_THREE_STATES:\r\n case PropInterface.PROP_TYPE_REFRESH_WHEN_HIDDEN:\r\n case PropInterface.PROP_TYPE_ALLOW_OPTION:\r\n case PropInterface.PROP_TYPE_RETAIN_FOCUS:\r\n case PropInterface.PROP_TYPE_PRINT_DATA:\r\n case PropInterface.PROP_TYPE_CLOSE_TASKS_BY_MDI_MENU:\r\n case PropInterface.PROP_TYPE_DATAVIEWCONTROL:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_OPEN_TASK_WINDOW:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_EVENTS:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_INDEX_OPTIMIZATION:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_RANGE:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_LOCATE:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_POSITION:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_SQL_RANGE:\r\n case PropInterface.PROP_TYPE_BEFORE_900_VERSION:\r\n case PropInterface.PROP_TYPE_FILL_WIDTH:\r\n case PropInterface.PROP_TYPE_MULTI_COLUMN_DISPLAY:\r\n case PropInterface.PROP_TYPE_IS_ROUTER_OUTLET:\r\n case PropInterface.PROP_TYPE_DEFAULT_OUTLET:\r\n case PropInterface.PROP_TYPE_SERVER_READ_AHEAD:\r\n case PropInterface.PROP_TYPE_AUTO_COMPLETE_MODE_WC:\r\n this._dataType = StorageAttribute.BOOLEAN;\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_IMAGE_FILENAME:\r\n case PropInterface.PROP_TYPE_EVAL_END_CONDITION:\r\n case PropInterface.PROP_TYPE_FRAME_NAME:\r\n case PropInterface.PROP_TYPE_NAME:\r\n case PropInterface.PROP_TYPE_TRASACTION_BEGIN:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_TRANSACTION_MODE:\r\n case PropInterface.PROP_TYPE_WALLPAPER:\r\n case PropInterface.PROP_TYPE_ATTRIBUTE:\r\n case PropInterface.PROP_TYPE_TRIGGER:\r\n case PropInterface.PROP_TYPE_SELECT_MODE:\r\n case PropInterface.PROP_TYPE_TASK_ID:\r\n case PropInterface.PROP_TYPE_TABBING_CYCLE:\r\n case PropInterface.PROP_TYPE_PARAMETERS:\r\n case PropInterface.PROP_TYPE_IMAGE_LIST_INDEXES:\r\n case PropInterface.PROP_TYPE_VISIBLE_LAYERS_LIST:\r\n case PropInterface.PROP_TYPE_OBJECT_TYPE:\r\n case PropInterface.PROP_TYPE_REAL_OBJECT_TYPE:\r\n case PropInterface.PROP_TYPE_DATAVIEWCONTROL_FIELDS:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_RANGE_ORDER:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_LOCATE_ORDER:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_POSITION_USAGE:\r\n case PropInterface.PROP_TYPE_TASK_MODE:\r\n case PropInterface.PROP_TYPE_CUSTOM_PROPERTIES:\r\n case PropInterface.PROP_TYPE_CUSTOM_VALIDATORS:\r\n case PropInterface.PROP_TYPE_PARK_FIRST_ON:\r\n this._dataType = StorageAttribute.ALPHA;\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_COLUMN_TITLE:\r\n case PropInterface.PROP_TYPE_DISPLAY_LIST:\r\n case PropInterface.PROP_TYPE_LABEL:\r\n case PropInterface.PROP_TYPE_FORMAT:\r\n case PropInterface.PROP_TYPE_RANGE:\r\n case PropInterface.PROP_TYPE_FORM_NAME:\r\n case PropInterface.PROP_TYPE_ADDITIONAL_INFORMATION:\r\n case PropInterface.PROP_TYPE_TEXT:\r\n case PropInterface.PROP_TYPE_HINT:\r\n this._dataType = StorageAttribute.UNICODE;\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_UOM:\r\n case PropInterface.PROP_TYPE_HOR_FAC:\r\n case PropInterface.PROP_TYPE_VER_FAC:\r\n case PropInterface.PROP_TYPE_TAB_ORDER:\r\n case PropInterface.PROP_TYPE_WALLPAPER_STYLE:\r\n case PropInterface.PROP_TYPE_INDEX:\r\n case PropInterface.PROP_TYPE_LINK_FIELD:\r\n case PropInterface.PROP_TYPE_DISPLAY_FIELD:\r\n case PropInterface.PROP_TYPE_PULLDOWN_MENU:\r\n case PropInterface.PROP_TYPE_WINDOW_TYPE:\r\n case PropInterface.PROP_TYPE_IMAGE_STYLE:\r\n case PropInterface.PROP_TYPE_AUTO_FIT:\r\n case PropInterface.PROP_TYPE_RAISE_AT:\r\n case PropInterface.PROP_TYPE_EXPAND_WINDOW:\r\n case PropInterface.PROP_TYPE_VISIBLE_LINES:\r\n case PropInterface.PROP_TYPE_CHOICE_COLUMNS:\r\n case PropInterface.PROP_TYPE_STYLE_3D:\r\n case PropInterface.PROP_TYPE_FONT:\r\n case PropInterface.PROP_TYPE_LAYER:\r\n case PropInterface.PROP_TYPE_WIDTH:\r\n case PropInterface.PROP_TYPE_TITLE_HEIGHT:\r\n case PropInterface.PROP_TYPE_COLOR:\r\n case PropInterface.PROP_TYPE_LEFT:\r\n case PropInterface.PROP_TYPE_TOP:\r\n case PropInterface.PROP_TYPE_TOOLTIP:\r\n case PropInterface.PROP_TYPE_HELP_SCR:\r\n case PropInterface.PROP_TYPE_LINES_IN_TABLE:\r\n case PropInterface.PROP_TYPE_SELECTION_ROWS:\r\n case PropInterface.PROP_TYPE_HORIZONTAL_ALIGNMENT:\r\n case PropInterface.PROP_TYPE_MULTILINE_WORDWRAP_SCROLL:\r\n case PropInterface.PROP_TYPE_ROW_HEIGHT:\r\n case PropInterface.PROP_TYPE_WINDOW_WIDTH:\r\n case PropInterface.PROP_TYPE_MAIN_DISPLAY:\r\n case PropInterface.PROP_TYPE_TRANSLATOR:\r\n case PropInterface.PROP_TYPE_FRAMESET_STYLE:\r\n case PropInterface.PROP_TYPE_FRAME_TYPE:\r\n case PropInterface.PROP_TYPE_ALLOWED_DIRECTION:\r\n case PropInterface.PROP_TYPE_ROW_HIGHLIGHT_STYLE:\r\n case PropInterface.PROP_TYPE_VERTICAL_ALIGNMENT:\r\n case PropInterface.PROP_TYPE_TABBING_ORDER:\r\n case PropInterface.PROP_TYPE_STATIC_TYPE:\r\n case PropInterface.PROP_TYPE_BUTTON_STYLE:\r\n case PropInterface.PROP_TYPE_LOAD_IMAGE_FROM:\r\n case PropInterface.PROP_TYPE_SUBFORM_TYPE:\r\n case PropInterface.PROP_TYPE_BOTTOM_POSITION_INTERVAL:\r\n case PropInterface.PROP_TYPE_SELECTION_MODE:\r\n case PropInterface.PROP_TYPE_PRGTSK_NUM:\r\n case PropInterface.PROP_TYPE_PERSISTENT_FORM_STATE_VERSION:\r\n case PropInterface.PROP_TYPE_SCROLL_BAR_THUMB:\r\n case PropInterface.PROP_TYPE_BINDING_LEVEL:\r\n case PropInterface.PROP_TYPE_CONNECTED_ZOOM_CONTROL:\r\n case PropInterface.PROP_TYPE_SELECT_PROGRAM:\r\n if (this._id === PropInterface.PROP_TYPE_TOOLTIP && this._expId > 0)\r\n this._dataType = StorageAttribute.UNICODE;\r\n // pic will be set according to exp length\r\n else {\r\n this._dataType = StorageAttribute.NUMERIC;\r\n if (Property._numericPropertyPic == null)\r\n Property._numericPropertyPic = new PIC(\"N6\", StorageAttribute.NUMERIC, compIdx);\r\n this._pic = Property._numericPropertyPic;\r\n }\r\n break;\r\n case PropInterface.PROP_TYPE_RETURN_ACTION:\r\n this._dataType = StorageAttribute.NONE;\r\n break;\r\n case PropInterface.PROP_TYPE_DATA:\r\n this._dataType = (<GuiControlPropertyAdapter><any>this._parentObj).DataType;\r\n break;\r\n case PropInterface.PROP_TYPE_POP_UP:\r\n case PropInterface.PROP_TYPE_ORIENTATION_LOCK:\r\n case PropInterface.PROP_TYPE_ENTER_ANIMATION:\r\n case PropInterface.PROP_TYPE_EXIT_ANIMATION:\r\n case PropInterface.PROP_TYPE_NAVIGATION_DRAWER_MENU:\r\n case PropInterface.PROP_TYPE_ACTION_BAR_MENU:\r\n\r\n case PropInterface.PROP_TYPE_OPEN_PICKER:\r\n case PropInterface.PROP_TYPE_OPEN_EDIT_DIALOG:\r\n case PropInterface.PROP_TYPE_DEFAULT_ALIGNMENT:\r\n case PropInterface.PROP_TYPE_KEYBOARD_TYPE:\r\n case PropInterface.PROP_TYPE_KEYBOARD_RETURN_KEY:\r\n case PropInterface.PROP_TYPE_ALLOW_SUGGESTIONS:\r\n case PropInterface.PROP_TYPE_MOBILE_IMAGE_LIST_FILE_NAME:\r\n case PropInterface.PROP_TYPE_SWIPE_REFRESH:\r\n // No handling is needed here as the properties are valid for mobile as for now.\r\n break;\r\n default:\r\n Events.WriteExceptionToLog(NString.Format(\"in Property.setDataType() no case for: {0}\", this._id));\r\n break;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// set attributes of a the parent control\r\n /// </summary>\r\n private setControlAttributes() {\r\n if (this._parentObj == null || this._parentType !== GuiConstants.PARENT_TYPE_CONTROL) {\r\n Events.WriteExceptionToLog(\"in Property.setControlAttributes() there is no parent or the parent is not a control\");\r\n return;\r\n }\r\n\r\n let parentControl = <GuiControlPropertyAdapter><any>this._parentObj;\r\n switch (this._id) {\r\n case PropInterface.PROP_TYPE_FRAME_NAME:\r\n case PropInterface.PROP_TYPE_NAME:\r\n parentControl.Name = this._val;\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_ATTRIBUTE:\r\n parentControl.DataType = <StorageAttribute>this._val[0];\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_FORMAT:\r\n parentControl.setPicStr(this._val, this._expId);\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_RANGE:\r\n parentControl.setRange(this._val);\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_DATA:\r\n if (this._expId > 0)\r\n parentControl.setValExp(this._expId);\r\n else if (this._val != null)\r\n parentControl.setField(this._val);\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_BUTTON_STYLE:\r\n if (this._val != null)\r\n parentControl.ButtonStyle = <CtrlButtonTypeGui>this.GetComputedValueInteger();\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_LAYER:\r\n if (this._val != null)\r\n parentControl.Layer = this.GetComputedValueInteger();\r\n break;\r\n\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n\r\n\r\n /// <summary>\r\n /// returns the id of the property\r\n /// </summary>\r\n getID(): number {\r\n return this._id;\r\n }\r\n\r\n /// <summary>\r\n /// set the value of the property and take care of the presentation the value must be in a magic internal\r\n /// format\r\n /// </summary>\r\n /// <param name = \"mgVal\">the new value</param>\r\n setValue(mgVal: string): void {\r\n let compIdx: number = this._parentObj.getCompIdx();\r\n\r\n if (this._id === PropInterface.PROP_TYPE_DATA || this._id === PropInterface.PROP_TYPE_NODE_ID || this._id === PropInterface.PROP_TYPE_NODE_PARENTID)\r\n return;\r\n\r\n if (this._dataType === StorageAttribute.NONE)\r\n this.setDataType();\r\n\r\n switch (this._dataType) {\r\n case StorageAttribute.NUMERIC:\r\n if (mgVal == null)\r\n mgVal = \"FF00000000000000000000000000000000000000\";\r\n this._val = DisplayConvertor.Instance.mg2disp(mgVal, \"\", this._pic, false, compIdx, false).trim();\r\n break;\r\n\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.BLOB:\r\n case StorageAttribute.BLOB_VECTOR:\r\n case StorageAttribute.BOOLEAN:\r\n case StorageAttribute.UNICODE:\r\n this._val = mgVal;\r\n break;\r\n\r\n default:\r\n throw new ApplicationException(\"in Property.setValue() illegal data type: \" + this._dataType);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// set an int value directly, as is done when initializing the property\r\n /// </summary>\r\n /// <param name=\"val\"></param>\r\n SetValue(val: number): void {\r\n this._val = String(val);\r\n }\r\n\r\n /// <summary>\r\n /// set the value of the property and take care of the presentation the value must be in a magic internal format\r\n /// </summary>\r\n setOrgValue(): void {\r\n this._orgValue = this._val;\r\n }\r\n\r\n\r\n\r\n /// <summary>\r\n /// </summary>\r\n /// <returns> the task by the parent object</returns>\r\n GetTaskByParentObject(): GuiTaskBase {\r\n let task: GuiTaskBase = null;\r\n\r\n if (this._parentType === GuiConstants.PARENT_TYPE_FORM)\r\n task = (<GuiFormPropertyAdapter><any>this._parentObj).getTask();\r\n else if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL)\r\n task = (<GuiControlPropertyAdapter><any>this._parentObj).getForm().getTask();\r\n else if (this._parentType === GuiConstants.PARENT_TYPE_TASK)\r\n task = <GuiTaskBase>this._parentObj;\r\n\r\n return task;\r\n }\r\n\r\n /// <summary>\r\n /// refresh the display for control properties and form properties only\r\n /// </summary>\r\n /// <param name = \"forceRefresh\">if true then refresh is forced regardless of the previous value</param>\r\n async RefreshDisplay(forceRefresh: boolean): Promise<void> {\r\n await this.RefreshDisplayWithCurrentLine(forceRefresh, Int32.MinValue);\r\n }\r\n\r\n /// <summary>\r\n /// return TRUE if the property need to be skip from the refresh properties. for a control\r\n /// </summary>\r\n /// <returns></returns>\r\n private ShouldSkipRefreshControl(): boolean {\r\n let skip: boolean = false;\r\n let mgControl: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n\r\n switch (this._id) {\r\n case PropInterface.PROP_TYPE_HEBREW:\r\n if (mgControl.isTableControl())\r\n skip = true;\r\n break;\r\n case PropInterface.PROP_TYPE_NODE_ID:\r\n case PropInterface.PROP_TYPE_NODE_PARENTID:\r\n case PropInterface.PROP_TYPE_DATA:\r\n case PropInterface.PROP_TYPE_HIGHLIGHTING:\r\n case PropInterface.PROP_TYPE_MUST_INPUT:\r\n\r\n case PropInterface.PROP_TYPE_HELP_SCR:\r\n case PropInterface.PROP_TYPE_SELECT_PROGRAM:\r\n case PropInterface.PROP_TYPE_SELECT_MODE:\r\n case PropInterface.PROP_TYPE_ALLOWED_DIRECTION:\r\n case PropInterface.PROP_TYPE_RETURN_ACTION:\r\n case PropInterface.PROP_TYPE_ATTRIBUTE:\r\n case PropInterface.PROP_TYPE_REPEATABLE:\r\n case PropInterface.PROP_TYPE_FRAME_NAME:\r\n case PropInterface.PROP_TYPE_TRIGGER:\r\n case PropInterface.PROP_TYPE_TAB_ORDER:\r\n case PropInterface.PROP_TYPE_IS_CACHED:\r\n case PropInterface.PROP_TYPE_LAYER:\r\n case PropInterface.PROP_TYPE_AUTO_FIT:\r\n // case PropInterface.PROP_TYPE_MULTILINE_VERTICAL_SCROLL:\r\n // case PropInterface.PROP_TYPE_MULTILINE_WORDWRAP_SCROLL:\r\n case PropInterface.PROP_TYPE_RAISE_AT:\r\n case PropInterface.PROP_TYPE_FRAMESET_STYLE:\r\n case PropInterface.PROP_TYPE_FRAME_TYPE:\r\n case PropInterface.PROP_TYPE_RANGE:\r\n case PropInterface.PROP_TYPE_WINDOW_WIDTH:\r\n\r\n case PropInterface.PROP_TYPE_TABBING_ORDER:\r\n case PropInterface.PROP_TYPE_AUTO_REFRESH:\r\n case PropInterface.PROP_TYPE_PARAMETERS:\r\n case PropInterface.PROP_TYPE_OBJECT_TYPE:\r\n case PropInterface.PROP_TYPE_RETAIN_FOCUS:\r\n case PropInterface.PROP_TYPE_SUBFORM_TYPE:\r\n case PropInterface.PROP_TYPE_REAL_OBJECT_TYPE:\r\n case PropInterface.PROP_TYPE_ADDITIONAL_INFORMATION:\r\n case PropInterface.PROP_TYPE_DATAVIEWCONTROL:\r\n case PropInterface.PROP_TYPE_DATAVIEWCONTROL_FIELDS:\r\n case PropInterface.PROP_TYPE_PRGTSK_NUM:\r\n case PropInterface.PROP_TYPE_INDEX:\r\n case PropInterface.PROP_TYPE_DISPLAY_FIELD:\r\n case PropInterface.PROP_TYPE_LINK_FIELD:\r\n case PropInterface.PROP_TYPE_BEFORE_900_VERSION:\r\n case PropInterface.PROP_TYPE_REFRESH_WHEN_HIDDEN:\r\n case PropInterface.PROP_TYPE_SERVER_READ_AHEAD:\r\n skip = true;\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_BUTTON_STYLE:\r\n if (!(<GuiControlPropertyAdapter><any>this._parentObj).isRadio())\r\n skip = true;\r\n break;\r\n\r\n\r\n default:\r\n break;\r\n }\r\n return skip;\r\n }\r\n\r\n /// <summary>\r\n /// return TRUE if the property need to be skip from the refresh properties. for a form\r\n /// </summary>\r\n /// <returns></returns>\r\n private ShouldSkipRefreshForm(): boolean {\r\n Debug.Assert(this._parentType === GuiConstants.PARENT_TYPE_FORM);\r\n\r\n let skip: boolean = false;\r\n let mgFormBase: GuiFormPropertyAdapter = <GuiFormPropertyAdapter><any>this._parentObj;\r\n\r\n // Compute properties: all those properties will be refresh only one time\r\n switch (this._id) {\r\n case PropInterface.PROP_TYPE_WINDOW_TYPE:\r\n if (!this._parentObj.IsFirstRefreshOfProps())\r\n skip = true;\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_LINES_IN_TABLE:\r\n case PropInterface.PROP_TYPE_HELP_SCR:\r\n case PropInterface.PROP_TYPE_TABBING_ORDER:\r\n case PropInterface.PROP_TYPE_PERSISTENT_FORM_STATE_VERSION:\r\n skip = true;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n // refresh only the relevant subform properties (color, font, etc.)\r\n if (!skip && mgFormBase.isSubForm()) {\r\n skip = true;\r\n switch (this._id) {\r\n\r\n case PropInterface.PROP_TYPE_CUSTOM_PROPERTIES:\r\n case PropInterface.PROP_TYPE_CUSTOM_VALIDATORS:\r\n skip = false;\r\n break;\r\n }\r\n }\r\n\r\n return skip;\r\n }\r\n\r\n /// <summary>\r\n /// return TRUE if the property need to be skip from the refresh properties. for a task\r\n /// </summary>\r\n /// <returns></returns>\r\n private ShouldSkipRefreshTask(): boolean {\r\n let skip: boolean = false;\r\n\r\n switch (this._id) {\r\n case PropInterface.PROP_TYPE_ALLOW_CREATE:\r\n case PropInterface.PROP_TYPE_ALLOW_DELETE:\r\n case PropInterface.PROP_TYPE_ALLOW_MODIFY:\r\n case PropInterface.PROP_TYPE_ALLOW_QUERY:\r\n case PropInterface.PROP_TYPE_ALLOW_RANGE:\r\n case PropInterface.PROP_TYPE_ALLOW_LOCATE:\r\n case PropInterface.PROP_TYPE_ALLOW_SORT:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_INDEX:\r\n case PropInterface.PROP_TYPE_TABBING_CYCLE:\r\n case PropInterface.PROP_TYPE_CONFIRM_CANCEL:\r\n case PropInterface.PROP_TYPE_CONFIRM_UPDATE:\r\n case PropInterface.PROP_TYPE_END_CONDITION:\r\n case PropInterface.PROP_TYPE_EVAL_END_CONDITION:\r\n case PropInterface.PROP_TYPE_FORCE_SUFFIX:\r\n case PropInterface.PROP_TYPE_FORCE_DELETE:\r\n case PropInterface.PROP_TYPE_TASK_MODE:\r\n case PropInterface.PROP_TYPE_SELECTION:\r\n case PropInterface.PROP_TYPE_TRASACTION_BEGIN:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_TRANSACTION_MODE:\r\n case PropInterface.PROP_TYPE_PRINT_DATA:\r\n case PropInterface.PROP_TYPE_CLOSE_TASKS_BY_MDI_MENU:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_OPEN_TASK_WINDOW:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_EVENTS:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_CHUNK_SIZE:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_INDEX_OPTIMIZATION:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_RANGE:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_RANGE_ORDER:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_LOCATE:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_LOCATE_ORDER:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_POSITION:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_POSITION_USAGE:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_SQL_RANGE:\r\n skip = true;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return skip;\r\n }\r\n\r\n /// <summary>\r\n /// check if the property should be ignored by RefreshDisplay() skip properties which has nothing to do with\r\n /// the display\r\n /// </summary>\r\n /// <returns> true if the property should be ignored</returns>\r\n private ShouldSkipRefresh(): boolean {\r\n let skip: boolean = false;\r\n switch (this._parentType) {\r\n case GuiConstants.PARENT_TYPE_CONTROL:\r\n skip = this.ShouldSkipRefreshControl();\r\n break;\r\n case GuiConstants.PARENT_TYPE_FORM:\r\n skip = this.ShouldSkipRefreshForm();\r\n break;\r\n case GuiConstants.PARENT_TYPE_TASK:\r\n skip = this.ShouldSkipRefreshTask();\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n switch (this._id) {\r\n case PropInterface.PROP_TYPE_POP_UP:\r\n case PropInterface.PROP_TYPE_ORIENTATION_LOCK:\r\n case PropInterface.PROP_TYPE_ENTER_ANIMATION:\r\n case PropInterface.PROP_TYPE_EXIT_ANIMATION:\r\n case PropInterface.PROP_TYPE_NAVIGATION_DRAWER_MENU:\r\n case PropInterface.PROP_TYPE_ACTION_BAR_MENU:\r\n case PropInterface.PROP_TYPE_OPEN_PICKER:\r\n case PropInterface.PROP_TYPE_OPEN_EDIT_DIALOG:\r\n case PropInterface.PROP_TYPE_DEFAULT_ALIGNMENT:\r\n case PropInterface.PROP_TYPE_KEYBOARD_TYPE:\r\n case PropInterface.PROP_TYPE_KEYBOARD_RETURN_KEY:\r\n case PropInterface.PROP_TYPE_ALLOW_SUGGESTIONS:\r\n case PropInterface.PROP_TYPE_MOBILE_IMAGE_LIST_FILE_NAME:\r\n skip = true;\r\n break;\r\n }\r\n return skip;\r\n }\r\n\r\n /// <summary>\r\n /// refresh the display for control properties and form properties only\r\n /// </summary>\r\n /// <param name = \"forceRefresh\">if true then refresh is forced regardless of the previous value</param>\r\n /// <param name = \"currLine\">line number in table when refreshing a column if the current line is refreshed set to\r\n /// (Integer.MIN_VALUE)\r\n /// </param>\r\n private async RefreshDisplayWithCurrentLine(forceRefresh: boolean, currLine: number): Promise<void> {\r\n await this.RefreshDisplayWithCurrLineAndCheckSkipRefresh(forceRefresh, currLine, true);\r\n }\r\n\r\n // This method checks if we must refresh the property even if it has expression\r\n // For now it returns true for properties with text for multilingual support\r\n\r\n // todo Need to add here check if user wants multilingual support at all\r\n SkipWhenNoExpression(): boolean {\r\n let skipWhenNoExpression = true;\r\n\r\n let ctrl = ((this._parentObj instanceof GuiControlPropertyAdapter) ? <GuiControlPropertyAdapter>this._parentObj : null);\r\n if ((ctrl != null && ctrl.isButton() && this._id === PropInterface.PROP_TYPE_FORMAT) ||\r\n (ctrl != null && ctrl.isComboBox() && this._id === PropInterface.PROP_TYPE_LABEL) ||\r\n (ctrl != null && ctrl.isListBox() && this._id === PropInterface.PROP_TYPE_LABEL) ||\r\n (ctrl != null && ctrl.isRadio() && this._id === PropInterface.PROP_TYPE_LABEL) ||\r\n (ctrl != null && ctrl.isCheckBox() && this._id === PropInterface.PROP_TYPE_LABEL) ||\r\n (ctrl != null && ctrl.isTabControl() && this._id === PropInterface.PROP_TYPE_LABEL) ||\r\n (ctrl != null && ctrl.isImageControl() && this._id === PropInterface.PROP_TYPE_IMAGE_FILENAME) ||\r\n (ctrl != null && ctrl.IsImageButton() && this._id === PropInterface.PROP_TYPE_IMAGE_FILENAME) ||\r\n (ctrl != null && ctrl.isColumnControl() && this._id === PropInterface.PROP_TYPE_COLUMN_TITLE) ||\r\n (this._id === PropInterface.PROP_TYPE_DISPLAY_LIST) ||\r\n (this._id === PropInterface.PROP_TYPE_TEXT) ||\r\n (this._id === PropInterface.PROP_TYPE_TOOLTIP) ||\r\n (this._id === PropInterface.PROP_TYPE_HINT) ||\r\n (this._id === PropInterface.PROP_TYPE_PASSWORD) ||\r\n (this._id === PropInterface.PROP_TYPE_CUSTOM_PROPERTIES) ||\r\n (this._id === PropInterface.PROP_TYPE_CUSTOM_VALIDATORS) ||\r\n (this._id === PropInterface.PROP_TYPE_VISIBLE) ||\r\n (this._id === PropInterface.PROP_TYPE_ENABLED)||\r\n (this._id === PropInterface.PROP_TYPE_BINDING_LEVEL))\r\n skipWhenNoExpression = false;\r\n return skipWhenNoExpression;\r\n }\r\n\r\n /// <summary>\r\n /// Reevaluate the property value (if it has an expression) and\r\n /// refresh the display for control properties and form properties only\r\n ///\r\n /// This method was (as its name implies) relevant only for GUI properties, i.e. properties that affect on the display.\r\n /// Non-GUI properties (such as PROP_TYPE_TAB_IN) were skipped and not reevaluated.\r\n /// The distinction between GUI properties and non-GUI properties is done by the method �ShouldSkipRefresh�E\r\n /// Now we have non-GUI properties that are reevaluated in this function:\r\n /// PROP_TYPE_MODIFY_IN_QUERY, PROP_TYPE_CONTEXT_MENU, PROP_TYPE_TAB_IN, PROP_TYPE_PARK_ON_CLICK.\r\n /// For these properties we do not execute explicitly their expressions (it was done in 1.9 by CheckProp function),\r\n /// we only use their values by GetComputedBooleanProperty function. It is done for do not execute the property expression\r\n /// in GUI thread. In GUI thread we only use the property value. So it is needed to reevaluate the property value.\r\n /// </summary>\r\n /// <param name = \"forceRefresh\">if true then refresh is forced regardless of the previous value</param>\r\n /// <param name = \"currLine\">line number in table when refreshing a column if the current line is refreshed set to\r\n /// (Integer.MIN_VALUE)\r\n /// </param>\r\n async RefreshDisplayWithCurrLineAndCheckSkipRefresh(forceRefresh: boolean, currLine: number, checkSkipRefresh: boolean): Promise<void> {\r\n let ctrl: GuiControlPropertyAdapter = null;\r\n let line: number = 0;\r\n let prevValue: string;\r\n let valChanged: boolean = true;\r\n\r\n if (this._val === null && this._expId === 0) {\r\n Events.WriteExceptionToLog(\"in Property.RefreshDisplay() null value and expression\");\r\n return;\r\n }\r\n\r\n if (checkSkipRefresh && this.ShouldSkipRefresh())\r\n return;\r\n\r\n if (this._expId === 0 && this.SkipWhenNoExpression())\r\n return;\r\n\r\n if (this._prevValues.length === 0)\r\n this.setPrevArraySize();\r\n\r\n await this.ComputeValue();\r\n\r\n // before update the property need to prepare data\r\n switch (this._parentType) {\r\n case GuiConstants.PARENT_TYPE_CONTROL:\r\n ctrl = <GuiControlPropertyAdapter><any>this._parentObj;\r\n // recompute the PIC for format properties\r\n if (this._id === PropInterface.PROP_TYPE_FORMAT && this._expId > 0)\r\n ctrl.computePIC(this._val);\r\n\r\n if (ctrl.IsRepeatable && !ctrl.getForm().isRefreshRepeatableAllowed())\r\n return;\r\n\r\n if (currLine === Int32.MinValue)\r\n line = this.getLine();\r\n else\r\n line = currLine;\r\n\r\n // check if the value of the property was changed to prevent sending redundant\r\n // javascript commands to the browser\r\n prevValue = this._prevValues.get_Item(line);\r\n\r\n\r\n if (!forceRefresh && (this._val === prevValue)\r\n && this._id !== PropInterface.PROP_TYPE_MODIFIABLE\r\n && this._id !== PropInterface.PROP_TYPE_VISIBLE\r\n && this._id !== PropInterface.PROP_TYPE_ENABLED)\r\n return;\r\n\r\n // to prevent recursion while updating column visibility\r\n if (ctrl.Type === MgControlType.CTRL_TYPE_COLUMN\r\n && this._id === PropInterface.PROP_TYPE_VISIBLE\r\n && this._val === prevValue)\r\n return;\r\n\r\n if (this._val === prevValue)\r\n valChanged = false;\r\n\r\n this._prevValues.set_Item(line, this._val);\r\n break;\r\n\r\n case GuiConstants.PARENT_TYPE_FORM:\r\n // check if the value of the property was changed to prevent sending redundant\r\n // javascript commands to the browser\r\n prevValue = this._prevValues.get_Item(0);\r\n if (!forceRefresh && (this._val === prevValue))\r\n return;\r\n this._prevValues.set_Item(0, this._val);\r\n break;\r\n\r\n case GuiConstants.PARENT_TYPE_TASK: // TASK PROPERTIES\r\n Events.WriteExceptionToLog(\r\n NString.Format(\"Property.RefreshDisplay(): task property {0} wasn't handled\", this._id));\r\n return;\r\n\r\n default:\r\n Events.WriteExceptionToLog(\r\n NString.Format(\"Property.RefreshDisplay(): parentType unknown, property {0} wasn't handled\", this._id));\r\n return;\r\n }\r\n\r\n switch (this._id) {\r\n\r\n case PropInterface.PROP_TYPE_IMAGE_FILENAME:\r\n this.onImageFileName();\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_ENABLED:\r\n this.onEnable(valChanged);\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_VISIBLE:\r\n await this.onVisible(valChanged);\r\n break;\r\n\r\n\r\n case PropInterface.PROP_TYPE_NAME:\r\n this.OnControlName();\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_FORM_NAME:\r\n this.onFormName();\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_COLUMN_TITLE:\r\n this.onText(0);\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_TEXT:\r\n this.onText(line);\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_HINT:\r\n this.onHint();\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_MODIFIABLE:\r\n await this.onModifiable();\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_TOOLTIP:\r\n this.onTooltip();\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_DISPLAY_LIST:\r\n await this.onDisplayList(line);\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_AUTO_COMPLETE_MODE_WC:\r\n this.onAutoCompleteMode();\r\n break\r\n\r\n case PropInterface.PROP_TYPE_VISIBLE_LAYERS_LIST:\r\n await this.onVisibleLayerList(line);\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_FORMAT:\r\n this.onFormat();\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_LABEL:\r\n await this.onLabel(line);\r\n break;\r\n\r\n\r\n\r\n case PropInterface.PROP_TYPE_PASSWORD:\r\n this.onPassword();\r\n break;\r\n\r\n\r\n case PropInterface.PROP_TYPE_MODIFY_IN_QUERY:\r\n case PropInterface.PROP_TYPE_TAB_IN:\r\n case PropInterface.PROP_TYPE_PARK_ON_CLICK:\r\n case PropInterface.PROP_TYPE_LOAD_IMAGE_FROM: // this property is used for identifying loading of image (Server/Client).\r\n // So no handling needed in RefreshDisplay\r\n break;\r\n\r\n\r\n case PropInterface.PROP_TYPE_CUSTOM_PROPERTIES:\r\n this.onCustomProperties();\r\n break;\r\n case PropInterface.PROP_TYPE_CUSTOM_VALIDATORS:\r\n this.onCustomValidators();\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_BINDING_LEVEL:\r\n this.onBindingLevel();\r\n break;\r\n\r\n\r\n\r\n default:\r\n Events.WriteExceptionToLog(\r\n NString.Format(\"Property.RefreshDisplay(): Property {0} wasn't handled\", this._id));\r\n break;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// the following properties need to calculate once only\r\n /// </summary>\r\n /// <returns></returns>\r\n private ShouldBeComputedOnce(): boolean {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_TASK) {\r\n switch (this._id) {\r\n case PropInterface.PROP_TYPE_TASK_MODE:\r\n case PropInterface.PROP_TYPE_PRELOAD_VIEW:\r\n case PropInterface.PROP_TYPE_TABBING_CYCLE:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_OPEN_TASK_WINDOW:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_EVENTS:\r\n case PropInterface.PROP_TYPE_ALLOW_LOCATE_IN_QUERY:\r\n case PropInterface.PROP_TYPE_PRINT_DATA:\r\n case PropInterface.PROP_TYPE_ALLOW_RANGE:\r\n case PropInterface.PROP_TYPE_ALLOW_LOCATE:\r\n case PropInterface.PROP_TYPE_ALLOW_SORT:\r\n case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_INDEX:\r\n case PropInterface.PROP_TYPE_MAIN_DISPLAY:\r\n return true;\r\n }\r\n }\r\n else if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n if (this._id === PropInterface.PROP_TYPE_IS_CACHED || this._id === PropInterface.PROP_TYPE_MULTILINE)\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /// <summary>\r\n /// if the value is computed in the server\r\n /// </summary>\r\n /// <returns></returns>\r\n private IsComputedOnceOnServer(): boolean {\r\n if (this.ShouldBeComputedOnce()) {\r\n let task: GuiTaskBase = this.GetTaskByParentObject();\r\n if (task != null)\r\n return !task.ShouldEvaluatePropertyLocally(this._id);\r\n }\r\n return false;\r\n }\r\n\r\n /// <summary>\r\n /// computes the value of the property and does not affect the display\r\n /// </summary>\r\n private async ComputeValue(): Promise<void> {\r\n let result: string = null;\r\n let len: number = 255;\r\n let wasEvaluated: RefParam<boolean> = new RefParam(false);\r\n\r\n if (this._id === PropInterface.PROP_TYPE_CUSTOM_PROPERTIES) {\r\n await this.computeCustomPropertiesValues();\r\n result = this.GetArrayValuesForCustomProperties();\r\n this.setValue(result);\r\n }\r\n if (this._id === PropInterface.PROP_TYPE_CUSTOM_VALIDATORS) {\r\n let evaluated = await this.computeCustomValidators();\r\n if (evaluated) {\r\n result = this.GetArrayValuesForCustomValidationProperties();\r\n this.setValue(result);\r\n }\r\n }\r\n else if (this._expId > 0) {\r\n // for offline : compute once the properties that was compute on the server\r\n if (this.ShouldBeComputedOnce() && this._expAlreadyComputedOnce)\r\n return;\r\n\r\n this._expAlreadyComputedOnce = true;\r\n\r\n // for following control properties always evaluate expressions\r\n let alwaysEvaluate: boolean = false;\r\n\r\n\r\n if (this._parentType === GuiConstants.PARENT_TYPE_TASK)\r\n alwaysEvaluate = true;\r\n\r\n if (this._id === PropInterface.PROP_TYPE_FORMAT) {\r\n len = 65535;\r\n result = StrUtil.rtrim(await this._parentObj.EvaluateExpression(this._expId, this._dataType, len, true,\r\n StorageAttribute.SKIP, alwaysEvaluate, wasEvaluated));\r\n }\r\n else {\r\n try {\r\n result = await this._parentObj.EvaluateExpression(this._expId, this._dataType, len, true, StorageAttribute.SKIP, alwaysEvaluate, wasEvaluated);\r\n }\r\n catch (e) {\r\n let warningMsg = new StringBuilder(\"Exception: \" + e.Message);\r\n if (this._parentObj instanceof GuiControlPropertyAdapter)\r\n warningMsg.Append(\" Control: \" + (<GuiControlPropertyAdapter>this._parentObj).Name);\r\n Events.WriteWarningToLog(warningMsg.ToString());\r\n }\r\n\r\n }\r\n\r\n if (wasEvaluated.value) {\r\n result = this.updateResult(result);\r\n this.setValue(result);\r\n }\r\n else if (this._val == null && this._parentType !== GuiConstants.PARENT_TYPE_CONTROL) {\r\n result = PropDefaults.getDefaultValue(this._id, this._parentType, this._parentObj);\r\n this.setValue(result);\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// updates results of expression for some properties\r\n /// </summary>\r\n /// <param name = \"result\"> </param>\r\n /// <returns> </returns>\r\n private updateResult(result: string): string {\r\n switch (this._id) {\r\n case PropInterface.PROP_TYPE_FORMAT:\r\n if (result == null)\r\n result = NString.Empty;\r\n break;\r\n\r\n case PropInterface.PROP_TYPE_TASK_MODE:\r\n result = Property.updateTaskModeResult(result);\r\n break;\r\n\r\n default:\r\n return result;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// do the same as we doing for c++ Uchar RT::tsk_mode_exp (long exp, Uchar mode)\r\n /// </summary>\r\n /// <param name=\"result\"></param>\r\n /// <returns></returns>\r\n private static updateTaskModeResult(result: string): string {\r\n let code: string = ' ';\r\n if (!NString.IsNullOrEmpty(result)) {\r\n code = result[0].toUpperCase();\r\n switch (code) {\r\n case 'Q':\r\n code = 'E';\r\n break;\r\n case 'F':\r\n code = 'O';\r\n break;\r\n case 'O':\r\n code = 'N';\r\n break;\r\n }\r\n }\r\n\r\n return code;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// get the value of the property\r\n /// </summary>\r\n async getValue(): Promise<string> {\r\n await this.ComputeValue();\r\n return this._val;\r\n }\r\n\r\n /// <summary>\r\n /// returns the integer value of this property\r\n /// </summary>\r\n /// <returns> int value of this property</returns>\r\n async getValueInt(): Promise<number> {\r\n let result: number = 0;\r\n\r\n await this.ComputeValue();\r\n\r\n if (this._val !== null)\r\n result = NNumber.Parse(this._val);\r\n\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// returns the integer value of this property without execute its expression\r\n /// </summary>\r\n /// <returns> int value of this property</returns>\r\n GetComputedValueInteger(): number {\r\n return NNumber.Parse(this._val);\r\n }\r\n\r\n /// <summary>\r\n /// returns a boolean value of the property valid only for logical type properties\r\n /// </summary>\r\n async getValueBoolean(): Promise<boolean> {\r\n if (this._dataType === StorageAttribute.BOOLEAN) {\r\n await this.getValue();\r\n return DisplayConvertor.toBoolean(this._val);\r\n }\r\n else {\r\n Events.WriteExceptionToLog(NString.Format(\"Property.getValueBoolean() was called for non boolean type property: {0}\", this._id));\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Get the computed value.\r\n /// </summary>\r\n /// <returns></returns>\r\n GetComputedValue(): string {\r\n return this._val;\r\n }\r\n\r\n /// <summary>\r\n /// get the computed boolean value of the property without execute its expression\r\n /// </summary>\r\n GetComputedValueBoolean(): boolean {\r\n if (this._dataType === StorageAttribute.BOOLEAN) {\r\n return DisplayConvertor.toBoolean(this._val);\r\n }\r\n else {\r\n Events.WriteExceptionToLog(NString.Format(\"Property.getValueBoolean() was called for non boolean type property: {0}\", this._id));\r\n }\r\n }\r\n\r\n /// returns the previous value of the property in the specified line of the table\r\n /// </summary>\r\n /// <param name = \"line\">the requested line number</param>\r\n getPrevValue(line: number): string {\r\n if (line < this._prevValues.length)\r\n return this._prevValues.get_Item(line);\r\n return null;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this property has an expression\r\n /// </summary>\r\n isExpression(): boolean {\r\n return this._expId > 0;\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <returns></returns>\r\n GetExpressionId(): number {\r\n return this._expId;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// </summary>\r\n private onImageFileName(): void {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let mgControlBase: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n if (mgControlBase.isTabControl()) {\r\n mgControlBase.setImageList(this.GetComputedValue());\r\n }\r\n else if (mgControlBase.isImageControl() || mgControlBase.isRadio() || mgControlBase.isCheckBox() || mgControlBase.IsImageButton()) {\r\n mgControlBase.setImageWithFileName(this.GetComputedValue());\r\n }\r\n }\r\n else\r\n throw new ApplicationException(\"in onImageFileName.onEnable()\");\r\n }\r\n\r\n\r\n\r\n /// <summary>\r\n /// </summary>\r\n private onEnable(valChanged: boolean) {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let ctrl: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n let currentEditingControl: GuiControlPropertyAdapter = ctrl.getForm().getTask().CurrentEditingControl;\r\n\r\n // ACT_TBL_NXTFLD is added in queue, whenever current control is hidden or disabled to set the focus to next control for both RC & OL\r\n // which is correct behavior. But once current ctrl is already disabled/hidden , we should not put the same action\r\n // in queue again when same ctrl is disabled/hidden multiple times.\r\n if (this._val !== null && this._val === \"0\" && valChanged && currentEditingControl !== null &&\r\n (ctrl === currentEditingControl || currentEditingControl.isDescendentOfControl(ctrl) || ctrl === currentEditingControl.getLinkedParent(false))) {\r\n let parkedControl: GuiControlPropertyAdapter = ctrl.getForm().getTask().getLastParkedCtrl();\r\n if (parkedControl !== null && parkedControl.InControl && (ctrl === parkedControl || parkedControl.isDescendentOfControl(ctrl))) {\r\n Events.OnNonParkableLastParkedCtrl(ctrl);\r\n ctrl.getForm().getTask().CurrentEditingControl = null;\r\n }\r\n }\r\n ctrl.SetEnabled(this.GetComputedValueBoolean());\r\n }\r\n else\r\n throw new ApplicationException(\"in Property.onEnable()\");\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private async onVisible(valChanged: boolean): Promise<void> {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let ctrl: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n let currentEditingControl: GuiControlPropertyAdapter = ctrl.getForm().getTask().CurrentEditingControl;\r\n if (this._val !== null && this._val === \"0\" && valChanged && currentEditingControl !== null &&\r\n (ctrl === currentEditingControl || currentEditingControl.isDescendentOfControl(ctrl) || ctrl === currentEditingControl.getLinkedParent(false))) {\r\n let parkedControl: GuiControlPropertyAdapter = ctrl.getForm().getTask().getLastParkedCtrl();\r\n if (parkedControl !== null && parkedControl.InControl && (ctrl === parkedControl || parkedControl.isDescendentOfControl(ctrl))) {\r\n Events.OnNonParkableLastParkedCtrl(ctrl);\r\n ctrl.getForm().getTask().CurrentEditingControl = null;\r\n }\r\n }\r\n await ctrl.updatePropertyLogicNesting(PropInterface.PROP_TYPE_VISIBLE, CommandType.PROP_SET_VISIBLE, this.GetComputedValueBoolean(), true);\r\n\r\n\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private OnControlName(): void {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n\r\n }\r\n else\r\n throw new ApplicationException(\"in Property.OnControlName()\");\r\n }\r\n\r\n /// <summary>\r\n /// set hint for edit control property\r\n /// </summary>\r\n private onHint() {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let control: GuiControlPropertyAdapter = <GuiControlPropertyAdapter>this.getObjectByParentObj();\r\n let translatedString: string = Events.Translate(this.GetComputedValue());\r\n\r\n if (!control.IsDateTimePicture() && (!control.IsTableChild || control.IsTableHeaderChild)) {\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this.getObjectByParentObj(), this.getLine(), HtmlProperties.PlaceHolder, translatedString);\r\n }\r\n }\r\n else\r\n throw new ApplicationException(\"inProperty.onHint()\");\r\n }\r\n\r\n\r\n /// <summary>\r\n /// </summary>\r\n private onFormName() {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_FORM)\r\n this.addCommandTypeText(0);\r\n else\r\n throw new ApplicationException(\"in Property.onFormName()\");\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private addCommandTypeText(line: number) {\r\n let mlsTransValue: string = Events.Translate(this.GetComputedValue());\r\n\r\n // Fixed bug#:733480 SystemBox = false and title is empty-> .NET hide the title.\r\n // we will set it to ' '\r\n if (this._parentType === GuiConstants.PARENT_TYPE_FORM ||\r\n (this._parentType === GuiConstants.PARENT_TYPE_CONTROL && (<GuiControlPropertyAdapter><any>this._parentObj).isColumnControl())) {\r\n // #737488: When variable attached to form's text property, spaces are appended\r\n // after actual value, equal to picture of variable. Before setting text remove these extra\r\n // spaces at the end.\r\n mlsTransValue = StrUtil.rtrim(mlsTransValue);\r\n if (this._parentType === GuiConstants.PARENT_TYPE_FORM && mlsTransValue === NString.Empty) {\r\n mlsTransValue = \" \";\r\n }\r\n }\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL && ((<GuiControlPropertyAdapter><any>this._parentObj).isTextControl()\r\n || ((<GuiControlPropertyAdapter><any>this._parentObj).isButton()))) // need to check for hypertext or other types of button\r\n Commands.addValueWithLine(CommandType.SET_VALUE, this._parentObj, line, mlsTransValue);\r\n else\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this._parentObj, line, HtmlProperties.Text, mlsTransValue);\r\n\r\n\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private onText(line: number) {\r\n this.addCommandTypeText(line);\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private async onModifiable(): Promise<void> {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let ctrl: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n\r\n if (ctrl.isTextControl() || ctrl.isChoiceControl() || ctrl.isCheckBox()) {\r\n let task: GuiTaskBase = this.GetTaskByParentObject();\r\n\r\n let readOnlyValue: boolean = !this.GetComputedValueBoolean();\r\n\r\n if ((readOnlyValue || task.getMode() !== Constants.TASK_MODE_QUERY) && ctrl.GetCurrReadOnly() !== readOnlyValue) {\r\n ctrl.SetCurrReadOnly(readOnlyValue);\r\n\r\n // JPN: IME support (enable IME in query mode)\r\n if (UtilStrByteMode.isLocaleDefLangDBCS()) {\r\n if (await ctrl.getForm().getTask().checkProp(PropInterface.PROP_TYPE_ALLOW_LOCATE_IN_QUERY, false)) {\r\n return;\r\n }\r\n }\r\n\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this.getObjectByParentObj(), this.getLine(), HtmlProperties.ReadOnly, readOnlyValue);\r\n\r\n }\r\n }\r\n }\r\n else\r\n throw new ApplicationException(\"in Property.onModifiable()\");\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private onTooltip(): void {\r\n let toolTip: string;\r\n\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let ctrl: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n\r\n // Tooltip expression returns string\r\n if (this._expId === 0)\r\n toolTip = (<ToolTipHelp>ctrl.getForm().getTask().getHelpItem(NNumber.Parse(this._val))).tooltipHelpText;\r\n else\r\n toolTip = this._val;\r\n\r\n // #929889: Remove extra white spaces at the end of tooltip text.\r\n toolTip = StrUtil.rtrim(toolTip);\r\n if(ctrl.isButton() && ctrl.ConnectedControl)\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, ctrl.ConnectedControl, this.getLine(), HtmlProperties.ZoomButtonTooltip, toolTip);\r\n else\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, ctrl, this.getLine(), HtmlProperties.Tooltip, toolTip);\r\n }\r\n else\r\n throw new ApplicationException(\"in Property.onTooltip()\");\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private async onDisplayList(currLine: number): Promise<void> {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let ctrl: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n\r\n if (ctrl.isSelectionCtrl() || ctrl.isTabControl() || ctrl.isRadio() || (<MgControlBase>ctrl).HasAutocomplete()) {\r\n let line: number = (currLine === Int32.MinValue) ? ctrl.getDisplayLine(false) : currLine;\r\n await ctrl.refreshAndSetItemsList(line, true);\r\n }\r\n }\r\n else\r\n throw new ApplicationException(\"in Property.onDisplayList()\");\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n /// <param name = \"currLine\"></param>\r\n private async onVisibleLayerList(currLine: number): Promise<void> {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let ctrl: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n let line: number = 0;\r\n\r\n if (currLine === Int32.MinValue)\r\n line = ctrl.getDisplayLine(false);\r\n else\r\n line = currLine;\r\n\r\n // Always layering should be performed on Displaylist. But,\r\n // DisplayList and itemList should not be refreshed.\r\n await ctrl.refreshTabForLayerList(line);\r\n }\r\n else\r\n throw new ApplicationException(\"in Property.onVisibleLayerList()\");\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private onFormat() {\r\n let ctrl: GuiControlPropertyAdapter = null;\r\n let ctrlPic: PIC;\r\n\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n ctrl = <GuiControlPropertyAdapter><any>this._parentObj;\r\n ctrlPic = ctrl.getPIC();\r\n ctrl.resetPrevVal();\r\n\r\n switch (ctrl.Type) {\r\n case MgControlType.CTRL_TYPE_BUTTON:\r\n // if the button doesn't have field we need to set the format as the text of the control,\r\n // otherwise, the field value will set the text on the control\r\n // in addition we need to set the text for image button\r\n // Also, do not override the text with the format if the control has an expression.\r\n // QCR# 938933. When the control is refreshed for the first time, we should show the text as it\r\n // is in the Format property - irrespective of whether field or expression is attached to it or not.\r\n // The fix is confined to ControlTypes.CTRL_TYPE_BUTTON because only in case of Button we display the value of the Format property.\r\n if (ctrl.getField() == null && !ctrl.expressionSetAsData() || ctrl.IsImageButton() || (this._parentObj.IsFirstRefreshOfProps()))\r\n this.addCommandTypeText(this.getLine());\r\n break;\r\n\r\n\r\n case MgControlType.CTRL_TYPE_TEXT:\r\n\r\n if (ctrl.Type === MgControlType.CTRL_TYPE_TEXT) {\r\n if (ctrlPic.getAttr() !== StorageAttribute.NUMERIC) {\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n else\r\n throw new ApplicationException(\"in Property.onFormat()\");\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n private async onLabel(currLine: number): Promise<void> {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n // SELECT control. Note we do not support dynamic change of radio buttons range!\r\n // data control ranges are updated when we set values to them in Control.refreshDispVal()\r\n let ctrl: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n let line: number;\r\n\r\n if (currLine === Int32.MinValue)\r\n line = ctrl.getDisplayLine(false);\r\n else\r\n line = currLine;\r\n\r\n // on combo box compfor check box the label is the item list property\r\n if (ctrl.Type === MgControlType.CTRL_TYPE_CHECKBOX)\r\n this.addCommandTypeText(line);\r\n else if (ctrl.isSelectionCtrl() || ctrl.isTabControl() || ctrl.isRadio()) {\r\n ctrl.setRange(await this.getValue());\r\n ctrl.clearRange(line);\r\n await ctrl.refreshAndSetItemsList(line, true);\r\n\r\n // If ItemList has an expression And it may be modified again, refresh the display value of control.\r\n // Because it may be possible that display value will change.\r\n if (this._expId > 0)\r\n await ctrl.ComputeAndRefreshDisplayValue(false);\r\n }\r\n else if ((<MgControlBase>ctrl).HasAutocomplete())\r\n await ctrl.refreshAndSetItemsList(line, true);\r\n else\r\n throw new ApplicationException(\"Property.onLabel(), not support control\");\r\n }\r\n else\r\n throw new ApplicationException(\"in Property.onLabel()\");\r\n }\r\n\r\n\r\n\r\n /// <summary>\r\n /// all the properties that support in subform, must call this method\r\n /// </summary>\r\n /// <returns></returns>\r\n private getObjectByParentObj(): any {\r\n let result: any = this._parentObj;\r\n\r\n if (this._parentType === GuiConstants.PARENT_TYPE_FORM) {\r\n let form: GuiFormPropertyAdapter = <GuiFormPropertyAdapter><any>this._parentObj;\r\n if (form.isSubForm())\r\n result = form.getSubFormCtrl();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"propId\"></param>\r\n /// <returns></returns>\r\n static isRepeatableInTable(): boolean {\r\n return false;\r\n }\r\n\r\n /// <summary>\r\n /// get current line\r\n /// </summary>\r\n /// <returns></returns>\r\n private getLine(): number {\r\n let line: number = 0;\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let ctrl: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n let displayLineForTreeOrTable: boolean = ctrl.isPropertyRepeatable(this._id);\r\n\r\n line = ctrl.getDisplayLine(displayLineForTreeOrTable);\r\n }\r\n\r\n return line;\r\n }\r\n\r\n /// <summary>\r\n /// return original value of property that was computed before execution of expression\r\n /// </summary>\r\n /// <returns></returns>\r\n getOrgValue(): string {\r\n return this._orgValue;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// update size of prevvalues array\r\n /// </summary>\r\n /// <param name = \"newSize\"></param>\r\n updatePrevValueArray(newSize: number): void {\r\n if (!this.ShouldSkipRefresh())\r\n this._prevValues.SetSize(newSize);\r\n }\r\n\r\n /// <summary>\r\n /// clear _prevValues array\r\n /// </summary>\r\n /// <param name = \"newSize\"></param>\r\n clearPrevValueArray(): void {\r\n this._prevValues.Clear();\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n ResetPrevValueArray(): void {\r\n let count: number = this._prevValues.length;\r\n this._prevValues.Clear();\r\n this._prevValues.SetSize(count);\r\n }\r\n\r\n /// <summary>\r\n /// compute and set arrays size\r\n /// </summary>\r\n private setPrevArraySize(): void {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_FORM || this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let size: number = 1;\r\n\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL) {\r\n let mgControlBase: GuiControlPropertyAdapter = <GuiControlPropertyAdapter><any>this._parentObj;\r\n if (mgControlBase.IsRepeatable)\r\n size = mgControlBase.getForm().getTableItemsCount();\r\n else if (mgControlBase.isTableControl() && Property.isRepeatableInTable())\r\n size = mgControlBase.getForm().getTableItemsCount();\r\n }\r\n\r\n this._prevValues.SetSize(size);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Password property\r\n /// </summary>\r\n private onPassword() {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL)\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this.getObjectByParentObj(), this.getLine(), HtmlProperties.Password, this.GetComputedValueBoolean());\r\n else\r\n throw new ApplicationException(\"in Property.onPassword()\");\r\n }\r\n\r\n /// <summary>\r\n /// Set user property TitlePadding property\r\n /// </summary>\r\n private async computeCustomPropertiesValues(): Promise<void> {\r\n for (let [customPropertyKey, customPropertyValue] of this.customProperties) {\r\n let expression = customPropertyValue;\r\n // init the value\r\n let retExpressionValue = await this.GetRetrunValueForCustomPropertyExpression(expression);\r\n this.customPropertiesValues.set(customPropertyKey, retExpressionValue);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// compute custom validators\r\n /// </summary>\r\n private async computeCustomValidators(): Promise<boolean> {\r\n let mgControl = <MgControlBase>this._parentObj;\r\n let evaluated = true;\r\n if (mgControl.ModifiedByUser || mgControl.ValidateControl || this.GetTaskByParentObject().IsInRecompute()){\r\n for (let [customPropertyKey, customValidatorProperty] of this.customValidatorProperties) {\r\n let expression = (<CustomValidatorProp>customValidatorProperty)._exp;\r\n // init the value\r\n let isInValid = await this.GetRetrunValueForCustomPropertyExpression(expression);\r\n let errString = \"\";\r\n let InValid = (isInValid === \"1\") ? true : false;\r\n if (InValid) {\r\n expression = (<CustomValidatorProp>customValidatorProperty)._errorMessageExp;\r\n if (expression > 0)\r\n errString = await this.GetRetrunValueForCustomPropertyExpression(expression);\r\n else\r\n errString = (<CustomValidatorProp>customValidatorProperty)._errorMessage;\r\n }\r\n evaluated = true;\r\n this.customValidatorValues.set(customPropertyKey, new CustomValidator(!InValid, errString));\r\n }\r\n }\r\n else\r\n {\r\n if (mgControl.isRepeatable()) {\r\n this.customValidatorValues.clear();\r\n evaluated = false;\r\n }\r\n }\r\n return evaluated;\r\n }\r\n\r\n /// <summary>\r\n /// Set user property TitlePadding property\r\n /// </summary>\r\n private onCustomProperties(): void {\r\n\r\n for (let [customPropertyKey, customPropertyValue] of this.customPropertiesValues) {\r\n // use this._parentObj and not this.getObjectByParentObj()\r\n Commands.addOperationWithLine(CommandType.PROP_SET_USER_PROPERTY, this._parentObj, this.getLine(), customPropertyKey, customPropertyValue);\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Set custom validators property\r\n /// </summary>\r\n private onCustomValidators(): void {\r\n for (let [customPropertyKey, customPropertyValue] of this.customValidatorValues) {\r\n\r\n // use this._parentObj and not this.getObjectByParentObj()\r\n Commands.addOperationWithLine(CommandType.PROP_SET_CUSTOM_VALIDATOR, this._parentObj, this.getLine(),\r\n customPropertyKey, customPropertyValue);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Set Binding Level\r\n /// </summary>\r\n private onBindingLevel()\r\n {\r\n if (this._parentType === GuiConstants.PARENT_TYPE_CONTROL)\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this.getObjectByParentObj(), this.getLine(), HtmlProperties.BindingLevel, this.GetComputedValueInteger());\r\n else\r\n throw new ApplicationException(\"in Property.BindingLevel()\");\r\n }\r\n\r\n private onAutoCompleteMode()\r\n {\r\n\r\n }\r\n\r\n\r\n private async GetRetrunValueForCustomPropertyExpression(expression: number): Promise<any> {\r\n let len: number = 255;\r\n let expStorageAttribute = this._parentObj.GetExpressionStorage(expression);\r\n let wasEvaluated: RefParam<boolean> = new RefParam(false);\r\n let returnValue = await this._parentObj.EvaluateExpression(expression, expStorageAttribute, len, true, StorageAttribute.SKIP, false, wasEvaluated);\r\n\r\n expStorageAttribute = this._parentObj.GetExpressionStorage(expression);\r\n let compIdx: number = this._parentObj.getCompIdx();\r\n\r\n switch (expStorageAttribute) {\r\n case StorageAttribute.NUMERIC:\r\n let tempPic = new PIC(\"N6.2\", StorageAttribute.NUMERIC, this._parentObj.getCompIdx());\r\n if (returnValue == null)\r\n returnValue = \"FF00000000000000000000000000000000000000\";\r\n returnValue = DisplayConvertor.Instance.mg2disp(returnValue, \"\", tempPic, false, compIdx, false).trim();\r\n break;\r\n\r\n case StorageAttribute.DATE:\r\n tempPic = new PIC(\"##/##/####\", expStorageAttribute, compIdx);\r\n returnValue = DisplayConvertor.Instance.mg2disp(returnValue, \"\", tempPic, true, false, compIdx, true);\r\n break;\r\n\r\n case StorageAttribute.TIME:\r\n tempPic = new PIC(\"##:##/####\", expStorageAttribute, compIdx);\r\n returnValue = DisplayConvertor.Instance.mg2disp(returnValue, \"\", tempPic, true, false, compIdx, true);\r\n break;\r\n\r\n\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.BOOLEAN:\r\n case StorageAttribute.BLOB:\r\n case StorageAttribute.BLOB_VECTOR:\r\n case StorageAttribute.UNICODE:\r\n case StorageAttribute.NONE:\r\n break;\r\n\r\n default:\r\n throw new ApplicationException(\"in Property.GetRetrunValueForCustomPropertyExpression() illegal data type: \" + expStorageAttribute);\r\n }\r\n\r\n return returnValue;\r\n }\r\n\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"idx\"></param>\r\n RemovePrevValIndexAt(idx: number): void {\r\n if (this._prevValues.length > idx) {\r\n this._prevValues.RemoveAt(idx);\r\n }\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"idx\"></param>\r\n InsertPrevValAt(idx: number): void {\r\n this._prevValues.Insert(idx, null);\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"idx\"></param>\r\n resetPrevValAt(idx: number): void {\r\n if (idx >= 0 && idx < this._prevValues.length)\r\n this._prevValues.set_Item(idx, null);\r\n }\r\n\r\n\r\n toString(): string {\r\n return NString.Format(\"{0} = {1} (exp={2}, studio value={3})\", [\r\n PropDefaults.GetPropertyName(this._id), (this._val === null) ? \"is null\" : this._val, this._expId, this.StudioValue\r\n ]);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// getDefaultProp() returns a property that has a system default value.\r\n /// </summary>\r\n /// <param name = \"propId\">The property id</param>\r\n /// <param name = \"parentType\">PARENT_TYPE_CONTROL, PARENT_TYPE_FORM, PARENT_TYPE_TASK</param>\r\n /// <param name = \"propParent\"></param>\r\n /// <returns> Property that has a system default value</returns>\r\n static getDefaultProp(propId: number, parentType: string, propParent: PropParentInterface): Property {\r\n let prop: Property = null;\r\n let mgVal: string = PropDefaults.getDefaultValue(propId, parentType, propParent);\r\n\r\n if (mgVal !== null)\r\n prop = new Property(propId, propParent, parentType, mgVal);\r\n\r\n return prop;\r\n }\r\n\r\n InsertPrevValueArray(count: number): void {\r\n if (!this.ShouldSkipRefresh())\r\n this._prevValues.InsertRange(new Array(count));\r\n }\r\n}\r\n","import { GuiMgForm } from \"../../gui/GuiMgForm\";\r\nimport { GuiTaskBase } from \"../tasks/GuiTaskBase\";\r\nimport { GuiControlPropertyAdapter } from \"./GuiControlPropertyAdapter\";\r\nimport { MgControlType, XMLConstants } from \"@magic-xpa/utils\";\r\n\r\nexport abstract class GuiFormPropertyAdapter extends GuiMgForm {\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"propId\"></param>\r\n static IsFormTag(tagName: string): boolean {\r\n return tagName === XMLConstants.MG_TAG_FORM || tagName === XMLConstants.MG_TAG_FORM_PROPERTIES;\r\n }\r\n\r\n /// <summary>\r\n /// return a property of the form by its Id\r\n /// </summary>\r\n static IsEndFormTag(tagName: string): boolean {\r\n return tagName === (\"/\" + XMLConstants.MG_TAG_FORM) || tagName === (\"/\" + XMLConstants.MG_TAG_FORM_PROPERTIES);\r\n }\r\n\r\n\r\n abstract getTask(): GuiTaskBase;\r\n\r\n abstract isRefreshRepeatableAllowed(): boolean;\r\n\r\n abstract isSubForm(): boolean;\r\n\r\n abstract getSubFormCtrl(): GuiControlPropertyAdapter;\r\n\r\n abstract getCtrlByName(ctrlName: string, ctrlType: MgControlType): GuiControlPropertyAdapter;\r\n\r\n abstract getTableItemsCount(): number;\r\n\r\n\r\n abstract fillName(formTag: string): void;\r\n\r\n abstract checkAndCreateRow(idx: number): void;\r\n\r\n abstract set DisplayLine(value: number);\r\n\r\n}\r\n","import {ApplicationException, Hashtable, List, NNumber, NString} from \"@magic-xpa/mscorelib\";\r\nimport {Property} from \"./Property\";\r\nimport {PropParentInterface} from \"../../gui/PropParentInterface\";\r\nimport {XMLConstants, XmlParser} from \"@magic-xpa/utils\";\r\nimport {GuiTaskBase} from \"../tasks/GuiTaskBase\";\r\nimport {Events} from \"../../Events\";\r\nimport {PropInterface} from \"./PropInterface\";\r\nimport {GuiFormPropertyAdapter} from \"./GuiFormPropertyAdapter\";\r\nimport {GuiControlPropertyAdapter} from \"./GuiControlPropertyAdapter\";\r\n\r\n/// <summary>\r\n/// properties table\r\n/// </summary>\r\nexport class PropTable {\r\n\r\n private _hashTab: Hashtable<number, Property> = null; // for fast access to properties\r\n private _props: List<Property> = null;\r\n private _parent: PropParentInterface = null;\r\n\r\n\r\n /// <summary>\r\n /// CTOR\r\n /// </summary>\r\n constructor();\r\n constructor(parent_: PropParentInterface);\r\n constructor(parent_?: PropParentInterface) {\r\n\r\n if (arguments.length === 0) {\r\n this.constructor_0();\r\n return;\r\n }\r\n this.constructor_1(parent_);\r\n }\r\n\r\n private constructor_0(): void {\r\n this._props = new List<Property>();\r\n this._hashTab = new Hashtable<number, Property>(20);\r\n }\r\n\r\n private constructor_1(parent_: PropParentInterface): void {\r\n this.constructor_0();\r\n this._parent = parent_;\r\n }\r\n\r\n /// <summary>\r\n /// parse the properties\r\n /// </summary>\r\n /// <param name = \"parentObj\">reference to parent object(GuiTaskBase)</param>\r\n fillData(parentObj: PropParentInterface, parType: string, parser: XmlParser): void {\r\n while (this.initInnerObjects(parser.getNextTag(), parentObj, parType, parser)) {\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// For recompute: Parse the existing properties and create references to them\r\n /// </summary>\r\n /// <param name = \"task\">reference to the parent GuiTaskBase</param>\r\n fillDataByExists(task: GuiTaskBase, parser: XmlParser): void {\r\n while (this.fillExistInnerObjects(parser.getNextTag(), task, parser)) {\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// fill the inner objects of the class\r\n /// </summary>\r\n /// <param name = \"foundTagName\">name of tag, of object, which need be allocated</param>\r\n /// <param name = \"parentObj\">reference to the parent object, need be added to every Property</param>\r\n /// <returns> Manager.XmlParser.getCurrIndex(), the found object tag and ALL its subtags finish</returns>\r\n private initInnerObjects(foundTagName: string, parentObj: PropParentInterface, parType: string, parser: XmlParser): boolean {\r\n if (foundTagName !== null && foundTagName === XMLConstants.MG_TAG_PROP) {\r\n let property: Property = new Property();\r\n property.fillData(parentObj, parType, parser);\r\n this.addProp(property);\r\n }\r\n else\r\n return false;\r\n return true;\r\n }\r\n\r\n /// <summary>\r\n /// adding property by key\r\n /// </summary>\r\n /// <param name = \"prop\"></param>\r\n addProp(prop: Property): void {\r\n this._hashTab.set_Item(prop.getID(), prop);\r\n this._props.push(prop);\r\n }\r\n\r\n /// <param name = \"id\"></param>\r\n delPropById(id: number): void {\r\n if (this._props === null)\r\n return;\r\n\r\n let existingProp: Property = <Property>this._hashTab.get_Item(id);\r\n if (existingProp !== null) {\r\n this._props.Remove(existingProp);\r\n this._hashTab.Remove(id);\r\n\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// For Recompute: Fill PropTable with reference to existing PropTable\r\n /// </summary>\r\n /// <param name = \"task\">reference to parent GuiTaskBase</param>\r\n private fillExistInnerObjects(nameOfFound: string, task: GuiTaskBase, parser: XmlParser): boolean {\r\n\r\n let tokensVector: List<string> = new List<string>();\r\n let endContext: number = -1;\r\n\r\n if (nameOfFound == null)\r\n return false;\r\n\r\n if (nameOfFound === XMLConstants.MG_TAG_CONTROL)\r\n endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex());\r\n else if (nameOfFound === XMLConstants.MG_TAG_PROP)\r\n endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());\r\n else if (nameOfFound === ('/' + XMLConstants.MG_TAG_CONTROL) ||\r\n GuiFormPropertyAdapter.IsEndFormTag(nameOfFound)) {\r\n parser.setCurrIndex2EndOfTag();\r\n return false;\r\n }\r\n\r\n if (endContext !== -1 && endContext < parser.getXMLdata().length) {\r\n // last position of its tag\r\n let tag: string = parser.getXMLsubstring(endContext);\r\n parser.add2CurrIndex(tag.indexOf(nameOfFound) + nameOfFound.length);\r\n tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);\r\n if (nameOfFound === XMLConstants.MG_TAG_CONTROL) {\r\n // ditidx of Exists Control\r\n this._parent = task.getCtrl(NNumber.Parse(this.fillName(tokensVector)));\r\n parser.setCurrIndex(++endContext); // to delete \">\"\r\n return true;\r\n }\r\n else if (nameOfFound === XMLConstants.MG_TAG_PROP) {\r\n if (this._parent != null) {\r\n let strPropId: string = this.fillName(tokensVector);\r\n let propId: number = NNumber.Parse(strPropId);\r\n let prop: Property = null;\r\n\r\n if (this._parent != null)\r\n prop = this._parent.getProp(propId);\r\n\r\n if (prop == null)\r\n Events.WriteExceptionToLog(NString.Format(\"in PropTable.fillExistInnerObjects() no property with id={0}\", strPropId));\r\n else\r\n this.addProp(prop);\r\n parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);\r\n return true;\r\n }\r\n else\r\n Events.WriteExceptionToLog(\"in PropTable.fillExistInnerObjects() missing control\");\r\n }\r\n else {\r\n Events.WriteExceptionToLog(NString.Format(\"in PropTable.fillExistInnerObjects() illegal tag name: {0}\", nameOfFound));\r\n parser.setCurrIndex(++endContext);\r\n return true;\r\n }\r\n }\r\n\r\n if (nameOfFound === XMLConstants.MG_TAG_CONTROL) {\r\n parser.setCurrIndex(++endContext);\r\n return true;\r\n }\r\n else if (GuiFormPropertyAdapter.IsFormTag(nameOfFound)) {\r\n this._parent = task.getForm();\r\n (<GuiFormPropertyAdapter><any>this._parent).fillName(nameOfFound);\r\n\r\n return true;\r\n }\r\n else if (nameOfFound === ('/' + XMLConstants.MG_TAG_FLD))\r\n return false;\r\n\r\n parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length); // exit of bounds\r\n return true;\r\n\r\n\r\n }\r\n\r\n /// <summary>\r\n /// Find the name of an existing Control, or of an existing Property\r\n /// </summary>\r\n /// <returns> Name of control</returns>\r\n private fillName(tokensVector: List<string>): string {\r\n let attribute: string = null;\r\n let valueStr: string;\r\n\r\n for (let j: number = 0; j < tokensVector.length; j = j + 2) {\r\n attribute = tokensVector.get_Item(j);\r\n valueStr = tokensVector.get_Item(j + 1);\r\n\r\n if (attribute === XMLConstants.MG_ATTR_DITIDX || attribute === XMLConstants.MG_ATTR_ID)\r\n return valueStr;\r\n }\r\n Events.WriteExceptionToLog(NString.Format(\"Unrecognized attribute: '{0}'\", attribute));\r\n return null;\r\n }\r\n\r\n /// <summary>\r\n /// get size of the vector props\r\n /// </summary>\r\n /// <returns> size of the props member</returns>\r\n getSize(): number {\r\n return this._props.length;\r\n }\r\n\r\n /// <summary>\r\n /// get a Property by its index in the table\r\n /// </summary>\r\n /// <param name = \"idx\">the index of the property</param>\r\n /// <returns> reference to the required Property</returns>\r\n getProp(idx: number): Property {\r\n if (idx < 0 || idx >= this._props.length)\r\n return null;\r\n return this._props.get_Item(idx);\r\n }\r\n\r\n /// <summary>\r\n /// get a Property by its id\r\n /// </summary>\r\n /// <param name = \"id\">of the property</param>\r\n getPropById(id: number): Property {\r\n return <Property>this._hashTab.get_Item(id);\r\n }\r\n\r\n propExists(id: number): boolean {\r\n return this.getPropById(id) !== null;\r\n }\r\n\r\n /// <summary>\r\n /// set a property value. in case the table doesn't contain such property, creates a new Property object and add it to the table.\r\n /// </summary>\r\n /// <param name = \"propId\">the id of the property</param>\r\n /// <param name = \"val\">the value of the property</param>\r\n /// <param name = \"parent\">a reference to the parent object</param>\r\n /// <param name = \"parentType\">the type of the parent object</param>\r\n setProp(propId: number, val: string, parent: PropParentInterface, parentType: string): void {\r\n\r\n let prop: Property = this.getPropById(propId);\r\n if (prop === null) {\r\n prop = new Property(propId, parent, parentType);\r\n this.addProp(prop);\r\n }\r\n prop.setValue(val);\r\n prop.setOrgValue();\r\n }\r\n\r\n /// <summary>\r\n /// refresh display of the properties in the Table\r\n /// </summary>\r\n /// <param name = \"forceRefresh\">if true, refresh is forced regardless of the previous value</param>\r\n /// <param name = \"onlyRepeatableProps\">if true, refreshes only repeatable tree properties</param>\r\n async RefreshDisplay(forceRefresh: boolean, onlyRepeatableProps: boolean): Promise<boolean> {\r\n\r\n let allPropsRefreshed: boolean = true;\r\n let prop: Property;\r\n let i: number = 0;\r\n let form: GuiFormPropertyAdapter = null;\r\n let visibleProps: List<Property> = new List();\r\n\r\n\r\n if (this._parent != null && this._parent instanceof GuiControlPropertyAdapter)\r\n form = (<GuiControlPropertyAdapter>this._parent).getForm();\r\n\r\n if (form != null)\r\n form.checkAndCreateRow(form.DisplayLine);\r\n\r\n\r\n for (i = 0; i < this.getSize(); i++) {\r\n prop = this.getProp(i);\r\n try {\r\n // if this property is not repeatable in tree or table, and onlyRepeatableProps turned on\r\n // do not refresh this property\r\n if (onlyRepeatableProps && !Property.isRepeatableInTable())\r\n continue;\r\n\r\n // Refresh Visible prop only after refreshing the navigation props like X, Y.\r\n // Otherwise, the control is shown on its default location first and\r\n // then moved somewhere else. And this is clearly visible.\r\n if (prop.getID() === PropInterface.PROP_TYPE_VISIBLE)\r\n visibleProps.push(prop);\r\n else\r\n await prop.RefreshDisplay(forceRefresh);\r\n }\r\n catch (ex) {\r\n if (ex instanceof ApplicationException) {\r\n Events.WriteExceptionToLog(ex);\r\n allPropsRefreshed = false;\r\n }\r\n else\r\n throw ex;\r\n\r\n }\r\n }\r\n\r\n for (let i = 0; i < visibleProps.length; i++)\r\n {\r\n let visibleProp = visibleProps[i];\r\n await visibleProp.RefreshDisplay(forceRefresh);\r\n }\r\n\r\n return allPropsRefreshed;\r\n }\r\n\r\n /// <summary>\r\n /// update all properties array size\r\n /// </summary>\r\n /// <param name = \"newSize\"></param>\r\n updatePrevValueArray(newSize: number): void {\r\n for (let i: number = 0; i < this._props.length; i = i + 1) {\r\n let property: Property = this._props.get_Item(i);\r\n property.updatePrevValueArray(newSize);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// update all properties array size\r\n /// </summary>\r\n resetPrevValueArray(): void {\r\n for (let i: number = 0; i < this._props.length; i = i + 1) {\r\n let property: Property = this._props.get_Item(i);\r\n property.ResetPrevValueArray();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Reset prev value at index.\r\n /// </summary>\r\n resetPrevValAt(index: number): void {\r\n for (let i: number = 0; i < this._props.length; i = i + 1) {\r\n let property: Property = this._props.get_Item(i);\r\n property.resetPrevValAt(index);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// clear prevValue array of Label property if exists\r\n /// </summary>\r\n clearLabelPrevValueArray(): void {\r\n let labelProperty: Property = this.getPropById(45);\r\n if (labelProperty !== null)\r\n labelProperty.clearPrevValueArray();\r\n }\r\n\r\n /// <summary>\r\n /// returns control\r\n /// </summary>\r\n /// <returns></returns>\r\n getCtrlRef(): GuiControlPropertyAdapter {\r\n return ((this._parent instanceof GuiControlPropertyAdapter) ? <GuiControlPropertyAdapter>this._parent : null);\r\n }\r\n\r\n public InsertPrevValueArray( count: number) {\r\n for (let i: number = 0; i < this._props.length; i++) {\r\n let prop: Property = this._props[i];\r\n prop.InsertPrevValueArray(count);\r\n }\r\n }\r\n}\r\n","import {Exception} from \"@magic-xpa/mscorelib\";\r\nimport {MsgInterface} from \"@magic-xpa/utils\";\r\n\r\n/// <summary> this exception should be thrown whenever the User inserted input\r\n/// to field which can not be initialized by mask/format, so\r\n/// after catching the exception it needs:\r\n/// set focus back to the field\r\n/// return to the field old value\r\n/// write in the status bar relevant message\r\n/// </summary>\r\nexport class WrongFormatException extends Exception {\r\n\r\n // type of the field produced the exception\r\n private _type: string = null;\r\n\r\n\r\n constructor(type?: string) {\r\n\r\n super(type);\r\n\r\n this.name = \"WrongFormatException\";\r\n if (arguments.length === 0) {\r\n\r\n this.constructor_0();\r\n return;\r\n }\r\n\r\n this.constructor_1(type);\r\n }\r\n\r\n private initialize() {\r\n this._type = null;\r\n }\r\n\r\n /// <summary>constructor on case of wrong RANGE ONLY\r\n /// to insert relevant range to the status bar\r\n /// </summary>\r\n private constructor_0(): void {\r\n this.initialize();\r\n this._type = MsgInterface.STR_RNG_TXT;\r\n }\r\n\r\n /// <summary>constructor on case of wrong user input\r\n /// to insert 'Bad 'type' .'message to status bar\r\n /// </summary>\r\n private constructor_1(type: string): void {\r\n this.initialize();\r\n this._type = type;\r\n }\r\n\r\n getType(): string {\r\n return this._type;\r\n }\r\n}\r\n","import { Exception, List, NChar, NNumber, NString, NumberFormatInfo, StringBuilder } from '@magic-xpa/mscorelib';\r\nimport { ValidationDetails } from './ValidationDetails';\r\nimport { IEnvironment } from '../../env/IEnvironment';\r\nimport { MgControlBase } from './MgControlBase';\r\nimport { GuiFieldBase } from '../data/GuiFieldBase';\r\nimport { DisplayConvertor } from './DisplayConvertor';\r\nimport {\r\n HTML_2_STR,\r\n MgControlType,\r\n MsgInterface,\r\n PICInterface,\r\n StorageAttribute,\r\n StrUtil,\r\n UtilStrByteMode\r\n} from '@magic-xpa/utils';\r\nimport { Events } from '../../Events';\r\nimport { WrongFormatException } from './WrongFormatException';\r\nimport { PIC } from './PIC';\r\nimport { NUM_TYPE } from '../data/NUM_TYPE';\r\nimport { BlobType } from '../data/BlobType';\r\nimport { GuiEnvironment } from '../../GuiEnvironment';\r\nimport { PropInterface } from './PropInterface';\r\n\r\n\r\nexport class FieldValidator {\r\n private _newvalue: any = null;\r\n private _oldvalue: any = null;\r\n private _pictureReal: string = null;\r\n private _pictureEnable: string = null;\r\n private _valDet: ValidationDetails = null;\r\n\r\n private _picture: string = null;\r\n\r\n private _decimal: string = null;\r\n private _environment: IEnvironment = null;\r\n\r\n constructor() {\r\n this._environment = GuiEnvironment.Environment;\r\n this._decimal = (this._environment.GetDecimal() || \"\");\r\n }\r\n\r\n /// <summary> the main method of this class</summary>\r\n /// <param name=\"valDet\">a ValidationDetails object to use when validating</param>\r\n checkVal(valDet: ValidationDetails): ValidationDetails {\r\n this._newvalue = (this._oldvalue = (this._pictureReal = (this._pictureEnable = null)));\r\n this.init(valDet);\r\n valDet.setValidationFailed(false);\r\n let ctrl: MgControlBase = valDet.getControl();\r\n // TODO - uncomment this line when 'PROP_TYPE_MODIFY_IN_QUERY' is supported for other controls\r\n let modInQueuy: boolean =\r\n ctrl.isRepeatable()? false : ctrl.GetComputedBooleanProperty(PropInterface.PROP_TYPE_MODIFY_IN_QUERY, false, ctrl.getDisplayLine(false));\r\n\r\n let useNative: boolean = ctrl.isModifiable();\r\n\r\n if (ctrl.getForm().getTask().getMode() === 'E' && !modInQueuy) {\r\n valDet.setValue(this._oldvalue);\r\n return valDet;\r\n }\r\n\r\n if (ctrl.Type === MgControlType.CTRL_TYPE_RADIO || ctrl.Type === MgControlType.CTRL_TYPE_CHECKBOX || ctrl.Type === MgControlType.CTRL_TYPE_TAB || ctrl.isSelectionCtrl()) {\r\n try {\r\n if (ctrl.Type === MgControlType.CTRL_TYPE_CHECKBOX) {\r\n valDet.setNull(ctrl.isNullValue(this._newvalue));\r\n }\r\n if (this._newvalue !== null && ctrl.isSelectionCtrl()) {\r\n let idx: number = NNumber.Parse(this._newvalue);\r\n if (ctrl.isChoiceNull(idx)) {\r\n valDet.setNull(true);\r\n }\r\n }\r\n }\r\n catch (ex_111) {\r\n if (ex_111 instanceof Exception) {\r\n }\r\n else\r\n throw ex_111;\r\n }\r\n valDet.setValue(this._newvalue);\r\n return valDet;\r\n }\r\n\r\n // space|nothing was inserted -> use default value\r\n if (ctrl.DataType !== StorageAttribute.ALPHA && ctrl.DataType !== StorageAttribute.UNICODE && ctrl.DataType !== StorageAttribute.BLOB) {\r\n if ((typeof this._newvalue === 'string' && this._newvalue.trim().length === 0) || (ctrl.DataType == StorageAttribute.NUMERIC && this._newvalue == null)|| (ctrl.DataType === StorageAttribute.DATE && (ctrl.isDateZero(this._newvalue) || this.isNullDisplayVal()))) {\r\n let field: GuiFieldBase = ctrl.getField();\r\n let defaultValue: string = field.getDefaultValue();\r\n let text: any = null;\r\n if (field.isNullDefault()) {\r\n valDet.setNull(true);\r\n text = field.getNullDisplay();\r\n if (NString.IsNullOrEmpty(text) && ctrl.DataType === StorageAttribute.DATE) {\r\n text = DisplayConvertor.Instance.mg2disp(defaultValue, valDet.getRange(), valDet.getPIC(), useNative, field.getTask().getCompIdx(), false);\r\n }\r\n }\r\n if (text === null) {\r\n text = DisplayConvertor.Instance.mg2disp(defaultValue, valDet.getRange(), valDet.getPIC(), useNative, field.getTask().getCompIdx(), false);\r\n }\r\n if ((!field.isNullDefault() && (this._valDet.getContinuousRangeValues() !== null || this._valDet.getDiscreteRangeValues() !== null)))\r\n this._newvalue = text;\r\n else\r\n {\r\n valDet.setValue(text);\r\n return valDet;\r\n }\r\n }\r\n }\r\n\r\n\r\n if ((typeof this._newvalue === 'string' && !(StrUtil.rtrim(this._newvalue) === StrUtil.rtrim(this._oldvalue))) || ctrl.ModifiedByUser)\r\n {\r\n try\r\n {\r\n switch (valDet.getType())\r\n {\r\n\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n valDet.setValue(this.checkAlphaField());\r\n break;\r\n\r\n case StorageAttribute.NUMERIC:\r\n this._pictureReal = valDet.getPictureReal(); // only numeric type need another picture format\r\n this._pictureEnable = valDet.getPictureEnable();\r\n this.checkNumericPicture();\r\n valDet.setValue(this.checkNumericField());\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n valDet.setValue(this.checkLogicalField());\r\n break;\r\n\r\n case StorageAttribute.DATE:\r\n valDet.setValue(this.checkDateField());\r\n break;\r\n\r\n case StorageAttribute.TIME:\r\n valDet.setValue(this.checkTimeField());\r\n break;\r\n\r\n case StorageAttribute.BLOB:\r\n // there is no real picture to BLOB, do nothing\r\n case StorageAttribute.BLOB_VECTOR:\r\n valDet.setValue(this._newvalue);\r\n break;\r\n\r\n case StorageAttribute.NONE:\r\n default:\r\n Events.WriteExceptionToLog(\"FieldValidator.checkVal: Type of the field \" + valDet.getType());\r\n break;\r\n }\r\n }\r\n catch (goBack) {\r\n if (goBack instanceof WrongFormatException) {\r\n // need change to old value, set focus back and write Error Message\r\n valDet.setValue(this._oldvalue);\r\n this.setValidationFailed(true);\r\n if (goBack.getType() !== MsgInterface.STR_RNG_TXT) {\r\n this.printMessage(goBack.getType(), false);\r\n this.setValidationFailed(true);\r\n }\r\n else\r\n this.printMessage(MsgInterface.STR_RNG_TXT, true);\r\n }\r\n }\r\n }\r\n return valDet;\r\n\r\n }\r\n\r\n /// <summary>Check & validate Alpha field by his old/new value and 2 pictures:\r\n /// Real and Enable\r\n /// 1.check if newvalue complete with pictures, otherwise return oldvalue\r\n /// 2.check if newvalue complete with range\r\n /// 2.1 complete value, if possible, otherwise return oldvalue\r\n /// </summary>\r\n /// <returns> String - new value of validated field</returns>\r\n private checkAlphaField(): string {\r\n\r\n let control: MgControlBase = this._valDet.getControl();\r\n\r\n let IsAttrAlpha: boolean = this._valDet.getType() === StorageAttribute.ALPHA;\r\n\r\n if (this._newvalue.length === 0 && this._valDet.getContinuousRangeValues() === null && this._valDet.getDiscreteRangeValues() === null) {\r\n this.setValidationFailed(false);\r\n return this._newvalue;\r\n }\r\n\r\n if (IsAttrAlpha && UtilStrByteMode.isLocaleDefLangDBCS()) {\r\n let picLenB: number = UtilStrByteMode.lenB(this._picture);\r\n if (UtilStrByteMode.lenB(this._newvalue) > picLenB) {\r\n this._newvalue = UtilStrByteMode.leftB(this._newvalue, picLenB);\r\n }\r\n }\r\n else {\r\n if (this._newvalue.length > this._picture.length) {\r\n this._newvalue = this._newvalue.substr(0, this._picture.length);\r\n }\r\n }\r\n let stringBuilder: StringBuilder = new StringBuilder();\r\n let currPicture: number;\r\n let i: number = currPicture = 0;\r\n\r\n for (currPicture = i = 0; i < this._newvalue.length && currPicture < this._picture.length; ) {\r\n if (!DisplayConvertor.isAlphaPositionalDirective(this._picture.charAt(currPicture)) && this._newvalue.charAt(i) === this._picture.charAt(currPicture)) {\r\n stringBuilder.Append(this._picture.charAt(currPicture));\r\n i = i + 1;\r\n currPicture = currPicture + 1;\r\n }\r\n else {\r\n if (!DisplayConvertor.isAlphaPositionalDirective(this._picture.charAt(currPicture)) && this._newvalue.charAt(i) !== this._picture.charAt(currPicture)) {\r\n stringBuilder.Append(this._picture.charAt(currPicture));\r\n currPicture = currPicture + 1;\r\n }\r\n else {\r\n if (DisplayConvertor.isAlphaPositionalDirective(this._picture.charAt(currPicture)) && this.isPossibleAlphaLetter(i, currPicture)) {\r\n if (UtilStrByteMode.isLocaleDefLangDBCS()) {\r\n let strVal: string = this._newvalue.substr(i, 1);\r\n if (UtilStrByteMode.lenB(strVal) === 2) {\r\n if (IsAttrAlpha) {\r\n if (currPicture + 1 < this._picture.length) {\r\n if (DisplayConvertor.isAlphaPositionalDirective(this._picture.charAt(currPicture + 1)) && this.isPossibleAlphaLetter(i, currPicture + 1)) {\r\n stringBuilder.Append(this._newvalue.charAt(i));\r\n i = i + 1;\r\n currPicture = currPicture + 2;\r\n }\r\n else {\r\n stringBuilder.Append(' ')/*' '*/;\r\n currPicture = currPicture + 1;\r\n }\r\n }\r\n else {\r\n stringBuilder.Append(' ')/*' '*/;\r\n currPicture = currPicture + 1;\r\n }\r\n }\r\n else {\r\n stringBuilder.Append(this._newvalue.charAt(i));\r\n i = i + 1;\r\n currPicture = currPicture + 1;\r\n }\r\n }\r\n else {\r\n stringBuilder.Append(this._newvalue.charAt(i));\r\n i = i + 1;\r\n currPicture = currPicture + 1;\r\n }\r\n }\r\n else {\r\n stringBuilder.Append(this._newvalue.charAt(i));\r\n i = i + 1;\r\n currPicture = currPicture + 1;\r\n }\r\n }\r\n else {\r\n stringBuilder.Append(' ')/*' '*/;\r\n currPicture = currPicture + 1;\r\n if (this._valDet.getControl() !== null) {\r\n let type: MgControlType = control.Type;\r\n if (type !== MgControlType.CTRL_TYPE_BUTTON) {\r\n this.printMessage(MsgInterface.STR_ERR_NUM, false);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this._newvalue = stringBuilder.ToString();\r\n if (this._valDet.getContinuousRangeValues() !== null || this._valDet.getDiscreteRangeValues() !== null) {\r\n this._newvalue = this.fillAlphaByRange(this._valDet.getContinuousRangeValues(), this._valDet.getDiscreteRangeValues());\r\n }\r\n return this._newvalue;\r\n }\r\n\r\n /// <summary>check if char in Alpha compleate with Directive Character for the letter</summary>\r\n /// <param name=\"index\">of directive in string to check</param>\r\n /// <returns> true if complete, false otherwise</returns>\r\n private isPossibleAlphaLetter(indexInput: number, indexPicture: number): boolean {\r\n switch (this._picture.charCodeAt(indexPicture)) {\r\n case PICInterface.PIC_X:\r\n case PICInterface.PIC_J:\r\n case PICInterface.PIC_G:\r\n case PICInterface.PIC_S:\r\n case PICInterface.PIC_T:\r\n return true;\r\n\r\n case PICInterface.PIC_U:\r\n let upper: string = this._newvalue[indexInput].toUpperCase();\r\n if (upper !== this._newvalue[indexInput])\r\n this.changeStringInside(\"\" + upper, indexInput);\r\n return true;\r\n\r\n case PICInterface.PIC_L:\r\n let lower: string = this._newvalue[indexInput].toLowerCase();\r\n if (lower !== this._newvalue[indexInput])\r\n this.changeStringInside(\"\" + lower, indexInput);\r\n return true;\r\n\r\n case PICInterface.PIC_N:\r\n let number1: string = this._newvalue[indexInput];\r\n if (UtilStrByteMode.isDigit(number1) || NChar.IsWhiteSpace(number1) || UtilStrByteMode.asNumeric(number1))\r\n return true;\r\n else\r\n {\r\n Events.WriteErrorToLog(\"Bad Alpha value. Should be number only on place Num. \" + indexInput);\r\n return false;\r\n }\r\n\r\n default:\r\n Events.WriteErrorToLog(\"FieldValidator.isPossibleAlphaLetter: illegal Char Directive: \" + this._picture.indexOf(String.fromCharCode(indexPicture)) + \" for \" + this._newvalue[indexInput]);\r\n return false;\r\n }\r\n }\r\n\r\n\r\n /// <summary>Comparative newvalue with possible Range in ContinuousRangeValues/DiscreteRangeValues</summary>\r\n /// <returns> newvalue if it possible, oldvalue otherwise</returns>\r\n private fillAlphaByRange(ContinuousRangeValues: List<string>, DiscreteRangeValues: List<string>): string {\r\n\r\n let tmpBuffer: string = DisplayConvertor.Instance.fillAlphaByDiscreteRangeValues(DiscreteRangeValues, this._newvalue);\r\n if (tmpBuffer !== null) {\r\n return tmpBuffer;\r\n }\r\n\r\n tmpBuffer = DisplayConvertor.Instance.fillAlphaByContinuousRangeValues(ContinuousRangeValues, this._newvalue);\r\n if (tmpBuffer !== null)\r\n return tmpBuffer;\r\n\r\n if (DiscreteRangeValues !== null)\r\n return this.CompleteAlphaByRange(DiscreteRangeValues);\r\n\r\n\r\n this.printMessage(MsgInterface.STR_RNG_TXT, true);\r\n return this._oldvalue;\r\n }\r\n\r\n /// <summary>Try to complete the newvalue by Range</summary>\r\n /// <returns> completed value if it possible, otherwise oldvalue</returns>\r\n private CompleteAlphaByRange(DiscreteRangeValues: List<string>): string {\r\n let tmpNewValue: string = DisplayConvertor.Instance.completeAlphaByRange(DiscreteRangeValues, this._newvalue);\r\n if (tmpNewValue !== null) {\r\n return tmpNewValue;\r\n }\r\n\r\n // focus back\r\n this.printMessage(MsgInterface.STR_RNG_TXT, true);\r\n return this._oldvalue;\r\n\r\n }\r\n\r\n /// <summary>check & validate Logical field by his old/new value and 2 pictures:\r\n /// Real and Enable\r\n /// 1.check if newvalue complete with pictures, otherwise return oldvalue\r\n /// 2.check if newvalue complete with range\r\n /// 2.1 complete value, if possible, otherwise return oldvalue\r\n /// </summary>\r\n /// <returns> String - new value of validated field</returns>\r\n private checkLogicalField(): boolean {\r\n\r\n if (this._newvalue.length === 0 && this._valDet.getContinuousRangeValues() === null && this._valDet.getDiscreteRangeValues() === null) {\r\n throw new WrongFormatException(MsgInterface.STR_RNG_TXT);\r\n }\r\n\r\n if (this._valDet.getContinuousRangeValues() !== null || this._valDet.getDiscreteRangeValues() !== null) {\r\n this._newvalue = this.fillAlphaByRange(this._valDet.getContinuousRangeValues(), this._valDet.getDiscreteRangeValues());\r\n }\r\n\r\n this.setValidationFailed(false);\r\n\r\n // todo : need to check what is to handle for checking ranges\r\n return this._newvalue;\r\n }\r\n\r\n /// <summary>**************************Numeric*********************************</summary>\r\n\r\n /// <summary>check & validate Numeric field by his old/new value and 2 pictures:\r\n /// Real and Enable\r\n /// 1.check if newvalue complete with pictures, otherwise return oldvalue\r\n /// 2.check if newvalue complete with range\r\n /// 2.1 complete value, if possible, otherwise return oldvalue\r\n /// </summary>\r\n /// <returns> String - new value of validated field</returns>\r\n private checkNumericField(): any {\r\n\r\n let evaluated: any;\r\n if (typeof this._newvalue === 'string') {\r\n if (this._newvalue.length === 0) {\r\n this._newvalue = \"0\";\r\n }\r\n\r\n let delimeterRealIndex: number = this._newvalue.indexOf(this._decimal);\r\n let delimeterPictIndex: number = this._pictureReal.indexOf(this._decimal);\r\n\r\n evaluated = \"\";\r\n let evaluatedLeft: string;\r\n let evaluatedRight: string;\r\n\r\n\r\n this.setValidationFailed(false);\r\n\r\n // check if the format of newvalue matches the numeric mask.\r\n if (!this.checkNumericInDecFormat())\r\n throw new WrongFormatException(MsgInterface.EDT_ERR_STR_1);\r\n\r\n if (delimeterPictIndex !== -1 && delimeterRealIndex !== -1) {\r\n evaluatedLeft = this.checkNumericLeft(delimeterPictIndex, delimeterRealIndex);\r\n evaluatedRight = this.checkNumericRight(delimeterPictIndex, delimeterRealIndex);\r\n evaluated = evaluatedLeft + this._decimal + evaluatedRight;\r\n }\r\n else {\r\n if (delimeterPictIndex !== -1 && delimeterRealIndex === -1) {\r\n evaluatedLeft = this.checkNumericLeft(delimeterPictIndex, Math.min(delimeterPictIndex, this._newvalue.length));\r\n evaluatedRight = this.checkNumericRight(delimeterPictIndex, delimeterPictIndex - 1);\r\n evaluated = evaluatedLeft + this._decimal + evaluatedRight;\r\n }\r\n else { // delimeterPictIndex == -1 && delimeterRealIndex != -1\r\n if (delimeterPictIndex === -1 && delimeterRealIndex === -1) {\r\n evaluated = this.checkNumericRight(-1, -1);\r\n evaluatedLeft = evaluated;\r\n }\r\n else {\r\n if (delimeterRealIndex > 0) {\r\n this._newvalue = this._newvalue.substr(0, delimeterRealIndex);\r\n }\r\n else {\r\n this._newvalue = \"0\";\r\n }\r\n evaluated = this.checkNumericRight(-1, -1);\r\n evaluatedLeft = evaluated;\r\n }\r\n }\r\n }\r\n\r\n if ((evaluatedRight.length === 0 && evaluatedLeft.length === 0) || (evaluated.length === 0 && this._newvalue.length > 0)) {\r\n // space|nothing was inserted -> use default value\r\n let ctrl: MgControlBase;\r\n ctrl = this._valDet.getControl();\r\n\r\n let field: GuiFieldBase = ctrl.getField();\r\n let defValue: string = field.getDefaultValue(); // inner value inserted\r\n let dispDefValue: any = null;\r\n\r\n if (field.isNullDefault()) {\r\n this._valDet.setNull(true);\r\n dispDefValue = field.getNullDisplay();\r\n }\r\n if (dispDefValue == null)\r\n dispDefValue = DisplayConvertor.Instance.mg2disp(defValue, this._valDet.getRange(), this._valDet.getPIC(), true, field.getTask().getCompIdx(), false);\r\n\r\n }\r\n\r\n // check if the digit before the delimiter do not exceed the pic wholes.\r\n let wholeDigitdiff: number = this.digitsBeforeDelimeter(evaluated, 0, this._decimal) - this._valDet.getPIC().getWholes();\r\n // if they do, check if the exceeding chars are the pad chars. if so, there is no error.\r\n if (wholeDigitdiff > 0) {\r\n let padCharOnly: boolean = false;\r\n // is there a pad, check it. no pad is a certain error.\r\n if (this._valDet.getIsPadFill()) {\r\n padCharOnly = true;\r\n for (let i: number = 0; i < wholeDigitdiff && padCharOnly; i++)\r\n // if the char is not the pad, then this is an error.\r\n if (evaluated[i] !== this._valDet.getPadFillChar())\r\n padCharOnly = false;\r\n }\r\n\r\n if (!padCharOnly)\r\n throw new WrongFormatException(MsgInterface.EDT_ERR_STR_1);\r\n }\r\n\r\n\r\n if (this._valDet.getIsNegative() && (this._newvalue.trim().startsWith(\"-\") || (this._valDet.getNegativeSignPref().length !== 0 && this._newvalue.trim().startsWith(this._valDet.getNegativeSignPref())))) {\r\n evaluated = \"-\" + evaluated;\r\n }\r\n\r\n // from this point have evaluated string - the value (without mask) of the control\r\n // needed to be inserted to the picture\r\n evaluated = DisplayConvertor.Instance.disp2mg(this._newvalue, this._valDet.getPIC(), this._valDet.getControl().getForm().getTask().getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);\r\n evaluated = DisplayConvertor.Instance.mg2disp(evaluated, \"\", this._valDet.getPIC(), true, this._valDet.getControl().getForm().getTask().getCompIdx(), true);\r\n\r\n // in order check if user has entered a blank value , trim and then check it's length.\r\n let tempDispVal: string = StrUtil.ltrim(evaluated);\r\n if (tempDispVal.length === 0 && this._valDet.getPIC().zeroFill() && this._valDet.getPIC().getZeroPad() === ' ')\r\n evaluated = \"0\";\r\n }\r\n else {\r\n\r\n // from this point have evaluated string - the value (without mask) of the control\r\n // needed to be inserted to the picture\r\n evaluated = DisplayConvertor.Instance.disp2mg(this._newvalue, this._valDet.getPIC(), this._valDet.getControl().getForm().getTask().getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);\r\n evaluated = DisplayConvertor.Instance.mg2disp(evaluated, \"\", this._valDet.getPIC(), true, this._valDet.getControl().getForm().getTask().getCompIdx(), true);\r\n\r\n }\r\n // Insert the number to range\r\n if (this._valDet.getContinuousRangeValues() != null || this._valDet.getDiscreteRangeValues() != null)\r\n {\r\n this._newvalue = evaluated;\r\n evaluated = this.fillNumericByRange();\r\n }\r\n return evaluated;\r\n }\r\n\r\n /// <summary>Check validity of numerical picture from found 'delimeter' to left.\r\n /// <-.\r\n /// </summary>\r\n /// <param name=\"delimeterPictIndex\">found delimeter in the picture</param>\r\n /// <param name=\"delimeterRealIndex\">found delimeter in the inserted by user new value</param>\r\n private checkNumericLeft(delimeterPictIndex: number, delimeterRealIndex: number): string {\r\n let buffer: StringBuilder = new StringBuilder();\r\n let RealIndex: number = delimeterRealIndex - 1;\r\n let PictIndex: number;\r\n let isFound: boolean;\r\n\r\n for (PictIndex = delimeterPictIndex - 1; PictIndex >= 0 && RealIndex >= 0; PictIndex--)\r\n {\r\n if (this._pictureEnable[PictIndex] === '1')\r\n {\r\n let tmpstorage: number = RealIndex;\r\n isFound = false;\r\n\r\n for (; RealIndex >= 0; RealIndex--)\r\n {\r\n if (this._pictureReal[PictIndex] === this._newvalue[RealIndex])\r\n {\r\n isFound = true;\r\n RealIndex--;\r\n break;\r\n }\r\n }\r\n\r\n if (!isFound)\r\n RealIndex = tmpstorage;\r\n\r\n buffer.Append(this._pictureReal[PictIndex]);\r\n }\r\n // can insert only number\r\n else\r\n {\r\n for (; RealIndex >= 0; RealIndex--)\r\n {\r\n if (UtilStrByteMode.isDigit(this._newvalue[RealIndex]))\r\n {\r\n buffer.Append(this._newvalue[RealIndex]);\r\n RealIndex--;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (RealIndex < 0 && PictIndex >= 0)\r\n // try to add unwritable\r\n for (; PictIndex >= 0; PictIndex--)\r\n {\r\n if (this._pictureEnable[PictIndex] === '1')\r\n buffer.Append(this._pictureReal[PictIndex]);\r\n else\r\n {\r\n // only from left need PadFill\r\n if (this._valDet.getIsPadFill())\r\n buffer.Append(this._valDet.getPadFillChar());\r\n }\r\n }\r\n\r\n return StrUtil.ReverseString(buffer).ToString();\r\n }\r\n\r\n /// <summary>Check validity of numerical picture from found 'delimeter' to right.\r\n /// .->\r\n /// </summary>\r\n /// <param name=\"delimeterPictIndex\">found delimeter in the picture</param>\r\n /// <param name=\"delimeterRealIndex\">found delimeter in the inserted by user new value</param>\r\n private checkNumericRight(delimeterPictIndex: number, delimeterRealIndex: number): string {\r\n let buffer: StringBuilder = new StringBuilder();\r\n let RealIndex: number = delimeterRealIndex + 1;\r\n let PictIndex: number;\r\n let pic: PIC = this._valDet.getPIC();\r\n\r\n for (PictIndex = delimeterPictIndex + 1; PictIndex < this._pictureEnable.length && RealIndex < this._newvalue.length; PictIndex++)\r\n {\r\n if (this._pictureEnable[PictIndex] === '1')\r\n {\r\n if (RealIndex < PictIndex)\r\n RealIndex = PictIndex;\r\n\r\n buffer.Append(this._pictureReal[PictIndex]);\r\n }\r\n // can insert only number\r\n else\r\n {\r\n for (; RealIndex < this._newvalue.length; RealIndex++)\r\n {\r\n // Append the digit of actual input data. If it is mask char, skip it.\r\n if (UtilStrByteMode.isDigit(this._newvalue[RealIndex]) && !pic.picIsMask(RealIndex))\r\n {\r\n buffer.Append(this._newvalue[RealIndex]);\r\n RealIndex++;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // if right part has any input data, then only append unwritable chars\r\n if (buffer.Length > 0)\r\n {\r\n if (RealIndex >= this._newvalue.length && PictIndex < this._pictureReal.length)\r\n // try to add unwritable\r\n for (; PictIndex < this._pictureReal.length; PictIndex++)\r\n {\r\n if (this._pictureEnable[PictIndex] === '1')\r\n buffer.Append(this._pictureReal[PictIndex]);\r\n // else Do nothing\r\n }\r\n }\r\n return buffer.ToString();\r\n }\r\n\r\n /// <summary>BUG: 442788\r\n /// Changing decimal separator in thew pictureReal to value got from Environment\r\n /// </summary>\r\n private checkNumericPicture(): void {\r\n let indexOfDec: number;\r\n let lastDec: number;\r\n let maxLength: number;\r\n let currIndx: number;\r\n let POINT_DEC: string = \".\"; // used in PICTURE for decimal separator\r\n\r\n let pic: PIC = this._valDet.getPIC();\r\n\r\n if (this._pictureReal == null || this._pictureEnable == null || pic.getAttr() !== StorageAttribute.NUMERIC || !pic.withDecimal())\r\n return;\r\n\r\n lastDec = this._pictureReal.lastIndexOf(POINT_DEC);\r\n maxLength = this._pictureEnable.length;\r\n currIndx = 0;\r\n while (currIndx < lastDec)\r\n {\r\n indexOfDec = this._pictureEnable.indexOf(\"1\", currIndx);\r\n\r\n if (indexOfDec === -1)\r\n // not found\r\n return;\r\n else\r\n {\r\n if (indexOfDec === this._pictureReal.indexOf( POINT_DEC, currIndx))\r\n // it's real decimal point and not \\. into the picture\r\n {\r\n let first: string;\r\n let second: string;\r\n\r\n first = second = \"\";\r\n if (indexOfDec === 0)\r\n // the point on the first place .###\r\n {\r\n if (indexOfDec + 1 < maxLength)\r\n // only 1 .\r\n second = this._pictureReal.substr(indexOfDec + 1);\r\n }\r\n else if (indexOfDec === maxLength)\r\n // the point on the last place ###.\r\n {\r\n first = this._pictureReal.substr(0 , indexOfDec);\r\n }\r\n else\r\n {\r\n first = this._pictureReal.substr(0 , indexOfDec);\r\n second = this._pictureReal.substr(indexOfDec + 1);\r\n }\r\n this._pictureReal = first + this._decimal + second;\r\n break;\r\n }\r\n else\r\n {\r\n currIndx = ++indexOfDec;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary> Compare newvalue with the range</summary>\r\n /// <returns> newvalue if it's in the range, oldvalue otherwise</returns>\r\n private fillNumericByRange(): string {\r\n let controlPic: PIC = this._valDet.getControl().getPIC();\r\n let continuousRangeValues: List<string> = this._valDet.getContinuousRangeValues();\r\n let discreteRangeValues: List<string> = this._valDet.getDiscreteRangeValues();\r\n this.setValidationFailed(false);\r\n\r\n let checkedStr: string = this.setNumericValueWithoutPicture(this._newvalue.toString());\r\n\r\n\r\n if (checkedStr.length === 0) {\r\n this.printMessage(MsgInterface.STR_RNG_TXT, true);\r\n return this._oldvalue;\r\n }\r\n\r\n\r\n let checkedNum: NUM_TYPE = new NUM_TYPE(this._newvalue.toString(), this._valDet.getControl().getPIC(), 0);\r\n\r\n if (discreteRangeValues !== null) {\r\n for (let i: number = 0; i < discreteRangeValues.length; i = i + 1) {\r\n let rangeItemValue1: NUM_TYPE = new NUM_TYPE(discreteRangeValues.get_Item(i), controlPic, 0);\r\n\r\n try {\r\n if (NUM_TYPE.num_cmp(checkedNum, rangeItemValue1) === 0) {\r\n return this._newvalue;\r\n }\r\n }\r\n catch (ex_CC) {\r\n // skip non-numeric range values\r\n }\r\n }\r\n }\r\n\r\n if (continuousRangeValues !== null) {\r\n for (let i: number = 0; i < continuousRangeValues.length; i = i + 1) {\r\n\r\n let rangeItemValue1: NUM_TYPE = new NUM_TYPE();\r\n let rangeItemValue2: NUM_TYPE = new NUM_TYPE();\r\n\r\n rangeItemValue1.num_4_a_std(continuousRangeValues.get_Item(i++));\r\n rangeItemValue2.num_4_a_std(continuousRangeValues.get_Item(i));\r\n\r\n try {\r\n if (NUM_TYPE.num_cmp(checkedNum, rangeItemValue1) !== -1 && NUM_TYPE.num_cmp(rangeItemValue2, checkedNum) !== -1) {\r\n return this._newvalue;\r\n }\r\n }\r\n catch (ex_15B) {\r\n // skip non-numeric range values\r\n }\r\n }\r\n }\r\n throw new WrongFormatException();\r\n }\r\n\r\n\r\n /// <summary>set Numeric value Without Picture, filter input from user</summary>\r\n /// <returns> the pure number, without picture mask</returns>\r\n private setNumericValueWithoutPicture(val: string): string {\r\n let checkedStr: StringBuilder = new StringBuilder(val.length);\r\n let isFirstDecimal: boolean = false;\r\n let currChar: string;\r\n\r\n for (let i: number = 0; i < this._pictureReal.length && i < val.length; i++)\r\n {\r\n currChar = val[i];\r\n if (UtilStrByteMode.isDigit(currChar))\r\n checkedStr.Append(currChar);\r\n else if (currChar === this._environment.GetDecimal() && !isFirstDecimal)\r\n {\r\n checkedStr.Append(NString.ToCharArray(NumberFormatInfo.NumberDecimalSeparator).toString());\r\n isFirstDecimal = true;\r\n }\r\n else if (currChar === '-' && this._valDet.getIsNegative())\r\n checkedStr.Append(NString.ToCharArray(NumberFormatInfo.NegativeSign).toString());\r\n }\r\n if (checkedStr.ToString().length === 0)\r\n {\r\n this.printMessage(MsgInterface.STR_ERR_NUM, false);\r\n this.setValidationFailed(true);\r\n }\r\n return checkedStr.ToString();\r\n }\r\n\r\n /// <summary> check if newvalue format matches the numeric pic format.</summary>\r\n /// <returns></returns>\r\n private checkNumericInDecFormat(): boolean {\r\n\r\n\r\n let pic: PIC = this._valDet.getPIC();\r\n let i: number;\r\n let Dec: number;\r\n let Whole: number;\r\n let DecPos: number;\r\n let decimalChar: string = this._environment.GetDecimal();\r\n\r\n // Count number of digits and position of decimal point\r\n\r\n Dec = 0;\r\n Whole = 0;\r\n DecPos = -1;\r\n\r\n for (i = 0; i < this._newvalue.length; i++)\r\n if (pic.isNumeric(i))\r\n if (UtilStrByteMode.isDigit(this._newvalue[i]))\r\n // when dec pos not found, count wholes, if found, count dec.\r\n if (DecPos >= 0)\r\n Dec++;\r\n else\r\n Whole++;\r\n else if (this._newvalue[i] === decimalChar)\r\n DecPos = i;\r\n\r\n // did we exceed the mask ?\r\n if (pic.getWholes() < Whole || pic.getDec() < Dec)\r\n return false;\r\n else\r\n return true;\r\n }\r\n\r\n /// <summary>check & validate Date field by his old/new value and 2 pictures:\r\n /// Real and Enable\r\n /// 1.check if newvalue complete with pictures, otherwise return oldvalue\r\n /// 2.check if newvalue complete with range\r\n /// 2.1 complete value, if possible, otherwise return oldvalue\r\n /// </summary>\r\n /// <returns> new value of validated field</returns>\r\n private checkDateField(): Date {\r\n\r\n let newDate: Date = (this._newvalue == null ? null : new Date(this._newvalue));\r\n this.setValidationFailed(false);\r\n\r\n if (this._valDet.getControl().isDateZero(this._newvalue)) {\r\n // get default value of the field\r\n let defaultMgValue: string = this._valDet.getControl().getField().getDefaultValue();\r\n\r\n newDate = DisplayConvertor.Instance.mg2disp(defaultMgValue, \"\", this._valDet.getPIC(), true, this._valDet.getControl().getForm().getTask().getCompIdx(), false);\r\n }\r\n else\r\n {\r\n // range date\r\n if (this._valDet.getContinuousRangeValues() != null || this._valDet.getDiscreteRangeValues() != null)\r\n newDate = this.fillDateByRange(this._valDet.getContinuousRangeValues(), this._valDet.getDiscreteRangeValues(), this._newvalue);\r\n }\r\n return newDate;\r\n\r\n }\r\n\r\n\r\n\r\n\r\n /// <summary>check and fill DATE type by range</summary>\r\n private fillDateByRange(ContinuousRange: List<string>, DiscreteRange: List<string>, buffer: Date): Date {\r\n let pic: PIC = this._valDet.getPIC();\r\n let i: number;\r\n let downDate: number;\r\n let topDate: number;\r\n\r\n let currDate = DisplayConvertor.Instance.fromNativeDateToMgDateNumber(buffer, pic);\r\n\r\n this.setValidationFailed(false);\r\n if (ContinuousRange != null) {\r\n for (i = 0; i < ContinuousRange.length - 1; i++) {\r\n downDate = DisplayConvertor.Instance.a_2_date_pic(ContinuousRange.get_Item(i), pic, pic.getMask(), this._valDet.getControl().getForm().getTask().getCompIdx());\r\n topDate = DisplayConvertor.Instance.a_2_date_pic(ContinuousRange.get_Item(++i), pic, pic.getMask(), this._valDet.getControl().getForm().getTask().getCompIdx());\r\n if (currDate >= downDate && currDate <= topDate)\r\n return new Date(buffer);\r\n }\r\n }\r\n\r\n if (DiscreteRange != null) {\r\n for (i = 0; i < DiscreteRange.length; i++) {\r\n if (currDate === DisplayConvertor.Instance.a_2_date_pic(DiscreteRange.get_Item(i), pic, pic.getMask(), this._valDet.getControl().getForm().getTask().getCompIdx())) {\r\n return new Date(buffer);\r\n }\r\n }\r\n }\r\n // the date is not in the range\r\n throw new WrongFormatException();\r\n\r\n }\r\n\r\n\r\n /// <summary>check & validate Time field by his old/new value and 2 pictures:\r\n /// Real and Enable\r\n /// 1.check if newvalue complete with pictures, otherwise return oldvalue\r\n /// 2.check if newvalue complete with range\r\n /// 2.1 complete value, if possible, otherwise return oldvalue\r\n /// </summary>\r\n /// <returns> String - new value of validated field</returns>\r\n private checkTimeField(): Date {\r\n let newTime: Date = new Date (this._newvalue);\r\n\r\n\r\n this.setValidationFailed(false);\r\n\r\n if (this._valDet.getControl().isDateZero(this._newvalue)) {\r\n // get default value of the field\r\n let defaultMgValue: string = this._valDet.getControl().getField().getDefaultValue();\r\n newTime = DisplayConvertor.Instance.mg2disp(defaultMgValue, \"\", this._valDet.getPIC(), true, this._valDet.getControl().getForm().getTask().getCompIdx(), false);\r\n }\r\n else {\r\n\r\n // range of the time\r\n if (this._valDet.getContinuousRangeValues() != null || this._valDet.getDiscreteRangeValues() != null)\r\n newTime = this.fillTimeByRange(this._valDet.getContinuousRangeValues(), this._valDet.getDiscreteRangeValues(), this._newvalue);\r\n }\r\n return newTime;\r\n }\r\n\r\n private fillTimeByRange(ContinuousRange: List<string>, DiscreteRange: List<string>, buffer: Date): Date {\r\n let pic: PIC = this._valDet.getPIC();\r\n let currTime: number = DisplayConvertor.Instance.fromNativeTimeToMgTimeNumber(buffer);\r\n let downTime: number, topTime: number;\r\n let i: number;\r\n\r\n this.setValidationFailed(false);\r\n if (ContinuousRange != null)\r\n {\r\n for (i = 0; i < ContinuousRange.length - 1; i++)\r\n {\r\n downTime = DisplayConvertor.Instance.a_2_time(ContinuousRange.get_Item(i), pic, false);\r\n topTime = DisplayConvertor.Instance.a_2_time(ContinuousRange.get_Item(++i), pic, false);\r\n if (currTime >= downTime && currTime <= topTime)\r\n return new Date(buffer);\r\n }\r\n }\r\n\r\n if (DiscreteRange != null)\r\n {\r\n for (i = 0; i < DiscreteRange.length; i++)\r\n {\r\n if (currTime === DisplayConvertor.Instance.a_2_time(DiscreteRange.get_Item(i), pic, false))\r\n return new Date(buffer);\r\n }\r\n }\r\n // the time is not in the range\r\n throw new WrongFormatException();\r\n }\r\n\r\n /// <summary>*************************************************************\r\n /// SERVICE functions\r\n /// ***************************************************************\r\n /// </summary>\r\n\r\n /// <summary> print ERROR prompt message about range to status bar</summary>\r\n /// <param name=\"msgId\">of error Message</param>\r\n /// <param name=\"setValidationFaild\">validation failed</param>\r\n private printMessage(msgId: string, setValidationFaild: boolean): void {\r\n let message: StringBuilder = new StringBuilder(\"\");\r\n let ctrlType: MgControlType;\r\n\r\n if (msgId === MsgInterface.EDT_ERR_STR_1)\r\n {\r\n let pic: PIC = this._valDet.getPIC();\r\n let token: string = \"%d\";\r\n let messageString: string = Events.GetMessageString(msgId);\r\n messageString = StrUtil.replaceStringTokens(messageString, token, 1, pic.getWholes().toString());\r\n messageString = StrUtil.replaceStringTokens(messageString, token, 1, pic.getDec().toString());\r\n message.Append(messageString);\r\n }\r\n else\r\n {\r\n message.Append(Events.GetMessageString(msgId));\r\n if (msgId === MsgInterface.STR_RNG_TXT && this._valDet.getRange() != null)\r\n message.Append(StrUtil.makePrintableTokens(this._valDet.getRange(), HTML_2_STR));\r\n }\r\n\r\n if (this._valDet.getControl() != null)\r\n {\r\n ctrlType = this._valDet.getControl().Type;\r\n if (ctrlType !== MgControlType.CTRL_TYPE_BUTTON && ctrlType !== MgControlType.CTRL_TYPE_RADIO && !this._valDet.getControl().isSelectionCtrl())\r\n {\r\n let msgString: string = message.ToString();\r\n this._valDet.getControl().getForm().getTask().WriteToMessagePane(StrUtil.makePrintable2(msgString));\r\n this._valDet.getControl().getForm().ErrorOccured = !NString.IsNullOrEmpty(msgString);\r\n this._valDet.ErrorMessage = message.ToString();\r\n }\r\n }\r\n if (setValidationFaild)\r\n // from this point the focus send back to control and setValidationFailed(true) can not set it to true\r\n this.setValidationFailed(true);\r\n }\r\n\r\n /// <summary>Change inside 'newvalue' substring on position 'index' to string 'to'</summary>\r\n /// <param name=\"newvalue\">to change inside</param>\r\n /// <param name=\"to\">string to change by him</param>\r\n /// <param name=\"index\">the substring to change on the position</param>\r\n private changeStringInside(to: string, index: number): void {\r\n this._newvalue = this._newvalue.substr(0, index) + to + this._newvalue.substr(index + to.length);\r\n }\r\n\r\n private init(validationDetails: ValidationDetails): void {\r\n this._valDet = validationDetails;\r\n this._valDet.setNull(false);\r\n\r\n let pIC: PIC = this._valDet.getPIC();\r\n this._oldvalue = this._valDet.getOldValue();\r\n this._newvalue = this._valDet.getDispValue();\r\n\r\n if (this._newvalue === null) {\r\n if (pIC == null || pIC.getAttr() != StorageAttribute.DATE)\r\n this._newvalue = \"\";\r\n }\r\n\r\n if (this._oldvalue === null) {\r\n this._oldvalue = \"\";\r\n }\r\n\r\n if (!(pIC === null || pIC.getAttr() === StorageAttribute.BLOB || pIC.getAttr() === StorageAttribute.BLOB_VECTOR)) {\r\n this._picture = pIC.getMask();\r\n\r\n this._picture = this._picture.substr(0, pIC.getMaskSize());\r\n }\r\n }\r\n\r\n\r\n\r\n /// <summary> set the \"validation failed\" flag</summary>\r\n /// <param name=\"val\">value to use</param>\r\n private setValidationFailed(val: boolean): void {\r\n if (this._valDet.ValidationFailed)\r\n return;\r\n else\r\n this._valDet.setValidationFailed(val);\r\n }\r\n\r\n /// <summary> Count digits in string before delimeter</summary>\r\n /// <param name=\"inputString\">- string to look into for delimeter</param>\r\n /// <param name=\"searchStart\">- initial index position for search in inputString</param>\r\n /// <param name=\"delimeter\">we are looking for</param>\r\n private digitsBeforeDelimeter(inputString: string, searchStart: number, delimeter: string): number {\r\n let counter: number = 0;\r\n let searchEndPos: number = inputString.indexOf(delimeter, searchStart);\r\n\r\n if (searchEndPos < 0)\r\n searchEndPos = inputString.length;\r\n\r\n for (let i: number = searchStart; i < searchEndPos; i++)\r\n if (NChar.IsDigit(inputString[i]))\r\n counter++;\r\n\r\n return counter;\r\n }\r\n\r\n /// <summary> by Ctrl+U (Set to Null), null display value is set to ctrl. In this case we need following checking , in order to set field to null.</summary>\r\n /// <param name=\"val\">- entered value to value to check</param>\r\n private isNullDisplayVal(): boolean {\r\n let isNullDisplayVal: boolean = false;\r\n let field: GuiFieldBase = this._valDet.getControl().getField();\r\n\r\n if (field.NullAllowed && field.hasNullDisplayValue())\r\n {\r\n let dispDefValue: any = field.getNullDisplay();\r\n if (dispDefValue !== null)\r\n isNullDisplayVal = (dispDefValue.toString() === this._newvalue);\r\n else\r\n isNullDisplayVal = (this._newvalue === null);\r\n }\r\n\r\n return isNullDisplayVal;\r\n }\r\n}\r\n","import {MgControlBase} from \"./MgControlBase\";\r\nimport {FieldValidator} from \"./FieldValidator\";\r\nimport {PIC} from \"./PIC\";\r\nimport {StringBuilder, List} from \"@magic-xpa/mscorelib\";\r\nimport {StorageAttribute, StrUtil, PICInterface} from \"@magic-xpa/utils\";\r\nimport {Events} from \"../../Events\";\r\nimport { ValidationDetailsBase } from \"./ValidationDetailsBase\";\r\n\r\n\r\nexport class ValidationDetails extends ValidationDetailsBase {\r\n\r\n // ATTENTION !!! when you add/modify/delete a member variable don't forget to take care\r\n // about the copy constructor: ValidationDetails(ValidationDetails vd)\r\n\r\n private _control: MgControlBase = null;\r\n private _fieldValidator: FieldValidator = null;\r\n private _picData: PIC = null;\r\n private _pictureEnable: StringBuilder = null; // for inner (of Numeric type) use only, String of 1's -> possible to write ; 0's -> impossible to write ; for '\\' using\r\n private _pictureReal: StringBuilder = null; // for inner (of Numeric type) use only\r\n private _isNull: boolean = false;\r\n private _oldvalue: string = null; // old value of the control\r\n private _val: any = null; // new value, inserted into control\r\n private _validationFailed: boolean = false;\r\n\r\n private errMessage: string = null;\r\n\r\n get ErrorMessage(): string {\r\n return this.errMessage;\r\n }\r\n\r\n set ErrorMessage(msg: string) {\r\n this.errMessage = msg;\r\n }\r\n\r\n get ValidationFailed(): boolean {\r\n return this._validationFailed;\r\n }\r\n\r\n /// <summary>\r\n /// Constructor, which sets all member values\r\n /// </summary>\r\n constructor(oldvalue: any, val: any, range: string, pic: PIC, control: MgControlBase);\r\n constructor(rangeStr: string);\r\n constructor(vd: ValidationDetails);\r\n constructor();\r\n constructor(oldvalueOrRangeStrOrVd?: any, val?: string, range?: string, pic?: PIC, control?: MgControlBase) {\r\n super();\r\n this.constructor_3();\r\n\r\n if (arguments.length === 5)\r\n this.constructor_0(oldvalueOrRangeStrOrVd, val, range, pic, control);\r\n\r\n else if (arguments.length === 1 && (oldvalueOrRangeStrOrVd === null || oldvalueOrRangeStrOrVd.constructor === String))\r\n this.constructor_1(oldvalueOrRangeStrOrVd);\r\n\r\n else if (arguments.length === 1 && (oldvalueOrRangeStrOrVd === null || oldvalueOrRangeStrOrVd instanceof ValidationDetails))\r\n this.constructor_2(oldvalueOrRangeStrOrVd);\r\n }\r\n\r\n private constructor_0(oldvalue: any, val: any, range: string, pic: PIC, control: MgControlBase): void {\r\n this._picData = pic;\r\n this._oldvalue = oldvalue; // old value of the field\r\n this._val = val; // new inserted value of the field\r\n this._range = range;\r\n this._control = control;\r\n\r\n switch (pic.getAttr()) {\r\n case StorageAttribute.NUMERIC:\r\n this._pictureReal = new StringBuilder(this._picData.getMaskSize());\r\n this._pictureEnable = new StringBuilder(this._picData.getMaskSize());\r\n this.getRealNumericPicture();\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n if (this._range == null)\r\n this._range = \"True,False\"; // default range value for Logical\r\n break;\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.BLOB:\r\n case StorageAttribute.BLOB_VECTOR:\r\n case StorageAttribute.UNICODE:\r\n break;\r\n\r\n default:\r\n Events.WriteExceptionToLog(\"ValidationDetails.ValidationDetails: There is no type \" +\r\n this._picData.getAttr());\r\n break;\r\n }\r\n // get Range for the picture:\r\n if (this._range != null)\r\n this.fillRange();\r\n\r\n // free memory\r\n range = null;\r\n }\r\n\r\n /// <summary>\r\n /// constructor for range only, make parsing of Range and fill\r\n /// DiscreteRangeValues and ContinuousRangeValues\r\n /// (used in DisplayConventor)\r\n /// </summary>\r\n /// <param name = \"range\">string</param>\r\n private constructor_1(rangeStr: string): void {\r\n this.constructor_3();\r\n this._range = rangeStr;\r\n if (this._range !== null)\r\n this.fillRange();\r\n }\r\n\r\n /// <summary>\r\n /// Make copy of validation details,\r\n /// copy constructor\r\n /// </summary>\r\n private constructor_2(vd: ValidationDetails): void {\r\n this.constructor_3();\r\n this._oldvalue = vd.getOldValue();\r\n this._val = vd._val;\r\n this._range = vd.getRange();\r\n this._control = vd.getControl();\r\n this._validationFailed = false;\r\n if (vd._pictureReal !== null) {\r\n this._pictureReal = new StringBuilder(vd._pictureReal.ToString());\r\n }\r\n if (vd._pictureEnable !== null) {\r\n this._pictureEnable = new StringBuilder(vd._pictureEnable.ToString());\r\n }\r\n if (vd.getDiscreteRangeValues() !== null) {\r\n this._discreteRangeValues = vd.CloneDiscreteRangeValues();\r\n }\r\n if (vd.getContinuousRangeValues() != null) {\r\n this._continuousRangeValues = vd.CloneContinuousRangeValues();\r\n }\r\n this._picData = vd.getPIC();\r\n this._isNull = vd.getIsNull();\r\n }\r\n\r\n private constructor_3(): void {\r\n this._fieldValidator = new FieldValidator();\r\n }\r\n\r\n /// <summary>\r\n /// ***********************Numeric*****************************************\r\n /// </summary>\r\n private getRealNumericPicture(): void {\r\n let mask: string = this._picData.getMask();\r\n let dec_: number = this._picData.getDec();\r\n let whole_: number = this._picData.getWholes();\r\n let decimal_: boolean = this._picData.withDecimal();\r\n let dec_pnt_in_first: boolean = this._picData.decInFirstPos();\r\n let isNegative: boolean = this._picData.isNegative();\r\n let isFirstPic_N: boolean = true;\r\n let isPointInserted: boolean = false;\r\n\r\n let currChar = 0;\r\n\r\n for (let i: number = 0; i < this._picData.getMaskSize(); i = i + 1) {\r\n currChar = +mask.charAt(i); // it's ASCII of the char\r\n\r\n switch (currChar) {\r\n case PICInterface.PIC_N:\r\n if (isFirstPic_N) {\r\n if (isNegative)\r\n this.setPictures('-', '0');\r\n\r\n if (dec_pnt_in_first) {\r\n this.setPictures('.', '1');\r\n isPointInserted = true;\r\n }\r\n else if (whole_ > 0) {\r\n whole_--;\r\n this.setPictures('#', '0');\r\n }\r\n isFirstPic_N = false;\r\n break;\r\n }\r\n\r\n if (decimal_) {\r\n if (whole_ > 0) {\r\n whole_--;\r\n this.setPictures('#', '0');\r\n }\r\n else if (whole_ === 0 && !isPointInserted) {\r\n this.setPictures('.', '1');\r\n isPointInserted = true;\r\n }\r\n else if (dec_ > 0) {\r\n dec_--;\r\n this.setPictures('#', '0');\r\n }\r\n }\r\n else {\r\n if (whole_ > 0) {\r\n whole_--;\r\n this.setPictures('#', '0');\r\n }\r\n }\r\n break;\r\n\r\n default: // const string in Alpha\r\n this.setPictures(currChar.toString(), '1');\r\n break;\r\n }\r\n }\r\n Events.WriteDevToLog(this._pictureReal.ToString());\r\n Events.WriteDevToLog(this._pictureEnable.ToString());\r\n }\r\n\r\n /// <summary>\r\n /// add chars to Real and Enable String Buffers\r\n /// </summary>\r\n /// <param name = \"real\">to Real</param>\r\n /// <param name = \"Enable\">to Enable</param>\r\n private setPictures(Real: string, Enable: string): void {\r\n this._pictureEnable.Append(Enable);\r\n this._pictureReal.Append(Real);\r\n }\r\n\r\n setValue(val: any): void {\r\n this._val = val;\r\n }\r\n\r\n setOldValue(oldvalue: any): void {\r\n this._oldvalue = oldvalue;\r\n }\r\n\r\n setRange(range: string): void {\r\n this._range = range;\r\n }\r\n\r\n /// <summary>\r\n /// set the \"validation failed\" flag\r\n /// </summary>\r\n setValidationFailed(val: boolean): void {\r\n this._validationFailed = val;\r\n }\r\n\r\n /// <summary>\r\n /// set isNull flag of the ValDetails\r\n /// </summary>\r\n setNull(isNull_: boolean): void {\r\n this._isNull = isNull_;\r\n }\r\n\r\n /// <summary>\r\n /// returns the valid display value (with mask)\r\n /// </summary>\r\n getDispValue(): string {\r\n if (typeof this._val === 'string') {\r\n let minimumValueLength: number = this._picData.getMinimumValueLength();\r\n\r\n // RTrim the value beyond this index\r\n if (this._val.length > minimumValueLength) {\r\n if (minimumValueLength > 0 || StrUtil.rtrim(this._val).length > 0) {\r\n let str: string = this._val.substr(minimumValueLength);\r\n this._val = this._val.substr(0, minimumValueLength);\r\n this._val = this._val + StrUtil.rtrim(str);\r\n }\r\n }\r\n }\r\n else {\r\n if (this._control != null && this._control.isChoiceControl())\r\n this._val = this._val.toString();\r\n }\r\n return this._val;\r\n }\r\n\r\n getOldValue(): string {\r\n return this._oldvalue;\r\n }\r\n\r\n getType(): StorageAttribute {\r\n return this._picData.getAttr();\r\n }\r\n\r\n getPictureReal(): string {\r\n return this._pictureReal.ToString();\r\n }\r\n\r\n getPictureEnable(): string {\r\n return this._pictureEnable.ToString();\r\n }\r\n\r\n // for Numeric\r\n getIsNegative(): boolean {\r\n return this._picData.isNegative();\r\n }\r\n\r\n // for Numeric\r\n getIsPadFill(): boolean {\r\n return this._picData.padFill();\r\n }\r\n\r\n // for Numeric\r\n getPadFillChar(): string {\r\n return this._picData.getPad();\r\n }\r\n\r\n // for Numeric, Date, Time\r\n getIsZeroFill(): boolean {\r\n return this._picData.zeroFill();\r\n }\r\n\r\n // for Numeric, Date, Time\r\n getZeroFillChar(): string {\r\n return this._picData.getZeroPad();\r\n }\r\n\r\n // for Numeric\r\n getNegativeSignPref(): string {\r\n return this._picData.getNegPref_();\r\n }\r\n\r\n getRange(): string {\r\n return this._range;\r\n }\r\n\r\n getControl(): MgControlBase {\r\n return this._control;\r\n }\r\n\r\n getPIC(): PIC {\r\n return this._picData;\r\n }\r\n\r\n getIsNull(): boolean {\r\n return this._isNull;\r\n }\r\n\r\n evaluate(): ValidationDetails {\r\n return this._fieldValidator.checkVal(this);\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <returns></returns>\r\n private CloneDiscreteRangeValues(): List<string> {\r\n let clone: List<string> = new List<string>();\r\n clone.AddRange(this._discreteRangeValues.GetEnumerator());\r\n return clone;\r\n }\r\n\r\n private CloneContinuousRangeValues(): List<string> {\r\n let clone: List<string> = new List<string>();\r\n clone.AddRange(this._continuousRangeValues.GetEnumerator());\r\n return clone;\r\n }\r\n}\r\n","import {IReferencedObject} from \"./IReferencedObject\";\r\nimport {GuiConstants} from \"../../GuiConstants\";\r\nimport {StorageAttribute, StrUtil} from \"@magic-xpa/utils\";\r\nimport {NUM_TYPE} from \"./NUM_TYPE\";\r\nimport {ApplicationException, NString} from \"@magic-xpa/mscorelib\";\r\nimport {VectorType} from \"./VectorType\";\r\n\r\n\r\nexport const EMPTY_DCREF: number = -2;\r\nexport const NOT_FOUND: number = GuiConstants.DEFAULT_VALUE_INT;\r\n\r\n\r\nexport class DcValues implements IReferencedObject {\r\n\r\n\r\n private _id: number = 0;\r\n private _type: StorageAttribute = StorageAttribute.NONE; // Alpha | Numeric | Date | Time | Logical\r\n private _refCount: number = 0; // references counter\r\n private _nullFlags: boolean[] = null; // linked null value flags\r\n private _isNumericType: boolean = false; // true if the type is one of: numeric, date, time\r\n private _numVals: NUM_TYPE[] = null; // numeric linked values\r\n private _linkVals: string[] = null; // linked values\r\n private _dispVals: string[] = null; // display values\r\n\r\n get HasReferences(): boolean {\r\n return this._refCount > 0;\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"empty\"></param>\r\n /// <param name=\"isVector\"></param>\r\n constructor(empty: boolean) {\r\n if (empty) {\r\n this._id = EMPTY_DCREF;\r\n }\r\n this._isNumericType = false;\r\n }\r\n\r\n /// <summary>\r\n /// Returns the attr of DcValues\r\n /// </summary>\r\n GetAttr(): StorageAttribute {\r\n return this._type;\r\n }\r\n\r\n setType(type: StorageAttribute): void {\r\n this._type = type;\r\n if (this._type === StorageAttribute.MEMO)\r\n this._type = StorageAttribute.ALPHA;\r\n if (this._type === StorageAttribute.NUMERIC || this._type === StorageAttribute.DATE ||\r\n this._type === StorageAttribute.TIME) {\r\n this._isNumericType = true;\r\n }\r\n }\r\n\r\n SetID(newId: number): void {\r\n this._id = newId;\r\n }\r\n\r\n SetDisplayValues(displayValues: string[]): void {\r\n if (displayValues !== null)\r\n this._dispVals = displayValues.slice();\r\n else\r\n this._dispVals = null;\r\n }\r\n\r\n SetLinkValues(linkValues: string[]): void {\r\n if (linkValues !== null)\r\n this._linkVals = linkValues.slice();\r\n else\r\n this._linkVals = null;\r\n\r\n this.setNumericVals();\r\n }\r\n\r\n setNullFlags(nullFlags: boolean[]): void {\r\n if (nullFlags !== null)\r\n this._nullFlags = nullFlags.slice();\r\n\r\n else\r\n this._nullFlags = null;\r\n }\r\n\r\n private setNumericVals(): void {\r\n if (this._isNumericType && this._linkVals !== null) {\r\n this._numVals = new Array<NUM_TYPE>(this._linkVals.length);\r\n for (let i: number = 0; i < this._linkVals.length; i = i + 1) {\r\n this._numVals[i] = new NUM_TYPE(this._linkVals[i]);\r\n }\r\n }\r\n else {\r\n this._numVals = null;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// returns the id of this dcVals object\r\n /// </summary>\r\n getId(): number {\r\n return this._id;\r\n }\r\n\r\n /// <summary>\r\n /// return the display values\r\n /// </summary>\r\n getDispVals(): string[] {\r\n return this._dispVals;\r\n }\r\n\r\n /// <summary>\r\n /// return Link field values.\r\n /// </summary>\r\n GetLinkVals(): string[] {\r\n return this._linkVals;\r\n }\r\n\r\n /// <summary>\r\n /// returns the array of indice for an item in the list by comparing the mgVal to the linked value or (-1) if none was\r\n /// found\r\n /// </summary>\r\n /// <param name = \"mgVal\">the internal value to look for </param>\r\n /// <param name = \"isVectorValue\">Denotes whether the value in mgVal should be treated as a vector (true) or not (false).</param>\r\n /// <param name = \"isNull\">true if the value to look for is null </param>\r\n /// <param name = \"extraVals\">Additional values, prepended to the searched values.</param>\r\n /// <param name=\"extraNums\">Additional numeric values to be prepended to the searched values.</param>\r\n /// <param name = \"splitCommaSeperatedVals\">to split the val on comma or not </param>\r\n getIndexOf(mgVal: string, isVectorValue: boolean, isNull: boolean, extraVals: string[], extraNums: NUM_TYPE[], splitCommaSeperatedVals: boolean): number[] {\r\n let result: number = NOT_FOUND;\r\n\r\n let tmpMgVal: string;\r\n let ctrlNumVal: NUM_TYPE;\r\n let trimmedVal: string;\r\n let vals: string[] = null;\r\n let nums: NUM_TYPE[] = null;\r\n let offset: number = 0;\r\n let firstFitMatchIdx;\r\n let firstFitMatchLength: number = -1;\r\n let minLength: number = -1;\r\n let compStr: string = \"\";\r\n let indice: number[] = null;\r\n let values: string[] = null;\r\n\r\n if (isNull) {\r\n let i: number = 0;\r\n indice = [\r\n NOT_FOUND\r\n ];\r\n for (i = 0; this._nullFlags !== null && i < this._nullFlags.length; i++) {\r\n if (this._nullFlags[i]) {\r\n indice[0] = i;\r\n break;\r\n }\r\n }\r\n\r\n return indice;\r\n }\r\n if (!isVectorValue) {\r\n // split the comma separated values;\r\n if (splitCommaSeperatedVals) {\r\n values = mgVal.split(',');\r\n }\r\n else {\r\n values = [\r\n mgVal\r\n ];\r\n }\r\n }\r\n else {\r\n let vectorType: VectorType = new VectorType(mgVal);\r\n values = vectorType.GetCellValues();\r\n }\r\n indice = new Array<number>(values.length);\r\n\r\n for (let iCtr: number = 0; iCtr < values.length; iCtr = iCtr + 1) {\r\n result = NOT_FOUND;\r\n firstFitMatchIdx = NOT_FOUND;\r\n\r\n tmpMgVal = values[iCtr];\r\n\r\n if (this._isNumericType || extraNums !== null) {\r\n ctrlNumVal = new NUM_TYPE(tmpMgVal);\r\n trimmedVal = tmpMgVal;\r\n }\r\n else {\r\n ctrlNumVal = null;\r\n trimmedVal = StrUtil.rtrim(tmpMgVal);\r\n }\r\n\r\n // Run two passes. First one on extra values, second one on values belonging to this object\r\n for (let i = 0; i < 2 && result === NOT_FOUND; i++) {\r\n switch (i) {\r\n case 0:\r\n vals = extraVals;\r\n nums = extraNums;\r\n offset = 0;\r\n break;\r\n\r\n case 1:\r\n default:\r\n if (this._isNumericType || nums != null)\r\n offset = (nums == null ? 0 : nums.length);\r\n else\r\n offset = (vals == null ? 0 : vals.length);\r\n vals = this._linkVals;\r\n nums = this._numVals;\r\n break;\r\n }\r\n\r\n if (vals != null) {\r\n for (let j = 0; j < vals.length && result === NOT_FOUND; j++) {\r\n if (this._isNumericType || nums != null) {\r\n if (NUM_TYPE.num_cmp(ctrlNumVal, nums[j]) === 0 || tmpMgVal === vals[j] ||\r\n tmpMgVal === vals[j]) {\r\n // the numeric type is found exactly\r\n result = j + offset;\r\n break;\r\n }\r\n }\r\n else {\r\n if (vals[j] === tmpMgVal || trimmedVal.length > 0 && StrUtil.rtrim(vals[j]) === trimmedVal) {\r\n result = j + offset;\r\n break;\r\n }\r\n\r\n // If Magic sent us a blank value, and such a value exists in the \"non DC range\" select it.\r\n // QCR # 751037 - search for blank values even in the linked values array of the data control\r\n if (trimmedVal.length === 0 && StrUtil.rtrim(vals[j]).length === 0) {\r\n result = j + offset;\r\n break;\r\n }\r\n\r\n // save the first fitting result\r\n // fixed bug#: 935015, the comparison will be according to the min length of the data & the options\r\n if (result === NOT_FOUND && trimmedVal.length > 0) {\r\n minLength = Math.min(trimmedVal.length, vals[j].length);\r\n compStr = trimmedVal.substr(0, minLength);\r\n if (compStr.length > 0 && vals[j].startsWith(compStr)) {\r\n // if there is a min length match, check if it is the first fit match.\r\n // eg: if list has a,aaa,aaaaa and field value is 'aa' then first fit match is 'aaa'.\r\n // if list is a,aaaaa,aaa and field value is 'aa' then first fit match is 'aaaaa'.\r\n // if first fit not found, then closest match is used (eg- if field value is\r\n // 'aaaaaaaaa' in both the above list, closest match would be 'aaaaa').\r\n if (minLength > firstFitMatchLength) {\r\n firstFitMatchIdx = j + offset;\r\n firstFitMatchLength = minLength;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (result === NOT_FOUND)\r\n result = firstFitMatchIdx;\r\n\r\n // store indice found in integer array.\r\n indice[iCtr] = result;\r\n }\r\n\r\n return indice;\r\n }\r\n\r\n/// <summary>\r\n /// gets the value of a specific link item\r\n /// </summary>\r\n /// <param name = \"idx\">the index of the link value (0 = first item) </param>\r\n /// <returns> Magic value of the item </returns>\r\n getLinkValue(idx: number): string {\r\n let lnkVal: string = null;\r\n\r\n if (this._linkVals !== null) {\r\n lnkVal = this._linkVals[idx];\r\n }\r\n\r\n return lnkVal;\r\n }\r\n\r\n /// <summary>\r\n /// returns true, if value at index idx is null\r\n /// </summary>\r\n /// <param name = \"the\">index of an item in the list </param>\r\n isNull(idx: number): boolean {\r\n if (this._nullFlags == null)\r\n // happens for non-DC choice controls\r\n return false;\r\n\r\n return this._nullFlags[idx];\r\n }\r\n\r\n /// <summary>\r\n /// increase the references count by 1\r\n /// </summary>\r\n AddReference(): void {\r\n this._refCount++;\r\n }\r\n\r\n /// <summary>\r\n /// decrease the references count by 1\r\n /// </summary>\r\n RemoveReference(): void {\r\n this._refCount--;\r\n if (this._refCount < 0) {\r\n throw new ApplicationException(\"in dcVals.decrease() references count is less than zero\");\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// returns true if the references count is zero\r\n /// </summary>\r\n ToString(): string {\r\n return NString.Format(\"{{DCValues 0x{0:X8}, {1} refs}}\", this._id, this._refCount);\r\n }\r\n}\r\n","import { Events } from \"../Events\";\r\nimport { JSON_Utils, XMLConstants } from \"@magic-xpa/utils\";\r\n\r\n/// <summary>\r\n/// Represents a reference to a magic object, in the form of\r\n/// ctl index and object isn.\r\n/// The reference makes no assumption on the type of the referenced object. The\r\n/// referenced object type is context dependent.\r\n/// </summary>\r\nexport class ObjectReference {\r\n CtlIndex: number = 0;\r\n ObjectISN: number = 0;\r\n\r\n constructor(ctlIndex: number, objectIsn: number) {\r\n this.CtlIndex = ctlIndex;\r\n this.ObjectISN = objectIsn;\r\n }\r\n\r\n toString(): string {\r\n return \"{Object Ref: \" + this.CtlIndex + \",\" + this.ObjectISN + \"}\";\r\n }\r\n\r\n static ParsedReference: ObjectReference = null;\r\n static FromXML(xmlData: string): ObjectReference {\r\n this.ParsedReference = null;\r\n try {\r\n if (xmlData !== null) {\r\n JSON_Utils.JSONFromXML(xmlData, this.FillFromJSON.bind(this));\r\n }\r\n }\r\n catch (ex) {\r\n Events.WriteExceptionToLog(ex);\r\n }\r\n\r\n return this.ParsedReference;\r\n }\r\n\r\n\r\n private static FillFromJSON(error, result) {\r\n // If there was an error in parsing the XML,\r\n if (error != null) {\r\n throw error;\r\n }\r\n\r\n let objRefElement: {ctl_idx: string, isn: string} = result[XMLConstants.MG_TAG_OBJECT_REFERENCE]['$'];\r\n let ctlIndex: number = +objRefElement.ctl_idx;\r\n let objectIsn: number = +objRefElement.isn;\r\n\r\n this.ParsedReference = new ObjectReference(ctlIndex, objectIsn);\r\n }\r\n}\r\n","import { Commands } from \"./Commands\";\r\nimport { GuiTaskBase } from \"./management/tasks/GuiTaskBase\";\r\nimport { ITask } from \"./management/tasks/ITask\";\r\nimport { Events } from \"./Events\";\r\nimport { CommandType } from \"./GuiEnums\";\r\nimport { GuiControlPropertyAdapter } from \"./management/gui/GuiControlPropertyAdapter\";\r\n\r\nexport class FocusManager\r\n{\r\n\r\n static async SetFocus(ctrl: GuiControlPropertyAdapter, line: number): Promise<void>;\r\n static async SetFocus(itask: ITask, ctrl: GuiControlPropertyAdapter, line: number, activateForm: boolean): Promise<void>;\r\n static async SetFocus(ctrlOrItask: any, lineOrCtrl: any, line?: number, activateForm?: boolean): Promise<void> {\r\n if (ctrlOrItask instanceof GuiControlPropertyAdapter) {\r\n await FocusManager.SetFocus_0(ctrlOrItask, lineOrCtrl);\r\n return;\r\n }\r\n await FocusManager.SetFocus_1(ctrlOrItask, lineOrCtrl, line, activateForm);\r\n }\r\n\r\n /// <summary>\r\n /// set the focus to the specified control\r\n /// </summary>\r\n /// <param name = \"ctrl\"></param>\r\n /// <param name = \"line\"></param>\r\n private static async SetFocus_0(ctrl: GuiControlPropertyAdapter, line: number): Promise<void> {\r\n await FocusManager.SetFocus(ctrl.getForm().getTask(), ctrl, line, true);\r\n }\r\n\r\n /// <summary>\r\n /// set the focus to the specified control\r\n /// </summary>\r\n /// <param name = \"itask\"></param>\r\n /// <param name = \"ctrl\"></param>\r\n /// <param name = \"line\"></param>\r\n /// <param name=\"activateForm\">activate a form or not</param>\r\n private static async SetFocus_1(itask: ITask, ctrl: GuiControlPropertyAdapter, line: number, activateForm: boolean): Promise<void> {\r\n let task: GuiTaskBase = <GuiTaskBase>itask;\r\n if (task.isAborting())\r\n return;\r\n\r\n Events.OnCtrlFocus(itask, ctrl);\r\n\r\n if (ctrl !== null) {\r\n if (!await ctrl.isParkable(true))\r\n return;\r\n Commands.addBoolWithLine(CommandType.SET_FOCUS, ctrl, (line >= 0) ? line : ctrl.getDisplayLine(false), activateForm);\r\n }\r\n else {\r\n let formObject: any = task.IsSubForm\r\n ? task.getForm().getSubFormCtrl()\r\n : task.getForm();\r\n\r\n Commands.addBoolWithLine(CommandType.SET_FOCUS, formObject, 0, activateForm);\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n ApplicationException,\r\n Debug,\r\n Exception,\r\n List,\r\n NNumber,\r\n NString,\r\n RefParam,\r\n StringBuilder,\r\n isNullOrUndefined\r\n} from '@magic-xpa/mscorelib';\r\nimport {GuiMgControl} from '../../gui/GuiMgControl';\r\nimport {PropParentInterface} from '../../gui/PropParentInterface';\r\nimport {GuiFieldBase} from '../data/GuiFieldBase';\r\nimport {\r\n ChoiceUtils,\r\n Constants,\r\n InternalInterface,\r\n MagicProperties,\r\n MgControlType,\r\n Misc,\r\n SEQ_2_STR,\r\n StorageAttribute,\r\n StorageAttributeCheck,\r\n StrUtil,\r\n UtilStrByteMode,\r\n XMLConstants,\r\n XmlParser\r\n} from '@magic-xpa/utils';\r\nimport {MgFormBase} from './MgFormBase';\r\nimport {PIC} from './PIC';\r\nimport {PropTable} from './PropTable';\r\nimport {ValidationDetails} from './ValidationDetails';\r\nimport {FieldDef} from '../data/FieldDef';\r\nimport {Property} from './Property';\r\nimport {GuiTaskBase} from '../tasks/GuiTaskBase';\r\nimport {Manager} from '../../Manager';\r\nimport {CommandType, HtmlProperties} from '../../GuiEnums';\r\nimport {Commands} from '../../Commands';\r\nimport {NUM_TYPE} from '../data/NUM_TYPE';\r\nimport {PropInterface} from './PropInterface';\r\nimport {Events} from '../../Events';\r\nimport {DcValues, EMPTY_DCREF} from '../data/DcValues';\r\nimport {GuiDataViewBase} from '../data/GuiDataViewBase';\r\nimport {DisplayConvertor} from './DisplayConvertor';\r\nimport {BlobType} from '../data/BlobType';\r\nimport {VectorType} from '../data/VectorType';\r\nimport {ObjectReference} from '../../util/ObjectReference';\r\nimport {GuiConstants} from '../../GuiConstants';\r\nimport {GuiControlPropertyAdapter} from './GuiControlPropertyAdapter';\r\nimport {FocusManager} from '../../FocusManager';\r\n\r\n\r\n/// <summary>\r\n/// data for <control> ...</control> tag\r\n/// </summary>\r\nexport abstract class MgControlBase extends GuiControlPropertyAdapter implements PropParentInterface {\r\n\r\n // fixed defect #:81498, while RT is set default value we need to refresh the control\r\n // to the value will set to the control\r\n\r\n _ditIdx: number = 0;\r\n private _linkedControls: List<MgControlBase> = null; // array of controls that are linked to this control\r\n _field: GuiFieldBase = null; // reference to the field of the control\r\n private _picStr: string = null;\r\n _choiceDisps: List<string[]> = null; // for SELECT controls, holds the\r\n _choiceLayerList: List<string[]> = null; // the order on which tabs to be displayed\r\n _choiceLinks: List<string[]> = null; // for SELECT controls, holds the\r\n _choiceNums: List<NUM_TYPE[]> = null; // for SELECT controls, with numeric\r\n private _containerDitIdx: number = -1;\r\n _currReadOnly: List<boolean> = null; // a history array for readonly param\r\n private _dataCtrl: boolean = false; // The data control flag states that this\r\n _dcTableRefs: List<number> = null; // references to dcVals for each line of a control is a data control\r\n private _firstRefreshProperties: boolean = true;\r\n private _form: MgFormBase = null;\r\n private _hasValidItmAndDispVal: boolean = false;\r\n\r\n private _controlIsn: number = -1; // for current isn\r\n\r\n private _linkedParentDitIdx: number = -1; // not trigger any event handler, while parking in this control\r\n _orgChoiceDisps: List<string[]> = null; // for TAB Control save the org option (with the &)\r\n _parentTable: MgControlBase = null; // reference to parent Magic Table for\r\n _pic: PIC = null;\r\n private _picExpExists: boolean = false;\r\n _prevIsNulls: List<boolean> = null; // for NULL\r\n private _prevPicExpResult: string = null;\r\n _prevValues: List<string> = null; // references to previous values of the\r\n _propTab: PropTable = null;\r\n private _range: string = null;\r\n private _rangeChanged: boolean = false; // for SELECT controls, true if their range\r\n\r\n _valExpId: number = 0; // reference to the value expression\r\n private _vd: ValidationDetails = null;\r\n private _dcValId: number = -2;\r\n parent: number = 0;\r\n veeIndx: number = 0;\r\n SourceTableReference: ObjectReference = null;\r\n ClipBoardDataExists: boolean = false;\r\n DataType: StorageAttribute = StorageAttribute.NONE;\r\n KeyStrokeOn: boolean = false; // true if the user pressed a key\r\n ModifiedByUser: boolean = false;\r\n Value: any = null;\r\n IsNull: boolean = false;\r\n forceRefresh : boolean = false;\r\n private _isModal : boolean; //applicable for subform, if subform is Modal\r\n\r\n protected set Form(value: MgFormBase) {\r\n this._form = value;\r\n this.GuiMgForm = value;\r\n }\r\n\r\n protected get Form(): MgFormBase {\r\n return this._form;\r\n }\r\n\r\n get ControlIsn(): number {\r\n return this._controlIsn;\r\n }\r\n\r\n RefreshOnVisible: boolean = false; // true, if the subform must be refreshed on become visible\r\n InControl: boolean = false;\r\n ValidateControl: boolean = false;\r\n PromptHelp: string = null;\r\n\r\n // the prompt help text assigned to control\r\n\r\n constructor();\r\n constructor(type: MgControlType, parentMgForm: MgFormBase, parentControl: number);\r\n constructor(type?: MgControlType, parentMgForm?: MgFormBase, parentControl?: number) {\r\n super();\r\n if (arguments.length === 0) {\r\n this.constructor_0();\r\n return;\r\n }\r\n this.constructor_1(type, parentMgForm, parentControl);\r\n }\r\n\r\n private constructor_0(): void {\r\n this._linkedControls = new List<MgControlBase>();\r\n this.DataType = StorageAttribute.NONE;\r\n }\r\n\r\n private constructor_1(type: MgControlType, parentMgForm: MgFormBase, parentControl: number): void {\r\n this.constructor_0();\r\n this.initReferences(parentMgForm);\r\n this.Type = type;\r\n this._containerDitIdx = parentControl;\r\n this._linkedParentDitIdx = parentControl;\r\n this._propTab = new PropTable(this);\r\n this.createArrays(false);\r\n }\r\n\r\n get UniqueName(): string {\r\n return this.Name;\r\n }\r\n\r\n get TaskTag(): string {\r\n return this.Form.getTask().getTaskTag();\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"propId\"></param>\r\n /// <returns></returns>\r\n checkIfExistProp(propId: number): boolean {\r\n let exist: boolean = false;\r\n if (this._propTab !== null) {\r\n let propById: Property = this._propTab.getPropById(propId);\r\n exist = (propById !== null);\r\n }\r\n return exist;\r\n }\r\n\r\n /// <summary>\r\n /// get a property of the control\r\n /// </summary>\r\n /// <param name = \"propId\">the Id of the property</param>\r\n getProp(propId: number): Property {\r\n let prop: Property = null;\r\n\r\n if (this._propTab !== null) {\r\n prop = this._propTab.getPropById(propId);\r\n if (prop === null) {\r\n prop = Property.getDefaultProp(propId, 'C', this);\r\n\r\n // if the property doesn't exist then create a new property and give it the default value\r\n // in addition add this property to the properties table\r\n if (prop !== null) {\r\n this._propTab.addProp(prop);\r\n }\r\n }\r\n }\r\n return prop;\r\n }\r\n\r\n /// <summary>\r\n /// returns the form of the control\r\n /// </summary>\r\n getForm(): MgFormBase {\r\n return this.Form;\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <returns></returns>\r\n getCompIdx(): number {\r\n return this.getForm().getTask().getCompIdx();\r\n }\r\n\r\n /// <summary>\r\n /// return true if this is first refresh\r\n /// </summary>\r\n /// <returns></returns>\r\n IsFirstRefreshOfProps(): boolean {\r\n return this._firstRefreshProperties;\r\n }\r\n\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"expId\"></param>\r\n /// <param name=\"resType\"></param>\r\n /// <param name=\"length\"></param>\r\n /// <param name=\"contentTypeUnicode\"></param>\r\n /// <param name=\"resCellType\"></param>\r\n /// <param name=\"alwaysEvaluate\"></param>\r\n /// <param name=\"wasEvaluated\"></param>\r\n /// <returns></returns>\r\n async EvaluateExpression(expId: number, resType: StorageAttribute, length: number, contentTypeUnicode: boolean, resCellType: StorageAttribute, alwaysEvaluate: boolean, wasEvaluated: RefParam<boolean>): Promise<string> {\r\n return await this.getForm().getTask().EvaluateExpression(expId, resType, length, contentTypeUnicode, resCellType, alwaysEvaluate, wasEvaluated);\r\n }\r\n\r\n GetExpressionStorage(expId: number): StorageAttribute {\r\n return this.getForm().getTask().GetExpressionStorage(expId);\r\n }\r\n\r\n /// <summary>\r\n /// get a property of the control that already was computed\r\n /// This method does not create a property if it isn't exist.\r\n /// May we need to create a property and use its default value.\r\n /// In Phase 2 in RefreshProperties method we'll create and compute properties,\r\n /// perhaps we need create all properties not only those that are different from default.\r\n /// </summary>\r\n /// <param name = \"propId\">the Id of the property</param>\r\n GetComputedProperty(propId: number): Property {\r\n let prop: Property = null;\r\n\r\n if (this._propTab !== null)\r\n prop = this._propTab.getPropById(propId);\r\n return prop;\r\n }\r\n\r\n /// <summary>\r\n /// Initializing of inner reference to the task of the control\r\n /// </summary>\r\n /// <param name = \"taskRef\">reference to the task of the control</param>\r\n private initReferences(mgForm: MgFormBase): void {\r\n this.Form = mgForm;\r\n }\r\n\r\n /// <summary>\r\n /// in the first time that we refresh the control need to create arrays\r\n /// </summary>\r\n /// <param name = \"forceCreateArrays\">create arrays in any case</param>\r\n createArrays(forceCreateArrays: boolean): void {\r\n if (this._firstRefreshProperties || forceCreateArrays) {\r\n\r\n // for SELECT controls, always initialize DC table since we use it to merge choices from the\r\n // prop list with choices from the DATA CONTROL.\r\n if (this.SupportsDataSource()) {\r\n this._dcTableRefs = new List();\r\n }\r\n this._prevValues = new List();\r\n\r\n // The property PROP_SET_READ_ONLY is set only if it is different from its previous value. By default\r\n // this property is false, so we do not set it.\r\n // But for the phantom task if this property was true, and we exit the phantom and again enter into\r\n // this phantom the property becomes false.\r\n // So we need to save the previous _currReadOnly value for the phantom task.\r\n if (!forceCreateArrays) {\r\n this._currReadOnly = new List();\r\n }\r\n this._choiceDisps = new List();\r\n this._orgChoiceDisps = new List();\r\n this._choiceLinks = new List();\r\n this._choiceNums = new List();\r\n this._prevIsNulls = new List();\r\n this._choiceLayerList = new List();\r\n if (!this.IsRepeatable && !super.isTableControl()) {\r\n this.updateArrays(1);\r\n }\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Sets the focus on the control and refreshes prompt.\r\n /// </summary>\r\n /// <param name=\"ctrl\">Control to have focus</param>\r\n /// <param name=\"line\">line number</param>\r\n /// <param name=\"refreshPrompt\"></param>\r\n /// <param name=\"activateForm\">whether to activate a form after setfocus or not</param>\r\n async SetFocus(ctrl: MgControlBase, line: number, activateForm: boolean): Promise<void> {\r\n await FocusManager.SetFocus(ctrl.getForm().getTask(), ctrl, line, activateForm);\r\n }\r\n\r\n InsertArrays(idx: number, count: number): void {\r\n this._prevValues.InsertRange( new Array(count));\r\n this._prevIsNulls.InsertRange( new Array(count));\r\n\r\n this._currReadOnly.InsertRange(new Array(count));\r\n this._choiceDisps.InsertRange(new Array(count));\r\n this._orgChoiceDisps.InsertRange( new Array(count));\r\n this._choiceLinks.InsertRange( new Array(count));\r\n this._choiceLayerList.InsertRange( new Array(count));\r\n this._choiceNums.InsertRange(new Array(count));\r\n if (this.SupportsDataSource())\r\n this._dcTableRefs.InsertRange(new Array(count));\r\n this._propTab.InsertPrevValueArray( count);\r\n }\r\n\r\n /// <summary>\r\n /// update array's size according to the newSize\r\n /// </summary>\r\n /// <param name = \"newSize\"></param>\r\n updateArrays(newSize: number): void {\r\n this._prevValues.SetSize(newSize);\r\n this._prevIsNulls.SetSize(newSize);\r\n this._currReadOnly.SetSize(newSize);\r\n this._choiceDisps.SetSize(newSize);\r\n this._orgChoiceDisps.SetSize(newSize);\r\n this._choiceLinks.SetSize(newSize);\r\n this._choiceLayerList.SetSize(newSize);\r\n this._choiceNums.SetSize(newSize);\r\n if (this.SupportsDataSource()) {\r\n this._dcTableRefs.SetSize(newSize);\r\n }\r\n this._propTab.updatePrevValueArray(newSize);\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"newSize\"></param>\r\n updatePrevValArrays(newSize: number): void {\r\n this._propTab.updatePrevValueArray(newSize);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// To parse input string and fill inner data\r\n /// </summary>\r\n /// <param name = \"taskRef\">to parent task</param>\r\n /// <param name = \"ditidx\">number of the Control in Control Table</param>\r\n fillData(mgForm: MgFormBase, ditIdx: number, parser: XmlParser): void {\r\n if (this.Form === null) {\r\n this.initReferences(mgForm);\r\n }\r\n this._ditIdx = ditIdx;\r\n while (this.initInnerObjects(parser.getNextTag(), parser)) {\r\n }\r\n\r\n // If the datatype is BLOB, its picture would be blank. But after version #97\r\n // of AppSerializer.cs (changed for #485722), blank picture is not serialized.\r\n // So, we need to explicitly set it to blank here.\r\n if (this.DataType === StorageAttribute.BLOB && this._picStr === null) {\r\n this._picStr = \"\";\r\n }\r\n if (this._picStr !== null && typeof this.DataType !== \"undefined\") {\r\n this.setPIC(this._picStr);\r\n }\r\n else {\r\n\r\n\r\n switch (this.Type) {\r\n case MgControlType.CTRL_TYPE_IMAGE:\r\n case MgControlType.CTRL_TYPE_BROWSER:\r\n case MgControlType.CTRL_TYPE_BUTTON:\r\n if (this.DataType === StorageAttribute.NONE)\r\n this.DataType = StorageAttribute.ALPHA;\r\n break;\r\n case MgControlType.CTRL_TYPE_TABLE:\r\n case MgControlType.CTRL_TYPE_COLUMN:\r\n case MgControlType.CTRL_TYPE_SUBFORM:\r\n case MgControlType.CTRL_TYPE_GROUP:\r\n case MgControlType.CTRL_TYPE_FRAME_SET:\r\n case MgControlType.CTRL_TYPE_FRAME_FORM:\r\n case MgControlType.CTRL_TYPE_CONTAINER:\r\n case MgControlType.CTRL_TYPE_LINE:\r\n break;\r\n default:\r\n Events.WriteExceptionToLog(NString.Format(\"in Control.fillData(): missing datatype or picture string for control: {0}\", this.Name));\r\n break;\r\n }\r\n }\r\n\r\n if (super.isTableControl()) {\r\n this.Form.setTableCtrl(this);\r\n }\r\n this.createArrays(false);\r\n\r\n\r\n }\r\n\r\n /// <summary>\r\n /// To allocate and fill inner objects of the class\r\n /// </summary>\r\n /// <param name = \"foundTagName\">name of tag, of object, which need be allocated</param>\r\n /// <returns> boolean if next tag is inner tag</returns>\r\n initInnerObjects(foundTagName: string, parser: XmlParser): boolean {\r\n if (foundTagName === null)\r\n return false;\r\n\r\n\r\n if (foundTagName === XMLConstants.MG_TAG_PROP) {\r\n if (this._propTab === null)\r\n this._propTab = new PropTable(this);\r\n\r\n this._propTab.fillData(this, 'C', parser);\r\n\r\n }\r\n else if (foundTagName === XMLConstants.MG_TAG_CONTROL)\r\n this.parseAttributes(parser);\r\n else if (foundTagName === \"SourceTable\")\r\n this.ParseSourceTable(parser);\r\n else if (foundTagName === \"/\" + XMLConstants.MG_TAG_CONTROL) {\r\n parser.setCurrIndex2EndOfTag();\r\n return false;\r\n }\r\n else {\r\n Events.WriteExceptionToLog(NString.Format(\"There is no such tag in Control. Insert else if to Control.initInnerObjects for {0}\", foundTagName));\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private ParseSourceTable(parser: XmlParser): void {\r\n parser.setCurrIndex2EndOfTag();\r\n let objRefStr: string = parser.ReadToEndOfCurrentElement();\r\n let sourceTableReference: ObjectReference = ObjectReference.FromXML(objRefStr.trim());\r\n\r\n this.SourceTableReference = sourceTableReference;\r\n // Skip the closing </prop> tag\r\n parser.setCurrIndex2EndOfTag();\r\n }\r\n\r\n /// <summary>\r\n /// get the attributes of the control from the XML\r\n /// </summary>\r\n private parseAttributes(parser: XmlParser): void {\r\n let endContext: number = parser.getXMLdata().indexOf(\">\", parser.getCurrIndex());\r\n\r\n if (endContext !== -1 && endContext < parser.getXMLdata().length) {\r\n\r\n // last position of its tag\r\n let tag: string = parser.getXMLsubstring(endContext);\r\n parser.add2CurrIndex(tag.indexOf(XMLConstants.MG_TAG_CONTROL) + XMLConstants.MG_TAG_CONTROL.length);\r\n\r\n let tokens: List<string> = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM)/*'\"'*/;\r\n\r\n for (let i: number = 0; i < tokens.length; i = i + 2) {\r\n let attribute: string = tokens.get_Item(i);\r\n let valueStr: string = tokens.get_Item(i + 1);\r\n\r\n this.SetAttribute(attribute, valueStr);\r\n }\r\n parser.setCurrIndex(endContext + 1); // to delete \">\" too\r\n }\r\n else {\r\n Events.WriteExceptionToLog(\"in Control.FillName() out of string bounds\");\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// set the control attributes in parsing\r\n /// </summary>\r\n SetAttribute(attribute: string, valueStr: string): boolean {\r\n let isTagProcessed: boolean = true;\r\n\r\n switch (attribute) {\r\n case XMLConstants.MG_ATTR_TYPE:\r\n this.Type = valueStr[0] as MgControlType;\r\n break;\r\n case XMLConstants.MG_ATTR_DATA_CTRL:\r\n this._dataCtrl = XmlParser.getBoolean(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_LINKED_PARENT:\r\n this.setLinkedParentIdx(XmlParser.getInt(valueStr));\r\n break;\r\n case XMLConstants.MG_ATTR_CONTAINER:\r\n this.setContainer(XmlParser.getInt(valueStr));\r\n break;\r\n case XMLConstants.MG_ATTR_CONTROL_ISN:\r\n this._controlIsn = XmlParser.getInt(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_IS_MODAL:\r\n this._isModal = XmlParser.getBoolean(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_CONTROL_Z_ORDER:\r\n //TODO - not to serialize [Story 154547]\r\n break;\r\n case XMLConstants.MG_HOR_ALIGMENT_IS_INHERITED:\r\n //TODO - not to serialize [Story 154547]\r\n break;\r\n default:\r\n isTagProcessed = false;\r\n break;\r\n }\r\n\r\n return isTagProcessed;\r\n\r\n }\r\n\r\n /// <summary> set the image on the control </summary>\r\n /// <param name=\"fileName\"></param>\r\n setImage(): void {\r\n let newVal: string = this.Value;\r\n if (newVal === null || this.IsNull) {\r\n newVal = \"\";\r\n }\r\n if (this.DataType === StorageAttribute.BLOB) {\r\n // TODO - check if should be supported .\r\n // Commands.addAsync(CommandType.PROP_SET_IMAGE_DATA, this, this.getDisplayLine(false), BlobType.getBytes(newVal), prop.getValueInt());\r\n }\r\n else {\r\n this.setImageWithFileName(newVal);\r\n }\r\n }\r\n\r\n setImageWithFileName(fileName: string): void {\r\n if (fileName === null) {\r\n fileName = \"\";\r\n }\r\n fileName = Events.TranslateLogicalName(fileName);\r\n\r\n if (!Misc.IsWebUrl(fileName))\r\n fileName = Events.GetAssetsURL() +\"/images/\" + fileName;\r\n\r\n if (this.IsImageButton()) {\r\n Commands.addOperationWithLine(CommandType.SET_STYLE, this, 0, MagicProperties.ImageFile, fileName);\r\n }\r\n else {\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, this.getDisplayLine(false), HtmlProperties.Image, fileName);\r\n Commands.addValueWithLine(CommandType.SET_VALUE, this, this.getDisplayLine(false), fileName);\r\n }\r\n\r\n // We need to execute the layout only if the radio is not on table. for table, it is done\r\n // from LgRadioContainer.setSpecificControlProperties().\r\n\r\n // if (super.isRadio() && !this.IsRepeatable) {\r\n // Commands.addAsync(CommandType.EXECUTE_LAYOUT, this, this.getDisplayLine(false), false);\r\n //}\r\n }\r\n\r\n /// <summary>\r\n /// set container\r\n /// </summary>\r\n /// <param name = \"containerIdx\"></param>\r\n private setContainer(containerIdx: number): void {\r\n this._containerDitIdx = containerIdx;\r\n let container: MgControlBase = null;\r\n if (this._containerDitIdx !== -1) {\r\n container = this.Form.getCtrl(this._containerDitIdx);\r\n }\r\n\r\n if (container !== null && container.Type === MgControlType.CTRL_TYPE_TABLE) {\r\n this._parentTable = container;\r\n }\r\n this.IsRepeatable = (this._parentTable !== null && !super.isColumnControl());\r\n }\r\n\r\n /// <summary>\r\n /// get the name of the Control\r\n /// </summary>\r\n getName(): string {\r\n // if (this.isRepeatable()) {\r\n // return super.getName(this.Form.DisplayLine);\r\n // }\r\n\r\n return this.Name;\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <returns></returns>\r\n getLinkedControls(): List<MgControlBase> {\r\n return this._linkedControls;\r\n }\r\n\r\n /// <summary>\r\n /// The control is repeatable control\r\n /// </summary>\r\n /// <returns></returns>\r\n isRepeatable(): boolean {\r\n return this.IsRepeatable;\r\n }\r\n\r\n IsModal() : boolean {\r\n return this._isModal;\r\n }\r\n\r\n /// <summary> returns current display line of control</summary>\r\n /// <param name=\"useLineForItems\">if true, use current line for tree</param>\r\n getDisplayLine(useLineForItems: boolean): number {\r\n let line: number = 0;\r\n if (this.IsRepeatable || (useLineForItems && super.isTableControl())) {\r\n line = this.Form.DisplayLine;\r\n }\r\n return line;\r\n }\r\n\r\n /// <summary>\r\n /// checks visibility considering parent visibility\r\n /// </summary>\r\n /// <returns></returns>\r\n isVisible(): boolean {\r\n let result: boolean = this.GetComputedBooleanProperty(PropInterface.PROP_TYPE_VISIBLE, true);\r\n if (result) {\r\n result = this.isParentPropValue(PropInterface.PROP_TYPE_VISIBLE);\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// checks enabled considering parent enabled\r\n /// </summary>\r\n /// <returns></returns>\r\n isEnabled(): boolean {\r\n return this.GetComputedBooleanProperty(PropInterface.PROP_TYPE_ENABLED, true);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// returns true if the control is modifiable and the task mode is not query\r\n /// </summary>\r\n isModifiable(): boolean {\r\n\r\n let modifiable: boolean = this.GetComputedBooleanProperty(PropInterface.PROP_TYPE_MODIFIABLE, true);\r\n let taskInQuery: boolean = this.getForm().getTask().getMode() === Constants.TASK_MODE_QUERY;\r\n let modifyInQuery: boolean = this.GetComputedBooleanProperty(PropInterface.PROP_TYPE_MODIFY_IN_QUERY, false);\r\n\r\n let result: boolean = modifiable && (modifyInQuery || !taskInQuery);\r\n if (result && this._field != null) {\r\n result = (this._field.DbModifiable || this.getForm().getTask().getMode() === Constants.TASK_MODE_CREATE);\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// returns the current dc values of this data control from the current record\r\n /// </summary>\r\n getDcVals(): DcValues {\r\n let dataView: GuiDataViewBase = this.getForm().getTask().DataView;\r\n let dcv: DcValues = null;\r\n if (this._dcValId === EMPTY_DCREF) {\r\n dcv = ((this.DataType === StorageAttribute.BLOB_VECTOR) ? dataView.getEmptyChoiceForVectors() : dataView.getEmptyChoice());\r\n }\r\n else {\r\n if (this._dcValId > -1) {\r\n dcv = dataView.getDcValues(this._dcValId);\r\n }\r\n }\r\n return dcv;\r\n }\r\n\r\n /// <summary>\r\n /// return the current isNull according to the control's current line number\r\n /// </summary>\r\n /// <returns> the PrevIsNull value</returns>\r\n getPrevIsNull(): boolean {\r\n let line: number = this.getDisplayLine(true);\r\n let currObj: any = this._prevIsNulls.get_Item(line);\r\n let curr: boolean;\r\n if (currObj === null) {\r\n curr = false;\r\n this._prevIsNulls.set_Item(line, curr);\r\n }\r\n else {\r\n curr = <boolean>currObj;\r\n }\r\n return curr;\r\n }\r\n\r\n /// <summary>\r\n /// sets the prevIsNull value of the prevIsNull array\r\n /// the newValue can be NULL or bool\r\n /// </summary>\r\n /// <param name = \"newValue\">the new value to be set</param>\r\n setPrevIsNull(newValue: boolean): void {\r\n this._prevIsNulls.set_Item(this.getDisplayLine(true), newValue);\r\n }\r\n\r\n /// <param name = \"picStr\"></param>\r\n setPIC(picStr: string): void {\r\n\r\n // for push button, translate the format.\r\n if (super.isButton()) {\r\n this._picStr = (super.IsImageButton() ? \"\" + XMLConstants.FILE_NAME_SIZE.toString() : Events.Translate(picStr));\r\n }\r\n else {\r\n this._picStr = picStr;\r\n }\r\n this._pic = new PIC(this._picStr, this.DataType, this.getForm().getTask().getCompIdx());\r\n\r\n if (this._dataCtrl && this._picStr.indexOf('H') > -1) {\r\n this._pic.setHebrew();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// get the picture of the control\r\n /// </summary>\r\n /// <returns> PIC reference</returns>\r\n getPIC(): PIC {\r\n if (this._picExpExists)\r\n this._pic.setFormatExp(this._picExpExists);\r\n return this._pic;\r\n }\r\n\r\n\r\n/// <returns> the parent of the control can be Table\\Tab\\Choice control\\Form</returns>\r\n getParent(): any {\r\n let retParent: any = this.Form;\r\n if (this._containerDitIdx !== -1) {\r\n retParent = this.Form.getCtrl(this._containerDitIdx);\r\n }\r\n else {\r\n if (this.Form.isSubForm()) {\r\n retParent = this.Form.getSubFormCtrl();\r\n }\r\n }\r\n return retParent;\r\n }\r\n\r\n /// <summary>\r\n /// returns the field attached to the control\r\n /// </summary>\r\n getField(): GuiFieldBase {\r\n return this._field;\r\n }\r\n\r\n /// <summary>\r\n /// Set the field of the control by the field object\r\n /// </summary>\r\n /// <param name = \"field\"></param>\r\n setField(fieldOrFieldStrID: any): void {\r\n if (fieldOrFieldStrID === null || fieldOrFieldStrID instanceof GuiFieldBase) {\r\n this.setField_0(fieldOrFieldStrID);\r\n return;\r\n }\r\n this.setField_1(fieldOrFieldStrID);\r\n }\r\n\r\n\r\n private setField_0(field: GuiFieldBase): void {\r\n this._field = field;\r\n if (field !== null) {\r\n this._field.SetControl(this);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Set the field of the control by a string field identifier\r\n /// </summary>\r\n /// <param name = \"valueStr\">the field identifier: \"parentId,fieldIdx\"/param>\r\n private setField_1(fieldStrID: string): void {\r\n let returnField: GuiFieldBase = this.getFieldByValueStr(fieldStrID);\r\n if (returnField !== null) {\r\n this._field = returnField;\r\n this._field.SetControl(this);\r\n return;\r\n }\r\n throw new ApplicationException(\"in Control.setField(): illegal field identifier: \" + fieldStrID);\r\n }\r\n\r\n /// <summary>\r\n /// set the picture of the control\r\n /// </summary>\r\n /// <param name = \"format\">the format string</param>\r\n /// <param name = \"expId\">an expression of the format</param>\r\n setPicStr(format: string, expId: number): void {\r\n this._picStr = format;\r\n if (expId > 0) {\r\n this._picExpExists = true;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// sets the range of the control and clears the mask\r\n /// </summary>\r\n /// <param name = \"newRange\">is the new range</param>\r\n setRange(newRange: string): void {\r\n this._range = newRange;\r\n this._vd = null;\r\n }\r\n\r\n /// <summary>\r\n /// set the value expression\r\n /// </summary>\r\n /// <param name = \"expId\">a reference to the expression</param>\r\n setValExp(expId: number): void {\r\n this._valExpId = expId;\r\n }\r\n\r\n /// <summary>\r\n /// get copy of validation details with new & old value without changing real validation details\r\n /// </summary>\r\n /// <param name = \"oldVal\">value of the control</param>\r\n /// <param name = \"newVal\">value of the control</param>\r\n buildCopyPicture(oldVal: string, newVal: string): ValidationDetails {\r\n if (super.isTableControl() || super.isColumnControl()) {\r\n return null;\r\n }\r\n else {\r\n let copyVD: ValidationDetails = this.getCopyOfVD();\r\n copyVD.setValue(newVal);\r\n copyVD.setOldValue(oldVal);\r\n return copyVD;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// build copy of validation details, without influence to the real validation details\r\n /// </summary>\r\n private getCopyOfVD(): ValidationDetails {\r\n let result: ValidationDetails;\r\n if (this._vd === null) {\r\n result = new ValidationDetails(this.Value, this.Value, this._range, this._pic, this);\r\n }\r\n else {\r\n result = new ValidationDetails(this._vd);\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// get ranges\r\n /// </summary>\r\n getRanges(): string {\r\n return this._range;\r\n }\r\n\r\n /// <summary>\r\n /// get ranged value for input value\r\n /// </summary>\r\n getRangedValue(newVal: any): string {\r\n\r\n let vd: ValidationDetails;\r\n vd = this.buildPicture(this.Value, newVal);\r\n vd.evaluate();\r\n\r\n // user has modified value, so we are here ...ModifiedByUser should be set to true\r\n this.ModifiedByUser = true;\r\n // the validation of the fields value was wrong\r\n let val: any = vd.getDispValue()\r\n return (val.toString());\r\n }\r\n\r\n /// <summary>\r\n /// validate user input\r\n /// </summary>\r\n validate(newVal: any): string {\r\n\r\n let vd: ValidationDetails;\r\n let modified: boolean = this.ModifiedByUser;\r\n this.ModifiedByUser = true;\r\n vd = this.buildPicture(this.Value, newVal);\r\n vd.evaluate();\r\n this.ModifiedByUser = modified;\r\n // the validation of the fields value was wrong\r\n if (vd.ValidationFailed)\r\n return vd.ErrorMessage;\r\n else\r\n return null;\r\n }\r\n\r\n\r\n /// <param name = \"valueStr\"></param>\r\n /// <returns></returns>\r\n private getFieldByValueStr(valueStr: string): GuiFieldBase {\r\n\r\n let refParent: RefParam<number> = new RefParam<number>(this.parent);\r\n let refVeeIndx: RefParam<number> = new RefParam<number>(this.veeIndx);\r\n let ret: GuiFieldBase = <GuiFieldBase>this.getForm().getTask().getFieldByValueStr(valueStr, refParent, refVeeIndx);\r\n this.parent = refParent.value;\r\n this.veeIndx = refVeeIndx.value;\r\n return ret;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if has container\r\n /// </summary>\r\n /// <returns></returns>\r\n hasContainer(): boolean {\r\n return this._containerDitIdx !== -1;\r\n }\r\n\r\n /// <summary>\r\n /// gets layer of control\r\n /// </summary>\r\n /// <returns></returns>\r\n getLayer(): number {\r\n return this.Layer;\r\n }\r\n\r\n /// <summary>\r\n /// computes the pic using the result of the format expression\r\n /// </summary>\r\n /// <param name = \"picExpResult\">the result of the format expression</param>\r\n /// <returns> PIC reference </returns>\r\n computePIC(picExpResult: string): PIC {\r\n // for push button, translate the format.\r\n let picResult: string = (picExpResult !== null && super.isButton()) ? Events.Translate(picExpResult) : picExpResult;\r\n\r\n // construct a new picture only if the expression result is different than the previous result\r\n if (this._prevPicExpResult === null || !(this._prevPicExpResult === picResult)) {\r\n this._pic = new PIC(picResult, this.DataType, this.getForm().getTask().getCompIdx());\r\n this._prevPicExpResult = picResult;\r\n }\r\n return this._pic;\r\n }\r\n\r\n /// <summary>\r\n /// gets the index of the current choice in the choice control\r\n /// </summary>\r\n /// <returns>index of the current choice</returns>\r\n getCurrentIndexOfChoice(): number[] {\r\n let selectedIndice: number[] = [-1];\r\n\r\n let val: string = this.Value;\r\n\r\n if (!NString.IsNullOrEmpty(val)) {\r\n let array2: string[] = val.split(','/*','*/);\r\n selectedIndice = new Array<number>(array2.length);\r\n for (let iCtr: number = 0; iCtr < array2.length; iCtr = iCtr + 1) {\r\n let num: number = NNumber.Parse(array2[iCtr]);\r\n selectedIndice[iCtr] = ((num >= 0) ? num : -1);\r\n }\r\n }\r\n return selectedIndice;\r\n }\r\n\r\n /// <summary>\r\n /// Returns true is multi selection list box else false.\r\n /// </summary>\r\n /// <returns></returns>\r\n IsMultipleSelectionListBox(): boolean {\r\n return super.isListBox();\r\n }\r\n\r\n /// <summary>\r\n /// Returns true if control picture is date or time\r\n /// </summary>\r\n /// <returns></returns>\r\n IsDateTimePicture(): boolean {\r\n return this._pic.getAttr() === StorageAttribute.DATE || this._pic.getAttr() === StorageAttribute.TIME;\r\n }\r\n\r\n /// <summary>\r\n /// this control support data source\r\n /// </summary>\r\n /// <returns></returns>\r\n SupportsDataSource(): boolean {\r\n return super.isSelectionCtrl() || super.isTabControl() || super.isRadio() || this.HasAutocomplete() ;\r\n }\r\n\r\n HasAutocomplete() {\r\n if (super.isTextControl())\r\n return this.getProp(PropInterface.PROP_TYPE_AUTO_COMPLETE_MODE_WC).GetComputedValueBoolean();\r\n return false;\r\n }\r\n\r\n /// <summary>\r\n /// Returns the array of indice which corresponds to a specific link value\r\n /// </summary>\r\n /// <param name = \"mgVal\">the requested value</param>\r\n /// <param name=\"line\"></param>\r\n /// <param name = \"isNull\">true if mgVal represents a null value</param>\r\n /// <returns> array of indice</returns>\r\n async getIndexOfChoice(mgVal: string, line: number, isNull: boolean): Promise<number[]> {\r\n\r\n // if the control is listbox with single selection mode, and the value is comma separated, then we should not split value on comma.\r\n let splitCommaSeperatedVals: boolean = this.IsMultipleSelectionListBox();\r\n\r\n await this.computeChoice(line);\r\n\r\n let isVectorValue: boolean = this.getField() !== null && this.getField().getType() === StorageAttribute.BLOB_VECTOR;\r\n return this.getDcVals().getIndexOf(mgVal, isVectorValue, isNull, this._choiceLinks.get_Item(line), this._choiceNums.get_Item(line), splitCommaSeperatedVals);\r\n }\r\n\r\n /// <returns> parsed content of PROP_TYPE_DISPLAY_LIST</returns>\r\n async getDispVals(line: number, execComputeChoice: boolean): Promise<string[]> {\r\n if (execComputeChoice) {\r\n await this.computeChoice(line);\r\n }\r\n if (super.isTabControl()) {\r\n return this._orgChoiceDisps.get_Item(line);\r\n }\r\n else {\r\n return this._choiceDisps.get_Item(line);\r\n }\r\n\r\n }\r\n\r\n ///\r\n /// </summary>\r\n /// <param name=\"line\"></param>\r\n /// <returns></returns>\r\n private emptyChoice(line: number): void {\r\n let value: string[] = new Array<string>(0);\r\n this._choiceDisps.set_Item(line, value);\r\n this._orgChoiceDisps.set_Item(line, value);\r\n this._choiceLinks.set_Item(line, value);\r\n this._choiceLayerList.set_Item(line, value);\r\n }\r\n\r\n /// <summary>\r\n /// computes the choices of a SELECT control that originate from the control's properties (in contrast to\r\n /// the ones originating from the underlaying table of a data control)\r\n /// </summary>\r\n private async computeChoice(line: number): Promise<void> {\r\n let fromHelp: string[] = [\r\n \"\\\\\\\\\", \"\\\\-\", \"\\\\,\"\r\n ];\r\n let toHelp: string[] = [\r\n \"XX\", \"XX\", \"XX\"\r\n ];\r\n let task: GuiTaskBase = this.getForm().getTask();\r\n let dataView: GuiDataViewBase = task.DataView;\r\n let dcv: DcValues = dataView.getDcValues(this._dcValId);\r\n let currDcId: number = this.getDcRef();\r\n let choiceDispStr: string = null;\r\n let choiceLinkStr: string = \"\";\r\n let optionsValid: boolean = true;\r\n let trimToLength: number = -1;\r\n let dataType: StorageAttribute = this.DataType;\r\n let isItemsListTreatedAsDisplayList: boolean = false;\r\n\r\n try {\r\n\r\n // re-compute values only if they are not valid or the DC was changed (due toHelp recompute)\r\n if (this._choiceLinks.get_Item(line) === null || (this.isDataCtrl() && currDcId !== this._dcValId)) {\r\n if (dataType === StorageAttribute.BLOB_VECTOR) {\r\n dataType = this.getField().getCellsType();\r\n }\r\n let dispVals: string[] = dcv.getDispVals();\r\n let dispProp: Property = this.getProp(PropInterface.PROP_TYPE_DISPLAY_LIST);\r\n let linkProp: Property = this.getProp(PropInterface.PROP_TYPE_LABEL);\r\n if (dispProp !== null) {\r\n choiceDispStr = await dispProp.getValue();\r\n }\r\n if (linkProp !== null) {\r\n choiceLinkStr = await linkProp.getValue();\r\n }\r\n if (choiceLinkStr === null || StrUtil.rtrim(choiceLinkStr).length === 0) {\r\n choiceLinkStr = \"\";\r\n }\r\n if (choiceDispStr === null || StrUtil.rtrim(choiceDispStr).length === 0) {\r\n if (!this.isDataCtrl() || dispVals === null || dispVals.length === 0) {\r\n choiceDispStr = choiceLinkStr;\r\n }\r\n else {\r\n choiceDispStr = (choiceLinkStr = \"\");\r\n }\r\n isItemsListTreatedAsDisplayList = true;\r\n }\r\n choiceDispStr = Events.Translate(choiceDispStr);\r\n if (dataType === StorageAttribute.NUMERIC) {\r\n choiceLinkStr = StrUtil.searchAndReplace(choiceLinkStr, \"\\\\-\", \"-\");\r\n }\r\n let helpStr: string = StrUtil.searchAndReplace(choiceLinkStr, fromHelp, toHelp);\r\n let sTok: string[] = StrUtil.tokenize(helpStr, \",\");\r\n let linkSize: number = (helpStr !== \"\") ? sTok.length : 0;\r\n let helpStrDisp: string = StrUtil.searchAndReplace(choiceDispStr, fromHelp, toHelp);\r\n sTok = StrUtil.tokenize(helpStrDisp, \",\");\r\n let displaySize: number = (helpStrDisp !== \"\") ? sTok.length : 0;\r\n\r\n if (linkSize !== displaySize && displaySize > 0) {\r\n choiceDispStr = choiceLinkStr;\r\n isItemsListTreatedAsDisplayList = true;\r\n }\r\n let size: number = linkSize;\r\n let choiceLink: string[] = new Array<string>(size);\r\n this._choiceLinks.set_Item(line, choiceLink);\r\n if (dataType === StorageAttribute.NUMERIC || dataType === StorageAttribute.DATE || dataType === StorageAttribute.TIME) {\r\n this._choiceNums.set_Item(line, new Array<NUM_TYPE>(size));\r\n }\r\n\r\n // Add display values\r\n let orgChoiceDisp: string[] = ChoiceUtils.GetDisplayListFromString(choiceDispStr, false, true, !isItemsListTreatedAsDisplayList);\r\n this._orgChoiceDisps.set_Item(line, orgChoiceDisp);\r\n let choiceDisp: string[] = ChoiceUtils.GetDisplayListFromString(choiceDispStr, super.isSelectionCtrl() || super.isTabControl(), true, !isItemsListTreatedAsDisplayList);\r\n this._choiceDisps.set_Item(line, choiceDisp);\r\n if (this.getField() !== null) {\r\n trimToLength = this.getField().getSize();\r\n }\r\n\r\n\r\n let token: string = null;\r\n let helpToken: string = null;\r\n let tokenBuffer: StringBuilder;\r\n // Add link values.\r\n for (let i: number = 0, currPos: number = 0, nextPos = 0; i < size && optionsValid; i++) {\r\n nextPos = currPos;\r\n nextPos = helpStr.indexOf(',', nextPos);\r\n\r\n if (nextPos === currPos)\r\n token = helpToken = \"\";\r\n else if (nextPos === -1) {\r\n token = choiceLinkStr.substr(currPos);\r\n helpToken = helpStr.substr(currPos);\r\n }\r\n else {\r\n token = choiceLinkStr.substr(currPos, (nextPos) - (currPos));\r\n helpToken = helpStr.substr(currPos, (nextPos) - (currPos));\r\n }\r\n\r\n currPos = nextPos + 1;\r\n\r\n switch (dataType) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.MEMO:\r\n case StorageAttribute.UNICODE:\r\n case StorageAttribute.BLOB_VECTOR:\r\n token = StrUtil.ltrim(token);\r\n helpToken = StrUtil.ltrim(helpToken);\r\n if (helpToken.indexOf('\\\\') >= 0) {\r\n tokenBuffer = new StringBuilder();\r\n for (let tokenPos: number = 0; tokenPos < helpToken.length; tokenPos++)\r\n if (helpToken[tokenPos] !== '\\\\')\r\n tokenBuffer.Append(token[tokenPos]);\r\n else if (tokenPos === helpToken.length - 1)\r\n tokenBuffer.Append(' ');\r\n\r\n token = tokenBuffer.ToString();\r\n }\r\n token = StrUtil.makePrintableTokens(token, SEQ_2_STR);\r\n if (this.isSelectionCtrl() || this.isTabControl())\r\n token = ChoiceUtils.RemoveAcclCharFromOptions(new StringBuilder(token));\r\n\r\n // choiceLink size cannot be greater than size of the field, so trim it.\r\n if (UtilStrByteMode.isLocaleDefLangDBCS() && dataType === StorageAttribute.ALPHA) {\r\n if (trimToLength !== -1 && UtilStrByteMode.lenB(token) > trimToLength)\r\n token = UtilStrByteMode.leftB(token, trimToLength);\r\n }\r\n else {\r\n if (trimToLength !== -1 && token.length > trimToLength)\r\n token = token.substr(0, trimToLength);\r\n }\r\n\r\n choiceLink[i] = token;\r\n break;\r\n\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n let picture: PIC = PIC.buildPicture(dataType, token, task.getCompIdx(), false);\r\n optionsValid = this.optionIsValid(token);\r\n choiceLink[i] = DisplayConvertor.Instance.disp2mg(token.trim(), picture,\r\n task.getCompIdx(),\r\n BlobType.CONTENT_TYPE_UNKNOWN);\r\n ((this._choiceNums.get_Item(line)))[i] = new NUM_TYPE(choiceLink[i]);\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n choiceLink[i] = (1 - i).toString();\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (!optionsValid)\r\n this.emptyChoice(line);\r\n }\r\n } catch (ex) {\r\n if (ex instanceof Exception) {\r\n optionsValid = false;\r\n this.emptyChoice(line);\r\n Events.WriteExceptionToLog(NString.Format(\"{0} : {1}\", ex.GetType(), ex.Message));\r\n }\r\n else\r\n throw ex;\r\n }\r\n this._hasValidItmAndDispVal = optionsValid;\r\n\r\n\r\n }\r\n\r\n /// <summary>\r\n /// return the topmost form of the subform\r\n /// </summary>\r\n /// <returns></returns>\r\n getTopMostForm(): MgFormBase {\r\n return this.getForm().getTopMostForm();\r\n }\r\n\r\n /// <summary>\r\n /// replace the url on browser control\r\n /// </summary>\r\n private setUrl(): void {\r\n Commands.addValueWithLine(CommandType.SET_VALUE, this, 0, this.Value);\r\n }\r\n\r\n /// <summary>\r\n /// returns the value in internal representation without changing the control value\r\n /// </summary>\r\n /// <param name = \"dispVal\">the displayed value with the masking characters</param>\r\n async getMgValue(dispVal: any): Promise<string> {\r\n let mgVal: string = null;\r\n\r\n if (super.isCheckBox()) {\r\n mgVal = dispVal ? \"1\" : \"0\";\r\n }\r\n else {\r\n if (super.isSelectionCtrl() || super.isTabControl() || super.isRadio()) {\r\n\r\n let line: number = this.getDisplayLine(true);\r\n\r\n if (line < 0)\r\n line = 0;\r\n\r\n if (typeof dispVal === \"number\")\r\n dispVal = dispVal.toString();\r\n\r\n if (Array.isArray(dispVal))\r\n dispVal = dispVal.join(',').toString();\r\n\r\n\r\n if (dispVal === \"\") {\r\n mgVal = dispVal;\r\n }\r\n else {\r\n mgVal = await this.getLinkValue(dispVal, line);\r\n }\r\n if (mgVal === null) {\r\n // The data control will never return an illegal value as a result of a user selection\r\n // but as a result of an init expression, update operation or values of data in\r\n // the record. Therefore, the same illegal value should be taken from its source,\r\n // which is a field or an expression. (Ehud 19-jun-2001)\r\n let refMgVal: RefParam<string> = new RefParam<string>(mgVal);\r\n if (this._field !== null) {\r\n mgVal = refMgVal.value;\r\n }\r\n }\r\n }\r\n else {\r\n let blobContentType: string = (this._field !== null) ? this._field.getContentType() : BlobType.CONTENT_TYPE_UNKNOWN;\r\n mgVal = DisplayConvertor.Instance.disp2mg(dispVal, this._pic, this.getForm().getTask().getCompIdx(), blobContentType);\r\n }\r\n }\r\n return mgVal;\r\n }\r\n\r\n /// <summary>\r\n /// Returns comma separated values for indice passed.\r\n /// </summary>\r\n /// <param name=\"selectedIndice\">comma separated values</param>\r\n /// <param name=\"line\"></param>\r\n /// <returns>comma separated values</returns>\r\n async getLinkValue(selectedIndice: string, line: number): Promise<string> {\r\n let size: number = 0;\r\n let result: string = NString.Empty;\r\n let temp: List<string> = new List<string>();\r\n\r\n await this.computeChoice(line);\r\n\r\n let choiceLink: string[] = this._choiceLinks.get_Item(line);\r\n\r\n if (choiceLink !== null) {\r\n // compute size of displayed values array\r\n size = choiceLink.length;\r\n }\r\n let linkIndice: number[] = this.getLinkIdxFromLayer(Misc.GetIntArray(selectedIndice));\r\n\r\n let array2: number[] = linkIndice;\r\n for (let i: number = 0; i < array2.length; i = i + 1) {\r\n let idx: number = array2[i];\r\n if (idx >= size) {\r\n let dcVals: DcValues = this.getDcVals();\r\n temp.push(dcVals.getLinkValue(idx - size));\r\n }\r\n else {\r\n if (idx >= 0 && idx < choiceLink.length) {\r\n temp.push(choiceLink[idx]);\r\n }\r\n else {\r\n temp.push(null);\r\n }\r\n }\r\n }\r\n\r\n if (this.DataType === StorageAttribute.BLOB_VECTOR) {\r\n let vectorType: VectorType = new VectorType(this.getField());\r\n for (let indx: number = 0; indx < temp.length; indx = indx + 1) {\r\n vectorType.setVecCell(indx + 1, temp.get_Item(indx), temp.get_Item(indx) === null);\r\n }\r\n result = vectorType.toString();\r\n }\r\n else {\r\n if (temp.length > 1) {\r\n result = temp.join(\",\");\r\n }\r\n else {\r\n result = temp.get_Item(0);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// set text on the control\r\n /// </summary>\r\n private setText(): void {\r\n let displayLine: number = this.getDisplayLine(true);\r\n let mlsTranslatedValue: any = this.Value;\r\n if (super.isButton()) {\r\n mlsTranslatedValue = Events.Translate(this.Value);\r\n }\r\n if (this.isTextControl() || this.isButton())\r\n Commands.addValueWithLine(CommandType.SET_VALUE, this, displayLine, mlsTranslatedValue);\r\n else\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, displayLine, /*\"innerHTML\"*/ HtmlProperties.Text, mlsTranslatedValue);\r\n\r\n // Commands.addAsync(CommandType.PROP_SET_TEXT, this, displayLine, mlsTranslatedValue, 0);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// set the radio button checked\r\n /// </summary>\r\n /// <param name = \"radioLine\">is the line of the radio that need to be Set</param>\r\n private setRadioChecked(index: number): void {\r\n\r\n Commands.addValueWithLine(CommandType.SET_VALUE, this, this.getDisplayLine(false), index);\r\n Commands.beginInvoke();\r\n\r\n // set control to focus\r\n if (index !== GuiConstants.DEFAULT_VALUE_INT) {\r\n this.setControlToFocus();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n setControlToFocus(): void {\r\n if (this.getField() !== null) {\r\n this.getField().ControlToFocus = this;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// set CheckBox Value to the check box control\r\n /// </summary>\r\n /// <param name=\"line\"></param>\r\n /// <param name=\"mgVal\"></param>\r\n /// <returns></returns>\r\n private setCheckBoxValue(line: number, mgVal: string): void {\r\n let checkState: boolean = DisplayConvertor.toBoolean(mgVal);\r\n Commands.addValueWithLine(CommandType.SET_VALUE, this, line, checkState);\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, this.getDisplayLine(false), HtmlProperties.CheckBoxIndeterminate, this.IsNull);\r\n }\r\n\r\n setAsThreeState(){\r\n this._propTab.setProp(PropInterface.PROP_TYPE_THREE_STATES, \"1\", this, \"C\");\r\n }\r\n\r\n isThreeStateCheckBox(): boolean {\r\n let isThreeStateCheckBox : boolean = false;\r\n if(this.isCheckBox())\r\n isThreeStateCheckBox = this.GetComputedBooleanProperty(PropInterface.PROP_TYPE_THREE_STATES, false);\r\n return isThreeStateCheckBox;\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n /// <param name = \"line\"></param>\r\n /// <param name = \"valueChanged\"></param>\r\n /// <returns></returns>\r\n private async refreshAndSetItemListByDataSource(line: number, valueChanged: boolean): Promise<boolean> {\r\n if (this.SupportsDataSource()) {\r\n let currDcId: number = this.getDcRef();\r\n\r\n // If the range was changed we have to recalculate the correct choice option\r\n if (this._rangeChanged) {\r\n valueChanged = true;\r\n }\r\n this._rangeChanged = false;\r\n if (this.isDataCtrl() && currDcId !== this._dcValId) {\r\n\r\n // Performance improvement: server writes optionList to the HTML. No need to apply\r\n // them\r\n // for the first time.\r\n // force update of the value whenever the set of options is replaced\r\n // if (form.formRefreshed() || forceRefresh)\r\n\r\n valueChanged = true;\r\n await this.refreshAndSetItemsList(line, true);\r\n this.setDcRef(this._dcValId);\r\n }\r\n }\r\n return valueChanged;\r\n }\r\n\r\n /// <summary>\r\n /// set the dcref for the current table line\r\n /// </summary>\r\n /// <param name = \"dcId\">the new reference to the dcvals</param>\r\n setDcRef(dcId: number): void {\r\n this._dcTableRefs.set_Item(this.getDcLineNum(), dcId);\r\n }\r\n\r\n /// <summary>\r\n /// replace the image list of an button control with the image at the given URL\r\n /// </summary>\r\n setImageList(url: string): void {\r\n\r\n }\r\n\r\n /// <summary>\r\n /// Update boolean property(ex:visible\\enable) of control and it's children\r\n /// </summary>\r\n /// <param name = \"propId\">property id </param>\r\n /// <param name = \"commandType\">command type that belong to the prop id</param>\r\n /// <param name = \"val\"></param>\r\n /// <param name = \"updateThis\"></param>\r\n async updatePropertyLogicNesting(propId: number, commandType: CommandType, val: boolean, updateThis: boolean): Promise<void> {\r\n // if (val && this.haveToCheckParentValue()) {\r\n // val = this.isParentPropValue(propId);\r\n // }\r\n if (updateThis) {\r\n\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, this.getDisplayLine(false),\r\n commandType === CommandType.PROP_SET_VISIBLE ? HtmlProperties.Visible : HtmlProperties.Enabled, val);\r\n\r\n }\r\n // todo: should go over only linked controls - not children controls, need to check with PM this behavior\r\n await this.updateChildrenPropValue(propId, commandType, val);\r\n }\r\n\r\n SetEnabled(val: boolean): void {\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, this.getDisplayLine(false), HtmlProperties.Enabled, val);\r\n }\r\n\r\n /// <summary>\r\n /// Updates visibility of controls linked to the control\r\n /// </summary>\r\n /// <param name = \"propId\"></param>\r\n /// <param name = \"commandType\"></param>\r\n /// <param name = \"val\"></param>\r\n async updateChildrenPropValue(propId: number, commandType: CommandType, val: boolean): Promise<void> {\r\n\r\n if (!super.isTableControl()) {\r\n // in table all children are contained,\r\n // table's visibility\\enable will affect them\r\n\r\n for (let i: number = 0; i < this._linkedControls.length; i = i + 1) {\r\n\r\n let child: MgControlBase = this._linkedControls.get_Item(i);\r\n // Defect 117294. Do not continue for the first time. It affects on the placement.\r\n if (child.IsFirstRefreshOfProps())\r\n continue;\r\n\r\n let childValue: boolean = (child.GetComputedBooleanProperty(propId, true));\r\n\r\n childValue = childValue && val;\r\n\r\n let childOnCurrentLayer: boolean = this.isChildOnCurrentLayer(child);\r\n\r\n if (commandType === CommandType.PROP_SET_VISIBLE) {\r\n\r\n if (childValue) {\r\n childValue = childOnCurrentLayer;\r\n }\r\n await child.updateChildrenPropValue(propId, commandType, childValue);\r\n }\r\n }\r\n if (super.isSubform()) {\r\n await this.updateSubformChildrenPropValue(propId, commandType, val);\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// return true if this control is descendant of specified control\r\n /// </summary>\r\n /// <returns></returns>\r\n isDescendentOfControl(control: GuiMgControl): boolean {\r\n let isContained: boolean = false;\r\n\r\n if (control !== null) {\r\n let parent: any = this.getParent();\r\n if (parent instanceof MgControlBase) {\r\n if (parent === control) {\r\n isContained = true;\r\n }\r\n else {\r\n // If current control belongs to table, then it is also a descendant of the column control to\r\n // which it belongs. According to our hierarchy, the control is direct descendant of table\r\n // control; hence, we need to handle column control\r\n\r\n let parentControl: MgControlBase = ((parent instanceof MgControlBase) ? <MgControlBase>parent : null);\r\n if (control.Type === MgControlType.CTRL_TYPE_COLUMN && parentControl !== null && parentControl.Type === MgControlType.CTRL_TYPE_TABLE && control.Layer === this.Layer)\r\n isContained = true;\r\n else\r\n isContained = ((<MgControlBase>parent).isDescendentOfControl(control));\r\n }\r\n }\r\n }\r\n return isContained;\r\n }\r\n\r\n /// <summary>\r\n /// Updates visibility or enable property of subform controls\r\n /// </summary>\r\n /// <param name = \"propId\">Id of visibility or enable property</param>\r\n /// <param name = \"commandType\">type of the GUI command</param>\r\n /// <param name = \"val\">value for the property</param>\r\n updateSubformChildrenPropValue(propId: number, commandType: CommandType, val: boolean): void {\r\n }\r\n\r\n /// <summary>\r\n /// checks child's layer is equal to current layer of the parent, relavant for tab control for all other\r\n /// controls returns true\r\n /// </summary>\r\n /// <param name = \"child\"></param>\r\n /// <returns> true if parent is not tab control or parent is tab control with same layer</returns>\r\n isChildOnCurrentLayer(child: MgControlBase): boolean {\r\n let ret: boolean = true;\r\n // check that the control has same layer that is currently set on it's parent tab control\r\n if (super.isChoiceControl()) {\r\n let parentLayer: number = 0;\r\n if (this.Value !== null) {\r\n parentLayer = this.getCurrentLinkIdx() + 1;\r\n }\r\n let layer: number = child.getLayer();\r\n if (parentLayer !== layer && layer > 0) {\r\n // sons of layer 0 displayed always\r\n ret = false;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n /// <summary>\r\n /// Return current link Idx of choice controls, or zero for others\r\n /// </summary>\r\n /// <returns></returns>\r\n getCurrentLinkIdx(): number {\r\n let currLinkIdx: number = 0;\r\n\r\n if (super.isChoiceControl() || this.HasAutocomplete()) {\r\n let currentLayers: number[] = this.getCurrentIndexOfChoice();\r\n let currLinkIndice: number[] = this.getLinkIdxFromLayer(currentLayers);\r\n currLinkIdx = currLinkIndice[0];\r\n }\r\n return currLinkIdx;\r\n }\r\n\r\n /// <summary>\r\n /// gets layer from the selected indice passed.\r\n /// </summary>\r\n /// <param name=\"linkIdx\"></param>\r\n /// <returns>array of layer values.</returns>\r\n getLayerFromLinkIdx(indice: number[]): number[] {\r\n let layers: number[] = new Array<number>(indice.length);\r\n\r\n for (let iCtr: number = 0; iCtr < indice.length; iCtr = iCtr + 1) {\r\n let idx: number = indice[iCtr];\r\n // By default, layer = linkIdx unless it is a Tab control\r\n\r\n layers[iCtr] = idx;\r\n\r\n if (super.isTabControl() && idx >= 0) {\r\n let line: number = this.getDisplayLine(false);\r\n if (line < 0) {\r\n line = 0;\r\n }\r\n let layerList: string[] = this._choiceLayerList.get_Item(line);\r\n if (layerList !== null && layerList.length > 0) {\r\n layers[iCtr] = layerList.indexOf((idx + 1).toString());\r\n }\r\n }\r\n }\r\n return layers;\r\n }\r\n\r\n /// <summary>\r\n /// Gets the selected indice for selected values.\r\n /// </summary>\r\n /// <param name=\"layers\">an array of current layers tab controls. It can be array because of multiple selection.</param>\r\n /// <returns>array of indice</returns>\r\n private getLinkIdxFromLayer(layers: number[]): number[] {\r\n let linkIndice: number[] = new Array<number>(layers.length);\r\n for (let iCtr: number = 0; iCtr < layers.length; iCtr = iCtr + 1) {\r\n let layer: number = layers[iCtr];\r\n linkIndice[iCtr] = layer;\r\n if (super.isTabControl()) {\r\n if (layer < 0) {\r\n linkIndice[iCtr] = 0;\r\n }\r\n else {\r\n let line: number = this.getDisplayLine(false);\r\n if (line < 0) {\r\n line = 0;\r\n }\r\n let layerList: string[] = this._choiceLayerList.get_Item(line);\r\n if (layerList !== null && typeof layerList !== \"undefined\" && layerList.length !== 0 && layer < layerList.length) {\r\n linkIndice[iCtr] = NNumber.Parse(layerList[layer]) - 1;\r\n }\r\n }\r\n }\r\n }\r\n return linkIndice;\r\n }\r\n\r\n /// <summary>\r\n /// recursive method, checks if parent of the child is visible\\enable, ultil there is no parent or found\r\n /// parent that is hidden\r\n /// </summary>\r\n /// <param name = \"propId\"></param>\r\n /// <returns></returns>\r\n isParentPropValue(propId: number): boolean {\r\n let column: MgControlBase = this.Form.getControlColumn(this);\r\n let parent: MgControlBase = <MgControlBase>this.getLinkedParent(true);\r\n\r\n let result: boolean;\r\n\r\n if (parent === null) {\r\n // no more parents\r\n result = true;\r\n }\r\n else {\r\n // parent is hidden\r\n if (!parent.GetComputedBooleanProperty(propId, true)) {\r\n result = false;\r\n }\r\n else {\r\n if (!parent.isChildOnCurrentLayer(this)) {\r\n // parent is tab control with current layer\r\n // different from child's layer\r\n result = false;\r\n }\r\n else {\r\n // for table children check if column visible\r\n result = (!(column !== null && !column.GetComputedBooleanProperty(propId, true)) && parent.isParentPropValue(propId));\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// Get control to which this control is linked\r\n /// </summary>\r\n /// <param name = \"checkSubformFather\">if true check for Subform control</param>\r\n /// <returns></returns>\r\n getLinkedParent(checkSubformFather: boolean): GuiControlPropertyAdapter {\r\n\r\n if (this._linkedParentDitIdx !== -1) {\r\n return this.Form.getCtrl(this._linkedParentDitIdx);\r\n }\r\n else {\r\n if (checkSubformFather && this.Form.isSubForm()) {\r\n return this.Form.getSubFormCtrl();\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// sets the current line value of the readOnly history array\r\n /// </summary>\r\n /// <param name = \"newVal\">the new value to be set</param>\r\n SetCurrReadOnly(newVal: boolean): void {\r\n this._currReadOnly.set_Item(this.getDisplayLine(true), newVal);\r\n }\r\n\r\n /// <summary>\r\n /// return the current readOnly value according to the control's current line number\r\n /// </summary>\r\n /// <returns> the readOnly value</returns>\r\n GetCurrReadOnly(): boolean {\r\n let line: number = super.isTableControl() ? 0 : this.getDisplayLine(true);\r\n let currObj: any = this._currReadOnly.get_Item(line);\r\n let curr: boolean;\r\n if (currObj === null) {\r\n curr = false;\r\n this._currReadOnly.set_Item(line, curr);\r\n }\r\n else {\r\n curr = <boolean>currObj;\r\n }\r\n return curr;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this control is a Data Control\r\n /// </summary>\r\n isDataCtrl(): boolean {\r\n return this._dataCtrl;\r\n }\r\n\r\n /// <summary>\r\n /// return the dcref according to the current line number\r\n /// </summary>\r\n /// <returns> the dcId</returns>\r\n getDcRef(): number {\r\n let line: number = this.getDcLineNum();\r\n let obj: any = this._dcTableRefs.get_Item(this.getDcLineNum());\r\n let dcId: number;\r\n if (obj === null) {\r\n dcId = -2;\r\n this._dcTableRefs.set_Item(line, dcId);\r\n }\r\n else {\r\n dcId = <number>obj;\r\n }\r\n return dcId;\r\n }\r\n\r\n /// <summary>\r\n /// returns the current line number for a data control\r\n /// </summary>\r\n private getDcLineNum(): number {\r\n return this.IsRepeatable ? this.Form.DisplayLine : 0;\r\n }\r\n\r\n /// <summary>\r\n /// check if the one choice option from items list is valid. The check is only for items list and not for the\r\n /// data source options, (FYI: for the option from the DataCtrl, we are not calling this\r\n /// method, NO CHECK IS DONE) in online :ci_check_range_str\r\n /// </summary>\r\n /// <param name = \"option:\">one option from the items list</param>\r\n /// <returns></returns>\r\n private optionIsValid(option: string): boolean {\r\n let isValid: boolean = true;\r\n\r\n if (this.DataType === StorageAttribute.NUMERIC && option.length > 0 && option.indexOf('0') === -1) {\r\n let convertNum: NUM_TYPE = new NUM_TYPE();\r\n convertNum.num_4_a_std(option);\r\n if (convertNum.num_is_zero()) {\r\n isValid = false;\r\n }\r\n }\r\n return isValid;\r\n }\r\n\r\n /// <summary>\r\n /// prepares and returns the ordered list based on layers in layerList\r\n /// </summary>\r\n /// <param name = \"choiceDispList\">unordered list</param>\r\n /// <returns></returns>\r\n private async getOrderedDispList(choiceDispList: string[], line: number): Promise<string[]> {\r\n\r\n let choiceLayerStr: string = \"\";\r\n let dispArryList: List<string> = new List<string>();\r\n let layerArryList: List<string> = new List<string>();\r\n let layerProp: Property = this.getProp(PropInterface.PROP_TYPE_VISIBLE_LAYERS_LIST);\r\n\r\n if (layerProp !== null) {\r\n choiceLayerStr = await layerProp.getValue();\r\n }\r\n\r\n if (choiceLayerStr === null || StrUtil.rtrim(choiceLayerStr).length === 0) {\r\n choiceLayerStr = \"\";\r\n }\r\n if (choiceLayerStr.length > 0 && choiceDispList.length > 0) {\r\n let layerList: string[] = choiceLayerStr.split(\",\");\r\n let posCopyIndex: number = -1;\r\n for (let index: number = 0; index < layerList.length; index = index + 1) {\r\n let currLayerListVal: string = layerList[index].trim();\r\n if (!(layerArryList.indexOf(currLayerListVal) !== -1)) {\r\n let refPosCopyIndex: RefParam<number> = new RefParam<number>(posCopyIndex);\r\n let isNumber: boolean = NNumber.TryParse(currLayerListVal, refPosCopyIndex);\r\n posCopyIndex = refPosCopyIndex.value;\r\n\r\n // posCopyIndex is 1Based, so must not be zero. Also, it must not be\r\n // greater than no of elements in the DiplayList.\r\n\r\n if (isNumber && posCopyIndex > 0 && posCopyIndex <= choiceDispList.length) {\r\n dispArryList.push((choiceDispList[posCopyIndex - 1]).trim());\r\n layerArryList.push(currLayerListVal);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let result: string[];\r\n if (dispArryList.length === 0) {\r\n result = choiceDispList;\r\n this._choiceLayerList.set_Item(line, new Array<string>(0));\r\n }\r\n else {\r\n result = new Array<string>(dispArryList.length);\r\n for (let _ai: number = 0; _ai < result.length; ++_ai)\r\n result[_ai] = null;\r\n\r\n result = dispArryList.ToArray();\r\n this._choiceLayerList.set_Item(line, layerArryList.ToArray());\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// reset the previous value\r\n /// </summary>\r\n resetPrevVal(): void {\r\n let line: number = this.getDisplayLine(true);\r\n if (line < 0) {\r\n line = 0;\r\n }\r\n this._prevValues.set_Item(line, null);\r\n this.setPrevIsNull_ToNull();\r\n }\r\n\r\n /// sets the prevIsNull value of the prevIsNull array\r\n /// the newValue can be NULL or bool\r\n /// </summary>\r\n setPrevIsNull_ToNull(): void {\r\n this._prevIsNulls.set_Item(this.getDisplayLine(true), null);\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <returns>true if an expression was set as the data</returns>\r\n expressionSetAsData(): boolean {\r\n return this._valExpId > 0;\r\n }\r\n\r\n /// <summary>\r\n /// called whenever the choice list of a SELECT control has changed\r\n /// </summary>\r\n clearRange(line: number): void {\r\n this._orgChoiceDisps.set_Item(line, null);\r\n this._choiceDisps.set_Item(line, null);\r\n this._choiceLinks.set_Item(line, null);\r\n this._choiceLayerList.set_Item(line, null);\r\n }\r\n\r\n /// <summary>\r\n /// have to check parent visibility\\enable\r\n /// </summary>\r\n /// <returns>true, if the control is connected to a container or the task is a subfom</returns>\r\n haveToCheckParentValue(): boolean {\r\n let ret: boolean = false;\r\n if (this._linkedParentDitIdx !== -1) {\r\n\r\n if (!this.isContainedInLinkedParent()) {\r\n ret = true;\r\n }\r\n // contained tab children of all layers are on the same window,\r\n // so we must handle there visibility\\enable\r\n\r\n else {\r\n if (this.Form.getCtrl(this._linkedParentDitIdx).isTabControl() || this.Form.getCtrl(this._linkedParentDitIdx).isGroup()) {\r\n ret = true;\r\n }\r\n }\r\n }\r\n else {\r\n if (this.Form.isSubForm()) {\r\n ret = true;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if control is contain in its linked parent\r\n /// </summary>\r\n /// <returns></returns>\r\n isContainedInLinkedParent(): boolean {\r\n return this._containerDitIdx !== -1 && this._containerDitIdx === this._linkedParentDitIdx;\r\n }\r\n\r\n /// <summary>\r\n /// Combine two strings array into one. Each of the original arrays may be null.\r\n /// </summary>\r\n /// <param name = \"firstStrings\">the first strings array that will always occupy the first array cells</param>\r\n /// <param name = \"lastStrings\">the last strings array that will always occupy the last array cells</param>\r\n /// <returns> combined Strings array</returns>\r\n private static combineStringArrays(firstStrings: string[], lastStrings: string[]): string[] {\r\n let result: string[] = new Array<string>();\r\n\r\n if (firstStrings !== null)\r\n result = result.concat(firstStrings);\r\n\r\n if (lastStrings !== null)\r\n result = result.concat(lastStrings);\r\n\r\n return result;\r\n }\r\n\r\n\r\n GetComputedBooleanProperty(propId: number, defaultRetVal: boolean, line?: number): boolean {\r\n if (arguments.length === 2 && (propId === null || propId.constructor === Number) && (defaultRetVal === null || defaultRetVal.constructor === Boolean)) {\r\n return this.GetComputedBooleanProperty_0(propId, defaultRetVal);\r\n }\r\n return this.GetComputedBooleanProperty_1(propId, defaultRetVal, line);\r\n }\r\n\r\n /// <summary>\r\n /// return the boolean computed value of a property of the control\r\n /// </summary>\r\n /// <param name = \"propId\">the id of the property</param>\r\n /// <param name = \"defaultRetVal\">the default return value (when the property does not exist)</param>\r\n private GetComputedBooleanProperty_0(propId: number, defaultRetVal: boolean): boolean {\r\n let result: boolean = defaultRetVal;\r\n let prop: Property = this.GetComputedProperty(propId);\r\n if (prop !== null) {\r\n result = prop.GetComputedValueBoolean();\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// return the boolean value of a property of the control - if the control is repeatable and the line is\r\n /// different than the forms current line then return the previous value of the control property at that line\r\n /// </summary>\r\n /// <param name = \"propId\">the id of the property</param>\r\n /// <param name = \"defaultRetVal\">the default return value (when the property does not exist)</param>\r\n /// <param name = \"line\">the line number in table in which the control is located</param>\r\n private GetComputedBooleanProperty_1(propId: number, defaultRetVal: boolean, line: number): boolean {\r\n let result: boolean = defaultRetVal;\r\n\r\n if (this.isPropertyRepeatable(propId) && this.Form.DisplayLine !== line) {\r\n let prop: Property = this.GetComputedProperty(propId);\r\n if (prop !== null) {\r\n let val: string = prop.getPrevValue(line);\r\n if (val !== null) {\r\n result = DisplayConvertor.toBoolean(val);\r\n }\r\n }\r\n }\r\n else {\r\n result = this.GetComputedBooleanProperty(propId, defaultRetVal);\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// return the boolean value of a property of the control - if the control is repeatable and the line is\r\n /// different than the forms current line then return the previous value of the control property at that\r\n /// line\r\n /// </summary>\r\n /// <param name = \"propId\">the id of the property</param>\r\n /// <param name = \"defaultRetVal\">the default return value (when the property does not exist)</param>\r\n /// <param name = \"line\">the line number in table in which the control is located</param>\r\n async checkPropWithLine(propId: number, defaultRetVal: boolean, line: number): Promise<boolean> {\r\n let result: boolean = defaultRetVal;\r\n\r\n if (this.isPropertyRepeatable(propId) && this.Form.DisplayLine !== line) {\r\n let prop: Property = this.getProp(propId);\r\n if (prop !== null) {\r\n let val: string = prop.getPrevValue(line);\r\n if (val !== null) {\r\n result = DisplayConvertor.toBoolean(val);\r\n }\r\n }\r\n }\r\n else {\r\n result = await this.checkProp(propId, defaultRetVal);\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// return the boolean value of a property of the control\r\n /// </summary>\r\n /// <param name = \"propId\">the id of the property</param>\r\n /// <param name = \"defaultRetVal\">the default return value (when the property does not exist)</param>\r\n async checkProp(propId: number, defaultRetVal: boolean): Promise<boolean> {\r\n let result: boolean = defaultRetVal;\r\n let prop: Property = this.getProp(propId);\r\n if (prop !== null) {\r\n result = await prop.getValueBoolean();\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if propId property is repeatable for this control\r\n /// </summary>\r\n /// <param name = \"propId\"></param>\r\n /// <returns></returns>\r\n isPropertyRepeatable(propId: number): boolean {\r\n let isRepeatable: boolean = this.IsRepeatable;\r\n if (isRepeatable) {\r\n return true;\r\n }\r\n else {\r\n return super.isTableControl() && Property.isRepeatableInTable();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// set the value of the control and update the display\r\n /// </summary>\r\n /// <param name = \"mgVal\">the value of the control in magic internal format to be displayed</param>\r\n /// <param name=\"isNull\"></param>\r\n async SetAndRefreshDisplayValue(mgVal: string, isNull: boolean): Promise<void> {\r\n let dcRangeIsEmpty: boolean = true;\r\n\r\n if (mgVal === null) {\r\n this.Value = \"\";\r\n // QCR 308475 - controls that are Initialized with null should be given magic default value.\r\n if (!isNull)\r\n mgVal = FieldDef.getMagicDefaultValue(this.DataType);\r\n }\r\n else {\r\n if (super.isChoiceControl()) {\r\n let line: number = this.getDisplayLine(true);\r\n if (line < 0) {\r\n line = 0;\r\n }\r\n let layers: number[] = this.getLayerFromLinkIdx(await this.getIndexOfChoice(mgVal, line, isNull));\r\n\r\n // We do not allow no selection for a tab control.\r\n // So, if there is no Tab to be selected, select the first Tab and\r\n // also update the field's value accordingly.\r\n\r\n if (layers[0] < 0 && super.isTabControl()) {\r\n layers[0] = 0;\r\n mgVal = await this.getLinkValue(layers[0].toString(), line);\r\n isNull = false;\r\n if (this._field !== null && mgVal !== null) {\r\n await (<GuiTaskBase>this._field.getTask()).UpdateFieldValueAndStartRecompute(this._field, mgVal, isNull);\r\n }\r\n }\r\n this.Value = Misc.GetCommaSeperatedString(layers);\r\n dcRangeIsEmpty = false;\r\n }\r\n }\r\n\r\n // QCR #450248: an empty range in the data control caused deleting the value\r\n // of the control when leaving it. Now, the range of the control is used when\r\n // the data control range is empty.\r\n if (dcRangeIsEmpty) {\r\n if (!super.isCheckBox() && (this._field === null || !isNull || !this._field.hasNullDisplayValue())) {\r\n try {\r\n if ((super.isImageControl() && this.DataType === StorageAttribute.BLOB) || super.IsImageButton()) {\r\n this.Value = mgVal;\r\n }\r\n else {\r\n if ((this._field === null && isNull) && (this.DataType === StorageAttribute.NUMERIC || this.DataType === StorageAttribute.DATE || this.DataType === StorageAttribute.TIME || this.DataType === StorageAttribute.BOOLEAN)) {\r\n this.Value = mgVal;\r\n }\r\n else {\r\n let inControl: boolean = this.InControl;\r\n this.Value = DisplayConvertor.Instance.mg2disp(mgVal, this._range, this._pic, true, super.isSelectionCtrl(), this.getForm().getTask().getCompIdx(), inControl);\r\n }\r\n }\r\n // Defect # 138803 : Fix to provide backwards compatibility for uniPaaS. Do not call rtrimValue() when refreshing the display if the data type\r\n // is not numeric or left justify property is No.\r\n if (typeof this.Value === 'string' && (!this._pic.isAttrNumeric() || this._pic.isLeft())) {\r\n this.rtrimValue();\r\n }\r\n } catch (innerException) {\r\n if (innerException instanceof ApplicationException) {\r\n Events.WriteExceptionToLog(new ApplicationException(NString.Format(\"Control: '{0}', mgval: {1}\", this.Name, mgVal), innerException));\r\n this.Value = \"\";\r\n mgVal = FieldDef.getMagicDefaultValue(this.DataType);\r\n }\r\n else\r\n throw innerException;\r\n }\r\n }\r\n else {\r\n if (this.isCheckBox())\r\n this.Value = DisplayConvertor.toBoolean(mgVal);\r\n else\r\n this.Value = mgVal;\r\n }\r\n }\r\n // Translate logical name for image control.\r\n if ((super.isImageControl() && this.DataType !== StorageAttribute.BLOB) || super.IsImageButton()) {\r\n mgVal = Events.TranslateLogicalName(mgVal);\r\n }\r\n this.IsNull = isNull;\r\n await this.RefreshDisplayValue(mgVal);\r\n }\r\n\r\n /// <summary> Checks if the control's value is modified and if so, updates the ModifiedByUser </summary>\r\n /// <param name=\"newValue\"></param>\r\n UpdateModifiedByUser(newValue: string): void {\r\n\r\n // For image control and image button, the value would not be changed by the user. But, if it has\r\n // a logical name, it is replaced. Or if it is fileServer get, the value is replaced by a server url.\r\n // In both these cases, we should not mark it as modified.\r\n if (!(super.isButton() || super.isImageControl())) {\r\n let ctrlCurrIsNull: boolean = this.IsNull;\r\n let valChanged: boolean = (this.isDifferentValue(newValue, false, false));\r\n\r\n // if the value didn't change then let's check if the nullity have changed\r\n if (!valChanged) {\r\n if (this.CanGetNullFromControlValue()) {\r\n valChanged = (ctrlCurrIsNull !== this.isNullValue(newValue));\r\n }\r\n }\r\n if (valChanged || this.KeyStrokeOn) {\r\n this.ModifiedByUser = true;\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// RTrims the control value\r\n /// </summary>\r\n private rtrimValue(): void {\r\n if ((super.isImageControl() && this.DataType === StorageAttribute.BLOB) || super.IsImageButton()) {\r\n this.Value = NString.TrimEnd(this.Value);\r\n }\r\n else {\r\n let minimumValueLength: number = this.getMinimumValueLength();\r\n // RTrim the value beyond this index\r\n if (this.Value.length > minimumValueLength) {\r\n let str: string = this.Value.substr(minimumValueLength);\r\n\r\n // copy the minimum length value as is\r\n this.Value = this.Value.substr(0, minimumValueLength);\r\n // rtrim the value beyond minimum length\r\n this.Value = this.Value + StrUtil.rtrimWithNull(str, true);\r\n }\r\n\r\n // always trim the numeric value.\r\n if (super.isTextControl() && this.DataType === StorageAttribute.NUMERIC) {\r\n this.Value = NString.TrimEnd(this.Value);\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// returns the minimum value length\r\n /// </summary>\r\n private getMinimumValueLength(): number {\r\n let minLength: number = this._pic.getMaskLength();\r\n\r\n // traverse from right till a valid mask char is encountered\r\n while (minLength > 0 && !this._pic.picIsMask(minLength - 1)) {\r\n minLength = minLength - 1;\r\n }\r\n return minLength;\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n /// <returns></returns>\r\n isNullValue(str: string): boolean {\r\n let retIsNullControl: boolean = false;\r\n if (this.CanGetNullFromControlValue() && str === \"\") {\r\n retIsNullControl = true;\r\n }\r\n return retIsNullControl;\r\n }\r\n\r\n /// <summary>\r\n /// this control can get null value from the control himself\r\n /// </summary>\r\n /// <returns></returns>\r\n CanGetNullFromControlValue(): boolean {\r\n return this.isThreeStateCheckBox() && (this._field == null || this._field.NullAllowed);\r\n }\r\n\r\n /// <summary>\r\n /// returns true if a specific index corresponds to a null value.\r\n /// </summary>\r\n isChoiceNull(idx: number): boolean {\r\n let result: boolean;\r\n if (idx >= 0) {\r\n let dcVals: DcValues = this.getDcVals();\r\n return dcVals.isNull(idx);\r\n }\r\n else {\r\n return result;\r\n }\r\n }\r\n\r\n /// <summary> Computes the control's value either from expression or field and refreshes the GUI </summary>\r\n /// <param name=\"forceRefresh\"></param>\r\n async ComputeAndRefreshDisplayValue(forceRefresh: boolean): Promise<void> {\r\n if (forceRefresh) {\r\n this.resetPrevVal();\r\n }\r\n\r\n if (this._valExpId > 0) {\r\n let wasEvaluated: boolean;\r\n let refWasEvaluated: RefParam<boolean> = new RefParam<boolean>(wasEvaluated);\r\n\r\n let retExp: string =\r\n await this.EvaluateExpression(this._valExpId, this.DataType, this._pic.getSize(), true, StorageAttribute.SKIP, false, refWasEvaluated);\r\n wasEvaluated = refWasEvaluated.value;\r\n if (wasEvaluated) {\r\n await this.SetAndRefreshDisplayValue(retExp, retExp === null);\r\n }\r\n }\r\n else {\r\n if (this._field !== null) {\r\n let value: string = NString.Empty;\r\n let isNull: boolean = false;\r\n let refValue: RefParam<string> = new RefParam<string>(value);\r\n let refIsNull: RefParam<boolean> = new RefParam<boolean>(isNull);\r\n (<GuiTaskBase>this._field.getTask()).getFieldDisplayValue(this._field, refValue, refIsNull);\r\n value = refValue.value;\r\n isNull = refIsNull.value;\r\n await this.SetAndRefreshDisplayValue(value, isNull);\r\n }\r\n else {\r\n if (!super.isTableControl() && !super.isColumnControl()) {\r\n await this.RefreshDisplayValue(this.Value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Decides if the control should be refreshed while entering a control. Values for some data types\r\n /// are displayed differently while parked on the control.\r\n /// </summary>\r\n /// <returns></returns>\r\n ShouldRefreshOnControlEnter(): boolean {\r\n return this.Type === MgControlType.CTRL_TYPE_TEXT && this.getField() !== null && (this.getField().getType() === StorageAttribute.DATE ||\r\n this.getField().getType() === StorageAttribute.TIME || this.getField().getType() === StorageAttribute.NUMERIC);\r\n }\r\n\r\n /// <summary>\r\n /// refresh the displayed value only (without the other properties of the control)\r\n /// </summary>\r\n /// <param name = \"mgVal\">is the magic internal value of the presentation value</param>\r\n async RefreshDisplayValue(mgVal: string): Promise<void> {\r\n let line: number = this.getDisplayLine(true);\r\n let valueChanged: boolean = true;\r\n let saveValueChanged: boolean = valueChanged;\r\n\r\n if (line < 0) {\r\n line = 0;\r\n }\r\n // ATTENTION:\r\n // the use of the function getName() instead of using the name member variable\r\n // is to enhance the use of controls which are contained in a table\r\n // update the display\r\n try {\r\n\r\n let prevValue: string = this._prevValues.get_Item(line);\r\n let prevNull: boolean = this.getPrevIsNull();\r\n\r\n if (StorageAttributeCheck.IsTypeAlphaOrUnicode(this.DataType)) {\r\n if (StrUtil.rtrim(mgVal) === StrUtil.rtrim(prevValue) ||\r\n (mgVal !== null && StrUtil.rtrim(mgVal) === StrUtil.rtrim(prevValue))) {\r\n valueChanged = false;\r\n }\r\n\r\n if (prevNull !== this.IsNull) {\r\n valueChanged = true;\r\n }\r\n }\r\n else {\r\n ;\r\n if (mgVal === prevValue || (mgVal !== null && mgVal === prevValue))\r\n valueChanged = false;\r\n\r\n if (prevNull !== this.IsNull)\r\n valueChanged = true;\r\n\r\n }\r\n this._prevValues.set_Item(line, mgVal);\r\n this.setPrevIsNull(this.IsNull);\r\n\r\n switch (this.Type) {\r\n case MgControlType.CTRL_TYPE_TABLE:\r\n case MgControlType.CTRL_TYPE_COLUMN:\r\n case MgControlType.CTRL_TYPE_LABEL:\r\n case MgControlType.CTRL_TYPE_SUBFORM:\r\n case MgControlType.CTRL_TYPE_GROUP:\r\n case MgControlType.CTRL_TYPE_STATUS_BAR:\r\n case MgControlType.CTRL_TYPE_FRAME_SET:\r\n case MgControlType.CTRL_TYPE_CONTAINER:\r\n case MgControlType.CTRL_TYPE_FRAME_FORM:\r\n case MgControlType.CTRL_TYPE_SB_LABEL:\r\n case MgControlType.CTRL_TYPE_LINE:\r\n return;\r\n\r\n case MgControlType.CTRL_TYPE_BROWSER:\r\n if (valueChanged && this.Value != null)\r\n this.setUrl();\r\n return;\r\n\r\n case MgControlType.CTRL_TYPE_IMAGE:\r\n case MgControlType.CTRL_TYPE_SB_IMAGE:\r\n if (valueChanged && this.Value != null)\r\n this.setImage();\r\n return;\r\n\r\n case MgControlType.CTRL_TYPE_CHECKBOX:\r\n if (valueChanged || this.forceRefresh)\r\n this.setCheckBoxValue(line, mgVal);\r\n return;\r\n\r\n case MgControlType.CTRL_TYPE_TAB:\r\n case MgControlType.CTRL_TYPE_COMBO:\r\n case MgControlType.CTRL_TYPE_LIST:\r\n saveValueChanged = valueChanged;\r\n valueChanged = await this.refreshAndSetItemListByDataSource(line, valueChanged);\r\n if (valueChanged) {\r\n // fixed bug#:776215, 800763,941841, the prevValue is save as mgval need to convert to layer\r\n let prevDisplayValue: number[] = null;\r\n\r\n // Fix bug#:784391\r\n // If ItemList was update refreshAndSetItemListByDataSource then the value must be set\r\n\r\n if (saveValueChanged === valueChanged) {\r\n if (prevValue !== null) {\r\n prevDisplayValue = this.getLayerFromLinkIdx(await this.getIndexOfChoice(prevValue, line, prevNull));\r\n for (let i: number = 0; i < prevDisplayValue.length; i = i + 1) {\r\n if (prevDisplayValue[i] === GuiConstants.DEFAULT_VALUE_INT) {\r\n prevDisplayValue[i] = GuiConstants.DEFAULT_LIST_VALUE;\r\n }\r\n }\r\n }\r\n }\r\n let indice = Misc.GetIntArray(this.Value);\r\n\r\n if (this.isTabControl()) {\r\n let currentLayer = this.getCurrentLinkIdx();\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, line, HtmlProperties.SelectedValue, indice[0].toString());\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, line, HtmlProperties.SelectedLayer, currentLayer.toString());\r\n }\r\n\r\n if (this.IsMultipleSelectionListBox()) {\r\n Commands.addValueWithLine(CommandType.SET_VALUE, this, line, indice);\r\n }\r\n else\r\n Commands.addValueWithLine(CommandType.SET_VALUE, this, line, +this.Value);\r\n }\r\n break;\r\n\r\n case MgControlType.CTRL_TYPE_BUTTON:\r\n case MgControlType.CTRL_TYPE_TEXT:\r\n if (this.HasAutocomplete())\r\n await this.refreshAndSetItemListByDataSource(line, valueChanged);\r\n if (valueChanged) {\r\n // if (form.formRefreshed() || forceRefresh || valExp != null &&\r\n // valExp.computedByClientOnly())\r\n if (this.IsImageButton()) {\r\n this.setImageWithFileName(this.Value);\r\n }\r\n else\r\n this.setText();\r\n }\r\n else\r\n return;\r\n break;\r\n\r\n case MgControlType.CTRL_TYPE_RADIO:\r\n valueChanged = await this.refreshAndSetItemListByDataSource(line, valueChanged);\r\n if (!valueChanged)\r\n return;\r\n this.setRadioChecked(+this.Value);\r\n // setRadioChecked(value .length() == 0 ? DEFAULT_VALUE_INT : Integer.parseInt(value));\r\n // if (!task.startProcess())\r\n // guiManager.setFocus(this);\r\n break;\r\n\r\n default:\r\n Events.WriteExceptionToLog(NString.Format(\"in Control.RefreshDisplayValue() unknown type: {0}\", this.Type));\r\n return;\r\n }\r\n\r\n if (super.isChoiceControl() && valueChanged)\r\n await this.updatePropertyLogicNesting(PropInterface.PROP_TYPE_VISIBLE, CommandType.PROP_SET_VISIBLE, await this.checkProp(PropInterface.PROP_TYPE_VISIBLE, true), false);\r\n } catch (ex_360) {\r\n if (ex_360 instanceof Exception) {\r\n Events.WriteExceptionToLog(NString.Format(\"in Control.RefreshDisplayValue() for control: {0}\", this.Name));\r\n }\r\n else\r\n throw ex_360;\r\n }\r\n }\r\n\r\n async RefreshDisplay(onlyRepeatableProps?: boolean): Promise<void> {\r\n if (isNullOrUndefined(onlyRepeatableProps))\r\n onlyRepeatableProps = false;\r\n await this.RefreshDisplay_1(onlyRepeatableProps);\r\n }\r\n\r\n /// <summary>\r\n /// updates the display of the control including its value and its properties\r\n /// </summary>\r\n /// <param name = \"onlyRepeatableProps\">if control tree - refreshes only repeatable tree properties</param>\r\n private async RefreshDisplay_1(onlyRepeatableProps: boolean): Promise<void> {\r\n\r\n // #422250. Skip the refresh display of the parent's subform control if the form inside it is still in its RefreshDisplay.\r\n if (!(super.isSubform() && this.GetSubformMgForm() !== null && this.GetSubformMgForm().inRefreshDisplay())) {\r\n\r\n // update the properties\r\n await this.refreshProperties(onlyRepeatableProps);\r\n\r\n // compute and display the value.\r\n if (this.ShouldComputeAndRefreshOnClosedForm()) {\r\n await this.ComputeAndRefreshDisplayValue(false);\r\n }\r\n\r\n // executes the readonly command only if needed\r\n let isParkableCtrl: boolean = !(await this.isParkable(false)) || ! await this.isModifiable();\r\n\r\n if (this.GetCurrReadOnly() !== isParkableCtrl) {\r\n this.SetCurrReadOnly(isParkableCtrl);\r\n await Manager.SetReadOnlyControl(this, isParkableCtrl);\r\n }\r\n\r\n let mustInputProperty: Property = this.GetComputedProperty(PropInterface.PROP_TYPE_MUST_INPUT);\r\n // need to compute and refresh the display if the control's data is an expression\r\n // or the format is expression. When the format is changed, the display val may change as well.\r\n if (mustInputProperty != null && mustInputProperty.isExpression()) {\r\n\r\n let prevMustInput: boolean = this.GetComputedBooleanProperty(PropInterface.PROP_TYPE_MUST_INPUT, false);\r\n\r\n if (prevMustInput !== await this.checkProp(PropInterface.PROP_TYPE_MUST_INPUT, false))\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, this.getDisplayLine(false), HtmlProperties.MustInput, !prevMustInput);\r\n }\r\n else if(mustInputProperty != null){\r\n let mustInputVal: boolean = this.GetComputedBooleanProperty(PropInterface.PROP_TYPE_MUST_INPUT, false);\r\n if(mustInputVal)\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, this.getDisplayLine(false), HtmlProperties.MustInput, mustInputVal);\r\n }\r\n\r\n if (!this.GetComputedBooleanProperty(PropInterface.PROP_TYPE_TAB_IN, true))\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, this.getDisplayLine(false), HtmlProperties.TabIndex, -1);\r\n\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// For Rich Client compute and refresh the value of the control always, also if the form is not yet opened.\r\n /// For Online only for opened forms.\r\n /// </summary>\r\n /// <returns></returns>\r\n ShouldComputeAndRefreshOnClosedForm(): boolean {\r\n return true;\r\n }\r\n\r\n /// <summary> Refreshes the properties of the control. </summary>\r\n /// <param name=\"onlyRepeatableProps\"></param>\r\n async refreshProperties(onlyRepeatableProps: boolean): Promise<void> {\r\n\r\n if (this._field !== null && this.DataType !== StorageAttribute.NONE && this._firstRefreshProperties)\r\n Commands.addWithNumber(CommandType.SET_ATTRIBUTE, this, this.DataType.charCodeAt(0));\r\n\r\n if (this._propTab !== null) {\r\n try {\r\n\r\n if (this._firstRefreshProperties) {\r\n this.createDefaultProps();\r\n await this.ZoomButtonInitialization();\r\n }\r\n\r\n if (!(await this._propTab.RefreshDisplay(false, onlyRepeatableProps))) {\r\n Events.WriteExceptionToLog(NString.Format(\"Control '{0}': Not all properties could be set\", this.getName()));\r\n }\r\n\r\n if (this._firstRefreshProperties) {\r\n if (!onlyRepeatableProps) {\r\n this._firstRefreshProperties = false;\r\n }\r\n }\r\n } catch (ex) {\r\n if (ex instanceof Exception) {\r\n let msg: StringBuilder = new StringBuilder(NString.Format(\"Control '{0}': {1}\", this.getName(), ex.Message));\r\n Events.WriteExceptionToLog(msg.ToString());\r\n }\r\n else\r\n throw ex;\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// </summary>\r\n async refreshTabForLayerList(line: number): Promise<void> {\r\n let currentLinkValue: string = null;\r\n\r\n // If the form has already opened, get the current link value before\r\n // changing the layer list i.e. before calling refreshAndSetItemsList().\r\n // And then, after changing the layer list, select the TAB corresponding\r\n // to the current link value.\r\n if (this.getForm().Opened) {\r\n let indice: number[] = this.getCurrentIndexOfChoice();\r\n let currentLayer: number = indice[0];\r\n currentLinkValue = await this.getLinkValue(currentLayer.toString(), line);\r\n }\r\n await this.refreshAndSetItemsList(line, false);\r\n if (this.getForm().Opened) {\r\n await this.SetAndRefreshDisplayValue(currentLinkValue, this.IsNull);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// refresh the item list and set it into the gui control if it is combo box , refresh also the visible\r\n /// lines\r\n /// </summary>\r\n async refreshAndSetItemsList(line: number, execComputeChoice: boolean): Promise<void> {\r\n if (execComputeChoice) {\r\n this.clearRange(line);\r\n }\r\n let optionsStrings: string[] = await this.refreshDispRange(execComputeChoice);\r\n if (super.isChoiceControl() || this.HasAutocomplete()) {\r\n\r\n let options = optionsStrings.map((displayValue, index) => {\r\n return {index, displayValue}\r\n });\r\n\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, line, HtmlProperties.ItemsList, options);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// refresh the choice list of a SELECT control\r\n /// </summary>\r\n async refreshDispRange(execComputeChoice: boolean): Promise<string[]> {\r\n let selectCmd: string[] = new Array<string>(0);\r\n let line: number = this.getDisplayLine(true);\r\n\r\n if (line < 0) {\r\n line = 0;\r\n }\r\n if (this.SupportsDataSource()) {\r\n let dataView: GuiDataViewBase = this.getForm().getTask().DataView;\r\n let dcv: DcValues = dataView.getDcValues(this._dcValId);\r\n let dispVals: string[] = await this.getDispVals(line, execComputeChoice);\r\n\r\n if (this._hasValidItmAndDispVal) {\r\n selectCmd = MgControlBase.combineStringArrays(dispVals, dcv.getDispVals());\r\n }\r\n }\r\n else {\r\n selectCmd = await this.getDispVals(line, execComputeChoice);\r\n }\r\n this._rangeChanged = true;\r\n return await this.getOrderedDispList(selectCmd, line);\r\n }\r\n\r\n /// <summary>\r\n /// refresh the items list of the selection control.\r\n /// </summary>\r\n /// <param name=\"execComputeChoice\"></param>\r\n /// <returns></returns>\r\n async refreshItmRange(execComputeChoice: boolean): Promise<string[]> {\r\n\r\n // This function should be called only for selection control.\r\n Debug.Assert(this.SupportsDataSource());\r\n let orderedItmList: string[] = new Array<string>(0);\r\n let line: number = this.getDisplayLine(false);\r\n if (line < 0) {\r\n line = 0;\r\n }\r\n if (execComputeChoice) {\r\n await this.computeChoice(line);\r\n }\r\n let linkVals: string[] = this._choiceLinks.get_Item(line);\r\n let dataView: GuiDataViewBase = this.getForm().getTask().DataView;\r\n let dcv: DcValues = dataView.getDcValues(this._dcValId);\r\n if (this._hasValidItmAndDispVal) {\r\n orderedItmList = MgControlBase.combineStringArrays(linkVals, dcv.GetLinkVals());\r\n }\r\n\r\n return await this.getOrderedDispList(orderedItmList, line);\r\n }\r\n\r\n /// <summary>\r\n /// Get the items values from data source & item list property.\r\n /// </summary>\r\n /// <returns></returns>\r\n async GetItemsRange(): Promise<string[]> {\r\n return await this.refreshItmRange(false);\r\n }\r\n\r\n /// <summary>\r\n /// Get the display values from data source & display list property.\r\n /// </summary>\r\n /// <returns></returns>\r\n async GetDisplayRange(): Promise<string[]> {\r\n return await this.refreshDispRange(false);\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <returns></returns>\r\n private createDefaultProps() {\r\n this.getProp(PropInterface.PROP_TYPE_VISIBLE);\r\n\r\n // Fixed bug#:781741\r\n // in 1.9 -->\r\n // when ask about any property(PROP_TYPE_ENABLED) we was created the default property with the default value(true).\r\n // and when get to RefreshProps of the property \"PROP_TYPE_ENABLED\" we was add command to the queue in gui thread\r\n // the command was was update the TagData.Enable to be \"true\"\r\n // in 2.0 -->\r\n // we useing a new method GetComputedBooleanProperty() that not created any default property and no get to refreshProp\r\n // on the property and the value on the Control.Enable was wrong\r\n this.getProp(PropInterface.PROP_TYPE_ENABLED);\r\n\r\n if (super.isTableControl()) {\r\n this.getProp(PropInterface.PROP_TYPE_SCROLL_BAR);\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// set Linked Parent Idx\r\n /// </summary>\r\n /// <param name=\"linkedParentDitIdx\"></param>\r\n private setLinkedParentIdx(linkedParentDitIdx: number): void {\r\n this._linkedParentDitIdx = linkedParentDitIdx;\r\n }\r\n\r\n /// <summary>\r\n /// get the validation details of the control\r\n /// </summary>\r\n /// <param name=\"oldVal\"></param>\r\n /// <param name=\"val\"></param>\r\n /// <returns></returns>\r\n buildPicture(oldVal: any, val: any): ValidationDetails {\r\n\r\n if (super.isTableControl() || super.isColumnControl())\r\n return null;\r\n\r\n if (this._picExpExists) {\r\n this._vd = null;\r\n }\r\n if (this._vd === null) {\r\n this._vd = new ValidationDetails(oldVal, val, this._range, this._pic, this);\r\n }\r\n else {\r\n this._vd.setValue(val);\r\n this._vd.setOldValue(oldVal);\r\n }\r\n\r\n return this._vd;\r\n }\r\n\r\n /// <summary>\r\n /// Checks if the sent value is different than the control's existing value.\r\n /// </summary>\r\n /// <param name = \"NewValue\"></param>\r\n /// <param name=\"isNull\"></param>\r\n /// <param name=\"checkNullValue\"></param>\r\n /// <returns></returns>\r\n isDifferentValue(newValue: any, isNull: boolean, checkNullValue: boolean): boolean {\r\n\r\n let ctrlCurrValue: any = this.Value;\r\n let valChanged: boolean = false;\r\n\r\n if (newValue instanceof Date) {\r\n if (this.DataType === StorageAttribute.DATE)\r\n valChanged = !this.CompareDate(newValue, ctrlCurrValue);\r\n else\r\n valChanged = !this.CompareTime(newValue, ctrlCurrValue);\r\n }\r\n\r\n if (typeof newValue === 'boolean' || typeof newValue === 'number') {\r\n if (this.isSelectionCtrl() && typeof ctrlCurrValue === 'string') {\r\n let newValuestr = newValue.toString();\r\n valChanged = (newValuestr !== ctrlCurrValue);\r\n }\r\n else {\r\n valChanged = (newValue !== ctrlCurrValue);\r\n }\r\n }\r\n else {\r\n if (this.isSelectionCtrl() && typeof ctrlCurrValue === 'string' && Array.isArray(newValue)) {\r\n let newValueStr = newValue.join(',').toString();\r\n valChanged = !(StrUtil.rtrim(newValueStr) === StrUtil.rtrim(ctrlCurrValue));\r\n }\r\n else {\r\n let ctrlCurrIsNull: boolean = this.IsNull;\r\n valChanged = !(StrUtil.rtrim(newValue) === StrUtil.rtrim(ctrlCurrValue));\r\n if (!valChanged && checkNullValue) {\r\n valChanged = (isNull !== ctrlCurrIsNull);\r\n }\r\n }\r\n }\r\n return valChanged;\r\n }\r\n\r\n CompareDate(d1: Date, d2: Date): boolean {\r\n let retval: boolean;\r\n if (d1 === null && d2 === null)\r\n retval = true;\r\n else if ((d1 === null && d2 !== null) || (d1 !== null && d2 === null))\r\n retval = false;\r\n else if (d1.getFullYear() === d2.getFullYear()\r\n && d1.getDate() === d2.getDate()\r\n && d1.getMonth() === d2.getMonth())\r\n retval = true;\r\n return retval;\r\n }\r\n\r\n CompareTime(d1: Date, d2: Date): boolean {\r\n let retval: boolean;\r\n if (d1 === null && d2 === null)\r\n retval = true;\r\n else if ((d1 === null && d2 !== null) || (d1 !== null && d2 === null))\r\n retval = false;\r\n else if (d1.getHours() === d2.getHours()\r\n && d1.getMinutes() === d2.getMinutes()\r\n && d1.getSeconds() === d2.getSeconds())\r\n retval = true;\r\n return retval;\r\n\r\n }\r\n\r\n /// <summary>\r\n /// returns true if column's sortable property is set to true\r\n /// </summary>\r\n /// <returns></returns>\r\n isColumnSortable(): boolean {\r\n let isSortable: boolean = false;\r\n\r\n if (this.Type === MgControlType.CTRL_TYPE_COLUMN && this._propTab.propExists(PropInterface.PROP_TYPE_SORT_COLUMN)) {\r\n isSortable = this.GetComputedProperty(PropInterface.PROP_TYPE_SORT_COLUMN).GetComputedValueBoolean();\r\n }\r\n\r\n return isSortable;\r\n }\r\n\r\n /// <summary>\r\n /// returns first child MgControl of column i.e. field attached to column\r\n /// </summary>\r\n /// <returns></returns>\r\n\r\n getColumnChildControl(): MgControlBase {\r\n if (this.Type !== MgControlType.CTRL_TYPE_COLUMN)\r\n return null;\r\n\r\n let linkedControls: List<MgControlBase> = this._parentTable.getLinkedControls();\r\n\r\n return linkedControls.find((control: MgControlBase) => (control.getLayer() === this.getLayer() && control.Type !== MgControlType.CTRL_TYPE_COLUMN && !control.IsTableHeaderChild));\r\n }\r\n\r\n /// <summary>\r\n /// Get control name for handler search propose.\r\n /// The control itself, may not have a name for handler search (like column control, in which we need to use\r\n /// the child control name for handlers search)\r\n /// </summary>\r\n /// <returns></returns>\r\n getControlNameForHandlerSearch(): string {\r\n let childControl: MgControlBase = this.getColumnChildControl();\r\n if (childControl !== null) {\r\n return childControl.Name;\r\n }\r\n else\r\n return this.Name;\r\n }\r\n\r\n /// <summary>\r\n /// add a control to the list of linked controls\r\n /// </summary>\r\n /// <returns></returns>\r\n linkCtrl(ctrl: MgControlBase): void {\r\n this._linkedControls.push(ctrl);\r\n }\r\n\r\n /// <summary>\r\n /// removes the reference to this control from the field\r\n /// </summary>\r\n removeRefFromField(): void {\r\n if (this._field !== null) {\r\n this._field.RemoveControl(this);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// returns the dit index of the control\r\n /// </summary>\r\n getDitIdx(): number {\r\n return this._ditIdx;\r\n }\r\n\r\n /// <summary>\r\n /// sets dcValId\r\n /// </summary>\r\n /// <param name=\"dcValId\"></param>\r\n setDcValId(dcValId: number): void {\r\n this._dcValId = dcValId;\r\n }\r\n\r\n /// <summary>\r\n /// if the picture define as hebrew then set the lang to hebrew, otherwise restore the lang\r\n /// The same we doing for online :edt_edit.cpp : SetKeyboardLanguage()\r\n /// </summary>\r\n /// <param name = \"restoreLang\"></param>\r\n SetKeyboardLanguage(): void {\r\n Commands.beginInvoke();\r\n }\r\n\r\n /// <summary>\r\n /// Initialize control properties for derived class\r\n /// </summary>\r\n Init(): void {\r\n }\r\n\r\n /// <summary>(internal)\r\n /// checks if control is parkable\r\n /// </summary>\r\n /// <returns></returns>\r\n async IsParkable(): Promise<boolean> {\r\n return await this.isParkable(true);\r\n }\r\n\r\n /// <summary>(internal)\r\n /// checks if control has expression or Parent task field\r\n /// </summary>\r\n /// <returns></returns>\r\n HasExpOrParentTaskField(): boolean {\r\n let task: GuiTaskBase = this.getForm().getTask();\r\n return (this.getField() === null || this.getField().getTask() !== task);\r\n }\r\n\r\n /// <summary>\r\n /// returns true if the control is parkable\r\n /// </summary>\r\n /// <param name = \"checkEnabledAndVisible\">check enabled and visible properties too</param>\r\n async isParkable(checkEnabledAndVisible: boolean): Promise<boolean> {\r\n\r\n let result: boolean;\r\n result = !super.isTableControl() && !super.isColumnControl();\r\n\r\n let task: GuiTaskBase = this.getForm().getTask();\r\n // non interactive -> not parkable.\r\n if (result) {\r\n result = task.IsInteractive;\r\n }\r\n\r\n if (result && task.DataView.isEmptyDataview() && this._field !== null && this._field.PartOfDataview) {\r\n result = false;\r\n }\r\n if (result) {\r\n // QCR #441177. When we check the subform park ability, we need to check also it's visibility and enable properties.\r\n if (!super.isSubform()) {\r\n result = ((this._field !== null && this._field.getTask() === task) || this.isButton());\r\n }\r\n if (result && checkEnabledAndVisible) {\r\n result = (this.isEnabled() && this.isVisible());\r\n }\r\n\r\n if ((result && this._parentTable !== null) && checkEnabledAndVisible) {\r\n result = (this._parentTable.GetComputedBooleanProperty(PropInterface.PROP_TYPE_ENABLED, true) && this._parentTable.GetComputedBooleanProperty(PropInterface.PROP_TYPE_VISIBLE, true));\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /// <summary>\r\n /// Raise ACT_CTRL_HIT on left mouse click if it meets following condition.\r\n /// </summary>\r\n /// <returns></returns>\r\n RaiseControlHitOnLeftClickOfMouseDown(): boolean {\r\n let raiseCtrlHit: boolean = false;\r\n if (!super.IsHyperTextButton() && !super.isRadio() && !super.isTabControl()) {\r\n raiseCtrlHit = true;\r\n }\r\n return raiseCtrlHit;\r\n }\r\n\r\n GetVarIndex(): number {\r\n return 0;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Returns true if the 'Control Hit' event should be raised on mouse down.\r\n /// The method was extracted from processMouseDown, since we might have different\r\n /// behaviors for different types of tree controls.\r\n /// </summary>\r\n /// <param name=\"leftClickWasPressed\"></param>\r\n /// <returns></returns>\r\n RaiseControlHitOnMouseDown(leftClickWasPressed: boolean): boolean {\r\n let raiseCtrlHit: boolean = false;\r\n if (leftClickWasPressed) {\r\n if (this.RaiseControlHitOnLeftClickOfMouseDown()) {\r\n raiseCtrlHit = true;\r\n }\r\n }\r\n return raiseCtrlHit;\r\n }\r\n\r\n /// <summary>\r\n /// Handle MG_ACT_HIT on the subform control\r\n /// </summary>\r\n OnSubformClick(): void {\r\n Manager.EventsManager.addGuiTriggeredEventWithTaskAndCode(this.getForm().getTask(), InternalInterface.MG_ACT_HIT);\r\n }\r\n\r\n /// <summary>\r\n /// returns MgForm of the subform control task\r\n /// </summary>\r\n GetSubformMgForm(): MgFormBase {\r\n return null;\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n /// <param name=\"id\"></param>\r\n /// <returns></returns>\r\n PropertyExists(id: number): boolean {\r\n return this._propTab.propExists(id);\r\n }\r\n\r\n toString(): string {\r\n return \"{\" + this.constructor.name + \": \" + MgControlType[this.Type] + \"}\";\r\n }\r\n\r\n /// <summary> Checks if new date is 0</summary>\r\n /// <param name=\"value\"> The value to check</param>\r\n isDateZero(val: Date) {\r\n let zeroDate: boolean = false;\r\n if (val instanceof Date) {\r\n if (val.getMonth() === 0 && val.getFullYear() === 0 && val.getDay() === 0)\r\n zeroDate = true;\r\n }\r\n return zeroDate;\r\n }\r\n\r\n IsDefaultRouterOutlet(): boolean {\r\n return (this.Type === MgControlType.CTRL_TYPE_SUBFORM && this.GetComputedBooleanProperty_0(PropInterface.PROP_TYPE_DEFAULT_OUTLET, false));\r\n }\r\n\r\n IsRouterOutlet(): boolean {\r\n return (this.Type === MgControlType.CTRL_TYPE_SUBFORM && this.GetComputedBooleanProperty_0(PropInterface.PROP_TYPE_IS_ROUTER_OUTLET, false));\r\n }\r\n\r\n async ZoomButtonInitialization(): Promise<void> {\r\n if (this.isTextControl() && this.checkIfExistProp(PropInterface.PROP_TYPE_CONNECTED_ZOOM_CONTROL)) {\r\n let connectedButton: MgControlBase = this.Form.CtrlTab.GetControlByIsn((await (await this.getProp(PropInterface.PROP_TYPE_CONNECTED_ZOOM_CONTROL)).getValueInt()));\r\n\r\n if (connectedButton) {\r\n // image button - calculate according to image\r\n let imageFileName: string = null;\r\n if (connectedButton.IsImageButton() && connectedButton.PropertyExists(PropInterface.PROP_TYPE_IMAGE_FILENAME)) {\r\n imageFileName = await (await connectedButton.getProp(PropInterface.PROP_TYPE_IMAGE_FILENAME)).getValue();\r\n if (!Misc.IsWebUrl(imageFileName))\r\n imageFileName = Events.GetAssetsURL() + \"/images/\" + imageFileName;\r\n Commands.addOperationWithLine(CommandType.SET_STYLE, this, 0, MagicProperties.ImageFile, imageFileName);\r\n\r\n }\r\n\r\n // store the edit control on the button\r\n this.ConnectedControl = connectedButton;\r\n connectedButton.ConnectedControl = this;\r\n }\r\n }\r\n }\r\n}\r\n","import { MgControlType, XMLConstants, XmlParser } from '@magic-xpa/utils';\r\nimport { MgFormBase } from './MgFormBase';\r\nimport { MgControlBase } from './MgControlBase';\r\nimport { List, NString } from '@magic-xpa/mscorelib';\r\n\r\nexport class ControlTable {\r\n private _controls: List<MgControlBase> = null;\r\n private _mgForm: MgFormBase = null;\r\n\r\n /// <summary>CTOR</summary>\r\n constructor() {\r\n this._controls = new List();\r\n }\r\n\r\n /// <summary>parse input string and fill inner data</summary>\r\n fillData(mgForm: MgFormBase, parser: XmlParser): void {\r\n\r\n this._mgForm = mgForm;\r\n while (this.initInnerObjects(parser.getNextTag(), parser)) {\r\n }\r\n }\r\n\r\n /// <summary>To allocate and fill inner objects of the class</summary>\r\n /// <param name = \"foundTagName\">name of tag, of object, which need be allocated</param>\r\n /// <returns> boolean if inner tags finished</returns>\r\n private initInnerObjects(foundTagName: string, parser: XmlParser): boolean {\r\n if (foundTagName === null)\r\n return false;\r\n\r\n if (foundTagName === XMLConstants.MG_TAG_CONTROL) {\r\n let control: MgControlBase = this._mgForm.ConstructMgControl();\r\n control.fillData(this._mgForm, this._controls.length, parser);\r\n this._controls.push(control);\r\n }\r\n else if (foundTagName === (\"/\" + XMLConstants.MG_TAG_CONTROL)) {\r\n parser.setCurrIndex2EndOfTag();\r\n return false;\r\n }\r\n else\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /// <summary>get the size of the table</summary>\r\n /// <returns> the size of the table</returns>\r\n getSize(): number {\r\n return this._controls.length;\r\n }\r\n\r\n getCtrl(idx: number): MgControlBase;\r\n getCtrl(ctrlName: string): MgControlBase;\r\n getCtrl(idxOrCtrlName: any): MgControlBase {\r\n if (arguments.length === 1 && (idxOrCtrlName === null || typeof idxOrCtrlName === \"undefined\" || idxOrCtrlName.constructor === Number)) {\r\n return this.getCtrl_0(idxOrCtrlName);\r\n }\r\n return this.getCtrl_1(idxOrCtrlName);\r\n }\r\n\r\n /// <summary>get control by its index</summary>\r\n /// <param name = \"idx\">is the index of the control in the table</param>\r\n /// <returns> the requested control object</returns>\r\n private getCtrl_0(idx: number): MgControlBase {\r\n if (idx < this.getSize())\r\n return this._controls.get_Item(idx);\r\n\r\n return null;\r\n }\r\n\r\n\r\n /// <summary>get control by its name</summary>\r\n /// <param name = \"ctrlName\">is the requested controls name</param>\r\n /// <returns> the requested control object</returns>\r\n private getCtrl_1(ctrlName: string): MgControlBase {\r\n if (!NString.IsNullOrEmpty(ctrlName)) {\r\n\r\n return this._controls.find(ctrl => {\r\n return (NString.Equals(ctrlName, ctrl.getName(), true) ||\r\n NString.Equals(ctrlName, ctrl.Name, true));\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /// <summary>get control (which is not the frame form) by its name</summary>\r\n /// <param name = \"ctrlName\">is the requested controls name</param>\r\n /// <param name=\"ctrlType\"></param>\r\n /// <returns> the requested control object</returns>\r\n getCtrlByName(ctrlName: string, ctrlType: MgControlType): MgControlBase {\r\n if (!NString.IsNullOrEmpty(ctrlName)) {\r\n return this._controls.find(ctrl => {\r\n return ((ctrl.Type === ctrlType) && NString.Equals(ctrlName, ctrl.getName(), true) ||\r\n NString.Equals(ctrlName, ctrl.Name, true))\r\n });\r\n }\r\n return null;\r\n }\r\n\r\n /// <summary>\r\n /// get a control by its ISN\r\n /// </summary>\r\n /// <param name=\"isn\"></param>\r\n /// <returns></returns>\r\n GetControlByIsn(isn: number): MgControlBase {\r\n let ctrlByIsn: MgControlBase = null;\r\n ctrlByIsn = this._controls.find(ctrl => {\r\n return (ctrl.ControlIsn === isn)\r\n });\r\n\r\n return ctrlByIsn;\r\n }\r\n\r\n /// <summary>\r\n /// get a control mathching the predicate\r\n /// </summary>\r\n /// <param name=\"predicate\"></param>\r\n /// <returns></returns>\r\n GetControl(predicate: (value: MgControlBase) => boolean): MgControlBase {\r\n return this._controls.find(predicate);\r\n }\r\n\r\n public filter(callackFuntion: (item, index, array) => boolean): any {\r\n return this._controls.filter(callackFuntion);\r\n\r\n }\r\n\r\n /// <summary>returns true if this table contains the given control</summary>\r\n /// <param name = \"ctrl\">the control to look for</param>\r\n contains(ctrl: MgControlBase): boolean {\r\n let contains: boolean = false;\r\n if (ctrl !== null)\r\n contains = this._controls.Contains(ctrl);\r\n return contains;\r\n }\r\n\r\n /// <summary>add a control to the table</summary>\r\n /// <param name = \"ctrl\">is the control to be added</param>\r\n addControl(ctrl: MgControlBase): void {\r\n this._controls.push(ctrl);\r\n }\r\n\r\n /// <summary>set a control to a cell in the table</summary>\r\n /// <param name = \"ctrl\">is the control to be added</param>\r\n /// <param name = \"index\">where to set the control</param>\r\n setControlAt(ctrl: MgControlBase, index: number): void {\r\n if (this._controls.length <= index)\r\n this._controls.SetSize(index + 1);\r\n this._controls.set_Item(index, ctrl);\r\n }\r\n\r\n /// <summary>replace a control in the control table with null</summary>\r\n /// <param name = \"index\">of control to be deleted</param>\r\n deleteControlAt(index: number): void {\r\n this._controls.set_Item(index, null);\r\n }\r\n\r\n Remove(ctrl: MgControlBase): boolean;\r\n Remove(idx: number);\r\n Remove(ctrlOrIdx: any): boolean {\r\n if (arguments.length === 1 && (ctrlOrIdx === null || ctrlOrIdx instanceof MgControlBase)) {\r\n return this.Remove_0(ctrlOrIdx);\r\n }\r\n this.Remove_1(ctrlOrIdx);\r\n }\r\n\r\n /// <summary>removes a control from the table and returns true on success</summary>\r\n /// <param name = \"ctrl\">the control to remove</param>\r\n private Remove_0(ctrl: MgControlBase): boolean {\r\n this._controls.Remove(ctrl);\r\n return this._controls.Contains(ctrl);\r\n }\r\n\r\n /// <summary>removes a control from the table by index.</summary>\r\n /// <param name = \"idx\">the idx of the control to be removed</param>\r\n private Remove_1(idx: number): void {\r\n this._controls.RemoveAt(idx);\r\n }\r\n\r\n /// <param name = \"inCtrl\">the control whose index we need</param>\r\n /// <param name=\"includeSubs\"></param>\r\n /// <returns> idx of a control in the table, excluding subforms control</returns>\r\n getControlIdx(inCtrl: MgControlBase, includeSubs: boolean): number {\r\n let counter: number = 0;\r\n for (let i: number = 0; i < this._controls.length; i++) {\r\n let ctrl: MgControlBase = this._controls.get_Item(i);\r\n if (inCtrl === ctrl)\r\n return counter;\r\n else if (includeSubs || !ctrl.isSubform())\r\n counter++;\r\n }\r\n return -1;\r\n }\r\n\r\n\r\n}\r\n","import {PropParentInterface} from '../../gui/PropParentInterface';\r\nimport {\r\n Constants,\r\n Logger_LogLevels,\r\n MgControlType,\r\n StorageAttribute,\r\n StrUtil,\r\n TabbingOrderType,\r\n WindowType,\r\n XMLConstants,\r\n XmlParser\r\n} from '@magic-xpa/utils';\r\nimport {Debug, IHashCode, Int32, List, NString, RefParam, Stack, StringBuilder} from '@magic-xpa/mscorelib';\r\nimport {MgControlBase} from './MgControlBase';\r\nimport {PropTable} from './PropTable';\r\nimport {GuiTaskBase} from '../tasks/GuiTaskBase';\r\nimport {ControlTable} from './ControlTable';\r\nimport {Manager} from '../../Manager';\r\nimport {Events} from '../../Events';\r\nimport {Property} from './Property';\r\nimport {CommandType, HtmlProperties} from '../../GuiEnums';\r\nimport {NUM_TYPE} from '../data/NUM_TYPE';\r\nimport {Commands} from '../../Commands';\r\nimport {GuiFieldBase} from '../data/GuiFieldBase';\r\nimport {PropInterface} from './PropInterface';\r\nimport {GuiConstants} from '../../GuiConstants';\r\nimport {GuiFormPropertyAdapter} from './GuiFormPropertyAdapter';\r\nimport {GuiControlPropertyAdapter} from './GuiControlPropertyAdapter';\r\n\r\n\r\nconst delimiter: string = ', ';\r\n\r\n/// <summary>\r\n/// data for <form>...</form>\r\n/// </summary>\r\nexport abstract class MgFormBase extends GuiFormPropertyAdapter implements PropParentInterface, IHashCode {\r\n InInitForm: boolean = false;\r\n\r\n CtrlTab: ControlTable = null;\r\n // until the form is refreshed in the first time\r\n FormRefreshed: boolean = false;\r\n RefreshRepeatableAllowed: boolean = false;\r\n Rows: List<Row> = null;\r\n ModalFormsCount: number = 0;\r\n ErrorOccured: boolean = false;\r\n FormIsn: number = 0;\r\n Name: string = null;\r\n Opened: boolean = false;\r\n isLegalForm: boolean = false;\r\n PBImagesNumber: number = 0;\r\n ignoreFirstRefreshTable: boolean = false;\r\n /// </summary>\r\n ParentForm: MgFormBase = null;\r\n /// </summary>\r\n protected _destTblRow: number = Int32.MinValue;\r\n protected _firstTableTabOrder: number = 0; // tab order of first child of table\r\n protected _inRefreshDisp: boolean = false;\r\n protected _inRestore: boolean = false;\r\n protected _lastRowSent: number = -1; // last row sent ro gui thread\r\n protected _prevGuiTopIndex: number = -1; // For paginated table it's GuiTopIndex else it's dvTopIndex\r\n protected _propTab: PropTable = null;\r\n protected _rowsInPage: number = 1;\r\n protected _maxRowsInPaginatedTable: number = 0; // max no of rows in paginated table\r\n protected _subFormCtrl: MgControlBase = null;\r\n protected _tableMgControl: MgControlBase = null;\r\n protected _tableItemsCount: number = 0; // number of rows in the table\r\n protected _tableRefreshed: boolean = false;\r\n protected _task: GuiTaskBase = null; // the task to which the current form belongs\r\n protected _topIndexUpdated: boolean = false; // true if a top index was updated\r\n\r\n // Form representing the internal help window.Here the internal form object is kept on the form object itself.\r\n protected _transferingData: boolean = false; // rows are requested for a GUI thread\r\n // prevents refresh of DisplayList for the corresponding controls and currRecCompute(RC)\r\n private _allowedSubformRecompute: boolean = true;\r\n private _concreteWindowType: WindowType;\r\n private _containerCtrl: MgControlBase = null;\r\n private _firstRefreshOfProps: boolean = true;\r\n\r\n private _prevSelIndex: number = -1;\r\n private _shouldCreateToolbar: boolean = false; // if to create toolbar\r\n private _tableChildren: List<MgControlBase> = null; // Can't use List<T>\r\n private _tableColumns: List<MgControlBase> = null;\r\n protected _userStateId: string = '';\r\n\r\n private displayLine: number = 0;\r\n\r\n /// </summary>\r\n constructor() {\r\n super();\r\n this._propTab = new PropTable(this);\r\n this.CtrlTab = new ControlTable();\r\n this.Rows = new List();\r\n this._concreteWindowType = <WindowType>0;\r\n this.ParentForm = null;\r\n }\r\n\r\n get DisplayLine(): number {\r\n return this.displayLine;\r\n }\r\n\r\n set DisplayLine(value: number) {\r\n this.displayLine = value;\r\n }\r\n\r\n get UniqueName(): string {\r\n if (this.GetComputedProperty(PropInterface.PROP_TYPE_FORM_NAME) != null)\r\n return this.GetComputedProperty(PropInterface.PROP_TYPE_FORM_NAME).GetComputedValue();\r\n else\r\n return null;\r\n }\r\n\r\n get TaskTag(): string {\r\n return this.getTask().getTaskTag();\r\n }\r\n\r\n\r\n get TableChildren(): List<MgControlBase> {\r\n if (this._tableChildren === null)\r\n this.buildTableChildren();\r\n return this._tableChildren;\r\n }\r\n\r\n set TableChildren(value: List<MgControlBase>) {\r\n this._tableChildren = value;\r\n }\r\n\r\n get ShouldCreateToolbar(): boolean {\r\n return this._shouldCreateToolbar;\r\n }\r\n\r\n get AllowedSubformRecompute(): boolean {\r\n return this._allowedSubformRecompute;\r\n }\r\n\r\n set AllowedSubformRecompute(value: boolean) {\r\n this._allowedSubformRecompute = value;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Returns true for a FitToMdi window.\r\n\r\n get ConcreteWindowType(): WindowType {\r\n if (this._concreteWindowType === <WindowType>0) {\r\n let windowType: WindowType = <WindowType>this.GetComputedProperty(PropInterface.PROP_TYPE_WINDOW_TYPE).GetComputedValueInteger();\r\n if (this.ParentForm === null || windowType !== WindowType.Overlay)\r\n windowType = WindowType.Default;\r\n\r\n this._concreteWindowType = windowType;\r\n }\r\n return this._concreteWindowType;\r\n }\r\n\r\n /// <summary>\r\n /// Returns true for Floating, Tool or Modal.\r\n\r\n set ConcreteWindowType(value: WindowType) {\r\n this._concreteWindowType = value;\r\n }\r\n\r\n /// <summary>\r\n /// This method enables a specific action on all the menu objects of the form and its children's\r\n /// menus.\r\n /// </summary>\r\n /// <param name = \"action\">action whose state has changed</param>\r\n\r\n /// <returns></returns>\r\n static ShouldPutActOnFormClose(): boolean {\r\n return false;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// get a property of the form that already was computed by its Id\r\n /// This method does not create a property if it isn't exist.\r\n /// May we need to create a property and use its default value.\r\n /// In Phase 2 in RefreshProperties method we'll create and compute properties,\r\n /// perhaps we need create all properties not only those that are different from default.\r\n /// </summary>\r\n\r\n /// <returns></returns>\r\n protected static ShouldBehaveAsModal(): boolean {\r\n return false;\r\n }\r\n\r\n /// <summary>\r\n /// checks if property has expression\r\n /// </summary>\r\n /// <param name=\"propId\"></param>\r\n\r\n /// <returns></returns>\r\n private static ConvertArrayListToString(items: List<string>, isItemNumType: boolean): string {\r\n let from: string[] = ['\\\\', '-', ','];\r\n let to: string[] = ['\\\\\\\\', '\\\\-', '\\\\,'];\r\n let stringBuilder: StringBuilder = new StringBuilder();\r\n let nUM_TYPE: NUM_TYPE;\r\n\r\n for (let index: number = 0; index < items.length; index = index + 1) {\r\n if (isItemNumType) {\r\n nUM_TYPE = new NUM_TYPE(<string>items.get_Item(index));\r\n items.set_Item(index, nUM_TYPE.to_double().toString());\r\n }\r\n\r\n stringBuilder.Append(StrUtil.searchAndReplace(<string>items.get_Item(index), from, to));\r\n\r\n if (index < items.length - 1)\r\n stringBuilder.Append(delimiter);\r\n }\r\n\r\n return stringBuilder.ToString();\r\n }\r\n\r\n /// <summary>\r\n /// parse the form structure\r\n /// </summary>\r\n\r\n /// <param name = \"increase\"></param>\r\n UpdateModalFormsCount(mgFormBase: MgFormBase, increase: boolean): void {\r\n\r\n if (increase)\r\n this.ModalFormsCount += 1;\r\n else\r\n this.ModalFormsCount -= 1;\r\n\r\n Events.SetModal(mgFormBase, increase);\r\n }\r\n\r\n /// <summary>\r\n /// To allocate and fill inner objects of the class\r\n /// </summary>\r\n /// <param name=\"foundTagName\"></param>\r\n\r\n /// <returns></returns>\r\n async EvaluateExpression(expId: number, resType: StorageAttribute, length: number, contentTypeUnicode: boolean,\r\n resCellType: StorageAttribute, alwaysEvaluate: boolean, wasEvaluated: RefParam<boolean>): Promise<string> {\r\n return await this._task.EvaluateExpression(expId, resType, length, contentTypeUnicode, resCellType, true, wasEvaluated);\r\n }\r\n\r\n GetExpressionStorage(expId: number): StorageAttribute {\r\n return this._task.GetExpressionStorage(expId);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// initialization.\r\n\r\n /// <returns></returns>\r\n checkIfExistProp(propId: number): boolean {\r\n let exist: boolean = false;\r\n if (this._propTab !== null) {\r\n let propById: Property = this._propTab.getPropById(propId);\r\n exist = (propById !== null);\r\n }\r\n return exist;\r\n }\r\n\r\n /// <summary>\r\n /// Fill name member of the class\r\n /// </summary>\r\n\r\n /// <param name = \"propId\">the Id of the property</param>\r\n getProp(propId: number): Property {\r\n let prop: Property = null;\r\n\r\n if (this._propTab !== null) {\r\n prop = this._propTab.getPropById(propId);\r\n\r\n // if the property doesn't exist then create a new property and give it the default value\r\n // in addition add this property to the properties table\r\n if (prop === null) {\r\n prop = Property.getDefaultProp(propId, GuiConstants.PARENT_TYPE_FORM, this);\r\n if (prop !== null)\r\n this._propTab.addProp(prop);\r\n }\r\n }\r\n return prop;\r\n }\r\n\r\n /// <summary>\r\n /// for each control build the list of all the controls that are linked to it\r\n\r\n /// <param name = \"propId\">the Id of the property</param>\r\n GetComputedProperty(propId: number): Property {\r\n let prop: Property = null;\r\n\r\n if (this._propTab !== null)\r\n prop = this._propTab.getPropById(propId);\r\n\r\n return prop;\r\n }\r\n\r\n\r\n /// <returns></returns>\r\n PropertyHasExpression(propId: number): boolean {\r\n let prop: Property = this._propTab.getPropById(propId);\r\n return prop !== null && prop.isExpression();\r\n }\r\n\r\n\r\n /// <summary>\r\n\r\n /// <returns></returns>\r\n getCompIdx(): number {\r\n return (this.getTask() === null) ? 0 : this.getTask().getCompIdx();\r\n }\r\n\r\n /// <summary>\r\n /// arrange zorder for controls. recursive function.\r\n /// </summary>\r\n\r\n /// <returns></returns>\r\n IsFirstRefreshOfProps(): boolean {\r\n return this._firstRefreshOfProps;\r\n }\r\n\r\n /// <summary>\r\n /// build list of all columns controls\r\n\r\n /// </summary>\r\n getForm(): MgFormBase {\r\n return this;\r\n }\r\n\r\n /// <summary>\r\n /// Checks if an internal Fit to MDI form needs to be created to hold the Main Program controls\r\n /// </summary>\r\n\r\n /// <param name = \"taskRef\">reference to the ownerTask of this form</param>\r\n fillData(taskRef: GuiTaskBase): void {\r\n let parser: XmlParser = Manager.GetCurrentRuntimeContext().Parser;\r\n\r\n if (this._task === null && taskRef !== null)\r\n this._task = taskRef;\r\n\r\n while (this.initInnerObjects(parser.getNextTag())) {\r\n }\r\n\r\n }\r\n\r\n\r\n /// </summary>\r\n async init(): Promise<void> {\r\n for (let i: number = 0; i < this.CtrlTab.getSize(); i = i + 1) {\r\n let ctrl: MgControlBase = this.CtrlTab.getCtrl(i);\r\n // initializes the subform controls\r\n ctrl.Init();\r\n }\r\n\r\n // build lists of linked controls on their parents\r\n this.buildLinkedControlsLists();\r\n\r\n // build list of columns and non columns\r\n this.buildTableColumnsList();\r\n await this.createForm();\r\n\r\n this._task.setKeyboardMappingState(Constants.ACT_STT_TBL_SCREEN_MODE, this.isScreenMode());\r\n this._task.setKeyboardMappingState(Constants.ACT_STT_TBL_LEFT_TO_RIGHT, !this.GetComputedProperty(PropInterface.PROP_TYPE_HEBREW).GetComputedValueBoolean());\r\n }\r\n\r\n /// <summary>\r\n /// order the splitter container children. The child that is docked to fill is added first, then\r\n /// the splitter control and finally the child that is docked either to the top or to the left\r\n\r\n /// <returns> end Index of the<form ...> subtag</returns>\r\n fillName(formTag: string): void {\r\n let parser: XmlParser = Manager.GetCurrentRuntimeContext().Parser;\r\n let endContext: number = parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex());\r\n\r\n if (endContext !== -1 && endContext < parser.getXMLdata().length) {\r\n // last position of its tag\r\n let tag: string = parser.getXMLsubstring(endContext);\r\n parser.add2CurrIndex(tag.indexOf(formTag) + formTag.length);\r\n\r\n let tokensVector: List<string> = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);\r\n\r\n let attribute: string;\r\n let valueStr: string;\r\n\r\n for (let i: number = 0; i < tokensVector.length; i = i + 2) {\r\n attribute = tokensVector.get_Item(i);\r\n valueStr = tokensVector.get_Item(i + 1);\r\n\r\n switch (attribute) {\r\n case XMLConstants.MG_ATTR_NAME:\r\n this.Name = XmlParser.unescape(valueStr).toString();\r\n if (Events.ShouldLog(Logger_LogLevels.Gui))\r\n Events.WriteGuiToLog(NString.Format('Parsing form \"{0}\"', this.Name));\r\n break;\r\n case XMLConstants.MG_ATTR_IS_FRAMESET:\r\n break;\r\n case XMLConstants.MG_ATTR_IS_LIGAL_RC_FORM:\r\n this.isLegalForm = XmlParser.getBoolean(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_PB_IMAGES_NUMBER:\r\n this.PBImagesNumber = XmlParser.getInt(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_FORM_ISN:\r\n this.FormIsn = XmlParser.getInt(valueStr);\r\n break;\r\n case XMLConstants.MG_ATTR_USERSTATE_ID:\r\n this._userStateId = XmlParser.unescape(valueStr).toString();\r\n break;\r\n default:\r\n Events.WriteExceptionToLog(NString.Format('Unhandled attribute \\'{0}\\'.', attribute));\r\n break;\r\n }\r\n }\r\n parser.setCurrIndex(endContext + 1); // to delete \">\" too\r\n return;\r\n }\r\n Events.WriteExceptionToLog('in Form.FillName() out of bounds');\r\n }\r\n\r\n\r\n abstract buildFormName(): string;\r\n\r\n /// <summary>\r\n /// returns true for mdi child and fit to mdi\r\n /// </summary>\r\n /// <param name=\"windowType\"></param>\r\n\r\n /// </summary>\r\n async createForm(): Promise<void> {\r\n let inputControls = this.GetListOfInputControls();\r\n let formName: string = this.buildFormName();\r\n\r\n if (!this.isSubForm()) {\r\n //Only for overlay type use new method\r\n if (this.isDialog())\r\n await Commands.openOverlayForm(this, formName, '0', this.getTask().getTaskTag(), inputControls, this.isDialog());\r\n else\r\n Commands.addOpenForm(this, formName, '0', this.getTask().getTaskTag(), inputControls, this.isDialog());\r\n }else {\r\n Commands.addOpensubform(CommandType.CREATE_SUB_FORM, this.getSubFormCtrl(), this.getTask().getTaskTag(), (<MgControlBase>this.getSubFormCtrl()).getName(),\r\n formName, inputControls, this.getTask().RouterPath, this.getTask().GetRouterParams(), this.getTask().InDefaultRouterOutlet);\r\n }\r\n\r\n // default create one row in table control. DON'T set items count during form open.\r\n // firstTableRefresh() will create the actual rows, and refresh the table.\r\n if (this.HasTable())\r\n this.InitTableControl();\r\n\r\n Commands.beginInvoke();\r\n }\r\n\r\n /// <summary>\r\n /// add the call js command and get the return value\r\n /// </summary>\r\n /// <returns></returns>\r\n async CallJS(methodName: string, args: Array<any>): Promise<string> {\r\n return Commands.addCallJS(this, this.UniqueName, methodName, args);\r\n }\r\n\r\n /// <summary>\r\n /// return true if form has automatic tabbing order\r\n /// </summary>\r\n /// <returns></returns>\r\n isAutomaticTabbingOrder(): boolean {\r\n return this.GetComputedProperty(PropInterface.PROP_TYPE_TABBING_ORDER).GetComputedValueInteger() === TabbingOrderType.Automatically;\r\n }\r\n\r\n /// <summary>\r\n /// true if we can refresh repeatable controls\r\n /// QCR #434649, we prevent painting table's control untill shell is opened and we know how many rows to paint\r\n /// </summary>\r\n /// <returns></returns>\r\n isRefreshRepeatableAllowed(): boolean {\r\n return this.RefreshRepeatableAllowed;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if the form is screen mode\r\n /// </summary>\r\n isScreenMode(): boolean {\r\n return !this.isLineMode();\r\n }\r\n\r\n /// <summary>\r\n /// returns true if the form is line mode\r\n /// if we have a tree or a table on the form\r\n /// </summary>\r\n isLineMode(): boolean {\r\n return this.getMainControl() !== null;\r\n }\r\n\r\n /// <summary>\r\n /// return true if task has table or tree\r\n /// </summary>\r\n /// <returns></returns>\r\n hasTable(): boolean {\r\n return this._tableMgControl !== null;\r\n }\r\n\r\n /// <summary>\r\n /// return true if form should be opened as modal window\r\n /// </summary>\r\n /// <returns></returns>\r\n isDialog(): boolean {\r\n let isDialog: boolean = false;\r\n let windowType: WindowType = this.ConcreteWindowType;\r\n if (windowType === WindowType.Overlay)\r\n isDialog = true;\r\n else if (MgFormBase.ShouldBehaveAsModal())\r\n isDialog = true;\r\n return isDialog;\r\n }\r\n\r\n /// <summary>\r\n /// Should this form behave as Modal although its WindowType != Modal?\r\n /// </summary>\r\n\r\n /// <returns> boolean</returns>\r\n isSubForm(): boolean {\r\n return this._subFormCtrl !== null;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this form is subform\r\n /// </summary>\r\n\r\n /// <returns></returns>\r\n HasTable(): boolean {\r\n return this._tableMgControl !== null;\r\n }\r\n\r\n\r\n /// <returns></returns>\r\n getTopMostForm(): MgFormBase {\r\n let topMostForm: MgFormBase = this;\r\n\r\n // The form of the sub form control\r\n while (topMostForm.isSubForm() && topMostForm.ParentForm !== null)\r\n topMostForm = topMostForm.ParentForm;\r\n\r\n return topMostForm;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// return the topmost frame form for menu refresh.\r\n /// </summary>\r\n\r\n /// <returns></returns>\r\n getTopMostFrameForm(): MgFormBase {\r\n let topMostForm: MgFormBase = this;\r\n\r\n while (topMostForm !== null)\r\n topMostForm = ((topMostForm.ParentForm !== null) ? topMostForm.ParentForm : null);\r\n\r\n return topMostForm;\r\n }\r\n\r\n /// <summary>\r\n /// return the topmost mgform of the subform\r\n /// </summary>\r\n\r\n /// </returns>\r\n getSubFormCtrl(): GuiControlPropertyAdapter {\r\n return this._subFormCtrl;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// return object that is used for form mapping in control's map\r\n /// </summary>\r\n\r\n /// <param name = \"ctrlIdx\">the index of the requested control</param>\r\n getCtrl(ctrlIdx: number): MgControlBase {\r\n return this.CtrlTab.getCtrl(ctrlIdx);\r\n }\r\n\r\n /// <summary>Returns the requested control</summary>\r\n\r\n /// <returns> a reference to the control with the given name or null if does not exist</returns>\r\n GetCtrl(ctrlName: string): MgControlBase {\r\n return this.CtrlTab.getCtrl(ctrlName);\r\n }\r\n\r\n private defaultRouterOutlet: MgControlBase = null;\r\n\r\n get DefaultRouterOutlet(): MgControlBase {\r\n if (this.defaultRouterOutlet == null) {\r\n this.defaultRouterOutlet = this.CtrlTab.GetControl((x: MgControlBase) => {\r\n return x.IsDefaultRouterOutlet();\r\n });\r\n }\r\n\r\n return this.defaultRouterOutlet;\r\n }\r\n\r\n /// <summary>\r\n /// Return the control with a given name\r\n /// </summary>\r\n /// <param name = \"ctrlName\">the of the requested control</param>\r\n\r\n /// <returns></returns>\r\n async GetChoiceControlItemList(mgControl: MgControlBase): Promise<string> {\r\n Debug.Assert(mgControl.isChoiceControl());\r\n\r\n let items: List<string> = new List();\r\n let fld: GuiFieldBase = mgControl.getField();\r\n let storageAttribute: StorageAttribute = fld.getCellsType();\r\n\r\n if (storageAttribute !== StorageAttribute.DATE && storageAttribute !== StorageAttribute.TIME) {\r\n if (mgControl.isRadio()) {\r\n for (let i: number = 0; i < fld.GetRadioCtrls().length; i++) {\r\n let radioControl: MgControlBase = fld.GetRadioCtrls().get_Item(i);\r\n items.AddRange(await radioControl.GetItemsRange());\r\n }\r\n } else {\r\n items.AddRange(await mgControl.GetItemsRange());\r\n }\r\n return MgFormBase.ConvertArrayListToString(items, storageAttribute === StorageAttribute.NUMERIC);\r\n }\r\n\r\n return NString.Empty;\r\n }\r\n\r\n /// <summary>\r\n /// Get the items list of choice controls.\r\n /// </summary>\r\n /// <param name=\"mgControl\"></param>\r\n\r\n /// <returns></returns>\r\n async GetChoiceControlDisplayList(mgControl: MgControlBase): Promise<string> {\r\n Debug.Assert(mgControl.isChoiceControl());\r\n\r\n let items: List<string> = new List();\r\n let fld: GuiFieldBase = mgControl.getField();\r\n let storageAttribute: StorageAttribute = fld.getCellsType();\r\n\r\n if (storageAttribute !== StorageAttribute.DATE && storageAttribute !== StorageAttribute.TIME) {\r\n if (mgControl.isRadio()) {\r\n for (let i: number = 0; i < fld.GetRadioCtrls().length; i++) {\r\n let radioControl: MgControlBase = fld.GetRadioCtrls().get_Item(i);\r\n items.AddRange(await radioControl.GetDisplayRange());\r\n }\r\n } else {\r\n items.AddRange(await mgControl.GetDisplayRange());\r\n }\r\n return MgFormBase.ConvertArrayListToString(items, false);\r\n }\r\n\r\n return NString.Empty;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Returns the comma concatenated string from array list.\r\n /// </summary>\r\n /// <param name=\"items\"></param>\r\n /// <param name=\"isItemNumType\"></param>\r\n\r\n /// <returns></returns>\r\n getControlColumn(ctrl: MgControlBase): MgControlBase {\r\n let column: MgControlBase = null;\r\n\r\n if ((ctrl.IsRepeatable || ctrl.IsTableHeaderChild) && this._tableColumns !== null)\r\n column = this._tableColumns.get_Item(ctrl.getLayer() - 1);\r\n\r\n return column;\r\n }\r\n\r\n /// <returns> the container control</returns>\r\n getContainerCtrl(): MgControlBase {\r\n return this._containerCtrl;\r\n }\r\n\r\n /// <summary>\r\n /// return control's column\r\n /// </summary>\r\n /// <param name = \"ctrl\"></param>\r\n\r\n /// </summary>\r\n getColumnControls(): List<MgControlBase> {\r\n let columnControlsList: List<MgControlBase> = null;\r\n\r\n if (this.CtrlTab !== null) {\r\n for (let i: number = 0; i < this.CtrlTab.getSize(); i = i + 1) {\r\n let ctrl: MgControlBase = this.CtrlTab.getCtrl(i);\r\n if (ctrl.Type === MgControlType.CTRL_TYPE_COLUMN) {\r\n if (columnControlsList === null)\r\n columnControlsList = new List<MgControlBase>();\r\n columnControlsList.push(ctrl);\r\n }\r\n }\r\n }\r\n return columnControlsList;\r\n }\r\n\r\n /// </summary>\r\n getTask(): GuiTaskBase {\r\n return this._task;\r\n }\r\n\r\n /// <summary>\r\n /// converts from double pixels to uom\r\n /// </summary>\r\n /// <param name=\"pixVal\"></param>\r\n /// <param name=\"isXaxis\"></param>\r\n\r\n /// <returns></returns>\r\n getTableCtrl(): MgControlBase {\r\n return this._tableMgControl;\r\n }\r\n\r\n /// <summary>\r\n /// after open the form need to move it according to the startup position property on the form\r\n /// PROP_TYPE_STARTUP_POSITION\r\n\r\n /// <returns></returns>\r\n getMainControl(): MgControlBase {\r\n return this._tableMgControl;\r\n }\r\n\r\n /// <returns> a reference to the control with the given name or null if does not exist</returns>\r\n getCtrlByName(ctrlName: string, ctrlType: MgControlType): MgControlBase {\r\n return this.CtrlTab.getCtrlByName(ctrlName, ctrlType);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// return Point ,center to the giving relativeRect\r\n\r\n /// <param name = \"idx\"></param>\r\n checkAndCreateRow(idx: number): void {\r\n if (this._tableMgControl !== null && !this.isRowCreated(idx))\r\n this.createRow(idx);\r\n }\r\n\r\n\r\n /// <param name=\"idx\"></param>\r\n IsValidRow(idx: number): boolean {\r\n let validRow: boolean = false;\r\n\r\n if (this._tableMgControl !== null && idx >= 0 && idx < this.Rows.length) {\r\n let row: Row = this.Rows.get_Item(idx);\r\n validRow = (row !== null && row.Validated);\r\n }\r\n return validRow;\r\n }\r\n\r\n /// <summary>\r\n /// get table control\r\n /// </summary>\r\n\r\n /// <summary>\r\n /// return tree or table control of the form\r\n /// </summary>\r\n\r\n /// </summary>\r\n async refreshProps(): Promise<void> {\r\n if (this._firstRefreshOfProps) {\r\n this.getProp(PropInterface.PROP_TYPE_TITLE_BAR);\r\n\r\n }\r\n await this._propTab.RefreshDisplay(false, false);\r\n\r\n if (this._firstRefreshOfProps)\r\n this._firstRefreshOfProps = false;\r\n }\r\n\r\n /// <summary>\r\n /// Return the control (which is not the frame form) with a given name\r\n /// </summary>\r\n /// <param name = \"ctrlName\">the of the requested control</param>\r\n /// <param name=\"ctrlType\"></param>\r\n\r\n /// <param name = \"repeatableOnly\">should be true in order to refresh only the controls that belong to a table</param>\r\n async refreshControls(repeatableOnly: boolean): Promise<void> {\r\n let ctrl: MgControlBase;\r\n // record does not exist\r\n if (this.DisplayLine === Int32.MinValue)\r\n return;\r\n\r\n // refresh the table first\r\n if (this._tableMgControl !== null && !repeatableOnly)\r\n await this._tableMgControl.RefreshDisplay();\r\n\r\n // refresh all COLUMNS (refresh for each control base on the refresh of the column (e.g:column width)\r\n // so we must refresh the column first\r\n if (this._tableColumns !== null && !repeatableOnly) {\r\n for (let i: number = 0; i < this._tableColumns.length; i = i + 1) {\r\n let mgControlBase: MgControlBase = this._tableColumns.get_Item(i);\r\n await mgControlBase.RefreshDisplay();\r\n }\r\n }\r\n\r\n this.checkAndCreateRow(this.DisplayLine);\r\n\r\n // QCR #709563 Must refresh frameset's subfroms before we refresh frameset itself.\r\n // During refresh of the frameset nested subforms with RefreshWhenHidden might be brought to server\r\n // but their subform's controls have not been set with correct bounds. This causes illegal placement\r\n // and incorrect final location of controls on nested subforms\r\n let tabAndGroupControls: Stack<MgControlBase> = new Stack<MgControlBase>();\r\n\r\n for (let i: number = 0; i < this.CtrlTab.getSize(); i = i + 1) {\r\n ctrl = this.CtrlTab.getCtrl(i);\r\n if ((ctrl.isTabControl() || ctrl.isGroup()) && !repeatableOnly) {\r\n tabAndGroupControls.push(ctrl);\r\n\r\n }\r\n\r\n if (ctrl.Type !== MgControlType.CTRL_TYPE_TABLE && ctrl.Type !== MgControlType.CTRL_TYPE_COLUMN) {\r\n if (ctrl.IsRepeatable || !repeatableOnly)\r\n await ctrl.RefreshDisplay();\r\n } else if (ctrl.Type === MgControlType.CTRL_TYPE_TABLE && repeatableOnly)\r\n await ctrl.RefreshDisplay(repeatableOnly);\r\n }\r\n }\r\n\r\n\r\n /// <param name = \"idx\"></param>\r\n markRowNOTCreated(idx: number): void {\r\n Commands.addWithNumber(CommandType.UNDO_CREATE_TABLE_ROW, this._tableMgControl, idx);\r\n\r\n if (idx >= 0 && idx < this.Rows.length)\r\n this.Rows.set_Item(idx, new Row(false, false));\r\n }\r\n\r\n /// <summary>\r\n /// validate row\r\n /// </summary>\r\n\r\n SelectRow(): void {\r\n this.SelectRowByIdx(this.DisplayLine);\r\n }\r\n\r\n /// <summary>(public)\r\n /// check if specified row is valid row in page\r\n /// </summary>\r\n\r\n /// <summary>\r\n /// refresh the controls of the current row\r\n /// </summary>\r\n\r\n /// <returns> int is the table size</returns>\r\n getRowsInPage(): number {\r\n return this._rowsInPage;\r\n }\r\n\r\n /// <returns> int is the table size</returns>\r\n getMaxRowsInPaginatedTable(): number {\r\n return this._maxRowsInPaginatedTable;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if Row is created on GUI level\r\n /// </summary>\r\n /// <param name = \"idx\"></param>\r\n\r\n /// <param name = \"size\">the table size</param>\r\n setRowsInPage(size: number): void {\r\n this._rowsInPage = size;\r\n }\r\n\r\n /// <summary>\r\n /// marks this row as not created\r\n /// </summary>\r\n\r\n /// <returns></returns>\r\n getColumnsCount(): number {\r\n let columnsCount: number = 0;\r\n\r\n if (this.CtrlTab !== null) {\r\n for (let i: number = 0; i < this.CtrlTab.getSize(); i = i + 1) {\r\n let control: MgControlBase = this.CtrlTab.getCtrl(i);\r\n if (control.Type === MgControlType.CTRL_TYPE_COLUMN)\r\n columnsCount = columnsCount + 1;\r\n }\r\n }\r\n\r\n return columnsCount;\r\n }\r\n\r\n\r\n /// </summary>\r\n inRefreshDisplay(): boolean {\r\n return this._inRefreshDisp;\r\n }\r\n\r\n setTitle(newTitle: string): void {\r\n Commands.setTitle(this, newTitle);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// returns the value of the \"in refresh display\" flag\r\n\r\n getControlIdx(ctrl: MgControlBase): number {\r\n return this.CtrlTab.getControlIdx(ctrl, true);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Execute the layout and all its children\r\n\r\n /// </summary>\r\n getTopIndexFromGUI(): number {\r\n let topDisplayLine: number = 0;\r\n if (this.hasTable())\r\n topDisplayLine = Commands.getTopIndex(this.getMainControl());\r\n return topDisplayLine;\r\n }\r\n\r\n /// <summary>\r\n /// return TRUE if this group is the last group in the toolbar\r\n /// </summary>\r\n /// <param name = \"groupNumber\"></param>\r\n\r\n /// <returns> table items count</returns>\r\n getTableItemsCount(): number {\r\n return this._tableItemsCount;\r\n }\r\n\r\n /// <summary>\r\n /// Table control is always first on the form\r\n /// When table is a child of tab, it is created before tab's layers(TabPages) are created.\r\n /// Computing Tab's children coordinates depends on the TabPages being created\r\n /// So, we must fix table's location after Tab is created\r\n /// QCR #289966\r\n\r\n /// </summary>\r\n removeRefsToCtrls(): void {\r\n for (let i: number = 0; i < this.CtrlTab.getSize(); i = i + 1) {\r\n this.CtrlTab.getCtrl(i).removeRefFromField();\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// this form may have ActiveRowHightlightState\r\n\r\n /// </summary>\r\n buildTableChildren(): void {\r\n if (this._tableChildren === null) {\r\n this._tableChildren = new List<MgControlBase>();\r\n\r\n if (this.CtrlTab !== null) {\r\n let minTabOrder: number = 2147483647;\r\n let automaticTabbingOrder: boolean = this.isAutomaticTabbingOrder();\r\n\r\n for (let i: number = 0; i < this.CtrlTab.getSize(); i = i + 1) {\r\n let ctrl: MgControlBase = this.CtrlTab.getCtrl(i);\r\n\r\n if (ctrl.IsRepeatable || ctrl.IsTableHeaderChild) {\r\n this._tableChildren.push(ctrl);\r\n\r\n if (automaticTabbingOrder) {\r\n let prop: Property = ctrl.GetComputedProperty(PropInterface.PROP_TYPE_TAB_ORDER);\r\n\r\n if (prop !== null) {\r\n let valueInt: number = prop.GetComputedValueInteger();\r\n if (valueInt < minTabOrder)\r\n minTabOrder = valueInt;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (minTabOrder !== Int32.MaxValue && automaticTabbingOrder) {\r\n this._firstTableTabOrder = minTabOrder;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// return the prev group index if exist\r\n /// </summary>\r\n /// <param name = \"currGroup\"></param>\r\n\r\n /// <param name = \"tableCtrl\">the tableCtrl to set</param>\r\n setTableCtrl(tableCtrl: MgControlBase): void {\r\n this._tableMgControl = tableCtrl;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// sets the property\r\n /// </summary>\r\n /// <param name = \"propId\"></param>\r\n\r\n getCtrlCount(): number {\r\n return this.CtrlTab.getSize();\r\n }\r\n\r\n /// <returns></returns>\r\n GetControlsCountExcludingStatusBar(): number {\r\n return this.CtrlTab.getSize();\r\n }\r\n\r\n\r\n /// </summary>\r\n async refreshPropsOnExpression(): Promise<void> {\r\n let i: number;\r\n let size: number = (this._propTab == null ? 0 : this._propTab.getSize());\r\n let prop: Property;\r\n let refresh: boolean = false;\r\n for (i = 0; i < size && !refresh; i++) {\r\n prop = this._propTab.getProp(i);\r\n if (prop.isExpression()) {\r\n refresh = true;\r\n await this.refreshProps();\r\n }\r\n }\r\n }\r\n\r\n /// <returns></returns>\r\n getTabControl(ctrl: MgControlBase): MgControlBase {\r\n let obj: Object;\r\n let result: MgControlBase = null;\r\n\r\n obj = ctrl;\r\n while (obj instanceof MgControlBase) {\r\n let currCtrl = <MgControlBase>obj;\r\n if (currCtrl.isTabControl()) {\r\n result = currCtrl;\r\n break;\r\n }\r\n obj = currCtrl.getParent();\r\n }\r\n\r\n // if ctrl is not tab and not tab's child - find first tab in the form\r\n if (result == null) {\r\n for (let i: number = 0; i < this.CtrlTab.getSize(); i++) {\r\n obj = this.CtrlTab.getCtrl(i);\r\n if ((<MgControlBase>obj).isTabControl()) {\r\n result = <MgControlBase>obj;\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// remove references to the controls of this form\r\n\r\n IsInputType(ctrl: MgControlBase): boolean {\r\n switch (ctrl.Type) {\r\n case MgControlType.CTRL_TYPE_CHECKBOX:\r\n case MgControlType.CTRL_TYPE_TEXT:\r\n case MgControlType.CTRL_TYPE_COMBO:\r\n case MgControlType.CTRL_TYPE_LIST:\r\n case MgControlType.CTRL_TYPE_RADIO:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// build list of table children\r\n\r\n public GetListOfInputControls(): any {\r\n let filterterList = this.CtrlTab.filter(((c) => this.IsInputType(c)));\r\n let names = filterterList.reduce((pre, ctrl) => {\r\n pre[ctrl.UniqueName] = ctrl.IsRepeatable ? '1' : '0';\r\n return pre;\r\n }, {});\r\n return names;\r\n }\r\n\r\n /// <summary>\r\n ///\r\n /// </summary>\r\n\r\n /// <returns></returns>\r\n abstract ConstructMgControl(): MgControlBase;\r\n\r\n // getGuiTableChildren(): List<GuiMgControl> {\r\n // let flag: boolean = this._guiTableChildren === null;\r\n // if (flag) {\r\n // this._guiTableChildren = new List<GuiMgControl>();\r\n // let tableChildren: List<MgControlBase> = this.TableChildren;\r\n // let enumerator: List_Enumerator<MgControlBase> = tableChildren.GetEnumerator();\r\n // try {\r\n // while (enumerator.MoveNext()) {\r\n // let current: MgControlBase = enumerator.Current;\r\n // this._guiTableChildren.Add(current);\r\n // }\r\n // }\r\n // finally {\r\n // (<IDisposable>enumerator).Dispose();\r\n // }\r\n // }\r\n // return this._guiTableChildren;\r\n // }\r\n\r\n /// <summary>\r\n /// Sets the table control related to this form\r\n /// </summary>\r\n\r\n\r\n /// <summary>\r\n /// Refresh form display if it has a property which is an expression\r\n\r\n /// </summary>\r\n firstTableRefresh(): void {\r\n if (this._tableMgControl !== null) {\r\n this._rowsInPage = Commands.getRowsInPage(this._tableMgControl);\r\n this.RefreshRepeatableAllowed = true;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// update table item's count according to parameter size\r\n /// </summary>\r\n /// <param name = \"dvsize\">new dvsize</param>\r\n /// <param name = \"tableItemsCount\">new tableItemsCount</param>\r\n /// <param name = \"removeAll\">remove all elements form the table including first and last dummy elements</param>\r\n SetTableItemsCount(dvsize: number, removeAll: boolean): void\r\n SetTableItemsCount(dvsize: number, tableItemsCount: number, removeAll: boolean): void;\r\n SetTableItemsCount(dvsize: number, tableItemsCountOrRemoveAll: any, removeAll?: boolean): void {\r\n if (typeof tableItemsCountOrRemoveAll == 'boolean'){\r\n this.SetTableItemsCount_0(dvsize, tableItemsCountOrRemoveAll);\r\n } else\r\n this.SetTableItemsCount_1(dvsize, tableItemsCountOrRemoveAll, removeAll);\r\n }\r\n\r\n private SetTableItemsCount_0(dvsize: number, removeAll: boolean): void {\r\n this.SetTableItemsCount_1(dvsize, dvsize, removeAll);\r\n }\r\n\r\n private SetTableItemsCount_1(dvsize: number, tableItemsCount: number, removeAll: boolean): void {\r\n this.InitTableControl(dvsize, tableItemsCount, removeAll);\r\n }\r\n\r\n /// <summary>\r\n /// inits the table control\r\n /// update table item's count according to parameter dvsize\r\n /// </summary>\r\n InitTableControl(): void;\r\n InitTableControl(dvSize: number, tableItemsCount: number, removeAll: boolean): void;\r\n InitTableControl(dvSize?: number, tableItemsCount?: number, removeAll?: boolean): void {\r\n if (arguments.length === 0) {\r\n this.InitTableControl_0();\r\n return;\r\n }\r\n this.InitTableControl_1(dvSize, tableItemsCount);\r\n }\r\n\r\n /// <summary>\r\n /// update arrays of table children controls\r\n /// </summary>\r\n /// <param name=\"size\"></param>\r\n UpdateTableChildrenArraysSize(size: number): void {\r\n let children: List<MgControlBase> = this.TableChildren;\r\n if (children != null) {\r\n for (let i: number = 0; i < children.length; i++) {\r\n let control: MgControlBase = children.get_Item(i);\r\n control.updateArrays(size);\r\n }\r\n }\r\n if (this._tableMgControl != null)\r\n this._tableMgControl.updateArrays(size);\r\n }\r\n\r\n /// <summary>\r\n /// find tab control for performing CTRL+TAB && CTRL+SHIFT+TAB actions\r\n /// the code original is in RT::skip_to_tab_control\r\n /// </summary>\r\n /// <param name = \"ctrl\">current control</param>\r\n\r\n toString(): string {\r\n return '{GuiMgForm' + ': Id=' + this._userStateId + '}';\r\n }\r\n\r\n /// <returns></returns>\r\n IncludeControlInTabbingOrder(control: MgControlBase): boolean {\r\n if (!control.PropertyExists(PropInterface.PROP_TYPE_TAB_ORDER))\r\n return false;\r\n\r\n\r\n return true;\r\n }\r\n\r\n\r\n GetHashCode() {\r\n return this.FormIsn;\r\n }\r\n\r\n /// <returns></returns>\r\n protected initInnerObjects(foundTagName: string): boolean {\r\n if (foundTagName === null)\r\n return false;\r\n\r\n\r\n let parser: XmlParser = Manager.GetCurrentRuntimeContext().Parser;\r\n if (MgFormBase.IsFormTag(foundTagName))\r\n this.fillName(foundTagName);\r\n else if (foundTagName === XMLConstants.MG_TAG_PROP)\r\n this._propTab.fillData(this, 'F', parser);\r\n else if (foundTagName === XMLConstants.MG_TAG_CONTROL) {\r\n this.CtrlTab.fillData(this, parser);\r\n //this.initContextPropForControls();\r\n if (!this.HasTable())\r\n this.RefreshRepeatableAllowed = true;\r\n } else if (MgFormBase.IsEndFormTag(foundTagName)) {\r\n parser.setCurrIndex2EndOfTag();\r\n return false;\r\n } else\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /// <summary>\r\n /// constructs an object of MgControl\r\n /// </summary>\r\n /// <param name=\"type\"></param>\r\n /// <param name=\"task\"></param>\r\n /// <param name=\"parentControl\"></param>\r\n\r\n /// <returns></returns>\r\n public isRowCreated(idx: number): boolean {\r\n if (this.Rows.length <= idx || idx < 0) {\r\n return false;\r\n }\r\n\r\n let row: Row = this.Rows.get_Item(idx);\r\n if (row === null)\r\n return false;\r\n\r\n return row.Created;\r\n }\r\n\r\n\r\n /// </summary>\r\n private buildLinkedControlsLists(): void {\r\n for (let i: number = 0; i < this.CtrlTab.getSize(); i = i + 1) {\r\n let ctrl: MgControlBase = this.CtrlTab.getCtrl(i);\r\n let linkedParent: MgControlBase = <MgControlBase>ctrl.getLinkedParent(false);\r\n if (linkedParent !== null)\r\n linkedParent.linkCtrl(ctrl);\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// build list of all columns controls\r\n /// </summary>\r\n private buildTableColumnsList(): void {\r\n if (this._tableMgControl !== null) {\r\n this._tableColumns = new List<MgControlBase>();\r\n for (let i: number = 0; i < this.CtrlTab.getSize(); i = i + 1) {\r\n let control: MgControlBase = this.CtrlTab.getCtrl(i);\r\n if (control.Type === MgControlType.CTRL_TYPE_COLUMN)\r\n this._tableColumns.push(control);\r\n }\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// update arrays of table children controls\r\n /// </summary>\r\n\r\n /// <param name = \"idx\"></param>\r\n private createRow(idx: number): void {\r\n Commands.addWithNumber(CommandType.CREATE_TABLE_ROW, this._tableMgControl, idx);\r\n\r\n if (this.Rows.length <= idx)\r\n this.Rows.SetSize(idx + 1);\r\n\r\n this.Rows.set_Item(idx, new Row(true, true));\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Mark a row as selected row\r\n /// </summary>\r\n /// <param name = \"rowIdx\">row to select</param>\r\n private SelectRowByIdx(rowIdx: number): void {\r\n // controlForSelect can be table control or tree control\r\n let mainControl: MgControlBase = this.getMainControl();\r\n\r\n if (mainControl !== null && this.RefreshRepeatableAllowed) {\r\n let index: number = rowIdx;\r\n if (this._task.DataView.isEmptyDataview())\r\n index = GuiConstants.NO_ROW_SELECTED;\r\n\r\n if (index !== this._prevSelIndex) {\r\n this._prevSelIndex = index;\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, mainControl, 0, HtmlProperties.SelectedRow, index);\r\n }\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// force all MgControls to update the colors used on the controls\r\n\r\n /// </summary>\r\n private InitTableControl_0(): void {\r\n this.InitTableControl(1, 1, false);\r\n }\r\n\r\n /// <param name = \"removeAll\">remove all elements form the table including first and last dummy elements</param>\r\n private InitTableControl_1(dvSize: number, tableItemsCount: number): void {\r\n if (this._tableMgControl != null) {\r\n Commands.addWithNumber(CommandType.SET_TABLE_ITEMS_COUNT, this._tableMgControl, tableItemsCount);\r\n Commands.addWithNumber(CommandType.SET_CHUNK_SIZE, this._tableMgControl, (this._task.DataView).getChunkSize());\r\n this._tableItemsCount = tableItemsCount;\r\n this.Rows.SetSize(dvSize);\r\n this._prevGuiTopIndex = -2;\r\n this._prevSelIndex = -2;\r\n this.UpdateTableChildrenArraysSize(dvSize);\r\n this._maxRowsInPaginatedTable = Commands.getMaxRowsInPaginatedTable(this._tableMgControl);\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// update arrays of table children controls\r\n /// </summary>\r\n /// <param name=\"size\"></param>\r\n public InsertTableChildrenArrays(idx: number, count: number): void {\r\n let children: List<MgControlBase> = this.TableChildren;\r\n if (children != null) {\r\n for (let i: number = 0; i < children.length; i++) {\r\n let control: MgControlBase = children[i];\r\n control.InsertArrays(idx, count);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// class describing row\r\n/// </summary>\r\n/// <author>rinav</author>\r\nexport class Row {\r\n Created: boolean = false; // is row created on gui level\r\n Validated: boolean = false; // is row Validated\r\n\r\n constructor();\r\n constructor(created: boolean, validated: boolean);\r\n constructor(created?: boolean, validated?: boolean) {\r\n if (arguments.length === 0) {\r\n this.constructor_0();\r\n return;\r\n }\r\n this.constructor_1(created, validated);\r\n }\r\n\r\n private constructor_0(): void {\r\n this.Validated = true;\r\n }\r\n\r\n private constructor_1(created: boolean, validated: boolean): void {\r\n this.Created = created;\r\n this.Validated = validated;\r\n }\r\n}\r\n","import {Debug} from '@magic-xpa/mscorelib';\r\nimport {InternalInterface, MgControlType} from '@magic-xpa/utils';\r\nimport {GuiMgForm} from './gui/GuiMgForm';\r\nimport {Events} from './Events';\r\nimport {GuiMgControl} from './gui/GuiMgControl';\r\nimport {MgControlBase} from './management/gui/MgControlBase';\r\nimport {Manager} from './Manager';\r\nimport {Modifiers} from './GuiEnums';\r\nimport {MgFormBase} from './management/gui/MgFormBase';\r\nimport {PropInterface} from './management/gui/PropInterface';\r\n\r\n/// <summary>\r\n/// (1) registers and implements handlers for events that can be served locally by MgGui.dll.\r\n/// (2) requests subclasses to register their handlers ('Template Method' design pattern).\r\n/// </summary>\r\nexport abstract class EventsProcessor {\r\n constructor() {\r\n this.RegisterHandlers();\r\n this.RegisterSubclassHandlers();\r\n }\r\n\r\n /// <summary>register and implement handlers for events that can be served locally by MgGui.dll.</summary>\r\n private RegisterHandlers(): void {\r\n Events.KeyDownEvent = this.processKeyDown.bind(this);\r\n\r\n Events.MouseDownEvent = this.processMouseDown;\r\n Events.DblClickEvent = this.processDblClick;\r\n Events.CloseFormEvent = this.processFormClose;\r\n\r\n Events.ColumnClickEvent = this.ProcessColumnClick;\r\n }\r\n\r\n // request subclasses to register handlers that they will implement ('Template Method' design pattern).\r\n abstract RegisterSubclassHandlers();\r\n\r\n /// <summary>Pass keycode and modifier to bridge, bridge then converts it to keyboard action and adds in MgCore.dll\r\n /// events queue</summary>\r\n /// <param name=\"form\"></param>\r\n /// <param name=\"guiMgCtrl\"></param>\r\n /// <param name=\"modifier\"></param>\r\n /// <param name=\"keyCode\"></param>\r\n /// <param name=\"start\"></param>\r\n /// <param name=\"end\"></param>\r\n /// <param name=\"caretPos\"></param>\r\n /// <param name=\"text\"></param>\r\n /// <param name=\"im\"></param>\r\n /// <param name=\"isActChar\"></param>\r\n /// <param name=\"suggestedValue\"></param>\r\n /// <param name=\"ComboIsDropDown\"></param>\r\n /// <param name=\"handled\">boolean variable event is handled or not.</param>\r\n /// <returns> true only if we have handled the KeyDown event (otherwise the CLR should handle). If true magic will handle else CLR will handle.</returns>\r\n processKeyDown(guiMgForm: GuiMgForm, guiMgCtrl: GuiMgControl, modifier: Modifiers, keyCode: number, start: number, end: number, text: string, isActChar: boolean, suggestedValue: string, handled: boolean): boolean {\r\n let eventHandled: boolean = handled;\r\n\r\n let mgControlBase: MgControlBase = <MgControlBase>guiMgCtrl;\r\n let mgFormBase: MgFormBase = <MgFormBase>guiMgForm;\r\n\r\n Manager.EventsManager.AddKeyboardEvent(mgFormBase, mgControlBase, modifier, keyCode, start, end, text, isActChar, suggestedValue, InternalInterface.MG_ACT_CTRL_KEYDOWN);\r\n\r\n return eventHandled;\r\n }\r\n\r\n\r\n /// <summary>\r\n /// Function handling form close event.\r\n /// </summary>\r\n /// <param name=\"guiMgForm\"></param>\r\n /// <returns>true if event is CLR handled else false.</returns>\r\n processFormClose(guiMgForm: GuiMgForm): boolean {\r\n let clrHandledEvent: boolean = false;\r\n let mgFormBase: MgFormBase = <MgFormBase>guiMgForm;\r\n\r\n if (MgFormBase.ShouldPutActOnFormClose())\r\n Manager.EventsManager.addGuiTriggeredEventTaskAndCodeAndRaisedBy(mgFormBase.getTask(), InternalInterface.MG_ACT_HIT);\r\n Manager.EventsManager.addGuiTriggeredEventWithTaskAndCode(mgFormBase.getTask(), InternalInterface.MG_ACT_CLOSE);\r\n\r\n return clrHandledEvent;\r\n }\r\n\r\n\r\n\r\n /// <summary></summary>\r\n /// <param name = \"guiMgForm\"></param>\r\n /// <param name = \"guiMgCtrl\"></param>\r\n /// <param name = \"dotNetArgs\"></param>\r\n /// <param name = \"leftClickWasPressed\"></param>\r\n /// <param name = \"line\"></param>\r\n private processMouseDown(guiMgForm: GuiMgForm, guiMgCtrl: GuiMgControl, dotNetArgs: any[], leftClickWasPressed: boolean, line: number, onMultiMark: boolean, canProduceClick: boolean): void {\r\n let mgControl: MgControlBase = <MgControlBase>guiMgCtrl;\r\n\r\n if (mgControl === null) {\r\n Debug.Assert(guiMgForm !== null);\r\n // As in online. clicking on a form results in ACT_HIT\r\n Manager.EventsManager.addGuiTriggeredEventWithTaskAndCodeAndOnMultiMark((<MgFormBase>guiMgForm).getTask(), InternalInterface.MG_ACT_HIT);\r\n }\r\n else {\r\n if (mgControl.isSubform()) {\r\n mgControl.OnSubformClick();\r\n }\r\n else {\r\n if (mgControl.RaiseControlHitOnMouseDown(leftClickWasPressed)) {\r\n Manager.EventsManager.addGuiTriggeredEventWithCtrlAndCodeAndLine(mgControl, InternalInterface.MG_ACT_CTRL_HIT, line);\r\n }\r\n if (leftClickWasPressed && canProduceClick) {\r\n // fixed bug#927942\r\n // we never get to this method with the control type button & checkbox.\r\n // for button & checkbox, we sent the trigger MG_ACT_WEB_CLICK in EventsManager.handleMouseUp() that call\r\n // from simulateSelection()\r\n // the \"if\" is only for make sure that if we will get it (in the feture) we will not be sent the same trigger twice\r\n if (mgControl.Type !== MgControlType.CTRL_TYPE_BUTTON && mgControl.Type !== MgControlType.CTRL_TYPE_CHECKBOX) {\r\n Manager.EventsManager.addGuiTriggeredEventWithCtrlAndCodeAndLine(mgControl, InternalInterface.MG_ACT_WEB_CLICK, line);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>process \"dblclick\" event</summary>\r\n /// <param name = \"guiMgCtrl\">the control </param>\r\n /// <param name = \"line\"> the line of the multiline control </param>\r\n private processDblClick(guiMgCtrl: GuiMgControl, line: number): void {\r\n let mgControl: MgControlBase = <MgControlBase>guiMgCtrl;\r\n if (!mgControl.GetComputedBooleanProperty(PropInterface.PROP_TYPE_ENABLED, true, line))\r\n return;\r\n\r\n // raising the internal events : MG_ACT_SELECT and MG_ACT_ZOOM was moved to commonHandler under the\r\n // MG_ACT_WEB_ON_DBLICK case.\r\n // This is different then the behavior of online because we fixed QCR #990836 only in rich.\r\n // In rich, 1st dbclick is raised. Then if there is a handler on it with propogate ='YES', only then the zoom/select\r\n // will be raised. A Propagate 'NO' will block them.\r\n\r\n Manager.EventsManager.addGuiTriggeredEventWithCtrlAndCodeAndLine(mgControl, InternalInterface.MG_ACT_WEB_ON_DBLICK, line);\r\n }\r\n\r\n /// <summary> handle Column Click event on Column </summary>\r\n /// <param name=\"guiColumnCtrl\"></param>\r\n /// <param name=\"direction\"></param>\r\n /// <param name=\"columnHeader\"></param>\r\n private ProcessColumnClick(guiColumnCtrl: GuiMgControl, direction: number, columnHeader: string): void {\r\n let mgColumnControl: MgControlBase = <MgControlBase>guiColumnCtrl;\r\n Manager.EventsManager.AddColumnClickEvent(mgColumnControl, direction, columnHeader);\r\n }\r\n\r\n\r\n}\r\n","import {Modifiers} from \"../GuiEnums\";\r\nimport {StringBuilder} from \"@magic-xpa/mscorelib\";\r\nimport {GuiConstants} from \"../GuiConstants\";\r\n\r\n/// <summary>\r\n/// data for <kbditm>\r\n/// </summary>\r\nexport class KeyboardItem {\r\n private _keyCode: number = 0;\r\n private _modifier: Modifiers = Modifiers.MODIFIER_NONE; // Alt|Ctrl|Shift|None\r\n private _states: number = 0;\r\n private _actionId: number = 0;\r\n\r\n constructor(cKeyCode: number, cModifier: Modifiers);\r\n constructor(actionId_: number, keyCode_: number, modifier_: Modifiers, states_: number);\r\n constructor(cKeyCodeOrActionId_?: number, cModifierOrKeyCode_?: any, modifier_?: Modifiers, states_?: number) {\r\n if (arguments.length === 2)\r\n this.constructor_1(cKeyCodeOrActionId_, cModifierOrKeyCode_);\r\n else\r\n this.constructor_2(cKeyCodeOrActionId_, cModifierOrKeyCode_, modifier_, states_);\r\n }\r\n\r\n /// <summary>\r\n /// CTOR\r\n /// </summary>\r\n /// <param name = \"cKeyCode\">key code\r\n /// </param>\r\n /// <param name = \"cModifier\">modifier key: Alt|Ctrl|Shift|None\r\n /// </param>\r\n private constructor_1(cKeyCode: number, cModifier: Modifiers): void {\r\n this._keyCode = cKeyCode;\r\n this._modifier = cModifier;\r\n }\r\n\r\n private constructor_2(actionId_: number, keyCode_: number, modifier_: Modifiers, states_: number): void {\r\n this._actionId = actionId_;\r\n this._keyCode = keyCode_;\r\n this._modifier = modifier_;\r\n this._states = states_;\r\n }\r\n\r\n /// <summary>\r\n /// returns the key code of the keyboard item\r\n /// </summary>\r\n getKeyCode(): number {\r\n return this._keyCode;\r\n }\r\n\r\n /// <summary>\r\n /// returns the modifier of the keyboard item\r\n /// </summary>\r\n getModifier(): Modifiers {\r\n return this._modifier;\r\n }\r\n\r\n /// <summary>\r\n /// returns states of the keyboard item\r\n /// </summary>\r\n getStates(): number {\r\n return this._states;\r\n }\r\n\r\n /// <summary>\r\n /// compares this keyboard item to a given keyboard item and returns true if and only if\r\n /// the keycode and the modifier are equal\r\n /// </summary>\r\n /// <param name = \"kbdItm\">the keyboard item to compare to\r\n /// </param>\r\n equals(kbdItm: KeyboardItem): boolean {\r\n return this === kbdItm || (kbdItm !== null && this._keyCode === kbdItm._keyCode && this._modifier === kbdItm._modifier);\r\n }\r\n\r\n /// <summary>\r\n /// get the action id\r\n /// </summary>\r\n getAction(): number {\r\n return this._actionId;\r\n }\r\n\r\n /// <param name = \"actionId\">\r\n /// </param>\r\n setAction(actionId: number): void {\r\n this._actionId = actionId;\r\n }\r\n\r\n /// <summary>\r\n /// translate the Keyboard Item to its String representation\r\n /// </summary>\r\n /// <returns> string representation of the KeyBoard Item\r\n /// </returns>\r\n ToString(): string {\r\n let buffer: StringBuilder = new StringBuilder();\r\n let counter: number = 0;\r\n\r\n switch (this._modifier) {\r\n case Modifiers.MODIFIER_ALT:\r\n buffer.Append(\"Alt+\");\r\n break;\r\n\r\n case Modifiers.MODIFIER_CTRL:\r\n buffer.Append(\"Ctrl+\");\r\n break;\r\n\r\n case Modifiers.MODIFIER_SHIFT:\r\n buffer.Append(\"Shift+\");\r\n break;\r\n\r\n case Modifiers.MODIFIER_SHIFT_CTRL:\r\n buffer.Append(\"Shift+Ctrl+\");\r\n break;\r\n\r\n case Modifiers.MODIFIER_ALT_CTRL:\r\n buffer.Append(\"Alt+Ctrl+\");\r\n break;\r\n\r\n case Modifiers.MODIFIER_ALT_SHIFT:\r\n buffer.Append(\"Shift+Alt+\");\r\n break;\r\n\r\n case Modifiers.MODIFIER_NONE:\r\n default:\r\n break;\r\n }\r\n\r\n switch (this._keyCode) {\r\n case GuiConstants.KEY_SPACE:\r\n buffer.Append(\"Space\");\r\n break;\r\n\r\n case GuiConstants.KEY_PG_UP:\r\n buffer.Append(\"PgUp\");\r\n break;\r\n\r\n case GuiConstants.KEY_PG_DOWN:\r\n buffer.Append(\"PgDn\");\r\n break;\r\n\r\n case GuiConstants.KEY_END:\r\n buffer.Append(\"End\");\r\n break;\r\n\r\n case GuiConstants.KEY_HOME:\r\n buffer.Append(\"Home\");\r\n break;\r\n\r\n case GuiConstants.KEY_LEFT:\r\n buffer.Append(\"Left\");\r\n break;\r\n\r\n case GuiConstants.KEY_UP:\r\n buffer.Append(\"Up\");\r\n break;\r\n\r\n case GuiConstants.KEY_RIGHT:\r\n buffer.Append(\"Rght\");\r\n break;\r\n\r\n case GuiConstants.KEY_DOWN:\r\n buffer.Append(\"Down\");\r\n break;\r\n\r\n case GuiConstants.KEY_TAB:\r\n buffer.Append(\"Tab\");\r\n break;\r\n\r\n case GuiConstants.KEY_INSERT:\r\n buffer.Append(\"Ins\");\r\n break;\r\n\r\n case GuiConstants.KEY_DELETE:\r\n buffer.Append(\"Del\");\r\n break;\r\n\r\n case GuiConstants.KEY_RETURN:\r\n buffer.Append(\"Ent\");\r\n break;\r\n\r\n case GuiConstants.KEY_ESC:\r\n buffer.Append(\"Esc\");\r\n break;\r\n\r\n case GuiConstants.KEY_BACKSPACE:\r\n buffer.Append(\"Back\");\r\n break;\r\n\r\n default:\r\n if (this._keyCode >= GuiConstants.KEY_F1 && this._keyCode <= GuiConstants.KEY_F12)\r\n // KEY_F1 = 112; KEY_F12 = 123;\r\n {\r\n counter = this._keyCode - GuiConstants.KEY_F1 + 1;\r\n buffer.Append(\"F\" + counter);\r\n }\r\n else if (this._keyCode >= GuiConstants.KEY_0 && this._keyCode <= GuiConstants.KEY_9)\r\n // KEY_0 = 48;KEY_9 = 57;\r\n {\r\n counter = this._keyCode - GuiConstants.KEY_0;\r\n buffer.Append(counter);\r\n }\r\n else if (this._keyCode >= GuiConstants.KEY_A && this._keyCode <= GuiConstants.KEY_Z)\r\n // KEY_A = 65; KEY_Z = 90;\r\n {\r\n counter = this._keyCode - GuiConstants.KEY_A + ('A').charCodeAt(0);\r\n buffer.Append(String.fromCharCode(counter));\r\n }\r\n else\r\n buffer.Append(\"? (\" + this._keyCode + \")\");\r\n break;\r\n\r\n }\r\n return buffer.ToString();\r\n }\r\n}\r\n\r\n","import {GuiMgControl} from \"./GuiMgControl\";\r\n\r\n/// <summary>\r\n/// The class is used to store control's edited value,\r\n/// so it could be restored after current record is replaced by different chunk\r\n/// </summary>\r\nexport class LastFocusedVal {\r\n guiMgControl: GuiMgControl = null;\r\n Line: number = 0;\r\n Val: string = null;\r\n\r\n constructor(guiMgControl: GuiMgControl, line: number, val: string) {\r\n this.guiMgControl = guiMgControl;\r\n this.Line = line;\r\n this.Val = val;\r\n }\r\n}\r\n","\r\n/// <summary>\r\n/// Creates dialog for passed type of object by calling objects constructor matching the parameters\r\n/// </summary>\r\n/// <param name = \"objType\">type of object whose constructor to be invoked</param>\r\n/// <param name = \"parameters\">parameters to be passed to objects constructor</param>\r\nexport class DialogHandler {\r\n\r\n\r\n /// <summary>\r\n /// dispose(and close) the dialog\r\n /// </summary>\r\n closeDialog(): void {\r\n }\r\n\r\n constructor() {\r\n }\r\n}\r\n","export class Styles\r\n{\r\n\r\n\r\n // -------------------------------------\r\n // confirmation box\r\n static MSGBOX_BUTTON_OK: number = 0x00000000;\r\n static MSGBOX_BUTTON_OK_CANCEL: number = 0x00000001;\r\n static MSGBOX_BUTTON_ABORT_RETRY_IGNORE: number = 0x00000002;\r\n static MSGBOX_BUTTON_YES_NO_CANCEL: number = 0x00000003;\r\n static MSGBOX_BUTTON_YES_NO: number = 0x00000004;\r\n static MSGBOX_BUTTON_RETRY_CANCEL: number = 0x00000005;\r\n\r\n static MSGBOX_ICON_ERROR: number = 0x00000010;\r\n static MSGBOX_ICON_QUESTION: number = 0x00000020;\r\n static MSGBOX_ICON_EXCLAMATION: number = 0x00000030;\r\n static MSGBOX_ICON_INFORMATION: number = 0x00000040;\r\n static MSGBOX_ICON_WARNING: number = Styles.MSGBOX_ICON_EXCLAMATION;\r\n\r\n\r\n // message box result\r\n static MSGBOX_RESULT_OK = 1;\r\n static MSGBOX_RESULT_CANCEL = 2;\r\n static MSGBOX_RESULT_ABORT = 3;\r\n static MSGBOX_RESULT_RETRY = 4;\r\n\r\n static MSGBOX_RESULT_YES = 6;\r\n static MSGBOX_RESULT_NO = 7;\r\n\r\n\r\n}\r\n","import {XmlParser} from \"@magic-xpa/utils\";\r\nimport {MgFormBase} from \"./gui/MgFormBase\";\r\nimport {MgControlBase} from \"./gui/MgControlBase\";\r\nimport {Manager} from \"../Manager\";\r\nimport {NString} from \"@magic-xpa/mscorelib\";\r\n\r\nexport class RuntimeContextBase {\r\n private _insertMode: boolean = false;\r\n private _lastCoordinates: number[] = new Array<number>(4);\r\n ContextID: string = '\\0';\r\n Parser: XmlParser = null; // xml parser\r\n FrameForm: MgFormBase = null; // form of the MDI/SDI frame\r\n LastClickedCtrlName: string = null;\r\n\r\n static noContextId: string = null;\r\n RemovedContextFromServer: boolean = false; //set when req. 'Context Remove' sent to server.\r\n RemovingContextFromServer: boolean = false; //set when event 'Context Remove'raised\r\n // CurrentClickedCtrl - always points to the current clickedCtrl. Initially null, but once clicked on any\r\n // control, it always points to this clicked ctrl. And, is reset back to null once we have successfully\r\n // parked on the parkable control.\r\n CurrentClickedCtrl: MgControlBase = null;\r\n\r\n CurrentClickedRadio: MgControlBase = null;\r\n DefaultStatusMsg: string = null;\r\n LastClickCoordinatesAreInPixels: boolean = false;\r\n\r\n static Instance: RuntimeContextBase = new RuntimeContextBase();\r\n\r\n private constructor() { }\r\n Init(contextID: string) {\r\n this.ContextID = contextID;\r\n this.LastClickedCtrlName = \"\";\r\n this._insertMode = true;\r\n Manager.SetCurrentContextID(contextID);\r\n this.Parser = new XmlParser();\r\n }\r\n\r\n SaveLastClickInfo(controlName: string, clientX: number, clientY: number, offsetX: number, offsetY: number, isInPixels: boolean): void {\r\n this._lastCoordinates[0] = offsetX; // Gives the X location of the last click, relative to the window\r\n this._lastCoordinates[1] = offsetY; // Gives the Y location of the last click, relative to the window\r\n this._lastCoordinates[2] = clientX; // Gives the X location of the last click, relative to the control within which the click occurred\r\n this._lastCoordinates[3] = clientY; // Gives the Y location of the last click, relative to the control within which the click occurred\r\n\r\n this.LastClickCoordinatesAreInPixels = isInPixels;\r\n\r\n this.LastClickedCtrlName = \"\"; // is empty string\r\n if (!NString.IsNullOrEmpty(controlName)) {\r\n this.LastClickedCtrlName = controlName;\r\n }\r\n }\r\n\r\n /// <summary> toggle the _insertMode (between insert and overwrite). </summary>\r\n ToggleInsertMode(): void {\r\n this._insertMode = !this._insertMode;\r\n }\r\n}\r\n","import {DcValues} from './DcValues';\r\nimport {List, NNumber, NumberStyles, StringBuilder} from '@magic-xpa/mscorelib';\r\nimport {Base64, StorageAttribute} from '@magic-xpa/utils';\r\nimport {RecordUtils} from './RecordUtils';\r\nimport {GuiEnvironment} from '../../GuiEnvironment';\r\n\r\n/// <summary>\r\n/// Base class for DcValues builder. The class is abstract and, thus, must be inherited.\r\n/// The inheriting class, which will usually be in another package, will not be able to modify\r\n/// a DcValues object directly, since all its setter methods are 'internal'. This class will\r\n/// provide the setter methods for the inheriting builder.\r\n/// <para>Here's a usage example:\r\n/// <example>\r\n/// class MyConcreteBuilder : DcValuesBuilderBase\r\n/// {\r\n/// public override DcValues Build()\r\n/// {\r\n/// var dcValues = base.CreateDcValues(false);\r\n/// SetId(newId);\r\n/// SetType(theType);\r\n/// SetDisplayValues(theDisplayValues);\r\n/// ...\r\n/// return dcValues;\r\n/// }\r\n/// }\r\n/// </example>\r\n/// </summary>\r\nexport abstract class DcValuesBuilderBase {\r\n\r\n abstract Build(): DcValues;\r\n\r\n CreateDcValues(): DcValues {\r\n return new DcValues(false);\r\n }\r\n\r\n SetId(dcValues: DcValues, newId: number): void {\r\n dcValues.SetID(newId);\r\n }\r\n\r\n SetType(dcValues: DcValues, type: StorageAttribute): void {\r\n dcValues.setType(type);\r\n }\r\n\r\n SetDisplayValues(dcValues: DcValues, displayValues: string[]): void {\r\n dcValues.SetDisplayValues(displayValues);\r\n }\r\n\r\n SetLinkValues(dcValues: DcValues, linkValues: string[]): void {\r\n dcValues.SetLinkValues(linkValues);\r\n }\r\n\r\n SetNullFlags(dcValues: DcValues, nullFlagsString: string): void;\r\n SetNullFlags(dcValues: DcValues, nullFlags: boolean[]): void;\r\n SetNullFlags(dcValues: DcValues, nullFlagsStringOrNullFlags: any): void {\r\n if (arguments.length === 2 && (dcValues === null || dcValues instanceof DcValues) && (nullFlagsStringOrNullFlags === null || nullFlagsStringOrNullFlags.constructor === String)) {\r\n this.SetNullFlags_0(dcValues, nullFlagsStringOrNullFlags);\r\n return;\r\n }\r\n this.SetNullFlags_1(dcValues, nullFlagsStringOrNullFlags);\r\n }\r\n\r\n private SetNullFlags_0(dcValues: DcValues, nullFlagsString: string): void {\r\n let nullFlags: boolean[] = this.ParseNullFlags(nullFlagsString);\r\n dcValues.setNullFlags(nullFlags);\r\n }\r\n\r\n private SetNullFlags_1(dcValues: DcValues, nullFlags: boolean[]): void {\r\n dcValues.setNullFlags(nullFlags);\r\n }\r\n\r\n /// <summary>\r\n /// Parse a serialized values string as an array of values.\r\n /// </summary>\r\n /// <param name=\"valueStr\">This is string of the concatenated values, with each value preceded with a hex number denoting its length.</param>\r\n /// <param name=\"dataType\">The data type of the values.</param>\r\n /// <param name=\"useHex\"></param>\r\n protected ParseValues(valueStr: string, dataType: StorageAttribute, useHex: boolean): string[] {\r\n\r\n let snumber: string;\r\n let tmpValue: string = null;\r\n let buffer: List<string> = new List<string>();\r\n let len: number;\r\n let nextIdx: number;\r\n let endIdx: number;\r\n let suffixBuf: StringBuilder = null;\r\n\r\n switch (dataType) {\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n if (useHex)\r\n len = GuiEnvironment.Environment.GetSignificantNumSize() * 2;\r\n else\r\n len = Math.floor((GuiEnvironment.Environment.GetSignificantNumSize() + 2) / 3) * 4;\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n len = 1;\r\n break;\r\n\r\n default:\r\n len = 0;\r\n break;\r\n }\r\n\r\n nextIdx = 0;\r\n while (nextIdx < valueStr.length) {\r\n // compute the length of an alpha data\r\n if (dataType === StorageAttribute.ALPHA || dataType === StorageAttribute.UNICODE ||\r\n dataType === StorageAttribute.BLOB || dataType === StorageAttribute.BLOB_VECTOR) {\r\n snumber = valueStr.substr(nextIdx, 4);\r\n len = NNumber.Parse(snumber, NumberStyles.HexNumber);\r\n nextIdx += 4;\r\n }\r\n\r\n // check if the data is spanned\r\n if (len >= 0x8000) {\r\n suffixBuf = new StringBuilder();\r\n len -= 0x8000;\r\n // next segment may also be spanned\r\n nextIdx += RecordUtils.getSpannedField(valueStr, len, nextIdx, dataType, suffixBuf, useHex);\r\n buffer.push(suffixBuf.ToString());\r\n }\r\n else {\r\n endIdx = nextIdx + len;\r\n if (useHex)\r\n tmpValue = valueStr.substr(nextIdx, (endIdx) - (nextIdx));\r\n else\r\n tmpValue = Base64.decodeToHex(valueStr.substr(nextIdx, (endIdx) - (nextIdx)));\r\n // the following two lines are redundant since the makePrintable() is called\r\n // in the guiManager when building the options\r\n /*if (dataType == DATA_TYPE_ALPHA)\r\n tmpValue = guiManager.makePrintable(tmpValue);*/\r\n buffer.push(tmpValue);\r\n nextIdx = endIdx;\r\n }\r\n }\r\n\r\n // vector to array\r\n return buffer.ToArray();\r\n }\r\n\r\n ParseNullFlags(nullFlagsString: string): boolean[] {\r\n let array: boolean[] = new Array<boolean>(nullFlagsString.length);\r\n for (let i: number = 0; i < nullFlagsString.length; i = i + 1) {\r\n array[i] = (nullFlagsString.charAt(i) !== '0'/*'0'*/);\r\n }\r\n return array;\r\n }\r\n\r\n constructor() {\r\n }\r\n}\r\n","import { List } from '@magic-xpa/mscorelib';\r\nimport { FieldDef } from './FieldDef';\r\nimport { GuiDataViewBase } from './GuiDataViewBase';\r\nimport { XMLConstants, XmlParser } from '@magic-xpa/utils';\r\nimport { Manager } from '../../Manager';\r\nimport { Events } from '../../Events';\r\n\r\nexport abstract class FieldsTable {\r\n protected _fields: List<FieldDef> = null;\r\n\r\n /// <summary>\r\n /// Ctor\r\n /// </summary>\r\n constructor() {\r\n this._fields = new List<FieldDef>();\r\n }\r\n\r\n getField(idx: number): FieldDef;\r\n getField(fldName: string): FieldDef;\r\n getField(idxOrFldName: any): FieldDef {\r\n if ((idxOrFldName === null || idxOrFldName.constructor === Number)) {\r\n return this.getField_0(idxOrFldName);\r\n }\r\n return this.getField_1(idxOrFldName);\r\n }\r\n\r\n /// <summary>\r\n /// get a Field by its index\r\n /// </summary>\r\n /// <param name = \"idx\">the index of the requested field</param>\r\n /// <returns> a reference to the field</returns>\r\n private getField_0(idx: number): FieldDef {\r\n let fld: FieldDef = null;\r\n\r\n if (idx >= 0 && idx < this._fields.length)\r\n fld = this._fields.get_Item(idx);\r\n\r\n return fld;\r\n }\r\n\r\n /// <summary>\r\n /// return the number of fields in the table\r\n /// </summary>\r\n /// <returns> number of fields in the table</returns>\r\n getSize(): number {\r\n return this._fields.length;\r\n }\r\n\r\n /// <summary>\r\n /// To parse input string and fill inner data: Vector of commands\r\n /// </summary>\r\n /// <param name = \"dataview\">to the parent</param>\r\n fillData(parser: XmlParser, dataview: GuiDataViewBase): void {\r\n while (this.initInnerObjects(parser.getNextTag(), dataview)) {\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// To allocate and fill inner objects of the class\r\n /// </summary>\r\n /// <param name = \"foundTagName\">name of tag, of object, which need be allocated</param>\r\n /// <param name = \"dataview\">to data view</param>\r\n initInnerObjects(foundTagName: string, dataview: GuiDataViewBase): boolean {\r\n if (foundTagName === null)\r\n return false;\r\n\r\n let parser: XmlParser = Manager.GetCurrentRuntimeContext().Parser;\r\n if (foundTagName === XMLConstants.MG_TAG_FLDH) {\r\n let field: FieldDef = this.initField(parser, dataview);\r\n this._fields.push(field);\r\n }\r\n else if (foundTagName === XMLConstants.MG_TAG_DVHEADER)\r\n parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) +\r\n 1); // move Index to end of <dvheader> +1 for '>'\r\n else if (foundTagName === \"/\" + XMLConstants.MG_TAG_DVHEADER) {\r\n parser.setCurrIndex2EndOfTag();\r\n return false;\r\n }\r\n else {\r\n Events.WriteExceptionToLog(\"There is no such tag in FieldsTable. Insert else if to FieldsTable.initInnerObjects for \" + foundTagName);\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /// <summary>\r\n /// create a field and fill it by data\r\n /// this function must be virtual because it is used in RichClient but is not used in MgxpaRuntime\r\n /// </summary>\r\n /// <param name = \"dataview\"> Dataview </param>\r\n /// <returns> the created filled field </returns>\r\n protected abstract initField(parser: XmlParser, dataview: GuiDataViewBase): FieldDef;\r\n\r\n /// <summary>\r\n /// get a Field by its index\r\n /// </summary>\r\n /// <param name = \"fldName\">is the name of the requested field</param>\r\n /// <returns> a reference to the field</returns>\r\n private getField_1(fldName: string): FieldDef {\r\n return this._fields.find((field: FieldDef) => (field.getVarName() === fldName));\r\n }\r\n}\r\n","import {Dictionary, List, RefParam} from \"@magic-xpa/mscorelib\";\r\nimport {DcValues, EMPTY_DCREF} from \"./DcValues\";\r\nimport {FieldsTable} from \"./FieldsTable\";\r\nimport {GuiTaskBase} from \"../tasks/GuiTaskBase\";\r\nimport {FieldDef} from \"./FieldDef\";\r\nimport {ITask} from \"../tasks/ITask\";\r\nimport {Events} from \"../../Events\";\r\n\r\nimport {StorageAttribute, XmlParser} from \"@magic-xpa/utils\";\r\nimport {PIC} from \"../gui/PIC\";\r\nimport {DisplayConvertor} from \"../gui/DisplayConvertor\";\r\nimport {Commands} from \"../../Commands\";\r\nimport {CommandType} from \"../../GuiEnums\";\r\n\r\n/// <summary>\r\n/// functionality required by the GUI namespace from the DataViewBase class.\r\n/// </summary>\r\nexport abstract class GuiDataViewBase {\r\n\r\n _dcValsCollection: Dictionary<DcValues> = new Dictionary<DcValues>();\r\n private _emptyDataview: boolean = false; // Indicates the task is in Empty Dataview\r\n _fieldsTab: FieldsTable = null; // <dvheader> ...</dvheader> tag\r\n _task: GuiTaskBase = null; // container task\r\n\r\n // dummy DcValues for use with non-DC choice controls\r\n private _emptyChoice: DcValues = new DcValues(true);\r\n private _emptyChoiceForVectors: DcValues = new DcValues(true);\r\n\r\n\r\n abstract Init(): void;\r\n\r\n /// <summary>\r\n /// parse the DVHEADER tag\r\n /// </summary>\r\n abstract fillHeaderData(parser: XmlParser): void;\r\n\r\n abstract getChunkSize(): number;\r\n /// <summary>\r\n /// get a field by its id\r\n /// </summary>\r\n /// <param name = \"id\">field id </param>\r\n getField(id: number): FieldDef {\r\n if (this._fieldsTab != null)\r\n return this._fieldsTab.getField(id);\r\n\r\n Events.WriteExceptionToLog(\"in DataView.getFieldDef(int): There is no fieldsTab object\");\r\n return null;\r\n }\r\n\r\n /// <returns> the emptyDataview</returns>\r\n isEmptyDataview(): boolean {\r\n return this._emptyDataview;\r\n }\r\n\r\n /// <param name = \"emptyDataview\">the emptyDataview to set</param>\r\n setEmptyDataview(emptyDataview: boolean): void {\r\n this._emptyDataview = emptyDataview;\r\n Commands.addBoolWithLine(CommandType.SET_EMPTY_DATAVIEW, this._task.getForm(), 0, emptyDataview);\r\n }\r\n\r\n /// <summary>\r\n /// return a reference to the task of this dataview\r\n /// </summary>\r\n getTask(): ITask {\r\n return this._task;\r\n }\r\n\r\n/// <summary>\r\n /// get dcValues object by its id\r\n /// </summary>\r\n /// <param name = \"dcId\">id of a data control values </param>\r\n getDcValues(dcId: number): DcValues {\r\n if (dcId === EMPTY_DCREF)\r\n return this.getEmptyChoice();\r\n\r\n let dcValues: DcValues;\r\n let dcv: RefParam<DcValues> = new RefParam<DcValues>(dcValues);\r\n this._dcValsCollection.TryGetValue(dcId.toString(), dcv);\r\n return dcv.value;\r\n }\r\n\r\n /// <returns>dummy DcValues for use with non-DC choice controls</returns>\r\n getEmptyChoice(): DcValues {\r\n return this._emptyChoice;\r\n }\r\n\r\n\r\n getEmptyChoiceForVectors(): DcValues {\r\n return this._emptyChoiceForVectors;\r\n }\r\n\r\n /// <summary>\r\n /// get fields table (<dvheader>) of the ((DataView)dataView)\r\n /// </summary>\r\n GetFieldsTab(): FieldsTable {\r\n return this._fieldsTab;\r\n }\r\n\r\n /// <summary>\r\n /// get route params\r\n /// </summary>\r\n GetRouteParams(): List<any> {\r\n let params: List < any > = new List();\r\n for (let i = 0; i < this._fieldsTab.getSize(); i++) {\r\n\r\n let field: any = this._fieldsTab.getField(i);\r\n let val: any;\r\n if (field.IsExposedRouteParam && !field.isNull()) {\r\n switch (field.getType())\r\n {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE: {\r\n val = field.getDispValue();\r\n if (field.isNull())\r\n val = field.getNullDisplay();\r\n params.push(<string>val.trim());\r\n }\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN: {\r\n if (field.isNull())\r\n params.push(false);\r\n else\r\n params.push(field.getDispValue().charAt(0) === '1' ? true : false);\r\n }\r\n break;\r\n\r\n case StorageAttribute.NUMERIC: {\r\n val = field.getDispValue();\r\n if (field.isNull())\r\n val = field.getNullDisplay();\r\n let pic: PIC = new PIC(field.getPicture(), field.getType(), this.getTask().getCompIdx());\r\n val = DisplayConvertor.Instance.mg2disp(val, \"\", pic, true, 0, false);\r\n params.push(val);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return (params.length > 0) ? params : null;\r\n }\r\n\r\n}\r\n","import {Debug, StackTrace} from \"@magic-xpa/mscorelib\";\r\nimport {IReferencedObject} from \"./IReferencedObject\";\r\nimport {Logger, Logger_LogLevels} from \"@magic-xpa/utils\";\r\n\r\nexport abstract class ObjectReferenceBase {\r\n private static LastId: number = 0;\r\n public Referent: IReferencedObject = null;\r\n private isDisposed: boolean = false;\r\n private id: number = 0;\r\n\r\n _instantiationTrace: StackTrace = null;\r\n\r\n constructor(referent: IReferencedObject) {\r\n this.id = (ObjectReferenceBase.LastId = ObjectReferenceBase.LastId + 1);\r\n this.isDisposed = false;\r\n this.Referent = referent;\r\n if (Logger.Instance.LogLevel >= Logger_LogLevels.Development) {\r\n Logger.Instance.WriteDevToLog(\"Creating \" + this.toString());\r\n this._instantiationTrace = new StackTrace();\r\n }\r\n referent.AddReference();\r\n }\r\n\r\n // TODO : Implement destructor\r\n// ~ObjectReferenceBase() {\r\n// Logger.Instance.WriteDevToLog(\"Finalizing \" + this);\r\n// this.Dispose(false);\r\n// }\r\n\r\n Dispose(): void;\r\n Dispose(isDisposing: boolean): void;\r\n Dispose(isDisposing?: boolean): void {\r\n if (arguments.length === 0) {\r\n this.Dispose_0();\r\n return;\r\n }\r\n this.Dispose_1();\r\n }\r\n\r\n private Dispose_0(): void {\r\n Logger.Instance.WriteDevToLog(\"Disposing \" + this);\r\n\r\n // TODO\r\n // GC.SuppressFinalize(this);\r\n this.Dispose(true);\r\n }\r\n\r\n private Dispose_1(): void {\r\n if (!this.isDisposed) {\r\n if (!this.Referent.HasReferences) {\r\n if (Logger.Instance.LogLevel >= Logger_LogLevels.Development) {\r\n Logger.Instance.WriteSupportToLog(\"Referent does not have any more references: \" + this.Referent, false);\r\n Logger.Instance.WriteStackTrace(this._instantiationTrace, 15, \"Instantiation trace:\");\r\n }\r\n Debug.Assert(false, \"Referent does not have any more references. See DEV level log.\");\r\n }\r\n else\r\n this.Referent.RemoveReference();\r\n }\r\n this.isDisposed = true;\r\n }\r\n\r\n abstract Clone(): ObjectReferenceBase;\r\n\r\n toString(): string {\r\n return \"{Reference \" + this.id + \" to: \" + this.Referent + \"}\";\r\n }\r\n}\r\n","import {ObjectReferenceBase} from \"./ObjectReferenceBase\";\r\nimport {List} from \"@magic-xpa/mscorelib\";\r\n\r\nexport class ObjectReferencesCollection {\r\n private _refs: List<ObjectReferenceBase> = new List();\r\n\r\n get_Item(i: number): ObjectReferenceBase {\r\n return this._refs.get_Item(i);\r\n }\r\n\r\n Add(objRef: ObjectReferenceBase): void {\r\n this._refs.push(objRef);\r\n }\r\n\r\n Dispose(): void {\r\n for (let i: number = 0; i < this._refs.length; i = i + 1) {\r\n (this._refs.get_Item(i)).Dispose();\r\n }\r\n }\r\n\r\n Clone(): ObjectReferencesCollection {\r\n let objectReferencesCollection: ObjectReferencesCollection = new ObjectReferencesCollection();\r\n for (let i: number = 0; i < this._refs.length; i = i + 1) {\r\n let objRef: ObjectReferenceBase = this.get_Item(i).Clone();\r\n objectReferencesCollection.Add(objRef);\r\n }\r\n return objectReferencesCollection;\r\n }\r\n\r\n // for iteration purpose\r\n get Refs() {\r\n return this._refs;\r\n }\r\n}\r\n"," export class ExpressionInterface {\r\n\r\n // General constants definitions\r\n\r\n static EXP_OPER_LEN: number = 2;\r\n static EXP_OPER_FUNC_PTR_LEN: number = 4;\r\n\r\n // expression operators\r\n static EXP_OP_NONE: number = 0;\r\n static EXP_OP_V: number = 1;\r\n static EXP_OP_VAR: number = 2;\r\n static EXP_OP_A: number = 3;\r\n static EXP_OP_H: number = 4;\r\n static EXP_OP_N: number = 5;\r\n static EXP_OP_D: number = 6;\r\n static EXP_OP_T: number = 7;\r\n static EXP_OP_L: number = 8;\r\n static EXP_OP_F: number = 9;\r\n static EXP_OP_K: number = 10;\r\n static EXP_OP_P: number = 11;\r\n static EXP_OP_M: number = 12;\r\n static EXP_OP_ACT: number = 13;\r\n static EXP_OP_KBD: number = 14;\r\n static EXP_OP_ADD: number = 15;\r\n static EXP_OP_SUB: number = 16;\r\n static EXP_OP_MUL: number = 17;\r\n static EXP_OP_DIV: number = 18;\r\n static EXP_OP_MOD: number = 19;\r\n static EXP_OP_NEG: number = 20;\r\n static EXP_OP_FIX: number = 21;\r\n static EXP_OP_ROUND: number = 22;\r\n static EXP_OP_EQ: number = 23;\r\n static EXP_OP_NE: number = 24;\r\n static EXP_OP_LE: number = 25;\r\n static EXP_OP_LT: number = 26;\r\n static EXP_OP_GE: number = 27;\r\n static EXP_OP_GT: number = 28;\r\n static EXP_OP_NOT: number = 29;\r\n static EXP_OP_OR: number = 30;\r\n static EXP_OP_AND: number = 31;\r\n static EXP_OP_IF: number = 32;\r\n static EXP_OP_LEN: number = 33;\r\n static EXP_OP_CON: number = 34;\r\n static EXP_OP_MID: number = 35;\r\n static EXP_OP_LEFT: number = 36;\r\n static EXP_OP_RIGHT: number = 37;\r\n static EXP_OP_FILL: number = 38;\r\n static EXP_OP_INSTR: number = 39;\r\n static EXP_OP_TRIM: number = 40;\r\n static EXP_OP_LTRIM: number = 41;\r\n static EXP_OP_RTRIM: number = 42;\r\n static EXP_OP_STR: number = 43;\r\n static EXP_OP_VAL: number = 44;\r\n static EXP_OP_STAT: number = 45;\r\n static EXP_OP_LEVEL: number = 46;\r\n static EXP_OP_COUNTER: number = 47;\r\n static EXP_OP_VARPREV: number = 48;\r\n static EXP_OP_VARCURR: number = 49;\r\n static EXP_OP_VARMOD: number = 50;\r\n static EXP_OP_VARINP: number = 51;\r\n static EXP_OP_VARNAME: number = 52;\r\n static EXP_OP_VIEWMOD: number = 53;\r\n static EXP_OP_ENV: number = 54;\r\n static EXP_OP_INIGET: number = 55;\r\n static EXP_OP_INIPUT: number = 56;\r\n static EXP_OP_TERM: number = 59;\r\n static EXP_OP_DATE: number = 61;\r\n static EXP_OP_TIME: number = 62;\r\n static EXP_OP_SYS: number = 63;\r\n static EXP_OP_PROG: number = 66;\r\n static EXP_OP_PWR: number = 68;\r\n static EXP_OP_LOG: number = 69;\r\n static EXP_OP_EXP: number = 70;\r\n static EXP_OP_ABS: number = 71;\r\n static EXP_OP_SIN: number = 72;\r\n static EXP_OP_COS: number = 73;\r\n static EXP_OP_TAN: number = 74;\r\n static EXP_OP_ASIN: number = 75;\r\n static EXP_OP_ACOS: number = 76;\r\n static EXP_OP_ATAN: number = 77;\r\n static EXP_OP_RAND: number = 78;\r\n static EXP_OP_MIN: number = 79;\r\n static EXP_OP_MAX: number = 80;\r\n static EXP_OP_RANGE: number = 81;\r\n static EXP_OP_REP: number = 82;\r\n static EXP_OP_INS: number = 83;\r\n static EXP_OP_DEL: number = 84;\r\n static EXP_OP_FLIP: number = 85;\r\n static EXP_OP_UPPER: number = 86;\r\n static EXP_OP_LOWER: number = 87;\r\n static EXP_OP_CRC: number = 88;\r\n static EXP_OP_CHKDGT: number = 89;\r\n static EXP_OP_SOUNDX: number = 90;\r\n static EXP_OP_HSTR: number = 91;\r\n static EXP_OP_HVAL: number = 92;\r\n static EXP_OP_CHR: number = 93;\r\n static EXP_OP_ASC: number = 94;\r\n static EXP_OP_MSTR: number = 103;\r\n static EXP_OP_MVAL: number = 104;\r\n static EXP_OP_DSTR: number = 105;\r\n static EXP_OP_DVAL: number = 106;\r\n static EXP_OP_TSTR: number = 107;\r\n static EXP_OP_TVAL: number = 108;\r\n static EXP_OP_DAY: number = 109;\r\n static EXP_OP_MONTH: number = 110;\r\n static EXP_OP_YEAR: number = 111;\r\n static EXP_OP_DOW: number = 112;\r\n static EXP_OP_CDOW: number = 113;\r\n static EXP_OP_CMONTH: number = 114;\r\n static EXP_OP_NDOW: number = 115;\r\n static EXP_OP_NMONTH: number = 116;\r\n static EXP_OP_SECOND: number = 117;\r\n static EXP_OP_MINUTE: number = 118;\r\n static EXP_OP_HOUR: number = 119;\r\n static EXP_OP_DELAY: number = 120;\r\n static EXP_OP_IDLE: number = 121;\r\n static EXP_OP_LOGICAL: number = 138;\r\n static EXP_OP_VISUAL: number = 139;\r\n static EXP_OP_ADDDATE: number = 156;\r\n static EXP_OP_ADDTIME: number = 157;\r\n static EXP_OP_OWNER: number = 158;\r\n static EXP_OP_VARATTR: number = 159;\r\n static EXP_OP_BOM: number = 160;\r\n static EXP_OP_BOY: number = 161;\r\n static EXP_OP_EOM: number = 162;\r\n static EXP_OP_EOY: number = 163;\r\n static EXP_OP_RIGHT_LITERAL: number = 165;\r\n static EXP_OP_ROLLBACK: number = 167;\r\n static EXP_OP_VARSET: number = 168;\r\n static EXP_OP_EVALX: number = 171;\r\n static EXP_OP_IGNORE: number = 172;\r\n static EXP_OP_NULL: number = 173;\r\n static EXP_OP_NULL_A: number = 174;\r\n static EXP_OP_NULL_N: number = 175;\r\n static EXP_OP_NULL_B: number = 176;\r\n static EXP_OP_NULL_D: number = 177;\r\n static EXP_OP_NULL_T: number = 178;\r\n static EXP_OP_ISNULL: number = 179;\r\n static EXP_OP_TDEPTH: number = 180;\r\n static EXP_OP_MINMAGIC: number = 193;\r\n static EXP_OP_MAXMAGIC: number = 194;\r\n static EXP_OP_RESMAGIC: number = 195;\r\n static EXP_OP_FILEDLG: number = 196;\r\n static EXP_OP_MLS_TRANS: number = 199;\r\n static EXP_OP_CTRL_NAME: number = 200;\r\n static EXP_OP_GETLANG: number = 206;\r\n static EXP_OP_NULL_O: number = 210;\r\n static EXP_OP_GETPARAM: number = 212;\r\n static EXP_OP_SETPARAM: number = 213;\r\n static EXP_OP_CND_RANGE: number = 219;\r\n static EXP_OP_ISDEFAULT: number = 235;\r\n static EXP_OP_FORM: number = 236;\r\n static EXP_OP_STRTOKEN: number = 237;\r\n static EXP_OP_INIGETLN: number = 241;\r\n static EXP_OP_EXPCALC: number = 242;\r\n static EXP_OP_E: number = 243;\r\n static EXP_OP_WEB_REFERENCE: number = 267;\r\n static EXP_OP_CASE: number = 273;\r\n static EXP_OP_LIKE: number = 275;\r\n static EXP_OP_CALLJS: number = 283;\r\n static EXP_OP_THIS: number = 290;\r\n static EXP_OP_REPSTR: number = 303;\r\n static EXP_OP_DBROUND: number = 306;\r\n static EXP_OP_VARPIC: number = 307;\r\n static EXP_OP_STRTOK_CNT: number = 309;\r\n static EXP_OP_VARCURRN: number = 310;\r\n static EXP_OP_VARINDEX: number = 311;\r\n static EXP_OP_JCDOW: number = 343;\r\n static EXP_OP_JMONTH: number = 344;\r\n static EXP_OP_JNDOW: number = 345;\r\n static EXP_OP_JYEAR: number = 346;\r\n static EXP_OP_JGENGO: number = 347;\r\n static EXP_OP_HAN: number = 350;\r\n static EXP_OP_ZEN: number = 351;\r\n static EXP_OP_ZENS: number = 352;\r\n static EXP_OP_ZIMEREAD: number = 353;\r\n static EXP_OP_ZKANA: number = 354;\r\n static EXP_OP_GOTO_CTRL: number = 368;\r\n static EXP_OP_TRANSLATE: number = 373;\r\n static EXP_OP_ASTR: number = 374;\r\n\r\n static EXP_OP_LOOPCOUNTER: number = 401;\r\n\r\n static EXP_OP_VECGET: number = 417;\r\n static EXP_OP_VECSET: number = 418;\r\n static EXP_OP_VECSIZE: number = 419;\r\n static EXP_OP_VECCELLATTR: number = 420;\r\n static EXP_OP_BLOBSIZE: number = 442;\r\n static EXP_OP_STRTOKEN_IDX: number = 448;\r\n static EXP_OP_MTIME: number = 449;\r\n static EXP_OP_MTVAL: number = 450;\r\n static EXP_OP_MTSTR: number = 451;\r\n static EXP_OP_IN: number = 462;\r\n static EXP_OP_ISCOMPONENT: number = 465;\r\n static EXP_OP_EXT_A: number = 485;\r\n static EXP_OP_NULL_U: number = 491;\r\n static EXP_OP_USER_DEFINED_FUNC: number = 496;\r\n static EXP_OP_SUBFORM_EXEC_MODE: number = 497;\r\n static EXP_OP_UNICODEASC: number = 506;\r\n static EXP_OP_ADDDT: number = 509;\r\n static EXP_OP_DIFDT: number = 510;\r\n static EXP_OP_ISFIRSTRECORDCYCLE: number = 511;\r\n static EXP_OP_MAINLEVEL: number = 512;\r\n static EXP_OP_MAINDISPLAY: number = 515;\r\n static EXP_OP_DBVIEWSIZE: number = 539;\r\n static EXP_OP_DBVIEWROWIDX: number = 540;\r\n static EXP_OP_PROJECTDIR: number = 541;\r\n static EXP_OP_FORMSTATECLEAR: number = 542;\r\n static EXP_OP_PUBLICNAME: number = 543;\r\n static EXP_OP_TASKID: number = 544;\r\n static EXP_OP_STR_BUILD: number = 549;\r\n static EXP_OP_EMPTY_DATA_VIEW: number = 561;\r\n static EXP_OP_STATUSBARSETTEXT: number = 568;\r\n static EXP_OP_CLIENT_DIRDLG: number = 574;\r\n static EXP_OP_CLIENT_REDIRECT: number = 577;\r\n static EXP_OP_IS_MOBILE_CLIENT: number = 593;\r\n static EXP_OP_CLIENT_SESSION_STATISTICS_GET: number = 594;\r\n static EXP_OP_TASKTYPE: number = 612;\r\n static EXP_OP_CLIENT_FILE_TO_SERVER: number = 615;\r\n static EXP_OP_RANGE_ADD: number = 616;\r\n static EXP_OP_RANGE_RESET: number = 617;\r\n static EXP_OP_LOCATE_ADD: number = 618;\r\n static EXP_OP_LOCATE_RESET: number = 619;\r\n static EXP_OP_SORT_ADD: number = 620;\r\n static EXP_OP_SORT_RESET: number = 621;\r\n static EXP_OP_TSK_INSTANCE: number = 622;\r\n static EXP_OP_CLIENTSESSION_SET: number = 632;\r\n static EXP_OP_UTCDATE: number = 633;\r\n static EXP_OP_UTCTIME: number = 634;\r\n static EXP_OP_UTCMTIME: number = 635;\r\n static EXP_OP_CLIENT_DB_DISCONNECT: number = 636;\r\n static EXP_OP_DATAVIEW_TO_DATASOURCE: number = 637;\r\n static EXP_OP_CLIENT_DB_DEL: number = 638;\r\n static EXP_OP_VARDISPLAYNAME: number = 647;\r\n static EXP_OP_CONTROL_ITEMS_REFRESH: number = 649;\r\n static EXP_OP_VARCONTROLID: number = 650;\r\n static EXP_OP_CONTROLITEMSLIST: number = 651;\r\n static EXP_OP_CONTROLDISPLAYLIST: number = 652;\r\n static EXP_OP_CLIENT_SQL_EXECUTE: number = 653;\r\n static EXP_OP_CONTROL_SELECT_PROGRAM: number = 656;\r\n static EXP_OP_SET_TITLE: number = 687;\r\n static EXP_OP_IS_ROW_EDITING: number = 689;\r\n static EXP_OP_IS_LOGGED_IN: number = 690;\r\n\r\n static EXP_OP_SET_COOKIE: number = 701;\r\n static EXP_OP_GET_COOKIE: number = 702;\r\n static EXP_OP_DELETE_COOKIE: number = 703;\r\n\r\n static EXP_OP_ROUTEGET: number = 705;\r\n\r\n constructor() {\r\n }\r\n}\r\n","import {ApplicationException, NString} from '@magic-xpa/mscorelib';\r\nimport {Rtf, StorageAttribute, StorageAttributeCheck, StrUtil, UtilImeJpn} from '@magic-xpa/utils';\r\nimport {GuiTaskBase} from '../tasks/GuiTaskBase';\r\nimport {ITask} from '../tasks/ITask';\r\nimport {Manager} from '../../Manager';\r\nimport {MgControlBase} from '../gui/MgControlBase';\r\nimport {NUM_TYPE} from '../data/NUM_TYPE';\r\nimport {GuiFieldBase} from '../data/GuiFieldBase';\r\n\r\nimport {BlobType} from '../data/BlobType';\r\nimport {ValidationDetails} from '../gui/ValidationDetails';\r\nimport {PIC} from '../gui/PIC';\r\nimport {DisplayConvertor} from '../gui/DisplayConvertor';\r\n\r\n\r\nexport abstract class GuiExpressionEvaluator {\r\n static TRIGGER_TASK: number = 500000;\r\n ExpTask: GuiTaskBase = null;\r\n private Events: any = null;\r\n\r\n\r\n abstract HandleControlGoto(task: ITask, ctrl: MgControlBase, rowNo: number): boolean;\r\n\r\n\r\n /// <summary>(protected)\r\n /// sets the status bar text with the given text and\r\n /// sets the result with the last text that was set to the status bar by the use of this function\r\n /// </summary>\r\n /// <param name = \"resVal\">last text of status bar</param>\r\n /// <param name = \"statusBarText\">the text to be set at status bar</param>\r\n eval_op_statusbar_set_text(resVal: ExpVal, statusBarText: ExpVal): void {\r\n resVal.Attr = StorageAttribute.UNICODE;\r\n resVal.StrVal = Manager.GetCurrentRuntimeContext().DefaultStatusMsg;\r\n\r\n if (Manager.GetCurrentRuntimeContext().DefaultStatusMsg === null) {\r\n resVal.StrVal = '';\r\n } else {\r\n resVal.StrVal = Manager.GetCurrentRuntimeContext().DefaultStatusMsg;\r\n }\r\n resVal.IsNull = false;\r\n\r\n if (!(statusBarText.Attr !== StorageAttribute.ALPHA && statusBarText.Attr !== StorageAttribute.UNICODE)) {\r\n if (!statusBarText.IsNull) {\r\n let text: string = statusBarText.StrVal;\r\n let task: GuiTaskBase = <GuiTaskBase>this.ExpTask.GetContextTask();\r\n\r\n // In case of non interactive tasks, it is possible that task has open window = No, So display the status bar msg on frame window.\r\n if (task.getForm() === null && Manager.GetCurrentRuntimeContext().FrameForm !== null) {\r\n task = Manager.GetCurrentRuntimeContext().FrameForm.getTask();\r\n }\r\n task.WriteToMessagePane(text);\r\n Manager.GetCurrentRuntimeContext().DefaultStatusMsg = text;\r\n }\r\n }\r\n }\r\n\r\n\r\n IsParallel(): boolean {\r\n return false;\r\n }\r\n\r\n\r\n /// <summary>(protected)\r\n /// return the control name of last clicked control\r\n /// </summary>\r\n eval_op_ctrl_name(resVal: ExpVal): void {\r\n let lastClickedCtrlName: string = Manager.GetCurrentRuntimeContext().LastClickedCtrlName;\r\n resVal.StrVal = (NString.IsNullOrEmpty(lastClickedCtrlName) ? '' : lastClickedCtrlName);\r\n resVal.Attr = StorageAttribute.ALPHA;\r\n }\r\n\r\n\r\n /// <summary>(protected)\r\n /// Moves the caret to specified control\r\n /// </summary>\r\n /// <param name = \"ctrlName\">the name of the destination control</param>\r\n /// <param name = \"rowNum\">the row in the table 0 represents current row</param>\r\n /// <param name = \"generation\">the task generation</param>\r\n /// <param name = \"retVal\">the result</param>\r\n eval_op_gotoCtrl(ctrlName: ExpVal, rowNum: ExpVal, generation: ExpVal, retVal: ExpVal): void {\r\n retVal.Attr = StorageAttribute.BOOLEAN;\r\n retVal.BoolVal = false;\r\n let task: GuiTaskBase = this.GetContextTask(generation.MgNumVal.NUM_2_LONG());\r\n if (task === null || task.getForm() === null)\r\n return;\r\n\r\n let iRowNum: number = rowNum.MgNumVal.NUM_2_LONG();\r\n let sCtrlName: string = StrUtil.rtrim(ctrlName.StrVal);\r\n let ctrl: MgControlBase = task.getForm().GetCtrl(sCtrlName);\r\n retVal.BoolVal = this.HandleControlGoto(task, ctrl, iRowNum);\r\n }\r\n\r\n /// <summary>(protected)\r\n /// get context task by a specified generation\r\n /// </summary>\r\n /// <param name = \"currTask\">current task</param>\r\n /// <param name = \"generation\">task generation</param>\r\n /// <returns> task at specified generation</returns>\r\n static GetContextTask(currTask: GuiTaskBase, generation: number): GuiTaskBase {\r\n let task: GuiTaskBase = null;\r\n let taskBase: GuiTaskBase = <GuiTaskBase> currTask.GetContextTask();\r\n if (generation === GuiExpressionEvaluator.TRIGGER_TASK) {\r\n task = taskBase;\r\n } else {\r\n if (generation < taskBase.GetTaskDepth()) {\r\n task = <GuiTaskBase>taskBase.GetTaskAncestor(generation);\r\n }\r\n }\r\n return task;\r\n }\r\n\r\n /// <summary>(protected)\r\n /// get context task by a specified generation\r\n /// </summary>\r\n /// <param name = \"generation\">task generation</param>\r\n /// <returns> task at specified generation</returns>\r\n GetContextTask(generation: number): GuiTaskBase {\r\n return GuiExpressionEvaluator.GetContextTask(this.ExpTask, generation);\r\n }\r\n\r\n /// <summary>(protected)\r\n /// Create a NUM_TYPE with the value of i and set the ExpVal with it\r\n /// </summary>\r\n ConstructMagicNum(resVal: ExpVal, i: number, attr: StorageAttribute): void {\r\n resVal.MgNumVal = new NUM_TYPE();\r\n resVal.MgNumVal.NUM_4_LONG(i);\r\n resVal.Attr = attr;\r\n }\r\n\r\n /// <summary>(public)\r\n /// set null value to Expression Evaluator\r\n /// </summary>\r\n /// <param name = \"resVal\">to set it NULL</param>\r\n /// <param name = \"attr\">attribute of ExpValue</param>\r\n SetNULL(resVal: ExpVal, attr: StorageAttribute): void {\r\n resVal.IsNull = true;\r\n resVal.Attr = attr;\r\n\r\n switch (attr) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n resVal.StrVal = null;\r\n break;\r\n\r\n case StorageAttribute.TIME:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.NUMERIC:\r\n resVal.MgNumVal = null;\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n resVal.BoolVal = false;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// validate value of the control\r\n /// </summary>\r\n /// <param name = \"currCtrl\">control whose value need to be evaluated</param>\r\n /// <param name = \"oldValue\">old value of the control</param>\r\n /// <param name = \"newValue\">new value of the control</param>\r\n GetValidatedValue(currCtrl: MgControlBase, oldValue: string, newValue: string): string {\r\n let vd: ValidationDetails = currCtrl.buildCopyPicture(oldValue, newValue);\r\n vd.evaluate();\r\n let validationFailed: boolean = vd.ValidationFailed;\r\n let ctrlValue: string;\r\n if (validationFailed) {\r\n let field: GuiFieldBase = currCtrl.getField();\r\n ctrlValue = ((field.getType() === StorageAttribute.BLOB_VECTOR) ? field.getCellDefualtValue() : field.getDefaultValue());\r\n } else {\r\n ctrlValue = vd.getDispValue();\r\n }\r\n return ctrlValue;\r\n }\r\n\r\n /// <summary>\r\n /// set expValue of needed type . the value is inited by value\r\n /// </summary>\r\n /// <param name = \"resVal\">need be evaluated/initialized</param>\r\n /// <param name = \"type\">of resVal (Alpha|Numeric|Logical|Date|Time|Blob|Vector)</param>\r\n /// <param name = \"val\">string/hexa string</param>\r\n /// <param name = \"pic\">for string evaluation</param>\r\n SetVal(resVal: ExpVal, type: StorageAttribute, val: string, pic: PIC): void {\r\n\r\n switch (type) {\r\n\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.BLOB:\r\n case StorageAttribute.BLOB_VECTOR:\r\n case StorageAttribute.UNICODE:\r\n resVal.Attr = type;\r\n resVal.StrVal = val;\r\n\r\n if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR)\r\n resVal.IncludeBlobPrefix = true;\r\n break;\r\n\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n resVal.Attr = type;\r\n if (val == null)\r\n resVal.MgNumVal = null;\r\n else if (pic == null)\r\n resVal.MgNumVal = new NUM_TYPE(val);\r\n else\r\n resVal.MgNumVal = new NUM_TYPE(val, pic, (this.ExpTask).getCompIdx());\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n resVal.Attr = type;\r\n resVal.BoolVal = DisplayConvertor.toBoolean(val);\r\n break;\r\n\r\n default:\r\n this.SetNULL(resVal, type);\r\n\r\n this.Events.WriteExceptionToLog('ExpressionEvaluator.SetVal() there is no such type : ' + type);\r\n\r\n // ClientManager.Instance.WriteErrorToLog(\"ExpressionEvaluator.SetVal() there is no such type : \" + type);\r\n break;\r\n }\r\n }\r\n\r\n /// <summary>(protected)\r\n /// trims and returns the string.\r\n /// </summary>\r\n /// <param name = \"val\">containing string to be trimmed (strVal_ member of ExpVal)</param>\r\n /// <returns>trimmed string</returns>\r\n static exp_build_string(val: ExpVal): string {\r\n let name: string = '';\r\n if (val.StrVal !== null) {\r\n let len: number = <number>val.StrVal.length;\r\n if (len > 0) {\r\n name = StrUtil.ZstringMake(val.StrVal, <number>len);\r\n }\r\n }\r\n return name;\r\n }\r\n\r\n /// <summary>\r\n /// checks if the object is instance of ExpVal\r\n /// </summary>\r\n /// <param name=\"obj\"></param>\r\n /// <returns></returns>\r\n static isExpVal(obj: any): boolean {\r\n return obj instanceof ExpVal;\r\n }\r\n\r\n /// <summary>(private)\r\n /// handle conversions between blob and unicode/alpha\r\n /// </summary>\r\n /// <param name=\"val\"></param>\r\n /// <param name=\"expectedType\"></param>\r\n private BlobStringConversion(val: ExpVal, expectedType: StorageAttribute): void {\r\n if (StorageAttributeCheck.IsTypeAlphaOrUnicode(expectedType)) {\r\n if (val.Attr === StorageAttribute.BLOB) {\r\n let includeBlobPrefix: boolean = val.IncludeBlobPrefix;\r\n if (includeBlobPrefix) {\r\n let contentType: string = BlobType.getContentType(val.StrVal);\r\n val.StrVal = BlobType.getString(val.StrVal);\r\n val.IncludeBlobPrefix = false;\r\n if (contentType !== BlobType.CONTENT_TYPE_BINARY && Rtf.isRtf(val.StrVal)) {\r\n val.StrVal = StrUtil.GetPlainTextfromRtf(val.StrVal);\r\n }\r\n }\r\n val.Attr = expectedType;\r\n } else {\r\n if (val.Attr === StorageAttribute.BLOB_VECTOR) {\r\n let includeBlobPrefix2: boolean = val.IncludeBlobPrefix;\r\n if (includeBlobPrefix2) {\r\n val.StrVal = BlobType.removeBlobPrefix(val.StrVal);\r\n val.IncludeBlobPrefix = false;\r\n }\r\n val.Attr = expectedType;\r\n }\r\n }\r\n } else {\r\n if (expectedType === StorageAttribute.BLOB) {\r\n if (StorageAttributeCheck.IsTypeAlphaOrUnicode(val.Attr)) {\r\n let contentType: string = (val.Attr === StorageAttribute.ALPHA) ? BlobType.CONTENT_TYPE_ANSI : BlobType.CONTENT_TYPE_UNICODE;\r\n val.StrVal = BlobType.createFromString(val.StrVal, contentType);\r\n val.IncludeBlobPrefix = true;\r\n val.Attr = expectedType;\r\n }\r\n }\r\n }\r\n }\r\n\r\n eval_op_zimeread(resVal: ExpVal): void {\r\n resVal.Attr = StorageAttribute.ALPHA;\r\n resVal.StrVal = '';\r\n let utilImeJpn: UtilImeJpn = Manager.UtilImeJpn;\r\n if (utilImeJpn !== null) {\r\n let strImeRead: string = utilImeJpn.StrImeRead;\r\n if (!NString.IsNullOrEmpty(utilImeJpn.StrImeRead)) {\r\n resVal.StrVal = strImeRead;\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n ConvertExpVal(val: ExpVal, expectedType: StorageAttribute): void {\r\n if (StorageAttributeCheck.StorageFldAlphaUnicodeOrBlob(val.Attr, expectedType)) {\r\n this.BlobStringConversion(val, expectedType);\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n/// <summary>\r\n/// The class holds data of a basic element (constant or variable) that\r\n/// appears or are result of execution of operator\r\n/// </summary>\r\nexport class ExpVal {\r\n Attr: StorageAttribute = StorageAttribute.NONE;\r\n IsNull: boolean = false;\r\n MgNumVal: NUM_TYPE = null;\r\n StrVal: string = null;\r\n BoolVal: boolean = false;\r\n IncludeBlobPrefix: boolean = false;\r\n OriginalNull: boolean = false;\r\n VectorField: GuiFieldBase = null;\r\n\r\n constructor();\r\n constructor(attr: StorageAttribute, isNull: boolean, mgVal: string);\r\n constructor(attr?: StorageAttribute, isNull?: boolean, mgVal?: string) {\r\n if (arguments.length === 0) {\r\n this.constructor_0();\r\n return;\r\n }\r\n this.constructor_1(attr, isNull, mgVal);\r\n }\r\n\r\n private constructor_0(): void {\r\n this.Attr = StorageAttribute.NONE;\r\n }\r\n\r\n private constructor_1(attr: StorageAttribute, isNull: boolean, mgVal: string): void {\r\n this.Init(attr, isNull, mgVal);\r\n }\r\n\r\n Copy(src: ExpVal): void {\r\n this.Attr = src.Attr;\r\n this.BoolVal = src.BoolVal;\r\n this.IncludeBlobPrefix = src.IncludeBlobPrefix;\r\n this.IsNull = src.IsNull;\r\n this.MgNumVal = src.MgNumVal;\r\n this.StrVal = src.StrVal;\r\n this.VectorField = src.VectorField;\r\n this.OriginalNull = src.OriginalNull;\r\n }\r\n\r\n /// <summary>\r\n /// nullify\r\n /// </summary>\r\n Nullify(): void {\r\n this.Init(StorageAttribute.NONE, true, null);\r\n }\r\n\r\n /// <summary>\r\n /// initialize\r\n /// </summary>\r\n Init(attr: StorageAttribute, isNull: boolean, mgVal: string): void {\r\n this.Attr = attr;\r\n this.IsNull = isNull;\r\n\r\n\r\n switch (this.Attr) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.UNICODE:\r\n this.StrVal = mgVal;\r\n break;\r\n\r\n case StorageAttribute.BLOB:\r\n case StorageAttribute.BLOB_VECTOR:\r\n this.StrVal = mgVal;\r\n this.IncludeBlobPrefix = true;\r\n break;\r\n\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n this.MgNumVal = ((mgVal !== null) ? new NUM_TYPE(mgVal) : null);\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n this.BoolVal = (mgVal !== null && mgVal === '1');\r\n break;\r\n\r\n case StorageAttribute.NONE:\r\n this.BoolVal = false;\r\n this.StrVal = null;\r\n this.MgNumVal = null;\r\n this.OriginalNull = true;\r\n this.VectorField = null;\r\n this.IncludeBlobPrefix = false;\r\n break;\r\n\r\n case StorageAttribute.DOTNET:\r\n // For dotnet objects, ExpVal should be constructed using overloaded Constructor.\r\n // If it is a blobPrefix, it should be done here.\r\n this.StrVal = mgVal;\r\n break;\r\n\r\n default:\r\n throw new ApplicationException('in ExpVal.ExpVal() illegal attribute: \\'' + this.Attr + '\\'');\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Gets the string form of the value in the ExpVal class\r\n /// </summary>\r\n ToMgVal(): string {\r\n\r\n let str: string;\r\n\r\n switch (this.Attr) {\r\n case StorageAttribute.ALPHA:\r\n case StorageAttribute.BLOB:\r\n case StorageAttribute.BLOB_VECTOR:\r\n case StorageAttribute.UNICODE:\r\n str = this.StrVal;\r\n break;\r\n\r\n case StorageAttribute.NUMERIC:\r\n case StorageAttribute.DATE:\r\n case StorageAttribute.TIME:\r\n str = this.MgNumVal.toXMLrecord();\r\n break;\r\n\r\n case StorageAttribute.BOOLEAN:\r\n str = this.BoolVal\r\n ? '1'\r\n : '0';\r\n break;\r\n\r\n default:\r\n str = '[illegal attribute: ' + this.Attr + ']';\r\n break;\r\n }\r\n return str;\r\n }\r\n\r\n /// <summary>\r\n /// return true if the value is an empty string\r\n /// </summary>\r\n /// <returns></returns>\r\n isEmptyString(): boolean {\r\n return (this.Attr === StorageAttribute.ALPHA || this.Attr === StorageAttribute.UNICODE) && this.StrVal === '';\r\n }\r\n\r\n}\r\n","import { Base64, HelpCommand, HelpType, XMLConstants, XmlParser } from \"@magic-xpa/utils\";\r\nimport {Encoding, NNumber, List, NString} from \"@magic-xpa/mscorelib\";\r\nimport {Events} from \"../../Events\";\r\n\r\n/// <summary>\r\n/// Base class for all the help types supported in magic.\r\n/// </summary>\r\nexport abstract class MagicHelp {\r\n abstract GetHelpType(): HelpType;\r\n}\r\n\r\n/// <summary>\r\n/// This class will contain the details required to draw the internal help window.\r\n/// </summary>\r\nexport class InternalHelp extends MagicHelp {\r\n val: string = null;\r\n Name: string = null;\r\n FrameX: number = 0;\r\n FrameY: number = 0;\r\n FrameDx: number = 0;\r\n FrameDy: number = 0;\r\n SizedX: number = 0;\r\n SizedY: number = 0;\r\n FactorX: number = 0;\r\n FactorY: number = 0;\r\n Borderstyle: number = 0;\r\n TitleBar: number = 0;\r\n FontTableIndex: number = 0;\r\n\r\n GetHelpType(): HelpType {\r\n return HelpType.Internal;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// This class will contain the details required to show prompt help.\r\n/// </summary>\r\nexport class PromptpHelp extends MagicHelp {\r\n PromptHelpText: string = null;\r\n\r\n GetHelpType(): HelpType {\r\n return HelpType.Prompt;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// This class will contain the details required to show tool tip help.\r\n/// </summary>\r\nexport class ToolTipHelp extends MagicHelp {\r\n tooltipHelpText: string = null;\r\n\r\n GetHelpType(): HelpType {\r\n return HelpType.Tooltip;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// This class will contain the details required to show URL help.\r\n/// </summary>\r\nexport class URLHelp extends MagicHelp {\r\n urlHelpText: string = null;\r\n\r\n GetHelpType(): HelpType {\r\n return HelpType.URL;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// This class will contain the details required to show windows help.\r\n/// </summary>\r\nexport class WindowsHelp extends MagicHelp {\r\n FilePath: string = null;\r\n HelpCommand: HelpCommand;\r\n HelpKey: string = null;\r\n\r\n GetHelpType(): HelpType {\r\n return HelpType.Windows;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/// <summary>\r\n/// data for <helptable> <helpitem value = \"string\"> ... </helptable>\r\n/// </summary>\r\nexport class Helps {\r\n private _helps: List<MagicHelp> = null;\r\n\r\n /// <summary>\r\n /// CTOR\r\n /// </summary>\r\n constructor() {\r\n this._helps = new List<MagicHelp>();\r\n }\r\n\r\n /// <summary>\r\n /// To parse the input string and fill data field (helps) in the class.\r\n /// </summary>\r\n fillData(parser: XmlParser): void {\r\n while (this.initInnerObjects(parser.getNextTag(), parser)) {\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// To initial inner object\r\n /// </summary>\r\n /// <param name = \"foundTagName\">of found/current tag</param>\r\n private initInnerObjects(foundTagName: string, parser: XmlParser): boolean {\r\n if (foundTagName === null)\r\n return false;\r\n\r\n if (foundTagName === XMLConstants.MG_TAG_HELPTABLE) {\r\n\r\n let currrentIndex = parser.getCurrIndex(); // get the currentIndex of Help tag\r\n let encoded = parser.ReadContentOfCurrentElement().trim(); // get value of encoded value of Help\r\n let decoded = Base64.decode(encoded.substr(0, encoded.length).trim(), Encoding.UTF8); //decode the value of Help\r\n\r\n let newXmlData = parser.getXMLdata().replace(encoded.trim(), decoded); // replace the encoded value with decoded value\r\n parser.setXMLdata(newXmlData); //create a parser with newXML\r\n parser.setCurrIndex(currrentIndex); // set the current index of parser to Help tag\r\n\r\n parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) +\r\n 1); //end of outer tad and its \">\"\r\n }\r\n // end of outer tad and its \">\"\r\n else if (foundTagName === XMLConstants.MG_TAG_HELPITEM) {\r\n let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());\r\n if (endContext !== -1 && endContext < parser.getXMLdata().length) {\r\n // last position of its tag\r\n let tag: string = parser.getXMLsubstring(endContext);\r\n parser.add2CurrIndex(tag.indexOf(XMLConstants.MG_TAG_HELPITEM) +\r\n XMLConstants.MG_TAG_HELPITEM.length);\r\n let tokensVector: List<string> = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);\r\n this.fillHelpItem(tokensVector);\r\n parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);\r\n return true;\r\n }\r\n }\r\n else if (foundTagName === \"/\" + XMLConstants.MG_TAG_HELPTABLE) {\r\n parser.setCurrIndex2EndOfTag();\r\n return false;\r\n }\r\n else {\r\n Events.WriteExceptionToLog(\"in Command.FillData() out of string bounds\");\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /// <summary>\r\n /// Fill member element helps by <helpitem> tag\r\n /// </summary>\r\n /// <param name = \"tokensVector\">attribute/value/...attribute/value/ vector</param>\r\n private fillHelpItem(tokensVector: List<string>): void {\r\n // Since the first attribute is type of help. Extract this attribute to check type.\r\n let j: number = 0;\r\n let attribute: string = tokensVector.get_Item(j);\r\n let valueStr: string = tokensVector.get_Item(j + 1);\r\n let hlpType: string = XmlParser.unescape(valueStr).toString();\r\n\r\n switch (hlpType) {\r\n case XMLConstants.MG_ATTR_HLP_TYP_TOOLTIP:\r\n let toolTipHelp: ToolTipHelp = new ToolTipHelp();\r\n for (j = 2; j < tokensVector.length; j = j + 2) {\r\n attribute = tokensVector.get_Item(j);\r\n valueStr = tokensVector.get_Item(j + 1);\r\n if (attribute === XMLConstants.MG_ATTR_VALUE) {\r\n // #932086: Special characters in helps text are escaped while serializing,\r\n // so unescape the escaped characters.\r\n toolTipHelp.tooltipHelpText = XmlParser.unescape(valueStr).toString();\r\n }\r\n else\r\n Events.WriteExceptionToLog(NString.Format(\"There is no such tag in <helptable><helpitem ..>.Insert case to HelpTable.FillHelpItem for {0}\", attribute));\r\n }\r\n this._helps.push(toolTipHelp);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_HLP_TYP_PROMPT:\r\n let promptpHelp: PromptpHelp = new PromptpHelp();\r\n for (j = 2; j < tokensVector.length; j = j + 2) {\r\n attribute = tokensVector.get_Item(j);\r\n valueStr = tokensVector.get_Item(j + 1);\r\n if (attribute === XMLConstants.MG_ATTR_VALUE) {\r\n // #932086: Special characters in helps text are escaped while serializing,\r\n // so unescape the escaped characters.\r\n promptpHelp.PromptHelpText = XmlParser.unescape(valueStr).toString();\r\n }\r\n else\r\n Events.WriteExceptionToLog(NString.Format(\"There is no such tag in <helptable><helpitem ..>.Insert case to HelpTable.FillHelpItem for {0}\", attribute));\r\n }\r\n this._helps.push(promptpHelp);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_HLP_TYP_URL:\r\n let urlHelp: URLHelp = new URLHelp();\r\n for (j = 2; j < tokensVector.length; j = j + 2) {\r\n attribute = tokensVector.get_Item(j);\r\n valueStr = tokensVector.get_Item(j + 1);\r\n if (attribute === XMLConstants.MG_ATTR_VALUE)\r\n urlHelp.urlHelpText = valueStr;\r\n else\r\n Events.WriteExceptionToLog(NString.Format(\"There is no such tag in <helptable><helpitem ..>.Insert case to HelpTable.FillHelpItem for {0}\", attribute));\r\n }\r\n this._helps.push(urlHelp);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_HLP_TYP_INTERNAL:\r\n let internalHelpWindowDetails: InternalHelp = new InternalHelp();\r\n // Init Internal Help Window Details.\r\n for (j = 2; j < tokensVector.length; j += 2) {\r\n attribute = tokensVector.get_Item(j);\r\n valueStr = tokensVector.get_Item(j + 1);\r\n\r\n if (attribute === XMLConstants.MG_ATTR_VALUE) {\r\n internalHelpWindowDetails.val = XmlParser.unescape(valueStr).toString();\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_NAME) {\r\n internalHelpWindowDetails.Name = XmlParser.unescape(valueStr).toString();\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_FRAMEX) {\r\n internalHelpWindowDetails.FrameX = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_FRAMEY) {\r\n internalHelpWindowDetails.FrameY = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_FRAMEDX) {\r\n internalHelpWindowDetails.FrameDx = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_FRAMEDY) {\r\n internalHelpWindowDetails.FrameDy = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_SIZEDX) {\r\n internalHelpWindowDetails.SizedX = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_SIZEDY) {\r\n internalHelpWindowDetails.SizedY = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_FACTORX) {\r\n internalHelpWindowDetails.FactorX = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_FACTORY) {\r\n internalHelpWindowDetails.FactorY = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_BORDERSTYLE) {\r\n internalHelpWindowDetails.Borderstyle = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_TITLE_BAR) {\r\n internalHelpWindowDetails.TitleBar = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_SYSTEM_MENU) {\r\n\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_INTERNAL_HELP_FONT_TABLE_INDEX) {\r\n internalHelpWindowDetails.FontTableIndex = NNumber.Parse(XmlParser.unescape(valueStr));\r\n }\r\n else\r\n Events.WriteExceptionToLog(NString.Format(\"There is no such tag in <helptable><helpitem ..>.Insert case to HelpTable.FillHelpItem for {0}\", attribute));\r\n }\r\n\r\n // Add help object to collection.\r\n this._helps.push(internalHelpWindowDetails);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_HLP_TYP_WINDOWS:\r\n let wndHelpDetails: WindowsHelp = new WindowsHelp();\r\n\r\n // Init Windows Help Details.\r\n for (j = 2; j < tokensVector.length; j = j + 2) {\r\n attribute = tokensVector.get_Item(j);\r\n valueStr = tokensVector.get_Item(j + 1);\r\n if (attribute === XMLConstants.MG_ATTR_WINDOWS_HELP_FILE) {\r\n wndHelpDetails.FilePath = valueStr;\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_WINDOWS_HELP_COMMAND) {\r\n wndHelpDetails.HelpCommand = <HelpCommand>NNumber.Parse(valueStr);\r\n }\r\n else if (attribute === XMLConstants.MG_ATTR_WINDOWS_HELP_KEY) {\r\n wndHelpDetails.HelpKey = XmlParser.unescape(valueStr).toString();\r\n }\r\n else\r\n Events.WriteExceptionToLog(NString.Format(\"There is no such tag in <helptable><helpitem ..>.Insert case to HelpTable.FillHelpItem for {0}\", attribute));\r\n }\r\n // Add help object to collection.\r\n this._helps.push(wndHelpDetails);\r\n break;\r\n }\r\n }\r\n\r\n getHelp(idx: number): MagicHelp {\r\n let flag: boolean = idx < 0 || idx >= this._helps.length;\r\n let result: MagicHelp;\r\n if (flag) {\r\n result = null;\r\n }\r\n else {\r\n result = this._helps.get_Item(idx);\r\n }\r\n return result;\r\n }\r\n}\r\n","import { IMGDataTable } from \"./IMGDataTable\";\r\n\r\nexport class GuiDataCollection\r\n{\r\n static MGDataTable: IMGDataTable = null;\r\n}\r\n","import {List, NNumber, NotImplementedException, NString, RefParam} from \"@magic-xpa/mscorelib\";\r\nimport {Constants, Logger_LogLevels, StorageAttribute, XMLConstants, XmlParser} from \"@magic-xpa/utils\";\r\nimport {ITask} from \"./ITask\";\r\nimport {PropParentInterface} from \"../../gui/PropParentInterface\";\r\nimport {IFlowMonitorQueue} from \"../../IFlowMonitorQueue\";\r\nimport {MgControlBase} from \"../gui/MgControlBase\";\r\nimport {GuiFieldBase} from \"../data/GuiFieldBase\";\r\nimport {MgFormBase} from \"../gui/MgFormBase\";\r\nimport {PropTable} from \"../gui/PropTable\";\r\nimport {Helps, MagicHelp} from \"../gui/Helps\";\r\nimport {GuiDataViewBase} from \"../data/GuiDataViewBase\";\r\nimport {IActionManager} from \"../events/IActionManager\";\r\nimport {Property} from \"../gui/Property\";\r\nimport {PropInterface} from \"../gui/PropInterface\";\r\nimport {FieldDef} from \"../data/FieldDef\";\r\nimport {Commands} from \"../../Commands\";\r\nimport {Events} from \"../../Events\";\r\nimport {GuiConstants} from \"../../GuiConstants\";\r\nimport {GuiDataCollection} from \"./GuiDataCollection\";\r\nimport { CommandType, HtmlProperties } from \"../../GuiEnums\";\r\n\r\n/// <summary>\r\n/// task properties (+ few access methods) required and relevant for the GUI namespace.\r\n/// </summary>\r\nexport abstract class GuiTaskBase implements ITask, PropParentInterface {\r\n protected static MAIN_PRG_PARENT_ID: number = 32768;\r\n _flowMonitor: IFlowMonitorQueue = null;\r\n private _keyboardMappingState: number = 0xFFFF0000;\r\n _refreshType: string = \"T\";\r\n _lastParkedCtrl: MgControlBase = null;\r\n private _brkLevel: string = null; // the runtime level (Record Suffix, GuiTaskBase Prefix, etc.)\r\n private _brkLevelIndex: number = -1;\r\n private _mainLevel: string = null; // the runtime mainlevel\r\n private _level: string = \"\\0\"; // 'C' = in control, 'R' = in record (out of control), 'T' = in task (out of record)\r\n _enteredRecLevel: boolean = false; // TRUE only if the task was ever moved to record level.\r\n _currParkedFld: GuiFieldBase = null;\r\n private isInRecompute = false;\r\n // This flag represents the current editing control.\r\n // It is reset to null when we are in between setting the focus and once we set the focus to control then we set this flag to current focused control.\r\n CurrentEditingControl: MgControlBase = null;\r\n private shouldResumeSubformLayout: boolean = true;\r\n ApplicationGuid: string = null;\r\n ProgramIsn: number = 0;\r\n TaskIsn: number = 0;\r\n ContextID: number = 0;\r\n IsSubForm: boolean = false;\r\n _ctlIdx: number = 0;\r\n _compIdx: number = 0;\r\n _isPrg: boolean = false;\r\n _isMainPrg: boolean = false;\r\n IsInteractive: boolean = false;\r\n _taskTag: string = null;\r\n _openWin: boolean = false;\r\n private _allowEvents: boolean = false;\r\n Form: MgFormBase = null;\r\n _propTab: PropTable = null;\r\n _helpTab: Helps = null;\r\n _nullArithmetic: string;\r\n IconFileName: string = null;\r\n\r\n IsParallel: boolean = false;\r\n DataView: GuiDataViewBase = null;\r\n ActionManager: IActionManager = null;\r\n StudioParentTask: GuiTaskBase = null; // parent task of the subtask by toolkit tree.\r\n\r\n private routerPath: string = null;\r\n protected routeParams: List<any> = null;\r\n private inDefaultRouterOutlet: boolean = false;\r\n\r\n public Init(): void {\r\n this.DataView.Init();\r\n }\r\n\r\n get RouterPath(): string {\r\n return this.routerPath;\r\n }\r\n\r\n get RouterParams(): List<any> {\r\n return this.routeParams;\r\n }\r\n\r\n get InDefaultRouterOutlet(): boolean {\r\n return this.inDefaultRouterOutlet;\r\n }\r\n\r\n IsSubtask: boolean = false;\r\n DataViewWasRetrieved: boolean = false; // indicates that the data view was retrieved, i.e. it is possible to evaluate expressions\r\n\r\n /// <summary>\r\n /// indicates whether the task prefix was performed for this task\r\n /// </summary>\r\n TaskPrefixExecuted: boolean = false;\r\n\r\n /// <summary>\r\n /// returns true if this task should block activation of its acsestors\r\n /// </summary>\r\n get IsBlockingBatch(): boolean {\r\n return !this._isMainPrg && this.isOpenWin() && !this._allowEvents && !this.IsInteractive;\r\n }\r\n\r\n constructor() {\r\n this._nullArithmetic = Constants.NULL_ARITH_USE_DEF;\r\n this._propTab = new PropTable(this);\r\n }\r\n\r\n /// <summary>\r\n /// get task id\r\n /// </summary>\r\n getTaskTag(): string {\r\n return this._taskTag;\r\n }\r\n\r\n /// <summary>\r\n /// return the ctl idx\r\n /// </summary>\r\n getCtlIdx(): number {\r\n return this._ctlIdx;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if this task is a main program of an internal or external component\r\n /// </summary>\r\n isMainProg(): boolean {\r\n return this._isMainPrg;\r\n }\r\n\r\n /// <summary>\r\n /// return the topmost mgform of the subform\r\n /// </summary>\r\n /// <returns></returns>\r\n getTopMostForm(): MgFormBase {\r\n let form: MgFormBase = null;\r\n\r\n if (this.Form !== null)\r\n form = this.Form.getTopMostForm();\r\n // else\r\n // Assert should not be here because we have different conditions for RC & OL.\r\n // Other then Main Program, task's form should not be null.\r\n // Debug.Assert(isMainProg());\r\n\r\n return form;\r\n }\r\n\r\n /// <summary>\r\n /// returns the requested control\r\n /// </summary>\r\n getCtrl(ctrlIdx: number): MgControlBase {\r\n return this.Form.getCtrl(ctrlIdx);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// sets the current task mode\r\n /// </summary>\r\n /// <param name=\"val\">new task mode</param>\r\n setMode(val: string): void {\r\n if (this.getMode() !== val) {\r\n this.setProp(PropInterface.PROP_TYPE_TASK_MODE, val);\r\n if (this._flowMonitor !== null)\r\n this._flowMonitor.addTaskCngMode(val, this.GetTaskDetails());\r\n }\r\n }\r\n\r\n\r\n /// <summary>\r\n /// get the task mode\r\n /// </summary>\r\n getMode(): string {\r\n let taskMode: string = Constants.TASK_MODE_MODIFY;\r\n let prop: Property = this._propTab.getPropById(PropInterface.PROP_TYPE_TASK_MODE);\r\n if (prop !== null) {\r\n taskMode = prop.GetComputedValue();\r\n }\r\n return taskMode;\r\n }\r\n\r\n SetInRecompute(inRecompute: boolean) {\r\n this.isInRecompute = inRecompute;\r\n }\r\n\r\n IsInRecompute() : boolean {\r\n return this.isInRecompute;\r\n }\r\n /// <summary>\r\n /// reset refresh type\r\n /// </summary>\r\n resetRefreshType(): void {\r\n this._refreshType = Constants.TASK_REFRESH_NONE;\r\n }\r\n\r\n /// <summary>\r\n /// get refresh type\r\n /// </summary>\r\n /// <returns></returns>\r\n getRefreshType(): string {\r\n return this._refreshType;\r\n }\r\n\r\n /// <summary>\r\n /// set the refresh type for the next RefreshDisplay() call\r\n /// </summary>\r\n /// <param name = \"refreshType\">the new refresh type</param>\r\n SetRefreshType(refreshType: string): void {\r\n switch (refreshType) {\r\n case Constants.TASK_REFRESH_FORM:\r\n case Constants.TASK_REFRESH_TABLE:\r\n case Constants.TASK_REFRESH_CURR_REC:\r\n this._refreshType = refreshType;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n GetRouterParams(): List<any> {\r\n return this.routeParams;\r\n }\r\n\r\n /// <summary>\r\n /// get last parked control\r\n /// </summary>\r\n getLastParkedCtrl(): MgControlBase {\r\n return this._lastParkedCtrl;\r\n }\r\n\r\n /// <summary> get the open window\r\n /// </summary>\r\n isOpenWin(): boolean {\r\n return this._openWin;\r\n }\r\n\r\n /// <summary>\r\n /// if the property exists returns its boolean value otherwise returns the default value\r\n /// </summary>\r\n /// <param name = \"propId\">id of the property</param>\r\n /// <param name = \"defaultRetVal\">the value to return in case the property does not exist</param>\r\n async checkProp(propId: number, defaultRetVal: boolean): Promise<boolean> {\r\n let prop: Property = this.getProp(propId);\r\n if (prop !== null)\r\n return await prop.getValueBoolean();\r\n return defaultRetVal;\r\n }\r\n\r\n /// <summary>\r\n /// returns the clicked control on the task\r\n /// </summary>\r\n getClickedControl(): MgControlBase {\r\n let clickedCtrl: MgControlBase = Events.GetRuntimeContext(null).CurrentClickedCtrl;\r\n\r\n if (clickedCtrl !== null && clickedCtrl.getForm().getTask() !== this)\r\n clickedCtrl = null;\r\n\r\n return clickedCtrl;\r\n }\r\n\r\n /// <returns> keyboardMappingState\r\n /// </returns>\r\n getKeyboardMappingState(): number {\r\n return this._keyboardMappingState;\r\n }\r\n\r\n /// <summary>\r\n /// returns true if state enabled\r\n /// </summary>\r\n /// <param name = \"state\"></param>\r\n /// <returns></returns>\r\n isStateEnabled(state: number): boolean {\r\n return (state & this._keyboardMappingState) > 0;\r\n }\r\n\r\n /// <summary>\r\n /// Sets the state on/off\r\n /// </summary>\r\n /// <param name = \"state\"></param>\r\n /// <param name = \"on\"></param>\r\n setKeyboardMappingState(state: number, on: boolean): void {\r\n this._keyboardMappingState = on\r\n ? GuiTaskBase.mkInt(GuiTaskBase.hiShrt(this._keyboardMappingState) & ~state, GuiTaskBase.loShrt(this._keyboardMappingState) | state)\r\n : GuiTaskBase.mkInt(GuiTaskBase.hiShrt(this._keyboardMappingState) | state, GuiTaskBase.loShrt(this._keyboardMappingState) & ~state);\r\n }\r\n\r\n /// <param name = \"n\"></param>\r\n /// <returns> higher half of the integer</returns>\r\n static hiShrt(n: number): number {\r\n return (n & 0xffff0000) >> 16;\r\n }\r\n\r\n /// <param name = \"n\"></param>\r\n /// <returns> low half of the integer</returns>\r\n static loShrt(n: number): number {\r\n return n & 0x0000ffff;\r\n }\r\n\r\n /// <param name = \"n1\"></param>\r\n /// <param name = \"n2\"></param>\r\n /// <returns> unites low halves of 2 integers // </returns>\r\n static mkInt(n1: number, n2: number): number {\r\n return n1 << 16 | n2;\r\n }\r\n\r\n getHelpItem(idx: number): MagicHelp {\r\n if (this._helpTab !== null)\r\n return this._helpTab.getHelp(idx);\r\n }\r\n\r\n /// <summary>\r\n /// set a property of the task\r\n /// </summary>\r\n /// <param name = \"propId\">the id of the property</param>\r\n /// <param name = \"val\">the value of the property</param>\r\n setProp(propId: number, val: string): void {\r\n this._propTab.setProp(propId, val, this, \"T\");\r\n }\r\n\r\n /// <summary>\r\n /// set the runtime level of the task (Record Suffix, GuiTaskBase Prefix, etc.)\r\n /// </summary>\r\n setBrkLevel(cBrkLevel: string, NewBrkLevelIndex: number): void {\r\n this._brkLevel = cBrkLevel;\r\n this._brkLevelIndex = NewBrkLevelIndex;\r\n\r\n this.setMainLevel(cBrkLevel); // Update the MainLevel according to the new Level\r\n }\r\n\r\n /// <summary>\r\n /// returns the runtime level of the task (Record Suffix, GuiTaskBase Prefix, etc.)\r\n /// </summary>\r\n getBrkLevel(): string {\r\n return this._brkLevel;\r\n }\r\n\r\n /// <summary>\r\n /// return the id of the current executing handler\r\n /// </summary>\r\n /// <returns> the int id of the current executing handler</returns>\r\n getBrkLevelIndex(): number {\r\n return this._brkLevelIndex;\r\n }\r\n\r\n /// <summary>\r\n /// set the runtime mainlevel of the task\r\n /// </summary>\r\n setMainLevel(cBrkLevel: string): void {\r\n if (cBrkLevel !== null && cBrkLevel.length > 0) {\r\n let level: string = cBrkLevel.charAt(0);\r\n /* then MAINLEVEL is updated only if the actual Level is a TASK or RECORD ( or none ) level */\r\n if (level === Constants.TASK_LEVEL_NONE || level === Constants.TASK_LEVEL_TASK ||\r\n level === Constants.TASK_LEVEL_RECORD)\r\n this._mainLevel = cBrkLevel;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// get the runtime mainlevel of the task\r\n /// </summary>\r\n getMainLevel(): string {\r\n return this._mainLevel;\r\n }\r\n\r\n /// <summary>\r\n /// set the level of the task\r\n /// </summary>\r\n /// <param name = \"cLevel\">'C' = in control, 'R' = in record (out of control), 'T' = in task (out of record) /// </param>\r\n setLevel(cLevel: string): void {\r\n this._level = cLevel;\r\n\r\n if (this._level === Constants.TASK_LEVEL_RECORD)\r\n this._enteredRecLevel = true;\r\n }\r\n\r\n /// <summary>\r\n /// return the level of the task: 'C' = in control, 'R' = in record (out of control), 'T' = in task (out of record)\r\n /// </summary>\r\n getLevel(): string {\r\n return this._level;\r\n }\r\n\r\n /// <summary>\r\n /// set the DataSynced property of task\r\n /// </summary>\r\n setDataSynced(synced: boolean): void {\r\n }\r\n\r\n /// <summary>\r\n /// returns scheme for null arithmetic\r\n /// </summary>\r\n getNullArithmetic(): string {\r\n return this._nullArithmetic;\r\n }\r\n\r\n /// <summary>\r\n /// set the last parked control in this task\r\n /// </summary>\r\n /// <param name = \"ctrl\">last focused control</param>\r\n setLastParkedCtrl(ctrl: MgControlBase): void {\r\n this._lastParkedCtrl = ctrl;\r\n this._currParkedFld = ((this._lastParkedCtrl !== null)\r\n ? this._lastParkedCtrl.getField()\r\n : null);\r\n this.CurrentEditingControl = ctrl;\r\n }\r\n\r\n /// <summary>\r\n /// get current field of the task\r\n /// </summary>\r\n getCurrField(): GuiFieldBase {\r\n return this._currParkedFld;\r\n }\r\n\r\n /// <summary>\r\n /// set current field of the task\r\n /// </summary>\r\n setCurrField(currField: GuiFieldBase): void {\r\n this._currParkedFld = currField;\r\n }\r\n\r\n /// <summary>\r\n /// returns the index of the field of the current parked control or -1 if there is no such field\r\n /// </summary>\r\n getCurrFieldIdx(): number {\r\n if (this._currParkedFld !== null)\r\n return this._currParkedFld.getId();\r\n return -1;\r\n }\r\n\r\n getFieldByValueStr(valueStr: string): FieldDef;\r\n getFieldByValueStr(valueStr: string, parent: RefParam<number>, vee: RefParam<number>): FieldDef;\r\n getFieldByValueStr(valueStr: string, parent?: RefParam<number>, vee?: RefParam<number>): FieldDef {\r\n if (arguments.length === 1)\r\n return this.getFieldByValueStr_0(valueStr);\r\n else\r\n return this.getFieldByValueStr_1(valueStr, parent, vee);\r\n }\r\n\r\n private getFieldByValueStr_0(valueStr: string): FieldDef {\r\n let parent: number;\r\n let vee: number;\r\n let refParent: RefParam<number> = new RefParam(parent);\r\n let refVee: RefParam<number> = new RefParam(vee);\r\n return this.getFieldByValueStr_1(valueStr, refParent, refVee);\r\n }\r\n\r\n /// <summary>\r\n /// get the field by 'valueStr'\r\n /// </summary>\r\n /// <param name=\"valueStr\"></param>\r\n /// <returns></returns>\r\n private getFieldByValueStr_1(valueStr: string, parent: RefParam<number>, vee: RefParam<number>): FieldDef {\r\n parent.value = vee.value = 0;\r\n let tempField: FieldDef = null;\r\n let comma: number = valueStr.indexOf(\",\");\r\n if (comma > 0) {\r\n let parentId: number = NNumber.Parse(valueStr.substr(0, comma));\r\n let fldIdx: number = NNumber.Parse(valueStr.substr(comma + 1));\r\n tempField = ((parentId !== 0)\r\n ? this.getFieldDef(parentId, fldIdx)\r\n : this.getFieldDef(fldIdx));\r\n parent.value = parentId;\r\n vee.value = fldIdx;\r\n }\r\n return tempField;\r\n }\r\n\r\n /// <summary>\r\n /// get the field from a 1-based main prog argument\r\n /// </summary>\r\n /// <param name=\"valueStr\"></param>\r\n /// <returns></returns>\r\n getMainProgFieldByValueStr(valueStr: string): FieldDef {\r\n // string is 1-based - need to subtract 1 to get to 0-based value\r\n let fldIdx: number = NNumber.Parse(valueStr) - 1;\r\n return this.getFieldDef(fldIdx);\r\n }\r\n\r\n getFieldDef(fldId: number): FieldDef;\r\n getFieldDef(parent: number, fldIdx: number): FieldDef;\r\n getFieldDef(fldIdOrParent: number, fldIdx?: number): FieldDef {\r\n if (arguments.length === 1)\r\n return this.getField_0(fldIdOrParent);\r\n else\r\n return this.getField_1(fldIdOrParent, fldIdx);\r\n }\r\n\r\n /// <summary>\r\n /// get a field by its idx\r\n /// </summary>\r\n /// <param name = \"fldId\">id of the field </param>\r\n private getField_0(fldId: number): FieldDef {\r\n return this.DataView.getField(fldId);\r\n }\r\n\r\n /// <summary>\r\n /// initialize the current task's form.\r\n /// </summary>\r\n async InitForm() {\r\n if (this.Form !== null && this.isOpenWin()) {\r\n this.Form.InInitForm = true;\r\n await this.Form.init();\r\n\r\n\r\n this.SetRefreshType(Constants.TASK_REFRESH_FORM);\r\n\r\n await this.RefreshDisplay();\r\n\r\n Commands.beginInvoke();\r\n this.Form.InInitForm = false;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// resume subform layout\r\n /// </summary\r\n ResumeSubformLayout(): void {\r\n if (this.Form !== null) {\r\n let subFormCtrl: MgControlBase = <MgControlBase>this.Form.getSubFormCtrl();\r\n if (subFormCtrl !== null && this.shouldResumeSubformLayout) {\r\n // refresh the visible property\r\n Commands.addOperationWithLine(CommandType.SET_PROPERTY, subFormCtrl, 0,\r\n HtmlProperties.Visible , subFormCtrl.isVisible());\r\n\r\n this.shouldResumeSubformLayout = false;\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// returns the name of the control which was last parked\r\n /// </summary>\r\n /// <param name = \"depth\">the generation</param>\r\n GetLastParkedCtrlName(depth: number): string {\r\n let ancestor: GuiTaskBase = <GuiTaskBase>this.GetTaskAncestor(depth);\r\n if (ancestor === null || ancestor._lastParkedCtrl === null)\r\n return \"\";\r\n return ancestor._lastParkedCtrl.Name;\r\n }\r\n\r\n /// <summary>\r\n /// get the form of the task\r\n /// </summary>\r\n /// <returns> Form is the form of the task</returns>\r\n getForm(): MgFormBase {\r\n return this.Form;\r\n }\r\n\r\n /// <summary>\r\n /// Set task's form.\r\n /// </summary>\r\n /// <returns> Form is the form of the task</returns>\r\n SetForm(value: MgFormBase): MgFormBase {\r\n this.Form = value;\r\n return value;\r\n }\r\n\r\n checkIfExistProp(propId: number): boolean {\r\n let exist: boolean = false;\r\n\r\n if (this._propTab !== null) {\r\n let prop: Property = this._propTab.getPropById(propId);\r\n exist = (prop !== null);\r\n }\r\n return exist;\r\n }\r\n\r\n /// <summary>\r\n /// get a task property\r\n /// </summary>\r\n /// <param name = \"propId\">Id of the requested property\r\n /// </param>\r\n getProp(propId: number): Property {\r\n let prop: Property = null;\r\n\r\n if (this._propTab !== null) {\r\n prop = this._propTab.getPropById(propId);\r\n\r\n // if the property doesn't exist then create a new property and give it the default value\r\n // in addition add this property to the properties table\r\n if (prop === null) {\r\n prop = Property.getDefaultProp(propId, GuiConstants.PARENT_TYPE_TASK, this);\r\n if (prop !== null) {\r\n prop.StudioValue = prop.getOrgValue();\r\n this._propTab.addProp(prop);\r\n }\r\n }\r\n }\r\n return prop;\r\n }\r\n\r\n GetComputedProperty(propId: number): Property {\r\n let prop: Property = null;\r\n\r\n if (this._propTab !== null)\r\n prop = this._propTab.getPropById(propId);\r\n return prop;\r\n }\r\n\r\n /// <summary>\r\n /// return the component idx\r\n /// </summary>\r\n getCompIdx(): number {\r\n return this._compIdx;\r\n }\r\n\r\n /// <summary>\r\n /// return true if this is first refresh\r\n /// </summary>\r\n /// <returns></returns>\r\n IsFirstRefreshOfProps(): boolean {\r\n throw new NotImplementedException();\r\n }\r\n\r\n /// <summary>\r\n /// Evaluates the expression corresponding to the passed ID.\r\n /// </summary>\r\n /// <param name=\"expId\">Exp ID</param>\r\n /// <param name=\"resType\">expected return type</param>\r\n /// <param name=\"length\">Expected len - is not used, it must be here because of computability with Rich Client</param>\r\n /// <param name=\"contentTypeUnicode\">should the result be unicode</param>\r\n /// <param name=\"resCellType\"></param>\r\n /// <param name=\"alwaysEvaluate\">for form properties and some control properties we always evaluate expressions</param>\r\n /// <param name=\"wasEvaluated\">indicates whether the expression was evaluated</param>\r\n /// <returns>evaluated value</returns>\r\n async EvaluateExpression(expId: number, resType: StorageAttribute, length: number, contentTypeUnicode: boolean, resCellType: StorageAttribute, alwaysEvaluate: boolean, wasEvaluated: RefParam<boolean>): Promise<string> {\r\n let result: string = null;\r\n wasEvaluated.value = false;\r\n\r\n if (alwaysEvaluate || this.DataViewWasRetrieved) {\r\n result = await this.CalculateExpression(expId, resType, length);\r\n wasEvaluated.value = true;\r\n }\r\n return result;\r\n }\r\n\r\n GetExpressionStorage(expId: number): StorageAttribute {\r\n return this.GetExpressionStorage(expId);\r\n }\r\n\r\n /// <summary>\r\n /// Calculate expresion\r\n /// </summary>\r\n /// <param name=\"expId\">The expression to evaluate</param>\r\n /// <param name=\"resType\">The expected result type.</param>\r\n /// <param name=\"length\">The expected length of the result.</param>\r\n /// <param name=\"contentTypeUnicode\">Denotes whether the result is expected to be a unicode string.</param>\r\n /// <param name=\"resCellType\">Not used.</param>\r\n /// <returns></returns>\r\n async CalculateExpression(expId: number, resType: StorageAttribute, length: number): Promise<string>{\r\n return Promise.resolve(\"\");\r\n }\r\n\r\n /// <summary>\r\n /// creates a mgform object\r\n /// </summary>\r\n /// <returns></returns>\r\n abstract ConstructMgForm(alreadySetParentForm: RefParam<boolean>): MgFormBase ;\r\n\r\n /// <summary>\r\n /// returns true if the task is started\r\n /// </summary>\r\n isStarted(): boolean {\r\n return true;\r\n }\r\n\r\n /// <summary>\r\n /// tells whether the task is aborting\r\n /// </summary>\r\n isAborting(): boolean {\r\n return false;\r\n }\r\n\r\n /// <summary>\r\n /// get the ancestor of the GuiTaskBase\r\n /// </summary>\r\n /// <param name = \"generation\">of the ancestor task</param>\r\n abstract GetTaskAncestor(generation: number): ITask;\r\n\r\n /// <summary>\r\n /// get the context task\r\n /// </summary>\r\n /// <returns></returns>\r\n abstract GetContextTask(): ITask;\r\n\r\n /// <summary>\r\n /// Returns task depth\r\n /// </summary>\r\n /// <returns></returns>\r\n abstract GetTaskDepth(): number;\r\n\r\n /// <summary> refresh the display, paint the controls and their properties again </summary>\r\n abstract RefreshDisplay(): void ;\r\n\r\n /// <summary> get the value of a field. </summary>\r\n /// <param name=\"fieldDef\"></param>\r\n /// <param name=\"value\"></param>\r\n /// <param name=\"isNull\"></param>\r\n // TODO sadhan remove unused\r\n // abstract async getFieldValue(fieldDef: FieldDef, value: RefParam<string>, isNull: RefParam<boolean>): Promise<void> ;\r\n\r\n /// <summary> get the display value of a field. </summary>\r\n /// <param name=\"fieldDef\"></param>\r\n /// <param name=\"value\"></param>\r\n /// <param name=\"isNull\"></param>\r\n abstract getFieldDisplayValue(fieldDef: FieldDef, value: RefParam<string>, isNull: RefParam<boolean>): void ;\r\n\r\n /// <summary> updates the field's value and starts recompute. </summary>\r\n /// <param name=\"fieldDef\"></param>\r\n /// <param name=\"value\"></param>\r\n /// <param name=\"isNull\"></param>\r\n abstract UpdateFieldValueAndStartRecompute(fieldDef: FieldDef, value: string, isNull: boolean): void ;\r\n\r\n /// <summary>get a field from the task.travel by parents (i.e. NOT by triggering tasks).</summary>\r\n /// <param name = \"parent\">generation number (0 is current task)</param>\r\n /// <param name = \"fldIdx\">the field index within its task</param>\r\n /// <returns> the id of the field described by parent + idx</returns>\r\n private getField_1(parent: number, fldIdx: number): FieldDef {\r\n\r\n switch (parent) {\r\n case 0:\r\n return this.getFieldDef(fldIdx);\r\n\r\n case GuiTaskBase.MAIN_PRG_PARENT_ID:\r\n // find the main program using the component id (ctl idx)\r\n let compMainProg: GuiTaskBase = <GuiTaskBase> GuiDataCollection.MGDataTable.GetMainProgByCtlIdx(this.ContextID, this._ctlIdx);\r\n return compMainProg.getFieldDef(fldIdx);\r\n\r\n default:\r\n parent--;\r\n if (this.StudioParentTask != null)\r\n return this.StudioParentTask.getFieldDef(parent, fldIdx);\r\n return null;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// get the task attributes\r\n /// </summary>\r\n fillAttributes(parser: XmlParser): void {\r\n let endContext: number = parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex());\r\n if (endContext !== -1 && endContext < parser.getXMLdata().length) {\r\n // last position of its tag\r\n let tag: string = parser.getXMLsubstring(endContext);\r\n parser.add2CurrIndex(tag.indexOf(XMLConstants.MG_TAG_TASK) + XMLConstants.MG_TAG_TASK.length);\r\n\r\n let tokens: List<string> = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);\r\n\r\n for (let j: number = 0; j < tokens.length; j = j + 2) {\r\n let attribute: string = tokens.get_Item(j);\r\n let valueStr: string = tokens.get_Item(j + 1);\r\n if (!this.setAttribute(attribute, valueStr) && Events.ShouldLog(Logger_LogLevels.Development))\r\n Events.WriteDevToLog(NString.Format(\"In TaskBase.fillAttributes(): Unprocessed(!) attribute: '{0}' = '{1}'\", attribute, valueStr));\r\n }\r\n\r\n parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1); // to delete \">\" too\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// get the task attributes\r\n /// </summary>\r\n setAttribute(attribute: string, valueStr: string): boolean {\r\n let isTagProcessed: boolean = true;\r\n\r\n switch (attribute) {\r\n case XMLConstants.MG_ATTR_APPL_GUID:\r\n this.ApplicationGuid = valueStr;\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_PROGRAM_ISN:\r\n this.ProgramIsn = NNumber.Parse(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_TASK_ISN:\r\n this.TaskIsn = NNumber.Parse(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_TOOLKIT_PARENT_TASK:\r\n if (NNumber.Parse(valueStr) !== 0)\r\n this.StudioParentTask = <GuiTaskBase>GuiDataCollection.MGDataTable.GetTaskByID(valueStr);\r\n\r\n this.IsSubtask = true;\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_TASKID:\r\n this.setTaskId(valueStr);\r\n if (Events.ShouldLog(Logger_LogLevels.Development))\r\n Events.WriteDevToLog(\"TASK: \" + this._taskTag);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_CTL_IDX:\r\n this.setCtlAndCompIdx(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_MAINPRG:\r\n this.setMainPrg(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_NULL_ARITHMETIC:\r\n this.setNullArithmetic(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_INTERACTIVE:\r\n this.setIsInteracive(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_OPEN_WIN:\r\n this.setOpenWin(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_ALLOW_EVENTS:\r\n this.SetAllowEvents(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_ISPRG:\r\n this.setIsPrg(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_ICON_FILE_NAME:\r\n this.IconFileName = valueStr;\r\n break;\r\n\r\n\r\n case XMLConstants.MG_ATTR_PARALLEL:\r\n this.IsParallel = XmlParser.getBoolean(valueStr);\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_ROUTER_PATH:\r\n if (valueStr.trim() != \"\")\r\n this.routerPath = valueStr;\r\n break;\r\n\r\n case XMLConstants.MG_ATTR_IN_DEFAULT_ROUTER_OUTLET:\r\n this.inDefaultRouterOutlet = XmlParser.getBoolean(valueStr);\r\n break;\r\n\r\n default:\r\n isTagProcessed = false;\r\n break;\r\n }\r\n\r\n return isTagProcessed;\r\n }\r\n\r\n /// <summary>\r\n /// init data for form and return the form\r\n /// </summary>\r\n /// <param name=\"foundTagName\"></param>\r\n /// <param name=\"parentForm\"></param>\r\n /// <returns></returns>\r\n FormInitData(parentForm: MgFormBase): MgFormBase {\r\n let alreadySetParentForm: boolean = false;\r\n let refAlreadySetParentForm: RefParam<boolean> = new RefParam(alreadySetParentForm);\r\n\r\n if (this.Form === null)\r\n this.Form = this.ConstructMgForm(refAlreadySetParentForm);\r\n\r\n if (!alreadySetParentForm)\r\n this.Form.ParentForm = parentForm;\r\n\r\n if (Events.ShouldLog(Logger_LogLevels.Development))\r\n Events.WriteDevToLog(\"form\");\r\n\r\n this.Form.fillData(this);\r\n return this.Form;\r\n }\r\n\r\n /// <summary>\r\n /// set task id\r\n /// </summary>\r\n setTaskId(valueStr: string): void {\r\n this._taskTag = valueStr;\r\n }\r\n\r\n /// <summary>\r\n /// set ctlIdx & compIdx\r\n /// </summary>\r\n private setCtlAndCompIdx(valueStr: string): void {\r\n let i: number = valueStr.indexOf(\",\");\r\n if (i > -1) {\r\n this._ctlIdx = NNumber.Parse(valueStr.substr(0, i));\r\n this._compIdx = NNumber.Parse(valueStr.substr(i + 1));\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// Get ancestor task containing form\r\n /// </summary>\r\n /// <returns>GuiTaskBase</returns>\r\n GetAncestorTaskContainingForm(): GuiTaskBase {\r\n let parentTask: GuiTaskBase = <GuiTaskBase>this.GetTaskAncestor(1);\r\n while (parentTask !== null && parentTask.getForm() === null) {\r\n parentTask = <GuiTaskBase>parentTask.GetTaskAncestor(1);\r\n }\r\n\r\n return parentTask;\r\n }\r\n\r\n /// <summary>\r\n /// set isMainPrg\r\n /// </summary>\r\n /// <param name=\"valueStr\"></param>\r\n private setMainPrg(valueStr: string): void {\r\n this._isMainPrg = XmlParser.getBoolean(valueStr);\r\n }\r\n\r\n /// <summary>\r\n /// set nullArithmetic\r\n /// </summary>\r\n /// <param name=\"valueStr\"></param>\r\n private setNullArithmetic(valueStr: string): void {\r\n this._nullArithmetic = valueStr.charAt(0);\r\n }\r\n\r\n /// <summary>\r\n /// set isInteractive\r\n /// </summary>\r\n /// <param name=\"valueStr\"></param>\r\n private setIsInteracive(valueStr: string): void {\r\n this.IsInteractive = XmlParser.getBoolean(valueStr);\r\n }\r\n\r\n /// <summary>\r\n /// set openWin\r\n /// </summary>\r\n /// <param name=\"valueStr\"></param>\r\n private setOpenWin(valueStr: string): void {\r\n this._openWin = XmlParser.getBoolean(valueStr);\r\n }\r\n\r\n /// <summary>\r\n /// set openWin\r\n /// </summary>\r\n /// <param name=\"valueStr\"></param>\r\n SetOpenWin(valuebool: boolean): void {\r\n this._openWin = valuebool;\r\n }\r\n\r\n /// <summary>\r\n /// set AllowEvents\r\n /// </summary>\r\n /// <param name=\"valueStr\"></param>\r\n SetAllowEvents(valueStr: string): void {\r\n this._allowEvents = XmlParser.getBoolean(valueStr);\r\n }\r\n\r\n /// <summary>\r\n /// set isPrg\r\n /// </summary>\r\n /// <param name=\"valueStr\"></param>\r\n private setIsPrg(valueStr: string): void {\r\n this._isPrg = XmlParser.getBoolean(valueStr);\r\n }\r\n\r\n ShouldEvaluatePropertyLocally(propId: number): boolean {\r\n return false;\r\n }\r\n\r\n abstract GetTaskDetails(): string;\r\n\r\n\r\n /// <summary> Sets the message on the message pane of status bar.</summary>\r\n /// <param name=\"msg\">message to be shown</param>\r\n /// <param name=\"soundBeep\">to beep or not</param>\r\n WriteToMessagePane(msg: string): void {\r\n // Story 149316 : send message to console\r\n if (msg != null)\r\n console.log(msg);\r\n }\r\n\r\n\r\n /// <summary>\r\n /// write a message to status bar\r\n /// </summary>\r\n /// <param name = \"msgId\">id of message to be written</param>\r\n /// <param name=\"soundBeep\"></param>\r\n WriteToMessagePanebyMsgId(msgId: string): void {\r\n let msg: string = Events.GetMessageString(msgId);\r\n this.WriteToMessagePane(msg);\r\n }\r\n}\r\n","/// <summary>\r\n/// This class acts as base class for the timers implemented in RC and Merlin.\r\n/// </summary>\r\nimport {Subscription, timer} from \"rxjs\";\r\nimport {Events} from \"../../Events\";\r\n\r\n\r\nexport abstract class MgTimer {\r\n // member variables.\r\n protected _timerIntervalMilliSeconds: number = 0;\r\n private _threadTimer: Subscription = null;\r\n\r\n ///<summary>Constructor</summary>\r\n ///<param name=\"timerIntervalMilliSeconds\">Timer Interval in milliseconds\r\n ///</param>\r\n constructor(timerIntervalMilliSeconds: number) {\r\n this._timerIntervalMilliSeconds = timerIntervalMilliSeconds;\r\n }\r\n\r\n /// <summary>Call back method of threading timer.\r\n /// <param name=\"state\"></param>\r\n /// </summary>\r\n static Run(state: any): void {\r\n Events.OnTimer(<MgTimer>state);\r\n }\r\n\r\n /// <summary>\r\n /// Starts the timer thread with the interval passed in milliseconds.\r\n /// </summary>\r\n Start(): void {\r\n var timer1 = timer(this._timerIntervalMilliSeconds, this._timerIntervalMilliSeconds);\r\n this._threadTimer = timer1.subscribe(() => MgTimer.Run(this));\r\n }\r\n\r\n /// <summary>Stops the thread.\r\n /// </summary>\r\n Stop(): void {\r\n this._threadTimer.unsubscribe();\r\n this._threadTimer = null;\r\n }\r\n}\r\n","import {StringBuilder} from \"@magic-xpa/mscorelib\";\r\n\r\n/// <summary>\r\n///\r\n/// </summary>\r\n\r\nexport class UsernamePasswordCredentials {\r\n Username: string = null;\r\n Password: string = null;\r\n\r\n constructor();\r\n constructor(userName: string, password: string);\r\n constructor(userName?: string, password?: string) {\r\n if (arguments.length === 0) {\r\n this.constructor_0();\r\n return;\r\n }\r\n this.constructor_1(userName, password);\r\n }\r\n\r\n private constructor_0(): void {\r\n }\r\n\r\n private constructor_1(userName: string, password: string): void {\r\n this.Username = userName;\r\n this.Password = password;\r\n }\r\n\r\n /// <summary> Get this object string.\r\n ///\r\n /// </summary>\r\n /// <returns> the username:password formed string\r\n /// </returns>\r\n toString(): string {\r\n let result: StringBuilder = new StringBuilder();\r\n result.Append(this.Username);\r\n result.Append(\":\");\r\n result.Append(this.Password || \"null\");\r\n return result.ToString();\r\n }\r\n}\r\n\r\nexport class ChangePasswordCredentials extends UsernamePasswordCredentials {\r\n NewUserName: string = null;\r\n NewPassword: string = null;\r\n\r\n constructor();\r\n constructor(oldUserName: string, newUserName: string, password: string);\r\n constructor(oldUserName?: string, newUserName?: string, password?: string) {\r\n super(oldUserName, password);\r\n if (arguments.length === 0) {\r\n this.constructor_2();\r\n return;\r\n }\r\n this.constructor_3( newUserName);\r\n }\r\n\r\n private constructor_2() {\r\n\r\n }\r\n\r\n\r\n private constructor_3(newUserName: string): void {\r\n this.NewUserName = newUserName;\r\n }\r\n\r\n ToString(): string {\r\n let result: StringBuilder = new StringBuilder();\r\n result.Append(this.Username);\r\n result.Append(\":\");\r\n result.Append(this.NewUserName);\r\n result.Append(\":\");\r\n result.Append(this.Password || \"null\");\r\n\r\n return result.ToString();\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}