taskjuggler 0.0.8 → 0.0.9

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 (613) hide show
  1. data/CHANGELOG +1144 -2047
  2. data/README +1 -1
  3. data/Rakefile +6 -6
  4. data/data/css/tjmanual.css +20 -0
  5. data/data/css/tjreport.css +7 -6
  6. data/doc/AppConfig.html +136 -130
  7. data/doc/Arguments.html +46 -40
  8. data/doc/CHANGELOG.html +1162 -2057
  9. data/doc/COPYING.html +8 -2
  10. data/doc/Object.html +205 -199
  11. data/doc/README.html +9 -3
  12. data/doc/RuntimeConfig.html +75 -69
  13. data/doc/String.html +69 -63
  14. data/doc/TaskJuggler.html +350 -291
  15. data/doc/TaskJuggler/Account.html +26 -20
  16. data/doc/TaskJuggler/AccountAttribute.html +24 -18
  17. data/doc/TaskJuggler/AccountScenario.html +24 -18
  18. data/doc/TaskJuggler/Allocation.html +74 -68
  19. data/doc/TaskJuggler/AllocationAttribute.html +54 -48
  20. data/doc/TaskJuggler/AttributeBase.html +172 -93
  21. data/doc/TaskJuggler/AttributeDefinition.html +22 -16
  22. data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
  23. data/doc/TaskJuggler/BatchProcessor.html +263 -257
  24. data/doc/TaskJuggler/Booking.html +44 -38
  25. data/doc/TaskJuggler/BookingListAttribute.html +25 -21
  26. data/doc/TaskJuggler/BooleanAttribute.html +24 -18
  27. data/doc/TaskJuggler/CSVFile.html +193 -187
  28. data/doc/TaskJuggler/CellSettingPattern.html +13 -7
  29. data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
  30. data/doc/TaskJuggler/Charge.html +49 -43
  31. data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
  32. data/doc/TaskJuggler/ChargeSet.html +94 -88
  33. data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
  34. data/doc/TaskJuggler/CollisionDetector.html +142 -136
  35. data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
  36. data/doc/TaskJuggler/ColumnTable.html +50 -44
  37. data/doc/TaskJuggler/Daemon.html +71 -50
  38. data/doc/TaskJuggler/DataCache.html +110 -58
  39. data/doc/TaskJuggler/DataCacheEntry.html +22 -16
  40. data/doc/TaskJuggler/DateAttribute.html +24 -18
  41. data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
  42. data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
  43. data/doc/TaskJuggler/DurationAttribute.html +25 -19
  44. data/doc/TaskJuggler/FileList.html +25 -19
  45. data/doc/TaskJuggler/FileRecord.html +17 -11
  46. data/doc/TaskJuggler/FixnumAttribute.html +16 -10
  47. data/doc/TaskJuggler/FlagListAttribute.html +25 -21
  48. data/doc/TaskJuggler/FloatAttribute.html +20 -14
  49. data/doc/TaskJuggler/FormatListAttribute.html +17 -11
  50. data/doc/TaskJuggler/GanttChart.html +242 -236
  51. data/doc/TaskJuggler/GanttContainer.html +71 -67
  52. data/doc/TaskJuggler/GanttHeader.html +113 -107
  53. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
  54. data/doc/TaskJuggler/GanttLine.html +217 -210
  55. data/doc/TaskJuggler/GanttLoadStack.html +89 -83
  56. data/doc/TaskJuggler/GanttMilestone.html +11 -6
  57. data/doc/TaskJuggler/GanttRouter.html +194 -186
  58. data/doc/TaskJuggler/GanttTaskBar.html +41 -34
  59. data/doc/TaskJuggler/HTMLDocument.html +52 -46
  60. data/doc/TaskJuggler/HTMLGraphics.html +58 -52
  61. data/doc/TaskJuggler/Interval.html +90 -84
  62. data/doc/TaskJuggler/IntervalList.html +777 -0
  63. data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
  64. data/doc/TaskJuggler/JobInfo.html +36 -30
  65. data/doc/TaskJuggler/Journal.html +188 -177
  66. data/doc/TaskJuggler/JournalEntry.html +36 -30
  67. data/doc/TaskJuggler/JournalEntryList.html +88 -82
  68. data/doc/TaskJuggler/KeywordArray.html +12 -6
  69. data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
  70. data/doc/TaskJuggler/Limits.html +111 -105
  71. data/doc/TaskJuggler/Limits/Limit.html +71 -65
  72. data/doc/TaskJuggler/LimitsAttribute.html +21 -15
  73. data/doc/TaskJuggler/ListAttributeBase.html +16 -10
  74. data/doc/TaskJuggler/Log.html +111 -105
  75. data/doc/TaskJuggler/LogFile.html +54 -48
  76. data/doc/TaskJuggler/LogicalAttribute.html +35 -29
  77. data/doc/TaskJuggler/LogicalExpression.html +32 -26
  78. data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
  79. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
  80. data/doc/TaskJuggler/LogicalFlag.html +24 -18
  81. data/doc/TaskJuggler/LogicalFunction.html +164 -158
  82. data/doc/TaskJuggler/LogicalOperation.html +138 -132
  83. data/doc/TaskJuggler/Macro.html +14 -8
  84. data/doc/TaskJuggler/MacroTable.html +42 -36
  85. data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
  86. data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
  87. data/doc/TaskJuggler/Message.html +56 -50
  88. data/doc/TaskJuggler/MessageHandler.html +73 -67
  89. data/doc/TaskJuggler/Navigator.html +92 -86
  90. data/doc/TaskJuggler/NavigatorElement.html +88 -82
  91. data/doc/TaskJuggler/NikuProject.html +15 -9
  92. data/doc/TaskJuggler/NikuReport.html +405 -370
  93. data/doc/TaskJuggler/NikuResource.html +13 -7
  94. data/doc/TaskJuggler/NodeListAttribute.html +13 -9
  95. data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
  96. data/doc/TaskJuggler/ProcessIntercom.html +116 -110
  97. data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
  98. data/doc/TaskJuggler/Project.html +1064 -895
  99. data/doc/TaskJuggler/ProjectBroker.html +439 -366
  100. data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
  101. data/doc/TaskJuggler/ProjectFileParser.html +329 -319
  102. data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
  103. data/doc/TaskJuggler/ProjectRecord.html +66 -60
  104. data/doc/TaskJuggler/ProjectServer.html +287 -280
  105. data/doc/TaskJuggler/ProjectServerIface.html +43 -37
  106. data/doc/TaskJuggler/PropertyAttribute.html +16 -10
  107. data/doc/TaskJuggler/PropertyList.html +205 -199
  108. data/doc/TaskJuggler/PropertySet.html +264 -296
  109. data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
  110. data/doc/TaskJuggler/Query.html +309 -524
  111. data/doc/TaskJuggler/RTFHandlers.html +17 -11
  112. data/doc/TaskJuggler/RTFNavigator.html +33 -27
  113. data/doc/TaskJuggler/RTFQuery.html +135 -129
  114. data/doc/TaskJuggler/RTFReport.html +63 -57
  115. data/doc/TaskJuggler/RTFReportLink.html +55 -49
  116. data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
  117. data/doc/TaskJuggler/RealFormat.html +64 -58
  118. data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
  119. data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
  120. data/doc/TaskJuggler/Report.html +294 -249
  121. data/doc/TaskJuggler/ReportBase.html +229 -223
  122. data/doc/TaskJuggler/ReportContext.html +52 -46
  123. data/doc/TaskJuggler/ReportServer.html +143 -137
  124. data/doc/TaskJuggler/ReportServerIface.html +51 -43
  125. data/doc/TaskJuggler/ReportServerRecord.html +36 -30
  126. data/doc/TaskJuggler/ReportServlet.html +167 -140
  127. data/doc/TaskJuggler/ReportTable.html +137 -131
  128. data/doc/TaskJuggler/ReportTableCell.html +332 -292
  129. data/doc/TaskJuggler/ReportTableColumn.html +46 -40
  130. data/doc/TaskJuggler/ReportTableLegend.html +43 -38
  131. data/doc/TaskJuggler/ReportTableLine.html +66 -60
  132. data/doc/TaskJuggler/Resource.html +166 -160
  133. data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
  134. data/doc/TaskJuggler/ResourceListRE.html +47 -41
  135. data/doc/TaskJuggler/ResourceScenario.html +671 -644
  136. data/doc/TaskJuggler/RichText.html +51 -45
  137. data/doc/TaskJuggler/RichTextAttribute.html +28 -22
  138. data/doc/TaskJuggler/RichTextDocument.html +96 -90
  139. data/doc/TaskJuggler/RichTextElement.html +503 -497
  140. data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
  141. data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
  142. data/doc/TaskJuggler/RichTextImage.html +14 -8
  143. data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
  144. data/doc/TaskJuggler/RichTextParser.html +59 -53
  145. data/doc/TaskJuggler/RichTextScanner.html +184 -178
  146. data/doc/TaskJuggler/RichTextSnip.html +69 -63
  147. data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
  148. data/doc/TaskJuggler/Scenario.html +13 -7
  149. data/doc/TaskJuggler/ScenarioData.html +40 -34
  150. data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
  151. data/doc/TaskJuggler/Scoreboard.html +129 -107
  152. data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
  153. data/doc/TaskJuggler/SheetReceiver.html +333 -327
  154. data/doc/TaskJuggler/SheetSender.html +227 -221
  155. data/doc/TaskJuggler/Shift.html +26 -20
  156. data/doc/TaskJuggler/ShiftAssignment.html +45 -39
  157. data/doc/TaskJuggler/ShiftAssignments.html +178 -172
  158. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
  159. data/doc/TaskJuggler/ShiftScenario.html +29 -23
  160. data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
  161. data/doc/TaskJuggler/SortListAttribute.html +17 -13
  162. data/doc/TaskJuggler/SourceFileInfo.html +19 -13
  163. data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
  164. data/doc/TaskJuggler/StatusSheetReport.html +166 -159
  165. data/doc/TaskJuggler/StatusSheetSender.html +80 -74
  166. data/doc/TaskJuggler/StringAttribute.html +20 -14
  167. data/doc/TaskJuggler/SymbolAttribute.html +16 -10
  168. data/doc/TaskJuggler/SyntaxReference.html +231 -225
  169. data/doc/TaskJuggler/TOCEntry.html +46 -40
  170. data/doc/TaskJuggler/TSResourceRecord.html +15 -9
  171. data/doc/TaskJuggler/TSTaskRecord.html +16 -10
  172. data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
  173. data/doc/TaskJuggler/TableOfContents.html +28 -22
  174. data/doc/TaskJuggler/TableReport.html +906 -866
  175. data/doc/TaskJuggler/Task.html +99 -93
  176. data/doc/TaskJuggler/TaskDependency.html +24 -18
  177. data/doc/TaskJuggler/TaskListAttribute.html +29 -25
  178. data/doc/TaskJuggler/TaskListRE.html +46 -39
  179. data/doc/TaskJuggler/TaskScenario.html +2218 -1965
  180. data/doc/TaskJuggler/TextFormatter.html +154 -148
  181. data/doc/TaskJuggler/TextParser.html +362 -348
  182. data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
  183. data/doc/TaskJuggler/TextParser/Rule.html +147 -141
  184. data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
  185. data/doc/TaskJuggler/TextParser/State.html +88 -82
  186. data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
  187. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
  188. data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
  189. data/doc/TaskJuggler/TextReport.html +80 -74
  190. data/doc/TaskJuggler/TextScanner.html +284 -272
  191. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
  192. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
  193. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
  194. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  195. data/doc/TaskJuggler/TimeSheet.html +123 -117
  196. data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
  197. data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
  198. data/doc/TaskJuggler/TimeSheetReport.html +206 -199
  199. data/doc/TaskJuggler/TimeSheetSender.html +27 -21
  200. data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
  201. data/doc/TaskJuggler/TimeSheets.html +20 -14
  202. data/doc/TaskJuggler/Tj3AppBase.html +100 -94
  203. data/doc/TaskJuggler/Tj3Client.html +407 -483
  204. data/doc/TaskJuggler/Tj3Daemon.html +116 -107
  205. data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
  206. data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
  207. data/doc/TaskJuggler/Tj3SsSender.html +64 -58
  208. data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
  209. data/doc/TaskJuggler/Tj3TsSender.html +51 -45
  210. data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
  211. data/doc/TaskJuggler/TjException.html +13 -7
  212. data/doc/TaskJuggler/TjTime.html +444 -438
  213. data/doc/TaskJuggler/TjpExample.html +84 -78
  214. data/doc/TaskJuggler/TjpExportRE.html +356 -349
  215. data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
  216. data/doc/TaskJuggler/URLParameter.html +16 -10
  217. data/doc/TaskJuggler/UserManual.html +185 -179
  218. data/doc/TaskJuggler/VimSyntax.html +144 -138
  219. data/doc/TaskJuggler/WebServer.html +46 -39
  220. data/doc/TaskJuggler/WelcomePage.html +769 -0
  221. data/doc/TaskJuggler/WorkingHours.html +185 -179
  222. data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
  223. data/doc/TaskJuggler/XMLBlob.html +21 -15
  224. data/doc/TaskJuggler/XMLComment.html +17 -11
  225. data/doc/TaskJuggler/XMLDocument.html +33 -27
  226. data/doc/TaskJuggler/XMLElement.html +97 -91
  227. data/doc/TaskJuggler/XMLNamedText.html +13 -7
  228. data/doc/TaskJuggler/XMLText.html +32 -26
  229. data/doc/index.html +601 -563
  230. data/doc/lib/AccountScenario_rb.html +5 -3
  231. data/doc/lib/Account_rb.html +5 -3
  232. data/doc/lib/Allocation_rb.html +5 -3
  233. data/doc/lib/AppConfig_rb.html +5 -3
  234. data/doc/lib/AttributeBase_rb.html +5 -3
  235. data/doc/lib/AttributeDefinition_rb.html +5 -3
  236. data/doc/lib/Attributes_rb.html +5 -3
  237. data/doc/lib/BatchProcessor_rb.html +5 -3
  238. data/doc/lib/Booking_rb.html +5 -3
  239. data/doc/lib/ChargeSet_rb.html +5 -3
  240. data/doc/lib/Charge_rb.html +5 -3
  241. data/doc/lib/DataCache_rb.html +5 -3
  242. data/doc/lib/FileList_rb.html +5 -3
  243. data/doc/lib/HTMLDocument_rb.html +5 -3
  244. data/doc/lib/IntervalList_rb.html +69 -0
  245. data/doc/lib/Interval_rb.html +5 -3
  246. data/doc/lib/Journal_rb.html +5 -3
  247. data/doc/lib/KeywordArray_rb.html +5 -3
  248. data/doc/lib/KeywordDocumentation_rb.html +5 -3
  249. data/doc/lib/Limits_rb.html +5 -3
  250. data/doc/lib/LogFile_rb.html +5 -3
  251. data/doc/lib/Log_rb.html +5 -3
  252. data/doc/lib/LogicalExpression_rb.html +5 -3
  253. data/doc/lib/LogicalFunction_rb.html +5 -3
  254. data/doc/lib/LogicalOperation_rb.html +5 -3
  255. data/doc/lib/MacroTable_rb.html +5 -3
  256. data/doc/lib/MessageHandler_rb.html +5 -3
  257. data/doc/lib/ProjectFileParser_rb.html +5 -3
  258. data/doc/lib/ProjectFileScanner_rb.html +5 -3
  259. data/doc/lib/Project_rb.html +5 -3
  260. data/doc/lib/PropertyList_rb.html +5 -3
  261. data/doc/lib/PropertySet_rb.html +5 -3
  262. data/doc/lib/PropertyTreeNode_rb.html +5 -3
  263. data/doc/lib/Query_rb.html +5 -3
  264. data/doc/lib/RTFHandlers_rb.html +5 -3
  265. data/doc/lib/RTFNavigator_rb.html +5 -3
  266. data/doc/lib/RTFQuery_rb.html +5 -3
  267. data/doc/lib/RTFReportLink_rb.html +5 -3
  268. data/doc/lib/RTFReport_rb.html +5 -3
  269. data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
  270. data/doc/lib/RealFormat_rb.html +5 -3
  271. data/doc/lib/ResourceScenario_rb.html +5 -3
  272. data/doc/lib/Resource_rb.html +5 -3
  273. data/doc/lib/RichTextDocument_rb.html +5 -3
  274. data/doc/lib/RichTextElement_rb.html +5 -3
  275. data/doc/lib/RichTextFunctionExample_rb.html +5 -3
  276. data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
  277. data/doc/lib/RichTextParser_rb.html +5 -3
  278. data/doc/lib/RichTextScanner_rb.html +5 -3
  279. data/doc/lib/RichTextSnip_rb.html +5 -3
  280. data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
  281. data/doc/lib/RichText_rb.html +5 -3
  282. data/doc/lib/RuntimeConfig_rb.html +5 -3
  283. data/doc/lib/ScenarioData_rb.html +5 -3
  284. data/doc/lib/Scenario_rb.html +5 -3
  285. data/doc/lib/Scoreboard_rb.html +7 -3
  286. data/doc/lib/SheetHandlerBase_rb.html +5 -3
  287. data/doc/lib/SheetReceiver_rb.html +5 -3
  288. data/doc/lib/SheetSender_rb.html +5 -3
  289. data/doc/lib/ShiftAssignments_rb.html +5 -3
  290. data/doc/lib/ShiftScenario_rb.html +5 -3
  291. data/doc/lib/Shift_rb.html +5 -3
  292. data/doc/lib/SimpleQueryExpander_rb.html +5 -3
  293. data/doc/lib/SourceFileInfo_rb.html +5 -3
  294. data/doc/lib/StatusSheetReceiver_rb.html +5 -3
  295. data/doc/lib/StatusSheetSender_rb.html +5 -3
  296. data/doc/lib/SyntaxReference_rb.html +5 -3
  297. data/doc/lib/TOCEntry_rb.html +5 -3
  298. data/doc/lib/TableColumnDefinition_rb.html +5 -3
  299. data/doc/lib/TableOfContents_rb.html +5 -3
  300. data/doc/lib/TaskDependency_rb.html +5 -3
  301. data/doc/lib/TaskJuggler_rb.html +5 -3
  302. data/doc/lib/TaskScenario_rb.html +5 -3
  303. data/doc/lib/Task_rb.html +5 -3
  304. data/doc/lib/TextFormatter_rb.html +6 -4
  305. data/doc/lib/TextParser/Pattern_rb.html +5 -3
  306. data/doc/lib/TextParser/Rule_rb.html +5 -3
  307. data/doc/lib/TextParser/StackElement_rb.html +5 -3
  308. data/doc/lib/TextParser/State_rb.html +6 -4
  309. data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
  310. data/doc/lib/TextParser_rb.html +5 -3
  311. data/doc/lib/TextScanner_rb.html +5 -3
  312. data/doc/lib/TimeSheetReceiver_rb.html +5 -3
  313. data/doc/lib/TimeSheetSender_rb.html +5 -3
  314. data/doc/lib/TimeSheetSummary_rb.html +6 -4
  315. data/doc/lib/TimeSheets_rb.html +5 -3
  316. data/doc/lib/Tj3AppBase_rb.html +5 -3
  317. data/doc/lib/Tj3Config_rb.html +5 -3
  318. data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
  319. data/doc/lib/TjException_rb.html +5 -3
  320. data/doc/lib/TjTime_rb.html +5 -3
  321. data/doc/lib/TjpExample_rb.html +5 -3
  322. data/doc/lib/TjpSyntaxRules_rb.html +5 -3
  323. data/doc/lib/URLParameter_rb.html +5 -3
  324. data/doc/lib/UTF8String_rb.html +5 -3
  325. data/doc/lib/UserManual_rb.html +5 -3
  326. data/doc/lib/VimSyntax_rb.html +6 -4
  327. data/doc/lib/WorkingHours_rb.html +5 -3
  328. data/doc/lib/XMLDocument_rb.html +5 -3
  329. data/doc/lib/XMLElement_rb.html +5 -3
  330. data/doc/lib/daemon/Daemon_rb.html +5 -3
  331. data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
  332. data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
  333. data/doc/lib/daemon/ProjectServer_rb.html +5 -3
  334. data/doc/lib/daemon/ReportServer_rb.html +5 -3
  335. data/doc/lib/daemon/ReportServlet_rb.html +69 -0
  336. data/doc/lib/daemon/WebServer_rb.html +9 -3
  337. data/doc/lib/daemon/WelcomePage_rb.html +71 -0
  338. data/doc/lib/deep_copy_rb.html +5 -3
  339. data/doc/lib/reports/CSVFile_rb.html +5 -3
  340. data/doc/lib/reports/CollisionDetector_rb.html +5 -3
  341. data/doc/lib/reports/ColumnTable_rb.html +5 -3
  342. data/doc/lib/reports/GanttChart_rb.html +5 -3
  343. data/doc/lib/reports/GanttContainer_rb.html +5 -3
  344. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
  345. data/doc/lib/reports/GanttHeader_rb.html +5 -3
  346. data/doc/lib/reports/GanttLine_rb.html +5 -3
  347. data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
  348. data/doc/lib/reports/GanttMilestone_rb.html +5 -3
  349. data/doc/lib/reports/GanttRouter_rb.html +5 -3
  350. data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
  351. data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
  352. data/doc/lib/reports/Navigator_rb.html +5 -3
  353. data/doc/lib/reports/NikuReport_rb.html +5 -3
  354. data/doc/lib/reports/ReportBase_rb.html +5 -3
  355. data/doc/lib/reports/ReportContext_rb.html +5 -3
  356. data/doc/lib/reports/ReportTableCell_rb.html +5 -3
  357. data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
  358. data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
  359. data/doc/lib/reports/ReportTableLine_rb.html +5 -3
  360. data/doc/lib/reports/ReportTable_rb.html +5 -3
  361. data/doc/lib/reports/Report_rb.html +5 -3
  362. data/doc/lib/reports/ResourceListRE_rb.html +5 -3
  363. data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
  364. data/doc/lib/reports/TableReport_rb.html +5 -3
  365. data/doc/lib/reports/TaskListRE_rb.html +5 -3
  366. data/doc/lib/reports/TextReport_rb.html +5 -3
  367. data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
  368. data/doc/lib/reports/TjpExportRE_rb.html +5 -3
  369. data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
  370. data/doc/lib/tj3client_rb.html +5 -3
  371. data/doc/lib/tj3d_rb.html +6 -4
  372. data/doc/lib/tj3man_rb.html +5 -3
  373. data/doc/lib/tj3ss_receiver_rb.html +5 -3
  374. data/doc/lib/tj3ss_sender_rb.html +5 -3
  375. data/doc/lib/tj3ts_receiver_rb.html +5 -3
  376. data/doc/lib/tj3ts_sender_rb.html +5 -3
  377. data/doc/lib/tj3ts_summary_rb.html +5 -3
  378. data/examples/tutorial.tjp +13 -5
  379. data/gem_spec.rb +3 -0
  380. data/lib/Account.rb +2 -1
  381. data/lib/AccountScenario.rb +2 -1
  382. data/lib/Allocation.rb +2 -1
  383. data/lib/AppConfig.rb +2 -1
  384. data/lib/AttributeBase.rb +19 -5
  385. data/lib/AttributeDefinition.rb +2 -1
  386. data/lib/Attributes.rb +49 -38
  387. data/lib/BatchProcessor.rb +2 -1
  388. data/lib/Booking.rb +2 -1
  389. data/lib/Charge.rb +2 -1
  390. data/lib/ChargeSet.rb +2 -1
  391. data/lib/DataCache.rb +15 -1
  392. data/lib/FileList.rb +2 -1
  393. data/lib/HTMLDocument.rb +2 -1
  394. data/lib/Interval.rb +2 -1
  395. data/lib/IntervalList.rb +100 -0
  396. data/lib/Journal.rb +8 -2
  397. data/lib/KeywordArray.rb +2 -1
  398. data/lib/KeywordDocumentation.rb +10 -6
  399. data/lib/Limits.rb +2 -1
  400. data/lib/Log.rb +3 -2
  401. data/lib/LogFile.rb +2 -1
  402. data/lib/LogicalExpression.rb +2 -1
  403. data/lib/LogicalFunction.rb +2 -1
  404. data/lib/LogicalOperation.rb +2 -1
  405. data/lib/MacroTable.rb +2 -1
  406. data/lib/MessageHandler.rb +2 -1
  407. data/lib/Project.rb +92 -25
  408. data/lib/ProjectFileParser.rb +7 -2
  409. data/lib/ProjectFileScanner.rb +2 -1
  410. data/lib/PropertyList.rb +2 -1
  411. data/lib/PropertySet.rb +2 -6
  412. data/lib/PropertyTreeNode.rb +22 -44
  413. data/lib/Query.rb +32 -13
  414. data/lib/RTFHandlers.rb +2 -1
  415. data/lib/RTFNavigator.rb +2 -1
  416. data/lib/RTFQuery.rb +3 -2
  417. data/lib/RTFReport.rb +2 -1
  418. data/lib/RTFReportLink.rb +2 -1
  419. data/lib/RTFWithQuerySupport.rb +2 -1
  420. data/lib/RealFormat.rb +2 -1
  421. data/lib/Resource.rb +2 -1
  422. data/lib/ResourceScenario.rb +35 -14
  423. data/lib/RichText.rb +2 -1
  424. data/lib/RichTextDocument.rb +2 -1
  425. data/lib/RichTextElement.rb +2 -1
  426. data/lib/RichTextFunctionExample.rb +2 -1
  427. data/lib/RichTextFunctionHandler.rb +2 -1
  428. data/lib/RichTextParser.rb +2 -1
  429. data/lib/RichTextScanner.rb +2 -1
  430. data/lib/RichTextSnip.rb +2 -1
  431. data/lib/RichTextSyntaxRules.rb +2 -1
  432. data/lib/RuntimeConfig.rb +2 -1
  433. data/lib/Scenario.rb +2 -1
  434. data/lib/ScenarioData.rb +2 -1
  435. data/lib/Scoreboard.rb +27 -8
  436. data/lib/SheetHandlerBase.rb +2 -1
  437. data/lib/SheetReceiver.rb +2 -1
  438. data/lib/SheetSender.rb +2 -1
  439. data/lib/Shift.rb +2 -1
  440. data/lib/ShiftAssignments.rb +2 -1
  441. data/lib/ShiftScenario.rb +2 -1
  442. data/lib/SimpleQueryExpander.rb +2 -1
  443. data/lib/SourceFileInfo.rb +2 -1
  444. data/lib/StatusSheetReceiver.rb +2 -1
  445. data/lib/StatusSheetSender.rb +2 -1
  446. data/lib/SyntaxReference.rb +2 -1
  447. data/lib/TOCEntry.rb +2 -1
  448. data/lib/TableColumnDefinition.rb +9 -2
  449. data/lib/TableOfContents.rb +2 -1
  450. data/lib/Task.rb +2 -1
  451. data/lib/TaskDependency.rb +2 -1
  452. data/lib/TaskJuggler.rb +8 -6
  453. data/lib/TaskScenario.rb +337 -153
  454. data/lib/TextFormatter.rb +3 -2
  455. data/lib/TextParser.rb +7 -2
  456. data/lib/TextParser/Pattern.rb +2 -1
  457. data/lib/TextParser/Rule.rb +2 -1
  458. data/lib/TextParser/StackElement.rb +2 -1
  459. data/lib/TextParser/State.rb +3 -2
  460. data/lib/TextParser/TokenDoc.rb +2 -1
  461. data/lib/TextScanner.rb +12 -5
  462. data/lib/TimeSheetReceiver.rb +2 -1
  463. data/lib/TimeSheetSender.rb +2 -1
  464. data/lib/TimeSheetSummary.rb +3 -2
  465. data/lib/TimeSheets.rb +2 -1
  466. data/lib/Tj3AppBase.rb +6 -5
  467. data/lib/Tj3Config.rb +5 -4
  468. data/lib/Tj3SheetAppBase.rb +2 -1
  469. data/lib/TjException.rb +2 -1
  470. data/lib/TjTime.rb +2 -1
  471. data/lib/TjpExample.rb +2 -1
  472. data/lib/TjpSyntaxRules.rb +264 -65
  473. data/lib/URLParameter.rb +2 -1
  474. data/lib/UTF8String.rb +2 -1
  475. data/lib/UserManual.rb +2 -1
  476. data/lib/VimSyntax.rb +3 -2
  477. data/lib/WorkingHours.rb +2 -1
  478. data/lib/XMLDocument.rb +2 -1
  479. data/lib/XMLElement.rb +2 -1
  480. data/lib/daemon/Daemon.rb +3 -1
  481. data/lib/daemon/ProcessIntercom.rb +3 -1
  482. data/lib/daemon/ProjectBroker.rb +84 -32
  483. data/lib/daemon/ProjectServer.rb +5 -3
  484. data/lib/daemon/ReportServer.rb +8 -5
  485. data/lib/daemon/ReportServlet.rb +166 -0
  486. data/lib/daemon/WebServer.rb +6 -150
  487. data/lib/daemon/WelcomePage.rb +80 -0
  488. data/lib/deep_copy.rb +2 -1
  489. data/lib/reports/CSVFile.rb +2 -1
  490. data/lib/reports/CollisionDetector.rb +2 -1
  491. data/lib/reports/ColumnTable.rb +2 -1
  492. data/lib/reports/GanttChart.rb +2 -1
  493. data/lib/reports/GanttContainer.rb +3 -4
  494. data/lib/reports/GanttHeader.rb +2 -1
  495. data/lib/reports/GanttHeaderScaleItem.rb +2 -1
  496. data/lib/reports/GanttLine.rb +12 -10
  497. data/lib/reports/GanttLoadStack.rb +2 -1
  498. data/lib/reports/GanttMilestone.rb +3 -3
  499. data/lib/reports/GanttRouter.rb +4 -1
  500. data/lib/reports/GanttTaskBar.rb +9 -7
  501. data/lib/reports/HTMLGraphics.rb +2 -1
  502. data/lib/reports/Navigator.rb +2 -1
  503. data/lib/reports/NikuReport.rb +79 -49
  504. data/lib/reports/Report.rb +42 -10
  505. data/lib/reports/ReportBase.rb +2 -1
  506. data/lib/reports/ReportContext.rb +2 -1
  507. data/lib/reports/ReportTable.rb +2 -1
  508. data/lib/reports/ReportTableCell.rb +63 -28
  509. data/lib/reports/ReportTableColumn.rb +2 -1
  510. data/lib/reports/ReportTableLegend.rb +5 -5
  511. data/lib/reports/ReportTableLine.rb +2 -1
  512. data/lib/reports/ResourceListRE.rb +2 -1
  513. data/lib/reports/StatusSheetReport.rb +4 -2
  514. data/lib/reports/TableReport.rb +42 -38
  515. data/lib/reports/TaskListRE.rb +4 -2
  516. data/lib/reports/TextReport.rb +2 -1
  517. data/lib/reports/TimeSheetReport.rb +4 -2
  518. data/lib/reports/TjpExportRE.rb +4 -2
  519. data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
  520. data/lib/tj3client.rb +19 -36
  521. data/lib/tj3d.rb +6 -2
  522. data/lib/tj3man.rb +4 -3
  523. data/lib/tj3ss_receiver.rb +2 -1
  524. data/lib/tj3ss_sender.rb +2 -1
  525. data/lib/tj3ts_receiver.rb +2 -1
  526. data/lib/tj3ts_sender.rb +2 -1
  527. data/lib/tj3ts_summary.rb +2 -1
  528. data/manual/Day_To_Day_Juggling +36 -0
  529. data/manual/How_To_Contribute +9 -4
  530. data/manual/Installation +10 -3
  531. data/manual/TaskJuggler_Internals +0 -2
  532. data/manual/Tutorial +25 -3
  533. data/prj_cfg.rb +4 -2
  534. data/spec/IntervalList_spec.rb +138 -0
  535. data/spec/ProjectBroker_spec.rb +133 -0
  536. data/tasks/changelog.rake +41 -24
  537. data/tasks/csts.rake +1 -0
  538. data/tasks/gem.rake +1 -0
  539. data/tasks/rcov.rake +1 -1
  540. data/tasks/spec.rake +7 -0
  541. data/tasks/test.rake +1 -0
  542. data/test/MessageChecker.rb +2 -1
  543. data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
  544. data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
  545. data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
  546. data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
  547. data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
  548. data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
  549. data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
  550. data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
  551. data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
  552. data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
  553. data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
  554. data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
  555. data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
  556. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
  557. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
  558. data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
  559. data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
  560. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
  561. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
  562. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
  563. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
  564. data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
  565. data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
  566. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
  567. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
  568. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
  569. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
  570. data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
  571. data/test/TestSuite/StatusSheets/sender.log +256 -0
  572. data/test/TestSuite/StatusSheets/statussheets.log +9 -0
  573. data/test/TestSuite/StatusSheets/tj3d.log +395 -0
  574. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
  575. data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
  576. data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
  577. data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
  578. data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
  579. data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
  580. data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
  581. data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
  582. data/test/all.rb +2 -4
  583. data/test/test_BatchProcessor.rb +2 -1
  584. data/test/test_CSV-Reports.rb +34 -23
  585. data/test/test_CSVFile.rb +2 -1
  586. data/test/test_CollisionDetector.rb +3 -2
  587. data/test/test_Journal.rb +2 -1
  588. data/test/test_Limits.rb +2 -1
  589. data/test/test_LogicalExpression.rb +2 -1
  590. data/test/test_MacroTable.rb +2 -1
  591. data/test/test_Project.rb +3 -2
  592. data/test/test_ProjectFileScanner.rb +2 -1
  593. data/test/test_PropertySet.rb +2 -1
  594. data/test/test_Query.rb +2 -1
  595. data/test/test_RealFormat.rb +2 -1
  596. data/test/test_ReportGenerator.rb +2 -1
  597. data/test/test_RichText.rb +2 -1
  598. data/test/test_Scheduler.rb +2 -1
  599. data/test/test_ShiftAssignments.rb +2 -1
  600. data/test/test_SimpleQueryExpander.rb +2 -1
  601. data/test/test_Syntax.rb +2 -1
  602. data/test/test_TextFormatter.rb +3 -2
  603. data/test/test_TjTime.rb +2 -1
  604. data/test/test_TjpExample.rb +2 -1
  605. data/test/test_URLParameter.rb +2 -1
  606. data/test/test_UTF8String.rb +2 -1
  607. data/test/test_WorkingHours.rb +2 -1
  608. data/test/test_deep_copy.rb +2 -1
  609. metadata +74 -20
  610. data/doc/StringIO.html +0 -595
  611. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
  612. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
  613. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
@@ -142,6 +142,8 @@
142
142
 
143
143
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
144
144
 
145
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
146
+
145
147
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
146
148
 
147
149
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -220,6 +222,8 @@
220
222
 
221
223
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
222
224
 
225
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
226
+
223
227
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
224
228
 
225
229
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -252,6 +256,8 @@
252
256
 
253
257
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
254
258
 
259
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
260
+
255
261
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
256
262
 
257
263
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -532,6 +538,8 @@
532
538
 
533
539
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
534
540
 
541
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
542
+
535
543
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
536
544
 
537
545
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -558,8 +566,6 @@
558
566
 
559
567
  <li><a href="../String.html">String</a></li>
560
568
 
561
- <li><a href="../StringIO.html">StringIO</a></li>
562
-
563
569
  </ul>
564
570
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
565
571
  </div>
@@ -619,43 +625,43 @@ each of the values.
619
625
  <div class="method-source-code"
620
626
  id="new-source">
621
627
  <pre>
622
- <span class="ruby-comment cmt"># File lib/reports/GanttLoadStack.rb, line 27</span>
623
- 27: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">line</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">values</span>, <span class="ruby-identifier">categories</span>)
624
- 28: <span class="ruby-ivar">@line</span> = <span class="ruby-identifier">line</span>
625
- 29: <span class="ruby-ivar">@lineHeight</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">height</span>
626
- 30: <span class="ruby-ivar">@x</span> = <span class="ruby-identifier">x</span>
627
- 31: <span class="ruby-ivar">@y</span> = <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">y</span>
628
- 32: <span class="ruby-ivar">@w</span> = <span class="ruby-identifier">w</span>
629
- 33: <span class="ruby-ivar">@drawFrame</span> = <span class="ruby-keyword kw">false</span>
630
- 34: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">values</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">categories</span>.<span class="ruby-identifier">length</span>
631
- 35: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Values and categories must have the same number of entries!&quot;</span>
632
- 36: <span class="ruby-keyword kw">end</span>
633
- 37: <span class="ruby-ivar">@categories</span> = <span class="ruby-identifier">categories</span>
634
- 38: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
635
- 39: <span class="ruby-ivar">@categories</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cat</span><span class="ruby-operator">|</span>
636
- 40: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cat</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">values</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
637
- 41: <span class="ruby-ivar">@drawFrame</span> = <span class="ruby-keyword kw">true</span>
638
- 42: <span class="ruby-keyword kw">break</span>
639
- 43: <span class="ruby-keyword kw">end</span>
640
- 44: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
641
- 45: <span class="ruby-keyword kw">end</span>
642
- 46:
643
- 47: <span class="ruby-comment cmt"># Convert the values to chart Y coordinates and store them in yLevels.</span>
644
- 48: <span class="ruby-identifier">sum</span> = <span class="ruby-value">0</span>
645
- 49: <span class="ruby-identifier">values</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">sum</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">v</span> }
646
- 50: <span class="ruby-comment cmt"># If the sum is 0, all yLevels values must be 0 as well.</span>
647
- 51: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sum</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
648
- 52: <span class="ruby-ivar">@yLevels</span> = <span class="ruby-keyword kw">nil</span>
649
- 53: <span class="ruby-ivar">@drawFrame</span> = <span class="ruby-keyword kw">true</span>
650
- 54: <span class="ruby-keyword kw">else</span>
651
- 55: <span class="ruby-ivar">@yLevels</span> = []
652
- 56: <span class="ruby-identifier">values</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
653
- 57: <span class="ruby-comment cmt"># We leave 1 pixel to the top and bottom of the line and need 1 pixel</span>
654
- 58: <span class="ruby-comment cmt"># for the frame.</span>
655
- 59: <span class="ruby-ivar">@yLevels</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">4</span>) * <span class="ruby-identifier">v</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">sum</span>
656
- 60: <span class="ruby-keyword kw">end</span>
657
- 61: <span class="ruby-keyword kw">end</span>
658
- 62: <span class="ruby-keyword kw">end</span></pre>
628
+ <span class="ruby-comment cmt"># File lib/reports/GanttLoadStack.rb, line 28</span>
629
+ 28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">line</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">values</span>, <span class="ruby-identifier">categories</span>)
630
+ 29: <span class="ruby-ivar">@line</span> = <span class="ruby-identifier">line</span>
631
+ 30: <span class="ruby-ivar">@lineHeight</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">height</span>
632
+ 31: <span class="ruby-ivar">@x</span> = <span class="ruby-identifier">x</span>
633
+ 32: <span class="ruby-ivar">@y</span> = <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">y</span>
634
+ 33: <span class="ruby-ivar">@w</span> = <span class="ruby-identifier">w</span>
635
+ 34: <span class="ruby-ivar">@drawFrame</span> = <span class="ruby-keyword kw">false</span>
636
+ 35: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">values</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">categories</span>.<span class="ruby-identifier">length</span>
637
+ 36: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Values and categories must have the same number of entries!&quot;</span>
638
+ 37: <span class="ruby-keyword kw">end</span>
639
+ 38: <span class="ruby-ivar">@categories</span> = <span class="ruby-identifier">categories</span>
640
+ 39: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
641
+ 40: <span class="ruby-ivar">@categories</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cat</span><span class="ruby-operator">|</span>
642
+ 41: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cat</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">values</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
643
+ 42: <span class="ruby-ivar">@drawFrame</span> = <span class="ruby-keyword kw">true</span>
644
+ 43: <span class="ruby-keyword kw">break</span>
645
+ 44: <span class="ruby-keyword kw">end</span>
646
+ 45: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
647
+ 46: <span class="ruby-keyword kw">end</span>
648
+ 47:
649
+ 48: <span class="ruby-comment cmt"># Convert the values to chart Y coordinates and store them in yLevels.</span>
650
+ 49: <span class="ruby-identifier">sum</span> = <span class="ruby-value">0</span>
651
+ 50: <span class="ruby-identifier">values</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">sum</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">v</span> }
652
+ 51: <span class="ruby-comment cmt"># If the sum is 0, all yLevels values must be 0 as well.</span>
653
+ 52: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sum</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
654
+ 53: <span class="ruby-ivar">@yLevels</span> = <span class="ruby-keyword kw">nil</span>
655
+ 54: <span class="ruby-ivar">@drawFrame</span> = <span class="ruby-keyword kw">true</span>
656
+ 55: <span class="ruby-keyword kw">else</span>
657
+ 56: <span class="ruby-ivar">@yLevels</span> = []
658
+ 57: <span class="ruby-identifier">values</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
659
+ 58: <span class="ruby-comment cmt"># We leave 1 pixel to the top and bottom of the line and need 1 pixel</span>
660
+ 59: <span class="ruby-comment cmt"># for the frame.</span>
661
+ 60: <span class="ruby-ivar">@yLevels</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">4</span>) * <span class="ruby-identifier">v</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">sum</span>
662
+ 61: <span class="ruby-keyword kw">end</span>
663
+ 62: <span class="ruby-keyword kw">end</span>
664
+ 63: <span class="ruby-keyword kw">end</span></pre>
659
665
  </div>
660
666
 
661
667
  </div>
@@ -692,11 +698,11 @@ each of the values.
692
698
  <div class="method-source-code"
693
699
  id="add-locked-ones-source">
694
700
  <pre>
695
- <span class="ruby-comment cmt"># File lib/reports/GanttLoadStack.rb, line 64</span>
696
- 64: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addBlockedZones</span>(<span class="ruby-identifier">router</span>)
697
- 65: <span class="ruby-comment cmt"># Horizontal block</span>
698
- 66: <span class="ruby-identifier">router</span>.<span class="ruby-identifier">addZone</span>(<span class="ruby-ivar">@x</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-ivar">@y</span>, <span class="ruby-ivar">@w</span> <span class="ruby-operator">+</span> <span class="ruby-value">4</span>, <span class="ruby-ivar">@lineHeight</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>)
699
- 67: <span class="ruby-keyword kw">end</span></pre>
701
+ <span class="ruby-comment cmt"># File lib/reports/GanttLoadStack.rb, line 65</span>
702
+ 65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addBlockedZones</span>(<span class="ruby-identifier">router</span>)
703
+ 66: <span class="ruby-comment cmt"># Horizontal block</span>
704
+ 67: <span class="ruby-identifier">router</span>.<span class="ruby-identifier">addZone</span>(<span class="ruby-ivar">@x</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-ivar">@y</span>, <span class="ruby-ivar">@w</span> <span class="ruby-operator">+</span> <span class="ruby-value">4</span>, <span class="ruby-ivar">@lineHeight</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>)
705
+ 68: <span class="ruby-keyword kw">end</span></pre>
700
706
  </div>
701
707
 
702
708
  </div>
@@ -730,45 +736,45 @@ href="GanttLoadStack.html">GanttLoadStack</a> into HTML elements.
730
736
  <div class="method-source-code"
731
737
  id="to-html-source">
732
738
  <pre>
733
- <span class="ruby-comment cmt"># File lib/reports/GanttLoadStack.rb, line 71</span>
734
- 71: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
735
- 72: <span class="ruby-comment cmt"># Draw nothing if all values are 0.</span>
736
- 73: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@yLevels</span>
737
- 74:
738
- 75: <span class="ruby-identifier">html</span> = []
739
- 76: <span class="ruby-comment cmt"># Draw a background rectable to create a frame. In case the frame is not</span>
740
- 77: <span class="ruby-comment cmt"># fully filled by the stack, we need to draw a real frame to keep the</span>
741
- 78: <span class="ruby-comment cmt"># background.</span>
742
- 79: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@drawFrame</span>
743
- 80: <span class="ruby-comment cmt"># Top frame line</span>
744
- 81: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">lineToHTML</span>(<span class="ruby-ivar">@x</span>, <span class="ruby-value">1</span>, <span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>, <span class="ruby-value">1</span>, <span class="ruby-value str">'loadstackframe'</span>)
745
- 82: <span class="ruby-comment cmt"># Bottom frame line</span>
746
- 83: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">lineToHTML</span>(<span class="ruby-ivar">@x</span>, <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>,
747
- 84: <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-value str">'loadstackframe'</span>)
748
- 85: <span class="ruby-comment cmt"># Left frame line</span>
749
- 86: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">lineToHTML</span>(<span class="ruby-ivar">@x</span>, <span class="ruby-value">1</span>, <span class="ruby-ivar">@x</span>, <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-value str">'loadstackframe'</span>)
750
- 87: <span class="ruby-comment cmt"># Right frame line</span>
751
- 88: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">lineToHTML</span>(<span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>, <span class="ruby-value">1</span>, <span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>, <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>,
752
- 89: <span class="ruby-value str">'loadstackframe'</span>)
753
- 90: <span class="ruby-keyword kw">else</span>
754
- 91: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">rectToHTML</span>(<span class="ruby-ivar">@x</span>, <span class="ruby-value">1</span>, <span class="ruby-ivar">@w</span>, <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>,
755
- 92: <span class="ruby-value str">'loadstackframe'</span>)
756
- 93: <span class="ruby-keyword kw">end</span>
757
- 94:
758
- 95: <span class="ruby-identifier">yPos</span> = <span class="ruby-value">2</span>
759
- 96: <span class="ruby-comment cmt"># Than draw the slighly narrower bars as a pile ontop of it.</span>
760
- 97: (<span class="ruby-ivar">@yLevels</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>).<span class="ruby-identifier">downto</span>(<span class="ruby-value">0</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
761
- 98: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@yLevels</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-value">0</span>
762
- 99: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@categories</span>[<span class="ruby-identifier">i</span>]
763
- 100: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">rectToHTML</span>(<span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-identifier">yPos</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>,
764
- 101: (<span class="ruby-identifier">yPos</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@yLevels</span>[<span class="ruby-identifier">i</span>]).<span class="ruby-identifier">to_i</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">yPos</span>.<span class="ruby-identifier">to_i</span>,
765
- 102: <span class="ruby-ivar">@categories</span>[<span class="ruby-identifier">i</span>])
766
- 103: <span class="ruby-keyword kw">end</span>
767
- 104: <span class="ruby-identifier">yPos</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@yLevels</span>[<span class="ruby-identifier">i</span>]
768
- 105: <span class="ruby-keyword kw">end</span>
769
- 106:
770
- 107: <span class="ruby-identifier">html</span>
771
- 108: <span class="ruby-keyword kw">end</span></pre>
739
+ <span class="ruby-comment cmt"># File lib/reports/GanttLoadStack.rb, line 72</span>
740
+ 72: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
741
+ 73: <span class="ruby-comment cmt"># Draw nothing if all values are 0.</span>
742
+ 74: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@yLevels</span>
743
+ 75:
744
+ 76: <span class="ruby-identifier">html</span> = []
745
+ 77: <span class="ruby-comment cmt"># Draw a background rectable to create a frame. In case the frame is not</span>
746
+ 78: <span class="ruby-comment cmt"># fully filled by the stack, we need to draw a real frame to keep the</span>
747
+ 79: <span class="ruby-comment cmt"># background.</span>
748
+ 80: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@drawFrame</span>
749
+ 81: <span class="ruby-comment cmt"># Top frame line</span>
750
+ 82: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">lineToHTML</span>(<span class="ruby-ivar">@x</span>, <span class="ruby-value">1</span>, <span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>, <span class="ruby-value">1</span>, <span class="ruby-value str">'loadstackframe'</span>)
751
+ 83: <span class="ruby-comment cmt"># Bottom frame line</span>
752
+ 84: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">lineToHTML</span>(<span class="ruby-ivar">@x</span>, <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>,
753
+ 85: <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-value str">'loadstackframe'</span>)
754
+ 86: <span class="ruby-comment cmt"># Left frame line</span>
755
+ 87: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">lineToHTML</span>(<span class="ruby-ivar">@x</span>, <span class="ruby-value">1</span>, <span class="ruby-ivar">@x</span>, <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-value str">'loadstackframe'</span>)
756
+ 88: <span class="ruby-comment cmt"># Right frame line</span>
757
+ 89: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">lineToHTML</span>(<span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>, <span class="ruby-value">1</span>, <span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>, <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>,
758
+ 90: <span class="ruby-value str">'loadstackframe'</span>)
759
+ 91: <span class="ruby-keyword kw">else</span>
760
+ 92: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">rectToHTML</span>(<span class="ruby-ivar">@x</span>, <span class="ruby-value">1</span>, <span class="ruby-ivar">@w</span>, <span class="ruby-ivar">@lineHeight</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>,
761
+ 93: <span class="ruby-value str">'loadstackframe'</span>)
762
+ 94: <span class="ruby-keyword kw">end</span>
763
+ 95:
764
+ 96: <span class="ruby-identifier">yPos</span> = <span class="ruby-value">2</span>
765
+ 97: <span class="ruby-comment cmt"># Than draw the slighly narrower bars as a pile ontop of it.</span>
766
+ 98: (<span class="ruby-ivar">@yLevels</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>).<span class="ruby-identifier">downto</span>(<span class="ruby-value">0</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
767
+ 99: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@yLevels</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-value">0</span>
768
+ 100: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@categories</span>[<span class="ruby-identifier">i</span>]
769
+ 101: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@line</span>.<span class="ruby-identifier">rectToHTML</span>(<span class="ruby-ivar">@x</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-identifier">yPos</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-ivar">@w</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>,
770
+ 102: (<span class="ruby-identifier">yPos</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@yLevels</span>[<span class="ruby-identifier">i</span>]).<span class="ruby-identifier">to_i</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">yPos</span>.<span class="ruby-identifier">to_i</span>,
771
+ 103: <span class="ruby-ivar">@categories</span>[<span class="ruby-identifier">i</span>])
772
+ 104: <span class="ruby-keyword kw">end</span>
773
+ 105: <span class="ruby-identifier">yPos</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@yLevels</span>[<span class="ruby-identifier">i</span>]
774
+ 106: <span class="ruby-keyword kw">end</span>
775
+ 107:
776
+ 108: <span class="ruby-identifier">html</span>
777
+ 109: <span class="ruby-keyword kw">end</span></pre>
772
778
  </div>
773
779
 
774
780
  </div>
@@ -150,6 +150,8 @@
150
150
 
151
151
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
152
152
 
153
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
154
+
153
155
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
154
156
 
155
157
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -228,6 +230,8 @@
228
230
 
229
231
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
230
232
 
233
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
234
+
231
235
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
232
236
 
233
237
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -260,6 +264,8 @@
260
264
 
261
265
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
262
266
 
267
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
268
+
263
269
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
264
270
 
265
271
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -540,6 +546,8 @@
540
546
 
541
547
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
542
548
 
549
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
550
+
543
551
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
544
552
 
545
553
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -566,8 +574,6 @@
566
574
 
567
575
  <li><a href="../String.html">String</a></li>
568
576
 
569
- <li><a href="../StringIO.html">StringIO</a></li>
570
-
571
577
  </ul>
572
578
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
573
579
  </div>
@@ -605,7 +611,7 @@ task.
605
611
  <div class="method-heading">
606
612
 
607
613
  <span class="method-name">new</span><span
608
- class="method-args">(task, lineHeight, x, y)</span>
614
+ class="method-args">(lineHeight, x, y)</span>
609
615
  <span class="method-click-advice">click to toggle source</span>
610
616
 
611
617
  </div>
@@ -626,9 +632,8 @@ href="GanttChart.html">GanttChart</a>.
626
632
  <div class="method-source-code"
627
633
  id="new-source">
628
634
  <pre>
629
- <span class="ruby-comment cmt"># File lib/reports/GanttMilestone.rb, line 29</span>
630
- 29: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">lineHeight</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>)
631
- 30: <span class="ruby-ivar">@task</span> = <span class="ruby-identifier">task</span>
635
+ <span class="ruby-comment cmt"># File lib/reports/GanttMilestone.rb, line 30</span>
636
+ 30: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">lineHeight</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>)
632
637
  31: <span class="ruby-ivar">@lineHeight</span> = <span class="ruby-identifier">lineHeight</span>
633
638
  32: <span class="ruby-ivar">@x</span> = <span class="ruby-identifier">x</span>
634
639
  33: <span class="ruby-ivar">@y</span> = <span class="ruby-identifier">y</span>
@@ -141,6 +141,8 @@
141
141
 
142
142
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
143
143
 
144
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
145
+
144
146
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
145
147
 
146
148
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -219,6 +221,8 @@
219
221
 
220
222
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
221
223
 
224
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
225
+
222
226
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
223
227
 
224
228
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -251,6 +255,8 @@
251
255
 
252
256
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
253
257
 
258
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
259
+
254
260
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
255
261
 
256
262
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -531,6 +537,8 @@
531
537
 
532
538
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
533
539
 
540
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
541
+
534
542
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
535
543
 
536
544
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -557,8 +565,6 @@
557
565
 
558
566
  <li><a href="../String.html">String</a></li>
559
567
 
560
- <li><a href="../StringIO.html">StringIO</a></li>
561
-
562
568
  </ul>
563
569
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
564
570
  </div>
@@ -641,13 +647,13 @@ is operating on.
641
647
  <div class="method-source-code"
642
648
  id="new-source">
643
649
  <pre>
644
- <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 34</span>
645
- 34: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">width</span>, <span class="ruby-identifier">height</span>)
646
- 35: <span class="ruby-ivar">@width</span> = <span class="ruby-identifier">width</span>.<span class="ruby-identifier">to_i</span>
647
- 36: <span class="ruby-ivar">@height</span> = <span class="ruby-identifier">height</span>.<span class="ruby-identifier">to_i</span>
648
- 37:
649
- 38: <span class="ruby-ivar">@detector</span> = <span class="ruby-constant">CollisionDetector</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@width</span>, <span class="ruby-ivar">@height</span>)
650
- 39: <span class="ruby-keyword kw">end</span></pre>
650
+ <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 35</span>
651
+ 35: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">width</span>, <span class="ruby-identifier">height</span>)
652
+ 36: <span class="ruby-ivar">@width</span> = <span class="ruby-identifier">width</span>.<span class="ruby-identifier">to_i</span>
653
+ 37: <span class="ruby-ivar">@height</span> = <span class="ruby-identifier">height</span>.<span class="ruby-identifier">to_i</span>
654
+ 38:
655
+ 39: <span class="ruby-ivar">@detector</span> = <span class="ruby-constant">CollisionDetector</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@width</span>, <span class="ruby-ivar">@height</span>)
656
+ 40: <span class="ruby-keyword kw">end</span></pre>
651
657
  </div>
652
658
 
653
659
  </div>
@@ -684,10 +690,10 @@ is operating on.
684
690
  <div class="method-source-code"
685
691
  id="add-one-source">
686
692
  <pre>
687
- <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 41</span>
688
- 41: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-identifier">horiz</span>, <span class="ruby-identifier">vert</span>)
689
- 42: <span class="ruby-ivar">@detector</span>.<span class="ruby-identifier">addBlockedZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-identifier">horiz</span>, <span class="ruby-identifier">vert</span>)
690
- 43: <span class="ruby-keyword kw">end</span></pre>
693
+ <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 42</span>
694
+ 42: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-identifier">horiz</span>, <span class="ruby-identifier">vert</span>)
695
+ 43: <span class="ruby-ivar">@detector</span>.<span class="ruby-identifier">addBlockedZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-identifier">horiz</span>, <span class="ruby-identifier">vert</span>)
696
+ 44: <span class="ruby-keyword kw">end</span></pre>
691
697
  </div>
692
698
 
693
699
  </div>
@@ -726,74 +732,74 @@ element.
726
732
  <div class="method-source-code"
727
733
  id="route-source">
728
734
  <pre>
729
- <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 94</span>
730
- 94: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">route</span>(<span class="ruby-identifier">startX</span>, <span class="ruby-identifier">startY</span>, <span class="ruby-identifier">endX</span>, <span class="ruby-identifier">endY</span>)
731
- 95: <span class="ruby-identifier">points</span> = [ [ <span class="ruby-identifier">startX</span>, <span class="ruby-identifier">startY</span> ] ]
732
- 96: <span class="ruby-identifier">startGap</span> = <span class="ruby-constant">MinStartGap</span>
733
- 97: <span class="ruby-identifier">endGap</span> = <span class="ruby-constant">MinEndGap</span>
734
- 98:
735
- 99: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endX</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">startX</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">startGap</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">endGap</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
736
- 100: <span class="ruby-comment cmt"># If the horizontal distance between start and end point is large enough</span>
737
- 101: <span class="ruby-comment cmt"># we can try a direct route.</span>
738
- 102: <span class="ruby-comment cmt">#</span>
739
- 103: <span class="ruby-comment cmt"># xSeg</span>
740
- 104: <span class="ruby-comment cmt"># |startGap|</span>
741
- 105: <span class="ruby-comment cmt"># startX/endX X--------1</span>
742
- 106: <span class="ruby-comment cmt"># |</span>
743
- 107: <span class="ruby-comment cmt"># |</span>
744
- 108: <span class="ruby-comment cmt"># 2------X endX/endY</span>
745
- 109: <span class="ruby-comment cmt"># |endGap|</span>
746
- 110: <span class="ruby-comment cmt">#</span>
747
- 111: <span class="ruby-identifier">xSeg</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">startY</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">startY</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endY</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span>), <span class="ruby-identifier">endY</span> ],
748
- 112: <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">startX</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">startGap</span>, <span class="ruby-value">1</span>)
749
- 113: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">xSeg</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">xSeg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endX</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">endGap</span>
750
- 114: <span class="ruby-comment cmt"># The simple version works. Add the lines.</span>
751
- 115: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">xSeg</span>, <span class="ruby-identifier">startY</span>) <span class="ruby-comment cmt"># Point 1</span>
752
- 116: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">xSeg</span>, <span class="ruby-identifier">endY</span>) <span class="ruby-comment cmt"># Point 2</span>
753
- 117: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">endX</span>, <span class="ruby-identifier">endY</span>)
754
- 118: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">points</span>
755
- 119: <span class="ruby-keyword kw">end</span>
756
- 120: <span class="ruby-keyword kw">end</span>
757
- 121:
758
- 122: <span class="ruby-comment cmt"># If the simple approach above fails, the try a more complex routing</span>
759
- 123: <span class="ruby-comment cmt"># strategy.</span>
760
- 124: <span class="ruby-comment cmt">#</span>
761
- 125: <span class="ruby-comment cmt"># x1</span>
762
- 126: <span class="ruby-comment cmt"># |startGap|</span>
763
- 127: <span class="ruby-comment cmt"># startX/startY X--------1 yLS</span>
764
- 128: <span class="ruby-comment cmt"># |</span>
765
- 129: <span class="ruby-comment cmt"># 3---------------2 ySeg</span>
766
- 130: <span class="ruby-comment cmt"># |</span>
767
- 131: <span class="ruby-comment cmt"># 4------X endX/endY</span>
768
- 132: <span class="ruby-comment cmt"># |endGap|</span>
769
- 133: <span class="ruby-comment cmt"># x2</span>
770
- 134:
771
- 135: <span class="ruby-comment cmt"># Place horizontal segue. We don't know the width yet, so we have to</span>
772
- 136: <span class="ruby-comment cmt"># assume full width. That's acceptable for horizontal lines.</span>
773
- 137: <span class="ruby-identifier">deltaY</span> = <span class="ruby-identifier">startY</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endY</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span>
774
- 138: <span class="ruby-identifier">ySeg</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-value">0</span>, <span class="ruby-ivar">@width</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ], <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">startY</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span> * <span class="ruby-identifier">deltaY</span>, <span class="ruby-identifier">deltaY</span>)
775
- 139: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ySeg</span>
776
- 140:
777
- 141: <span class="ruby-comment cmt"># Place 1st vertical</span>
778
- 142: <span class="ruby-identifier">x1</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">startY</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">deltaY</span>, <span class="ruby-identifier">ySeg</span> ], <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">startX</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">startGap</span>, <span class="ruby-value">1</span>)
779
- 143: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x1</span>
780
- 144:
781
- 145: <span class="ruby-comment cmt"># Place 2nd vertical</span>
782
- 146: <span class="ruby-identifier">x2</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">ySeg</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">deltaY</span>, <span class="ruby-identifier">endY</span> ], <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">endX</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">endGap</span>, <span class="ruby-value">1</span>)
783
- 147: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x2</span>
784
- 148:
785
- 149: <span class="ruby-comment cmt"># Now add the points 1 - 4 to the list and mark the zones around them. For</span>
786
- 150: <span class="ruby-comment cmt"># vertical lines, we only mark vertical zones and vice versa.</span>
787
- 151: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">startY</span>) <span class="ruby-comment cmt"># Point 1</span>
788
- 152: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">x2</span>
789
- 153: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">ySeg</span>) <span class="ruby-comment cmt"># Point 2</span>
790
- 154: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">ySeg</span>) <span class="ruby-comment cmt"># Point 3</span>
791
- 155: <span class="ruby-keyword kw">end</span>
792
- 156: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">endY</span>) <span class="ruby-comment cmt"># Point 4</span>
793
- 157: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">endX</span>, <span class="ruby-identifier">endY</span>)
794
- 158:
795
- 159: <span class="ruby-identifier">points</span>
796
- 160: <span class="ruby-keyword kw">end</span></pre>
735
+ <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 97</span>
736
+ 97: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">route</span>(<span class="ruby-identifier">startX</span>, <span class="ruby-identifier">startY</span>, <span class="ruby-identifier">endX</span>, <span class="ruby-identifier">endY</span>)
737
+ 98: <span class="ruby-identifier">points</span> = [ [ <span class="ruby-identifier">startX</span>, <span class="ruby-identifier">startY</span> ] ]
738
+ 99: <span class="ruby-identifier">startGap</span> = <span class="ruby-constant">MinStartGap</span>
739
+ 100: <span class="ruby-identifier">endGap</span> = <span class="ruby-constant">MinEndGap</span>
740
+ 101:
741
+ 102: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endX</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">startX</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">startGap</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">endGap</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
742
+ 103: <span class="ruby-comment cmt"># If the horizontal distance between start and end point is large enough</span>
743
+ 104: <span class="ruby-comment cmt"># we can try a direct route.</span>
744
+ 105: <span class="ruby-comment cmt">#</span>
745
+ 106: <span class="ruby-comment cmt"># xSeg</span>
746
+ 107: <span class="ruby-comment cmt"># |startGap|</span>
747
+ 108: <span class="ruby-comment cmt"># startX/endX X--------1</span>
748
+ 109: <span class="ruby-comment cmt"># |</span>
749
+ 110: <span class="ruby-comment cmt"># |</span>
750
+ 111: <span class="ruby-comment cmt"># 2------X endX/endY</span>
751
+ 112: <span class="ruby-comment cmt"># |endGap|</span>
752
+ 113: <span class="ruby-comment cmt">#</span>
753
+ 114: <span class="ruby-identifier">xSeg</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">startY</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">startY</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endY</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span>), <span class="ruby-identifier">endY</span> ],
754
+ 115: <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">startX</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">startGap</span>, <span class="ruby-value">1</span>)
755
+ 116: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">xSeg</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">xSeg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endX</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">endGap</span>
756
+ 117: <span class="ruby-comment cmt"># The simple version works. Add the lines.</span>
757
+ 118: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">xSeg</span>, <span class="ruby-identifier">startY</span>) <span class="ruby-comment cmt"># Point 1</span>
758
+ 119: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">xSeg</span>, <span class="ruby-identifier">endY</span>) <span class="ruby-comment cmt"># Point 2</span>
759
+ 120: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">endX</span>, <span class="ruby-identifier">endY</span>)
760
+ 121: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">points</span>
761
+ 122: <span class="ruby-keyword kw">end</span>
762
+ 123: <span class="ruby-keyword kw">end</span>
763
+ 124:
764
+ 125: <span class="ruby-comment cmt"># If the simple approach above fails, the try a more complex routing</span>
765
+ 126: <span class="ruby-comment cmt"># strategy.</span>
766
+ 127: <span class="ruby-comment cmt">#</span>
767
+ 128: <span class="ruby-comment cmt"># x1</span>
768
+ 129: <span class="ruby-comment cmt"># |startGap|</span>
769
+ 130: <span class="ruby-comment cmt"># startX/startY X--------1 yLS</span>
770
+ 131: <span class="ruby-comment cmt"># |</span>
771
+ 132: <span class="ruby-comment cmt"># 3---------------2 ySeg</span>
772
+ 133: <span class="ruby-comment cmt"># |</span>
773
+ 134: <span class="ruby-comment cmt"># 4------X endX/endY</span>
774
+ 135: <span class="ruby-comment cmt"># |endGap|</span>
775
+ 136: <span class="ruby-comment cmt"># x2</span>
776
+ 137:
777
+ 138: <span class="ruby-comment cmt"># Place horizontal segue. We don't know the width yet, so we have to</span>
778
+ 139: <span class="ruby-comment cmt"># assume full width. That's acceptable for horizontal lines.</span>
779
+ 140: <span class="ruby-identifier">deltaY</span> = <span class="ruby-identifier">startY</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endY</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span>
780
+ 141: <span class="ruby-identifier">ySeg</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-value">0</span>, <span class="ruby-ivar">@width</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ], <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">startY</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span> * <span class="ruby-identifier">deltaY</span>, <span class="ruby-identifier">deltaY</span>)
781
+ 142: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ySeg</span>
782
+ 143:
783
+ 144: <span class="ruby-comment cmt"># Place 1st vertical</span>
784
+ 145: <span class="ruby-identifier">x1</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">startY</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">deltaY</span>, <span class="ruby-identifier">ySeg</span> ], <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">startX</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">startGap</span>, <span class="ruby-value">1</span>)
785
+ 146: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x1</span>
786
+ 147:
787
+ 148: <span class="ruby-comment cmt"># Place 2nd vertical</span>
788
+ 149: <span class="ruby-identifier">x2</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">ySeg</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">deltaY</span>, <span class="ruby-identifier">endY</span> ], <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">endX</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">endGap</span>, <span class="ruby-value">1</span>)
789
+ 150: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x2</span>
790
+ 151:
791
+ 152: <span class="ruby-comment cmt"># Now add the points 1 - 4 to the list and mark the zones around them. For</span>
792
+ 153: <span class="ruby-comment cmt"># vertical lines, we only mark vertical zones and vice versa.</span>
793
+ 154: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">startY</span>) <span class="ruby-comment cmt"># Point 1</span>
794
+ 155: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">x2</span>
795
+ 156: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">ySeg</span>) <span class="ruby-comment cmt"># Point 2</span>
796
+ 157: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">ySeg</span>) <span class="ruby-comment cmt"># Point 3</span>
797
+ 158: <span class="ruby-keyword kw">end</span>
798
+ 159: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">endY</span>) <span class="ruby-comment cmt"># Point 4</span>
799
+ 160: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">endX</span>, <span class="ruby-identifier">endY</span>)
800
+ 161:
801
+ 162: <span class="ruby-identifier">points</span>
802
+ 163: <span class="ruby-keyword kw">end</span></pre>
797
803
  </div>
798
804
 
799
805
  </div>
@@ -824,49 +830,51 @@ element.
824
830
  <div class="method-source-code"
825
831
  id="route-ines-source">
826
832
  <pre>
827
- <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 45</span>
828
- 45: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">routeLines</span>(<span class="ruby-identifier">fromToPoints</span>)
829
- 46: <span class="ruby-comment cmt"># We first convert the fromToPoints list into a more readable list of</span>
830
- 47: <span class="ruby-comment cmt"># Hash objects.</span>
831
- 48: <span class="ruby-identifier">routes</span> = []
832
- 49: <span class="ruby-identifier">fromToPoints</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">touple</span><span class="ruby-operator">|</span>
833
- 50: <span class="ruby-identifier">routes</span> <span class="ruby-operator">&lt;&lt;</span> {
834
- 51: <span class="ruby-value">:startX</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">0</span>],
835
- 52: <span class="ruby-value">:startY</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">1</span>],
836
- 53: <span class="ruby-value">:endX</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">2</span>],
837
- 54: <span class="ruby-value">:endY</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">3</span>],
838
- 55: <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">4</span>]
839
- 56: }
840
- 57: <span class="ruby-keyword kw">end</span>
841
- 58:
842
- 59: <span class="ruby-comment cmt"># To make sure that we minimize the crossings of arrows that</span>
843
- 60: <span class="ruby-comment cmt"># originate from the same position, we sort the arrows by the</span>
844
- 61: <span class="ruby-comment cmt"># smallest angle between the vertical line through the task end</span>
845
- 62: <span class="ruby-comment cmt"># and the line between the start and end of the arrow.</span>
846
- 63: <span class="ruby-identifier">routes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
847
- 64: <span class="ruby-identifier">adjLeg</span> = (<span class="ruby-identifier">r</span>[<span class="ruby-value">:endX</span>] <span class="ruby-operator">-</span> <span class="ruby-constant">MinEndGap</span>) <span class="ruby-operator">-</span> (<span class="ruby-identifier">r</span>[<span class="ruby-value">:startX</span>] <span class="ruby-operator">+</span> <span class="ruby-constant">MinStartGap</span>)
848
- 65: <span class="ruby-identifier">oppLeg</span> = (<span class="ruby-identifier">r</span>[<span class="ruby-value">:startY</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">r</span>[<span class="ruby-value">:endY</span>]).<span class="ruby-identifier">abs</span>
849
- 66: <span class="ruby-identifier">r</span>[<span class="ruby-value">:distance</span>] = <span class="ruby-constant">Math</span>.<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">adjLeg</span> <span class="ruby-operator">**</span> <span class="ruby-value">2</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">oppLeg</span> <span class="ruby-operator">**</span> <span class="ruby-value">2</span>)
850
- 67: <span class="ruby-comment cmt"># We can now calculate the sinus values of the angle between the</span>
851
- 68: <span class="ruby-comment cmt"># vertical and a line through the coordinates.</span>
852
- 69: <span class="ruby-identifier">sinus</span> = <span class="ruby-identifier">oppLeg</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">r</span>[<span class="ruby-value">:distance</span>]
853
- 70: <span class="ruby-identifier">r</span>[<span class="ruby-value">:angle</span>] = (<span class="ruby-identifier">adjLeg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-constant">Math</span><span class="ruby-operator">::</span><span class="ruby-constant">PI</span> <span class="ruby-operator">/</span> <span class="ruby-value">2</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">asin</span>(<span class="ruby-constant">Math</span><span class="ruby-operator">::</span><span class="ruby-constant">PI</span><span class="ruby-operator">/</span><span class="ruby-value">2</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">sinus</span>) <span class="ruby-operator">:</span>
854
- 71: <span class="ruby-constant">Math</span>.<span class="ruby-identifier">asin</span>(<span class="ruby-identifier">sinus</span>)) <span class="ruby-operator">/</span> (<span class="ruby-constant">Math</span><span class="ruby-operator">::</span><span class="ruby-constant">PI</span> <span class="ruby-operator">/</span> (<span class="ruby-value">2</span> * <span class="ruby-value">90</span>))
855
- 72: <span class="ruby-keyword kw">end</span>
856
- 73: <span class="ruby-comment cmt"># We sort the arrows from small to a large angle. In case the angle is</span>
857
- 74: <span class="ruby-comment cmt"># identical, we use the length of the line as second criteria.</span>
858
- 75: <span class="ruby-identifier">routes</span>.<span class="ruby-identifier">sort!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">r1</span>, <span class="ruby-identifier">r2</span><span class="ruby-operator">|</span> (<span class="ruby-identifier">r1</span>[<span class="ruby-value">:angle</span>] <span class="ruby-operator">/</span> <span class="ruby-value">5</span>).<span class="ruby-identifier">to_i</span> <span class="ruby-operator">==</span> (<span class="ruby-identifier">r2</span>[<span class="ruby-value">:angle</span>] <span class="ruby-operator">/</span> <span class="ruby-value">5</span>).<span class="ruby-identifier">to_i</span> <span class="ruby-operator">?</span>
859
- 76: <span class="ruby-operator">-</span>(<span class="ruby-identifier">r1</span>[<span class="ruby-value">:distance</span>] <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">r2</span>[<span class="ruby-value">:distance</span>]) <span class="ruby-operator">:</span>
860
- 77: <span class="ruby-operator">-</span>(<span class="ruby-identifier">r1</span>[<span class="ruby-value">:angle</span>] <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">r2</span>[<span class="ruby-value">:angle</span>]) }
861
- 78:
862
- 79: <span class="ruby-comment cmt"># Now that the routes are in proper order, we can actually lay the</span>
863
- 80: <span class="ruby-comment cmt"># routes.</span>
864
- 81: <span class="ruby-identifier">routePoints</span> = []
865
- 82: <span class="ruby-identifier">routes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
866
- 83: <span class="ruby-identifier">routePoints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">route</span>(<span class="ruby-identifier">r</span>[<span class="ruby-value">:startX</span>], <span class="ruby-identifier">r</span>[<span class="ruby-value">:startY</span>], <span class="ruby-identifier">r</span>[<span class="ruby-value">:endX</span>], <span class="ruby-identifier">r</span>[<span class="ruby-value">:endY</span>])
867
- 84: <span class="ruby-keyword kw">end</span>
868
- 85: <span class="ruby-identifier">routePoints</span>
869
- 86: <span class="ruby-keyword kw">end</span></pre>
833
+ <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 46</span>
834
+ 46: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">routeLines</span>(<span class="ruby-identifier">fromToPoints</span>)
835
+ 47: <span class="ruby-comment cmt"># We first convert the fromToPoints list into a more readable list of</span>
836
+ 48: <span class="ruby-comment cmt"># Hash objects.</span>
837
+ 49: <span class="ruby-identifier">routes</span> = []
838
+ 50: <span class="ruby-identifier">fromToPoints</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">touple</span><span class="ruby-operator">|</span>
839
+ 51: <span class="ruby-comment cmt"># Ignore lines where start is after end.</span>
840
+ 52: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">2</span>]
841
+ 53: <span class="ruby-identifier">routes</span> <span class="ruby-operator">&lt;&lt;</span> {
842
+ 54: <span class="ruby-value">:startX</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">0</span>],
843
+ 55: <span class="ruby-value">:startY</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">1</span>],
844
+ 56: <span class="ruby-value">:endX</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">2</span>],
845
+ 57: <span class="ruby-value">:endY</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">3</span>],
846
+ 58: <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">touple</span>[<span class="ruby-value">4</span>]
847
+ 59: }
848
+ 60: <span class="ruby-keyword kw">end</span>
849
+ 61:
850
+ 62: <span class="ruby-comment cmt"># To make sure that we minimize the crossings of arrows that</span>
851
+ 63: <span class="ruby-comment cmt"># originate from the same position, we sort the arrows by the</span>
852
+ 64: <span class="ruby-comment cmt"># smallest angle between the vertical line through the task end</span>
853
+ 65: <span class="ruby-comment cmt"># and the line between the start and end of the arrow.</span>
854
+ 66: <span class="ruby-identifier">routes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
855
+ 67: <span class="ruby-identifier">adjLeg</span> = (<span class="ruby-identifier">r</span>[<span class="ruby-value">:endX</span>] <span class="ruby-operator">-</span> <span class="ruby-constant">MinEndGap</span>) <span class="ruby-operator">-</span> (<span class="ruby-identifier">r</span>[<span class="ruby-value">:startX</span>] <span class="ruby-operator">+</span> <span class="ruby-constant">MinStartGap</span>)
856
+ 68: <span class="ruby-identifier">oppLeg</span> = (<span class="ruby-identifier">r</span>[<span class="ruby-value">:startY</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">r</span>[<span class="ruby-value">:endY</span>]).<span class="ruby-identifier">abs</span>
857
+ 69: <span class="ruby-identifier">r</span>[<span class="ruby-value">:distance</span>] = <span class="ruby-constant">Math</span>.<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">adjLeg</span> <span class="ruby-operator">**</span> <span class="ruby-value">2</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">oppLeg</span> <span class="ruby-operator">**</span> <span class="ruby-value">2</span>)
858
+ 70: <span class="ruby-comment cmt"># We can now calculate the sinus values of the angle between the</span>
859
+ 71: <span class="ruby-comment cmt"># vertical and a line through the coordinates.</span>
860
+ 72: <span class="ruby-identifier">sinus</span> = <span class="ruby-identifier">oppLeg</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">r</span>[<span class="ruby-value">:distance</span>]
861
+ 73: <span class="ruby-identifier">r</span>[<span class="ruby-value">:angle</span>] = (<span class="ruby-identifier">adjLeg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-constant">Math</span><span class="ruby-operator">::</span><span class="ruby-constant">PI</span> <span class="ruby-operator">/</span> <span class="ruby-value">2</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">asin</span>(<span class="ruby-constant">Math</span><span class="ruby-operator">::</span><span class="ruby-constant">PI</span><span class="ruby-operator">/</span><span class="ruby-value">2</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">sinus</span>) <span class="ruby-operator">:</span>
862
+ 74: <span class="ruby-constant">Math</span>.<span class="ruby-identifier">asin</span>(<span class="ruby-identifier">sinus</span>)) <span class="ruby-operator">/</span> (<span class="ruby-constant">Math</span><span class="ruby-operator">::</span><span class="ruby-constant">PI</span> <span class="ruby-operator">/</span> (<span class="ruby-value">2</span> * <span class="ruby-value">90</span>))
863
+ 75: <span class="ruby-keyword kw">end</span>
864
+ 76: <span class="ruby-comment cmt"># We sort the arrows from small to a large angle. In case the angle is</span>
865
+ 77: <span class="ruby-comment cmt"># identical, we use the length of the line as second criteria.</span>
866
+ 78: <span class="ruby-identifier">routes</span>.<span class="ruby-identifier">sort!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">r1</span>, <span class="ruby-identifier">r2</span><span class="ruby-operator">|</span> (<span class="ruby-identifier">r1</span>[<span class="ruby-value">:angle</span>] <span class="ruby-operator">/</span> <span class="ruby-value">5</span>).<span class="ruby-identifier">to_i</span> <span class="ruby-operator">==</span> (<span class="ruby-identifier">r2</span>[<span class="ruby-value">:angle</span>] <span class="ruby-operator">/</span> <span class="ruby-value">5</span>).<span class="ruby-identifier">to_i</span> <span class="ruby-operator">?</span>
867
+ 79: <span class="ruby-operator">-</span>(<span class="ruby-identifier">r1</span>[<span class="ruby-value">:distance</span>] <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">r2</span>[<span class="ruby-value">:distance</span>]) <span class="ruby-operator">:</span>
868
+ 80: <span class="ruby-operator">-</span>(<span class="ruby-identifier">r1</span>[<span class="ruby-value">:angle</span>] <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">r2</span>[<span class="ruby-value">:angle</span>]) }
869
+ 81:
870
+ 82: <span class="ruby-comment cmt"># Now that the routes are in proper order, we can actually lay the</span>
871
+ 83: <span class="ruby-comment cmt"># routes.</span>
872
+ 84: <span class="ruby-identifier">routePoints</span> = []
873
+ 85: <span class="ruby-identifier">routes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
874
+ 86: <span class="ruby-identifier">routePoints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">route</span>(<span class="ruby-identifier">r</span>[<span class="ruby-value">:startX</span>], <span class="ruby-identifier">r</span>[<span class="ruby-value">:startY</span>], <span class="ruby-identifier">r</span>[<span class="ruby-value">:endX</span>], <span class="ruby-identifier">r</span>[<span class="ruby-value">:endY</span>])
875
+ 87: <span class="ruby-keyword kw">end</span>
876
+ 88: <span class="ruby-identifier">routePoints</span>
877
+ 89: <span class="ruby-keyword kw">end</span></pre>
870
878
  </div>
871
879
 
872
880
  </div>
@@ -900,10 +908,10 @@ vertical or horizontal zones in the chart.
900
908
  <div class="method-source-code"
901
909
  id="to-html-source">
902
910
  <pre>
903
- <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 164</span>
904
- 164: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
905
- 165: <span class="ruby-ivar">@detector</span>.<span class="ruby-identifier">to_html</span>
906
- 166: <span class="ruby-keyword kw">end</span></pre>
911
+ <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 167</span>
912
+ 167: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
913
+ 168: <span class="ruby-ivar">@detector</span>.<span class="ruby-identifier">to_html</span>
914
+ 169: <span class="ruby-keyword kw">end</span></pre>
907
915
  </div>
908
916
 
909
917
  </div>
@@ -945,25 +953,25 @@ the chart.
945
953
  <div class="method-source-code"
946
954
  id="add-ine-o-source">
947
955
  <pre>
948
- <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 208</span>
949
- 208: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">y2</span>)
950
- 209: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Point list may not be empty&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">points</span>.<span class="ruby-identifier">empty?</span>
951
- 210:
952
- 211: <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">y1</span> = <span class="ruby-identifier">points</span>[<span class="ruby-value">1</span>]
953
- 212: <span class="ruby-identifier">points</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">y2</span> ]
956
+ <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 211</span>
957
+ 211: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">y2</span>)
958
+ 212: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Point list may not be empty&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">points</span>.<span class="ruby-identifier">empty?</span>
954
959
  213:
955
- 214: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">x2</span>
956
- 215: <span class="ruby-comment cmt"># vertical line</span>
957
- 216: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-ivar">@width</span>
958
- 217: <span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span> = <span class="ruby-identifier">justify</span>(<span class="ruby-identifier">x1</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-identifier">y1</span>, <span class="ruby-value">5</span>, <span class="ruby-identifier">y2</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">y1</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
959
- 218: <span class="ruby-identifier">addZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>)
960
- 219: <span class="ruby-keyword kw">else</span>
961
- 220: <span class="ruby-comment cmt"># horizontal line</span>
962
- 221: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">y1</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-ivar">@height</span>
963
- 222: <span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span> = <span class="ruby-identifier">justify</span>(<span class="ruby-identifier">x1</span>, <span class="ruby-identifier">y1</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-identifier">x2</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-value">5</span>)
964
- 223: <span class="ruby-identifier">addZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>)
965
- 224: <span class="ruby-keyword kw">end</span>
966
- 225: <span class="ruby-keyword kw">end</span></pre>
960
+ 214: <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">y1</span> = <span class="ruby-identifier">points</span>[<span class="ruby-value">1</span>]
961
+ 215: <span class="ruby-identifier">points</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">y2</span> ]
962
+ 216:
963
+ 217: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">x2</span>
964
+ 218: <span class="ruby-comment cmt"># vertical line</span>
965
+ 219: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-ivar">@width</span>
966
+ 220: <span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span> = <span class="ruby-identifier">justify</span>(<span class="ruby-identifier">x1</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-identifier">y1</span>, <span class="ruby-value">5</span>, <span class="ruby-identifier">y2</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">y1</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
967
+ 221: <span class="ruby-identifier">addZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>)
968
+ 222: <span class="ruby-keyword kw">else</span>
969
+ 223: <span class="ruby-comment cmt"># horizontal line</span>
970
+ 224: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">y1</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-ivar">@height</span>
971
+ 225: <span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span> = <span class="ruby-identifier">justify</span>(<span class="ruby-identifier">x1</span>, <span class="ruby-identifier">y1</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>, <span class="ruby-identifier">x2</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-value">5</span>)
972
+ 226: <span class="ruby-identifier">addZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>)
973
+ 227: <span class="ruby-keyword kw">end</span>
974
+ 228: <span class="ruby-keyword kw">end</span></pre>
967
975
  </div>
968
976
 
969
977
  </div>
@@ -999,19 +1007,19 @@ the same rectangle with all positive coordinates.
999
1007
  <div class="method-source-code"
1000
1008
  id="justify-source">
1001
1009
  <pre>
1002
- <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 231</span>
1003
- 231: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">justify</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>)
1004
- 232: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1005
- 233: <span class="ruby-identifier">w</span> = <span class="ruby-operator">-</span><span class="ruby-identifier">w</span>
1006
- 234: <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
1007
- 235: <span class="ruby-keyword kw">end</span>
1008
- 236: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1009
- 237: <span class="ruby-identifier">h</span> = <span class="ruby-operator">-</span><span class="ruby-identifier">h</span>
1010
- 238: <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
1011
- 239: <span class="ruby-keyword kw">end</span>
1012
- 240: <span class="ruby-comment cmt"># Return the potentially adjusted rectangle coordinates.</span>
1013
- 241: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>
1014
- 242: <span class="ruby-keyword kw">end</span></pre>
1010
+ <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 234</span>
1011
+ 234: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">justify</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>)
1012
+ 235: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1013
+ 236: <span class="ruby-identifier">w</span> = <span class="ruby-operator">-</span><span class="ruby-identifier">w</span>
1014
+ 237: <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">w</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
1015
+ 238: <span class="ruby-keyword kw">end</span>
1016
+ 239: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1017
+ 240: <span class="ruby-identifier">h</span> = <span class="ruby-operator">-</span><span class="ruby-identifier">h</span>
1018
+ 241: <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">h</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
1019
+ 242: <span class="ruby-keyword kw">end</span>
1020
+ 243: <span class="ruby-comment cmt"># Return the potentially adjusted rectangle coordinates.</span>
1021
+ 244: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>
1022
+ 245: <span class="ruby-keyword kw">end</span></pre>
1015
1023
  </div>
1016
1024
 
1017
1025
  </div>
@@ -1050,33 +1058,33 @@ collision free coordinate or the outside edge of the routing area.
1050
1058
  <div class="method-source-code"
1051
1059
  id="place-ine-source">
1052
1060
  <pre>
1053
- <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 177</span>
1054
- 177: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">placeLine</span>(<span class="ruby-identifier">segment</span>, <span class="ruby-identifier">horizontal</span>, <span class="ruby-identifier">start</span>, <span class="ruby-identifier">delta</span>)
1055
- 178: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;delta may not be 0&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">delta</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1056
- 179: <span class="ruby-comment cmt"># Start must be an integer and lie within the routing area.</span>
1057
- 180: <span class="ruby-identifier">pos</span> = <span class="ruby-identifier">start</span>.<span class="ruby-identifier">to_i</span>
1058
- 181: <span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1059
- 182: <span class="ruby-identifier">max</span> = (<span class="ruby-identifier">horizontal</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@height</span><span class="ruby-operator">:</span> <span class="ruby-ivar">@width</span>) <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1060
- 183: <span class="ruby-identifier">pos</span> = <span class="ruby-identifier">max</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max</span>
1061
- 184:
1062
- 185: <span class="ruby-comment cmt"># Make sure that the segment coordinates are in ascending order.</span>
1063
- 186: <span class="ruby-identifier">segment</span>.<span class="ruby-identifier">sort!</span>
1064
- 187: <span class="ruby-comment cmt"># TODO: Remove this check once the code becomes stable.</span>
1065
- 188: <span class="ruby-comment cmt">#checkLines(lines)</span>
1066
- 189: <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@detector</span>.<span class="ruby-identifier">collision?</span>(<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">segment</span>, <span class="ruby-identifier">horizontal</span>)
1067
- 190: <span class="ruby-identifier">pos</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">delta</span>
1068
- 191: <span class="ruby-comment cmt"># Check if we have exceded the chart area towards top/left.</span>
1069
- 192: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">delta</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1070
- 193: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1071
- 194: <span class="ruby-keyword kw">break</span>
1072
- 195: <span class="ruby-keyword kw">end</span>
1073
- 196: <span class="ruby-keyword kw">else</span>
1074
- 197: <span class="ruby-comment cmt"># And towards right/bottom.</span>
1075
- 198: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&gt;=</span> (<span class="ruby-identifier">horizontal</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@height</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@width</span>)
1076
- 199: <span class="ruby-keyword kw">end</span>
1077
- 200: <span class="ruby-keyword kw">end</span>
1078
- 201: <span class="ruby-identifier">pos</span>
1079
- 202: <span class="ruby-keyword kw">end</span></pre>
1061
+ <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 180</span>
1062
+ 180: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">placeLine</span>(<span class="ruby-identifier">segment</span>, <span class="ruby-identifier">horizontal</span>, <span class="ruby-identifier">start</span>, <span class="ruby-identifier">delta</span>)
1063
+ 181: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;delta may not be 0&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">delta</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1064
+ 182: <span class="ruby-comment cmt"># Start must be an integer and lie within the routing area.</span>
1065
+ 183: <span class="ruby-identifier">pos</span> = <span class="ruby-identifier">start</span>.<span class="ruby-identifier">to_i</span>
1066
+ 184: <span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1067
+ 185: <span class="ruby-identifier">max</span> = (<span class="ruby-identifier">horizontal</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@height</span><span class="ruby-operator">:</span> <span class="ruby-ivar">@width</span>) <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1068
+ 186: <span class="ruby-identifier">pos</span> = <span class="ruby-identifier">max</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max</span>
1069
+ 187:
1070
+ 188: <span class="ruby-comment cmt"># Make sure that the segment coordinates are in ascending order.</span>
1071
+ 189: <span class="ruby-identifier">segment</span>.<span class="ruby-identifier">sort!</span>
1072
+ 190: <span class="ruby-comment cmt"># TODO: Remove this check once the code becomes stable.</span>
1073
+ 191: <span class="ruby-comment cmt">#checkLines(lines)</span>
1074
+ 192: <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@detector</span>.<span class="ruby-identifier">collision?</span>(<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">segment</span>, <span class="ruby-identifier">horizontal</span>)
1075
+ 193: <span class="ruby-identifier">pos</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">delta</span>
1076
+ 194: <span class="ruby-comment cmt"># Check if we have exceded the chart area towards top/left.</span>
1077
+ 195: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">delta</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1078
+ 196: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1079
+ 197: <span class="ruby-keyword kw">break</span>
1080
+ 198: <span class="ruby-keyword kw">end</span>
1081
+ 199: <span class="ruby-keyword kw">else</span>
1082
+ 200: <span class="ruby-comment cmt"># And towards right/bottom.</span>
1083
+ 201: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&gt;=</span> (<span class="ruby-identifier">horizontal</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@height</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@width</span>)
1084
+ 202: <span class="ruby-keyword kw">end</span>
1085
+ 203: <span class="ruby-keyword kw">end</span>
1086
+ 204: <span class="ruby-identifier">pos</span>
1087
+ 205: <span class="ruby-keyword kw">end</span></pre>
1080
1088
  </div>
1081
1089
 
1082
1090
  </div>