ch16s04.html
211 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Gantt charts</title><link rel="stylesheet" type="text/css" href="manual.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.0"><link rel="home" href="index.html" title="JpGraph Manual"><link rel="up" href="ch16.html" title="Chapter 16. Non-Linear graph types"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Gantt charts</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center">Chapter 16. Non-Linear graph types</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="sect1" title="Gantt charts"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sec.gantt-charts"></a>Gantt charts</h2></div></div></div>
<p>Gantt charts are used to give an easy overview of the extension in time of one or several
activities (possible grouped). In addition the gantt chart can show an ordinal relation
between one or several activities such as "<span class="italic">activity A needs to be
finished before activity B can start</span>". </p>
<p>The shape of each activity can also be adjusted as well as color and size. Some of the
capabilities of the Gantt module in the library are listed below.</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><span class="bold"><strong>Overall gantt graph features</strong></span></p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
<p>Visualization of constraints between activities, start-to-start,
start-to-end, end-to-start and end-to-end</p>
</li><li class="listitem">
<p>Unlimited number of activities (up to memory and time constrains
of PHP)</p>
</li><li class="listitem">
<p>Full support for independent CSIM for both labels and activity
bars</p>
</li><li class="listitem">
<p>Support for visualization of grouped activities</p>
</li><li class="listitem">
<p>Gantt charts can be automatically sized according to the number of
bars and scale used. </p>
</li><li class="listitem">
<p>Supports title and subtitle with user specified font, size and
color</p>
</li><li class="listitem">
<p>Supports vertical marker lines with text</p>
</li><li class="listitem">
<p>Full support for CSIM (or drill down graphs)</p>
</li><li class="listitem">
<p>Alternate row colors</p>
</li></ul></div><p>
</p>
</li><li class="listitem">
<p><span class="bold"><strong>Scale features</strong></span></p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
<p>Both automatic and fully automatic scale</p>
</li><li class="listitem">
<p>Flexible scale with options to display up to 6 lines of scale
headers (year,month,week,day,hour,minute)</p>
</li><li class="listitem">
<p>Supports platform independent Week number calculation according to
ISO:8601</p>
</li><li class="listitem">
<p>Scales grids are intelligent not to overwrite smaller resolution
scales</p>
</li><li class="listitem">
<p>Scale headers can be localized</p>
</li><li class="listitem">
<p>Full user configurable scales</p>
</li><li class="listitem">
<p>Each scale header is configurable in terms of font, size, color,
background, grid lines etc.</p>
</li></ul></div><p>
</p>
</li><li class="listitem">
<p><span class="bold"><strong>Activity bars</strong></span></p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
<p>can have multiple patterns and colors</p>
</li><li class="listitem">
<p>can have progress indicators</p>
</li><li class="listitem">
<p>can have drop shadow</p>
</li><li class="listitem">
<p>titles can have individual fonts, colors and backgrounds</p>
</li><li class="listitem">
<p>can have captions</p>
</li><li class="listitem">
<p>can have specified left- and right end markers</p>
</li><li class="listitem">
<p>heights can be specified in absolute pixels or in percent of the
activity line width</p>
</li></ul></div><p>
</p>
</li><li class="listitem">
<p><span class="bold"><strong>Milestones</strong></span></p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
<p>can have user selectable shape and color</p>
</li><li class="listitem">
<p>titles can have individual fonts, colors and backgrounds</p>
</li><li class="listitem">
<p>can have captions</p>
</li></ul></div><p>
</p>
</li></ul></div><p>
</p>
<p>An example of a small Gantt chart is shown in <a class="xref" href="ch16s04.html#fig.ganttmonthyearex2" title="Figure 16.53. A typical small Gantt chart (ganttmonthyearex2.php)">Figure 16.53. A typical small Gantt chart <code class="uri"><a class="uri" href="example_src/ganttmonthyearex2.html" target="_top">(<code class="filename">ganttmonthyearex2.php</code>)</a></code> </a></p>
<p>
</p><div class="figure"><a name="fig.ganttmonthyearex2"></a><p class="title"><b>Figure 16.53. A typical small Gantt chart <code class="uri"><a class="uri" href="example_src/ganttmonthyearex2.html" target="_top">(<code class="filename">ganttmonthyearex2.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttmonthyearex2.png" alt="A typical small Gantt chart (ganttmonthyearex2.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>The remainder of this section will be used to discuss most of the formatting options for
Gantt charts.</p>
<div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>There is one restrictions of the date scale and that is that it cannot have any
"holes" the dates must be continues.</p>
</div>
<div class="sect2" title="The structure of a Gantt chart"><div class="titlepage"><div><div><h3 class="title"><a name="id2570143"></a>The structure of a Gantt chart</h3></div></div></div>
<p>To understand the terminology used for Gantt chart <a class="xref" href="ch16s04.html#fig.gantt-building-blocks" title="Figure 16.54. Building block of a Gantt chart">Figure 16.54. Building block of a Gantt chart</a> shows a typical chart with indications of
the name of each main building block of the chart.</p>
<p>
</p><div class="figure"><a name="fig.gantt-building-blocks"></a><p class="title"><b>Figure 16.54. Building block of a Gantt chart</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-properties-original-amended-small.png" alt="Building block of a Gantt chart"></div>
</div></div><p><br class="figure-break">
</p>
<p>In addition to the specific Gantt formatting that will be discussed in the following
sections all the previously explained graph embellishment like the options of adding
texts, icons, changing font and color of titles, adding footers etc. are also available
for Gantt charts.</p>
<p>A Gantt chart is made up of four distinct areas:</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>On the left side there is the activity title column.</p>
</li><li class="listitem">
<p>On the top there is the scale headers (up to six headers may be
displayed)</p>
</li><li class="listitem">
<p>The actual plot area where all the activity Gantt bars and markers are
placed</p>
</li><li class="listitem">
<p>The margin area, where for example the titles are shown</p>
</li></ol></div><p>
</p>
<p>The steps to crate a Gantt charts is similar to creating a cartesian plot. First an
instance of the main graph canvas is created (as an instance of <code class="code">class
GanttGraph</code>) and then one or more "plots" are created an added to the graph.
For Gantt graph the "plots" that can be added are typically</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>Activity bars (we will also use the name Gantt bars as synonym) that
indicates the length (and possible progress) of one activity. An activity
bar is created as an instance of <code class="code">class GanttBar</code></p>
</li><li class="listitem">
<p>Milestone marks, this can be thought of as a special activity bar with
length = 0 and is often used to indicate a milestone or a deadline in the
Gantt chart. A milestone is created as an instance of <code class="code">class
Milestone</code></p>
</li><li class="listitem">
<p>A phase divider, this is a vertical line that can be added at specific
dates and is often used to mark then end and beginning of phases i a
project. A divider is created as an instance of <code class="code">class
GanttVLine</code> (for Gantt Vertical Line)</p>
</li><li class="listitem">
<p>A background pattern for a specific date range, this is often used to
indicate holidays, public holidays or periods of special interest in the
project</p>
</li><li class="listitem">
<p>An arbitrary icon, this is either a predefined image or one of the built
in markers in the library. This is created as an instance of <code class="code">class
IconImage</code></p>
</li></ul></div><p>
</p>
<p>All these objects may be extensively modified in terms of formatting., colors (both
fill- and frame color), size, titles, style and patterns etc. All objects have basic
default values so it is not strictly speaking necessary to adjust them. However, the
basic default values will give the charts a very simple look.</p>
</div>
<div class="sect2" title="Creating a Gantt graph"><div class="titlepage"><div><div><h3 class="title"><a name="id2570178"></a>Creating a Gantt graph</h3></div></div></div>
<p>In order to create a Gantt graph the module "<code class="filename">jpgraph_gantt.php</code>"
must be included together with the core module "<code class="filename">jpgraph.php</code>"</p>
<p>A Gantt graph is created as an instance of <code class="code">class GanttGraph</code> which
inherits much of the same formatting options available for standard x-y graphs, for
example titles, backgrounds, adding icons, adding texts and so on.</p>
<p>There is one crucial difference between all the other graph types and Gantt charts and
that is the fact that for all other graphs both the height and width of the graph must
be specified. For Gantt graphs this is not true. </p>
<p>Gantt graphs can be either </p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>fully automatically sized</p>
</li><li class="listitem">
<p>have the width specified but the height automatically determined by the
number of activities added to the graph</p>
</li><li class="listitem">
<p>fully specified with both width and height</p>
</li></ul></div><p>
</p>
<p>This means that all the following gantt graph creations are valid</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> Fully automatic</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$ganttgraph</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttGraph</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Semi automatic (automatically determined height)</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$ganttgraph</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttGraph</span><span class="hl-brackets">(</span><span class="hl-number">800</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Fully manual</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$ganttgraph</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttGraph</span><span class="hl-brackets">(</span><span class="hl-number">800</span><span class="hl-code">,</span><span class="hl-number">500</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>If the specified width and height is too small to have room for all the
activities specified the activities will be clipped to the specified date
range.</p>
</div><p>
</p>
<p>The creation of a full Gantt graph follows the now familiar pattern of</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>Create the graph (as shown above) and specify the overall formatting
options (e.g. titles, colors etc)</p>
</li><li class="listitem">
<p>Create the plot objects that should be added to the graph (e.g. activity
bars, milestones, icons, texts etc) and format them as wanted</p>
</li><li class="listitem">
<p>Add the object to the graph, with a call to
<code class="code">GanttGraph::Add()</code>, i.e. the activities, milestones etc.</p>
</li><li class="listitem">
<p>Send the graph back to the client or save it directly to a file, with a
call to <code class="code">GanttGraph::Stroke()</code></p>
</li></ol></div><p>
</p>
<div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>Even though there is no limit for the size of the Gantt chart (apart from
available memory and execution time limit specified in
"<code class="filename">php.ini</code>") the library defines two constants
<code class="code">MAX_GANTTIMG_SIZE_W</code> and <code class="code">MAX_GANTTIMG_SIZE_H</code> that sets
the maximum allowed image size for a Gantt chart. This is primarily meant to
discover scripts gone wrong that tries to make very large images (perhaps by some
non-properly terminating loops). If the overall image size becomes larger than these
limit an error message will be shown.</p>
</div>
</div>
<div class="sect2" title="Adjusting the scale headers"><div class="titlepage"><div><div><h3 class="title"><a name="id2570317"></a>Adjusting the scale headers</h3></div></div></div>
<p>A gantt chart must always have at least one scale header and at most six scale headers
(see <a class="xref" href="ch16s04.html#fig.gantt-building-blocks" title="Figure 16.54. Building block of a Gantt chart">Figure 16.54. Building block of a Gantt chart</a>). Usually it is not advisable to
use more than three scale headers at the same time. Having multiple scale headers allow
the specification of the same date range but with different resolutions.</p>
<p>The library makes six different scale headers available which is identified by a
symbolic constant that is logically combined to specify the wanted headers using the
method</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttGraph::ShowHeaders($aHeaderSelection)</code></p>
</li></ul></div><p>
</p>
<p>The <code class="code">$aHeaderSelection</code> argument is a binary combination of one or more of
the following specifiers that indicates the interval used in the header</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>GANTT_HMIN, Minute interval header (See <a class="xref" href="ch16s04.html#sec.minute-scale-header" title="Minute scale">Minute scale</a> for label format options)</p>
</li><li class="listitem">
<p>GANTT_HHOUR, Hour interval header (See <a class="xref" href="ch16s04.html#sec.hour-scale-header" title="Hour scale">Hour scale</a> for label format options)</p>
</li><li class="listitem">
<p>GANTT_HDAY, Day interval header (See <a class="xref" href="ch16s04.html#sec.day-scale-header" title="Day scale">Day scale</a> for label format options)</p>
</li><li class="listitem">
<p>GANTT_HWEEK, Week interval header (See <a class="xref" href="ch16s04.html#sec.week-scale-header" title="Week scale">Week scale</a> for label format options)</p>
</li><li class="listitem">
<p>GANTT_HMONTH, Month interval header (See <a class="xref" href="ch16s04.html#sec.month-scale-header" title="Month scale">Month scale</a> for label format options)</p>
</li><li class="listitem">
<p>GANTT_HYEAR, Year interval header (See <a class="xref" href="ch16s04.html#sec.year-scale-header" title="Year scale">Year scale</a> for label format options)</p>
</li></ol></div><p>
</p>
<p>For example to show a year, month and week header the following line would be
used</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->ShowHeaders( GANTT_HYEAR | GANTT_HMONTH | GANTT_HWEEK );</span></pre></td></tr></table></div><p>
</p>
<p>Any combination of the listed headers above can be used. The scale headers will always
be drawn with the larger header rage on top ot a header with smaller range.</p>
<p>Scale headers week, day, hour , minute have a minimum span of 1 unit. This means that
if, for example, the week header is displayed the minimum width of the overall scale is
one week.</p>
<p>
</p><div class="caution" title="Caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3>
<p>The overall minimum size of the scale regardless of what scale headers are
displayed is one day. This means that it is not possible to just create a Gantt
graph with , say 6 hour.</p>
</div><p>
</p>
<p>Specifying the wanted headers is the first step in controlling the header. The next
step is to specify the format that should be used to print the date label in each of the
selected headers. For example the week interval header will have a label at the start of
every week. This could for example be indicated as week number, day of month, full date
and so on. In order to adjust the headers the appropriate header instance variable must
be access. The header instance variables are</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p><code class="code">Graph::scale::minute</code></p>
</li><li class="listitem">
<p><code class="code">Graph::scale::hour</code></p>
</li><li class="listitem">
<p><code class="code">Graph::scale::day</code></p>
</li><li class="listitem">
<p><code class="code">Graph::scale::week</code></p>
</li><li class="listitem">
<p><code class="code">Graph::scale::month</code></p>
</li><li class="listitem">
<p><code class="code">Graph::scale::year</code></p>
</li></ol></div><p>
</p>
<p>The connection with the scale headers are shown in <a class="xref" href="ch16s04.html#fig.gantt-scale-headers" title="Figure 16.55. The Gantt scale properties">Figure 16.55. The Gantt scale properties</a> which shows a cut out part of a larger gantt
chart</p>
<p>
</p><div class="figure"><a name="fig.gantt-scale-headers"></a><p class="title"><b>Figure 16.55. The Gantt scale properties</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-scale-headers-amended.png" alt="The Gantt scale properties"></div>
</div></div><p><br class="figure-break">
</p>
<p>All the headers are an instance of <code class="code">class HeaderProperty</code> and supports the
following formatting methods</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">HeaderProperty::SetFont($aFontFamily,$aFontStyle,$aFontSize)</code></p>
<p>Specify the font to be used for the label</p>
</li><li class="listitem">
<p><code class="code">HeaderProperty::SetFontColor($aColor)</code></p>
<p>Specify the font color to use</p>
</li><li class="listitem">
<p><code class="code">HeaderProperty::SetStyle($aStyle)</code></p>
<p>The style depends on the actual header and all available styles for each
header are shown below. The style specifies the format used for the scale
header label</p>
</li><li class="listitem">
<p><code class="code">HeaderProperty::SetBackgroundColor($aColor)</code></p>
<p>Set the header background color</p>
</li><li class="listitem">
<p><code class="code">HeaderProperty::SetFrameWeight($aWeight)</code></p>
<p>Specify the weight of the frame around the scale header</p>
</li><li class="listitem">
<p><code class="code">HeaderProperty::SetTitleVertMargin($aMargin)</code></p>
<p>Specifies the margin between this header and the next header (usually
there is no need to adjust this)</p>
</li><li class="listitem">
<p><code class="code">HeaderProperty::SetInterval($aInterval)</code></p>
<p>Specifies the interval between each scale label. For example specifying </p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->scale->hour->SetInterval(6);</span></pre></td></tr></table></div><p>
</p>
<p>Will step the hour label 6 hours for each label</p>
</li></ul></div><p>
</p>
<p>So for example to set the font of the month header the following line would be
used</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$ganttgraph->scale->month->SetFont(FF_ARIAL,FS_NORMAL,10);</span></pre></td></tr></table></div><p>
</p>
<p>In addition to these methods each scale also has the property '<code class="code">$grid</code>'
which determines the appearance of grid lines for that specific scale. It is possible to
adjust the appearance of the grid lines by the "normal" line methods, i.e. </p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">SetColor($aColor)</code>, Set the grid color</p>
</li><li class="listitem">
<p><code class="code">SetWeight($aWeight)</code>, Set the grid line weight</p>
</li><li class="listitem">
<p><code class="code">SetStyle($aLineStyle)</code>, Set the grid line style, i.e.
"<code class="code">solid</code>", "<code class="code">dotted</code>", "<code class="code">dashed</code>",
"<code class="code">long-dashed</code>"</p>
</li><li class="listitem">
<p><code class="code">Show($aFlg=true)</code>, Enable the grid line</p>
</li></ul></div><p>
</p>
<p>So for example to enable the week grid line and set it to red color the following
lines would be needed</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->scale->week->grid->Show();
$graph->scale->week->grid->SetColor( 'red' );</span></pre></td></tr></table></div><p>
</p>
<p>The automatic grid lines have some "intelligence" so that higher resolution scales
will not cut through part ways of scale headers with lower resolution (such as a year
grid line cutting through the middle of a week).</p>
<p>
</p><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3>
<p>It is possible to specify a zoom factor for the scale that adjusts how wide
the automatic sized header should be. See <a class="xref" href="ch16s04.html#sec.zoom-factor" title="Adjusting the scale zoom factor">Adjusting the scale zoom factor</a>
for more details.</p>
</div><p>
</p>
<div class="sect3" title="Minute scale"><div class="titlepage"><div><div><h4 class="title"><a name="sec.minute-scale-header"></a>Minute scale</h4></div></div></div>
<p>Minute scale is enabled by adding the <code class="code">GANTT_HMIN</code> in the
<code class="code">GanttGraph::ShowHeaders()</code> call, for example as the following line
shows</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph -> ShowHeaders ( GANTT_HDAY | GANTT_HHOUR | GANTT_HMIN );</span></pre></td></tr></table></div><p>
</p>
<p>The <code class="code">SetStyle($aStyle)</code> method supports the following label
styles</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">MINUTESTYLE_MM</code></p>
<p>This will display minutes as a two digit number with a leading zero if
necessary</p>
</li><li class="listitem">
<p><code class="code">MINUTESTYLE_CUSTOM</code></p>
<p>This will let you specify you own custom minute style by making a call
to <code class="code">HeaderProperty:: SetFormatString()</code></p>
<p>The format string is specified as a format string for the
<code class="code">date()</code> function (See <code class="uri"><a class="uri" href="http://php.net/manual/en/function.date.php" target="_top">PHP
Manual</a></code>)</p>
</li></ul></div><p>
</p>
</div>
<div class="sect3" title="Hour scale"><div class="titlepage"><div><div><h4 class="title"><a name="sec.hour-scale-header"></a>Hour scale</h4></div></div></div>
<p>Minute scale is enabled by adding the <code class="code">GANTT_HHOUR</code> in the
<code class="code">GanttGraph::ShowHeaders()</code> call, for example as the following line
shows</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph -> ShowHeaders ( GANTT_HDAY | GANTT_HHOUR | GANTT_HMIN );</span></pre></td></tr></table></div><p>
</p>
<p>The <code class="code">SetStyle($aStyle)</code> method supports the following label
styles</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">HOURSTYLE_HM24</code></p>
<p>Will display the only the hour in military time 0-24 , for example
13:00</p>
</li><li class="listitem">
<p><code class="code">HOURSTYLE_H24</code></p>
<p>Will display the hour with both hour and minute in military time 0-24,
for example 13</p>
</li><li class="listitem">
<p><code class="code">HOURSTYLE_HMAMPM</code></p>
<p>Will display the hour and minutes with a suitable am/pm postfix, for
example 1:30pm</p>
</li><li class="listitem">
<p><code class="code">HOURSTYLE_HAMPM</code></p>
<p>Will display only the hour with a suitable am/pm postfix, for example
1pm</p>
</li><li class="listitem">
<p><code class="code">HOURSTYLE_CUSTOM</code></p>
<p>Custom defined format as specified with a call to
<code class="code">HeaderProperty::SetFormatString()</code></p>
<p>The format string is specified as a format string for the
<code class="code">date()</code> function (See <code class="uri"><a class="uri" href="http://php.net/manual/en/function.date.php" target="_top">PHP
Manual</a></code>)</p>
</li></ul></div><p>
</p>
<p>For hours it is possible to specify the interval in either of two ways. With an
integer, e.g. 6, or as time interval, e.g. "1:30" which makes the interval one and a
half hour. The only restriction is that the interval must be a divisor of 24 since
one day is the smallest possible interval to show. This means that it is allowed to
use, for example 2,4,6,"1:30" or "0:45" as intervals but not 7, "2:45".</p>
<p>The code snippet below shows hot to set up a hour scale to with 45 minutes
interval and custom colors</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">hour</span><span class="hl-code">-></span><span class="hl-identifier">SetBackgroundColor</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">lightyellow:1.5</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">hour</span><span class="hl-code">-></span><span class="hl-identifier">SetFont</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-identifier">FF_FONT1</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">hour</span><span class="hl-code">-></span><span class="hl-identifier">SetStyle</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-identifier">HOURSTYLE_HMAMPM</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">hour</span><span class="hl-code">-></span><span class="hl-identifier">SetIntervall</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">0:45</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>The example in <a class="xref" href="ch16s04.html#fig.gantthourex1" title="Figure 16.56. Gantt chart with day and hour scale enabled (gantthourex1.php)">Figure 16.56. Gantt chart with day and hour scale enabled <code class="uri"><a class="uri" href="example_src/gantthourex1.html" target="_top">(<code class="filename">gantthourex1.php</code>)</a></code> </a> below shows a gantt chart
with the day and hour scale enabled. In this example we have also added a gradient
background to show some formatting options.</p>
<p>
</p><div class="figure"><a name="fig.gantthourex1"></a><p class="title"><b>Figure 16.56. Gantt chart with day and hour scale enabled <code class="uri"><a class="uri" href="example_src/gantthourex1.html" target="_top">(<code class="filename">gantthourex1.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/gantthourex1.png" alt="Gantt chart with day and hour scale enabled (gantthourex1.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
<div class="sect3" title="Day scale"><div class="titlepage"><div><div><h4 class="title"><a name="sec.day-scale-header"></a>Day scale</h4></div></div></div>
<p>The <code class="code">SetStyle($aStyle)</code> method supports the following label
styles</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">DAYSTYLE_ONELETTER</code>, </p>
<p>On letter week day. Example "M"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_LONG</code>, </p>
<p>Full week day. Example "Monday"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_LONGDAYDATE1</code>, </p>
<p>Day with date. Example "Monday 23 Jun"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_LONGDAYDATE2</code>, </p>
<p>Day with date+year. Example "Monday 23 Jun 2003"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_SHORT</code>, </p>
<p>Short date. Example "Mon"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_SHORTDAYDATE1</code>, </p>
<p>Short date+date. Example "Mon 23/6"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_SHORTDAYDATE2</code>, </p>
<p>Short date+date. Example "Mon 23 Jun"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_SHORTDAYDATE3</code>,</p>
<p>Short date+date. Example "Mon 23"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_SHORTDATE1</code>, </p>
<p>Short date. Example "23/6"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_SHORTDATE2</code>, </p>
<p>Short date. Example "23 Jun"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_SHORTDATE3</code>, </p>
<p>Short date. Example "Mon 23"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_SHORTDATE4</code>, </p>
<p>Short date. Example "23"</p>
</li><li class="listitem">
<p><code class="code">DAYSTYLE_CUSTOM</code>, </p>
<p>Custom specified formatting string. Example "%A"</p>
<p>The format string is specified as a format string for the
<code class="code">strftime()</code> function (See <code class="uri"><a class="uri" href="http://php.net/manual/en/function.strftime.php" target="_top">PHP
Manual</a></code>)</p>
<p>
</p><div class="caution" title="Caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3>
<p>Note that the day format string is a format string for
<code class="code">strftime()</code> while the format string for hour and
minutes are given as a format string for the <code class="code">date()</code>
function. This inconsistency purely exists for historic reasons
and is kept not to break existing scripts.</p>
</div><p>
</p>
</li></ul></div><p>
</p>
<p><span class="bold"><strong>Example:</strong></span></p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->scale->day->SetStyle ( DAYSTYLE_LONG );</span></pre></td></tr></table></div><p>
</p>
<p>The graphical formatting possibilities for days allow the possibility to specify a
different color for the weekend background and also for the Sunday.</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">HeaderProperty::SetWeekendColor($aColor)</code></p>
<p>Set the background color for weekends. (Defaults to light gray)</p>
</li><li class="listitem">
<p><code class="code">HeaderProperty::SetSundayFontColor($aColor)</code></p>
<p>The Sunday font color. (Defaults to red)</p>
</li></ul></div><p>
</p>
<p>In addition to this there is also a possibility to choose whether or not the
weekend background should be extended vertically down over the plot area which is
the default. Since that is a property more of the whole plot this behavior is
modified with a call to the method</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttScale::UseWeekendBackground($aFlg=true) </code></p>
<p><span class="bold"><strong>Example:</strong></span></p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">// Don't use background for weekend in the plot area
$graph->scale->UseWeekendBackground(false);</span></pre></td></tr></table></div><p>
</p>
</li></ul></div><p>
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>The actual text displayed is dependent on the Locale used. See <a class="xref" href="ch16s04.html#sec.gantt-localizing" title="Localizing the Gantt chart scale">Localizing the Gantt chart scale</a></p>
</div><p>
</p>
</div>
<div class="sect3" title="Week scale"><div class="titlepage"><div><div><h4 class="title"><a name="sec.week-scale-header"></a>Week scale</h4></div></div></div>
<p>Week scales, if enabled, by default shows the week number in range 1 to 53 (as
defined by ISO-8601)</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>It might be worth pointing out here that the week number calculation is
carried out within the library and does not rely on the underlying OS date
libraries. This makes the behavior consistent over several OS:s (at least MS
Windows does not comply to ISO-8601 or supply any way of doing this through
the normal libraries, e.g. <code class="code">strftime()</code>)</p>
</div><p>
</p>
<p>The <code class="code">SetStyle($aStyle)</code> method supports the following label
styles</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">WEEKSTYLE_WNBR</code></p>
<p>Show week number. To further modify the formatting of the actual week
number it is possible to optionally supply a format string with a call
to</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
<p><code class="code">HeaderProperty::SetLabelFormatString($aFormat)</code></p>
<p>The format for this string is the same format used for the
<code class="code">sprintf()</code> function and formats the week
number given as an integer.</p>
<p>
</p><div class="caution" title="Caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3>
<p>Note that the day format string is a format string
for <code class="code">sprintf()</code> while the format string
for hour and minutes are given as a format string
for the <code class="code">date()</code> function. This
inconsistency purely exists for historic reasons and
is kept not to break existing scripts.</p>
</div><p>
</p>
</li></ul></div><p>
</p>
</li><li class="listitem">
<p><code class="code">WEEKSTYLE_FIRSTDAY</code></p>
<p>Show date of first day in week.</p>
</li><li class="listitem">
<p><code class="code">WEEKSTYLE_FIRSTDAY2</code></p>
<p>Show date of first day in week and short month</p>
</li><li class="listitem">
<p><code class="code">WEEKSTYLE_FIRSTDAYWNBR</code></p>
<p>Show week number of first day in week.</p>
</li><li class="listitem">
<p><code class="code">WEEKSTYLE_FIRSTDAY2WNBR</code></p>
<p>Show week number of first day in week and month</p>
</li></ul></div><p>
</p>
<p><span class="bold"><strong>Example:</strong></span></p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);</span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>The actual text displayed for month is dependent on the Locale used. See
<a class="xref" href="ch16s04.html#sec.gantt-localizing" title="Localizing the Gantt chart scale">Localizing the Gantt chart scale</a></p>
</div><p>
</p>
</div>
<div class="sect3" title="Month scale"><div class="titlepage"><div><div><h4 class="title"><a name="sec.month-scale-header"></a>Month scale</h4></div></div></div>
<p>The <code class="code">SetStyle($aStyle)</code> method supports the following label
styles</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">MONTHSTYLE_SHORTNAME</code></p>
<p>Display the month name in its locale specific short form, i.e Jan, Feb
etc</p>
</li><li class="listitem">
<p><code class="code">MONTHSTYLE_SHORTNAMEYEAR2</code></p>
<p>Display the month name in its locale specific short form together with
a 2 digit year , i.e Jan '01, Feb '01 etc</p>
</li><li class="listitem">
<p><code class="code">MONTHSTYLE_SHORTNAMEYEAR4</code></p>
<p>Display the month name in its locale specific short form together with
a 4 digit year , i.e Jan 2001, Feb 2001 etc</p>
</li><li class="listitem">
<p><code class="code">MONTHSTYLE_LONGNAME</code></p>
<p>Display the month name in its locale specific long name, i.e. January,
February</p>
</li><li class="listitem">
<p><code class="code">MONTHSTYLE_LONGNAMEYEAR2</code></p>
<p>Display the month name in its locale specific long name together with
a 2 digit year , i.e January '01, February '01 etc</p>
</li><li class="listitem">
<p><code class="code">MONTHSTYLE_LONGNAMEYEAR4</code></p>
<p>Display the month name in its locale specific long name together with
a 4 digit year , i.e January 2001, February 2001 etc</p>
</li><li class="listitem">
<p><code class="code">MONTHSTYLE_FIRSTLETTER</code></p>
<p>The first letter of the month name</p>
</li></ul></div><p>
</p>
<p><span class="bold"><strong>Example:</strong></span></p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->scale->month->SetStyle(MONTHSTYLE_LONGNAME);</span></pre></td></tr></table></div><p>
</p>
</div>
<div class="sect3" title="Year scale"><div class="titlepage"><div><div><h4 class="title"><a name="sec.year-scale-header"></a>Year scale</h4></div></div></div>
<p>Year scale has no extra formatting possibilities it is always displayed as a four
digit number , e.g. "<code class="code">2009</code>"</p>
</div>
</div>
<div class="sect2" title="Adding gantt objects to the chart"><div class="titlepage"><div><div><h3 class="title"><a name="id2570487"></a>Adding gantt objects to the chart</h3></div></div></div>
<p>Gantt objects are primarily instances of one of two classes</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p><code class="code">class GanttBar</code></p>
<p>This is the main activity added to a Gantt chart to show the extension in
time of one activity, a gantt bar</p>
</li><li class="listitem">
<p><code class="code">class Milestone</code></p>
<p>This activity is a special case of an activity with zero extension,
usually indicating a milestone or a deadline</p>
</li><li class="listitem">
<p><code class="code">class VLine</code></p>
<p>This is similar so a millstone as it has no extension in time. Instead
this object is visually represented as a vertical line that crosses the
entire graph plot area. This is often used to mark, for example, phases in a
project.</p>
</li></ol></div><p>
</p>
<p>To add a Gantt objects there are two compulsory parameters that must be set. These
parameters specify on what row and at what date the activity should start at. </p>
<p>Bars and Milestones need both a vertical position and a horizontal position. The
horizontal start position is specified as a date, e.g. "2001-06-23", and the vertical
positions are specified as a number [0,1,2,3,...]. This vertical number indicates the
position from the top where the object should be placed. To understand this one could
imagine a number of "invisible" horizontal bands with a certain height. If the vertical
position is specifies as 0 the bar will be placed in the first band, specify 3 and the
bar will be placed in the fourth band and so on.</p>
<p>All these "invisible bands" have the same height (equ-spaced). The height of each band
is automatically determined and depends on both the method of layout ( as specified by
(<code class="code">GanttChart::SetLayout()</code>) and the individual heights of the individual
bars and titles. The rules are quite simple:</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>If layout=<code class="code">GANTT_FROMTOP</code> (the default and most common) the
height will equal the height (+ a margin) of the highest gantt bar. The
height calculation of each bar takes into account both the actual bar, the
title, and any left- right-marks (more about that later) that may be
present. </p>
<p>The name "fromtop" refers to that when the height is explicitly specified
the bars will usually be added from band 0 and onwards and hence being added
from the top. (This might leave empty space at the bottom of the plot area
in the graph if the height of the graph has been explicitly
specified).</p>
</li><li class="listitem">
<p>If layout=<code class="code">GANTT_EVEN</code> the bars are evenly (hence the name)
spread out over the available height in the gantt chart and no consideration
is taken of the individual bars heights. Note that if you use automatic
sizing even layout cannot be used. (It just doesn't make sense). Even layout
is for those cases when a large area is specified and the bars should be
evenly distributed using the full height.</p>
</li></ol></div><p>
</p>
<p>So in summary each object must have two position parameters.</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p><span class="bold"><strong>Which row the gantt object should be drawn
on.</strong></span></p>
<p>This should be a positive integer in the range (0, ...), It is perfectly
legal to specify a large vertical position with no other object above as
shown in <a class="xref" href="ch16s04.html#fig.ganttex03" title="Figure 16.59. Specifying a large vertical position (ganttex03.php)">Figure 16.59. Specifying a large vertical position <code class="uri"><a class="uri" href="example_src/ganttex03.html" target="_top">(<code class="filename">ganttex03.php</code>)</a></code> </a></p>
</li><li class="listitem">
<p><span class="bold"><strong>Which start and end date (or dates) the object
should have. </strong></span></p>
<p>Start of bars are given as a date string. The format depends on the
current locale. Examples of valid date strings are</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>"2001-10-22"</p>
</li><li class="listitem">
<p>"2001-10-22"</p>
</li><li class="listitem">
<p>"22 Oct 2001"</p>
</li></ul></div><p>
</p>
<p>Even if several format are supported it is recommended to use all numeric
dates, i.e in the form "2001-10-22".</p>
<p>
</p><div class="caution" title="Caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3>
<p>Watch our for the locale used since, for example, "2008-05-10" can
have two meanings.</p>
</div><p>
</p>
<p>Specifying the end position may be done in two different ways, either by
the end date in the same way as for the start date. The other way is to
specify the length of the activity in number of days (and fractions
thereof). Examples of valid end dates are:</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>"2001-11-15"</p>
</li><li class="listitem">
<p>"15 Nov 2001"</p>
</li><li class="listitem">
<p>22, (specifies duration of 22 days)</p>
</li><li class="listitem">
<p>22.7, (specifies duration of 22.7 days)</p>
</li></ul></div><p>
</p>
<p>Please note that duration must be specified as numerical values and not as
a string.</p>
</li></ol></div><p>
</p>
<p>Usually at least one or more of the following parameter is also specified</p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>The title of the gantt object</p>
</li><li class="listitem">
<p>The caption of the object. This is a text string that is drawn beside the
object on the gantt chart</p>
</li><li class="listitem">
<p>Color and any optional patterns to separate different activities</p>
</li><li class="listitem">
<p>When applicable the state of a progress indicator (see <a class="xref" href="ch16s04.html#sec.gantt-progress" title="Adding progress indicators">Adding progress indicators</a>)</p>
</li></ol></div><p>
</p>
<div class="sect3" title="Adding Gantt activity bars"><div class="titlepage"><div><div><h4 class="title"><a name="sect.adding-gantt-activity-bars"></a>Adding Gantt activity bars</h4></div></div></div>
<p>Instances of <code class="code">class GanttBar</code> is created with the constructor</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttBar::__construct($aPos,$aLabel,$aStart,$aEnd,$aCaption="",$aHeightFactor=0.6)</code></p>
<p><code class="code">$aVPos</code> The vertical position for the bar, [0..n] </p>
<p><code class="code">$aTitle</code> Title for the activity </p>
<p><code class="code">$aStart</code> Start date for the activity given as string, e.g
"2001-09-22" </p>
<p><code class="code">$aEnd </code>End date for activity given as either a date (a
string) or as the duration (in days) of the activity, e.g both
"2001-10-15" and 20.5 are valid inputs </p>
<p><code class="code">$aCaption</code> Text string (caption) to appear at the end
(right side) of the bar </p>
<p><code class="code">$aHeight</code> Height of bar given as either a value in range
[0,1] in which case this is interpretated as what fraction of the
vertical position should the bar occupy. The height can also be given in
absolute pixels [1..200]</p>
</li></ul></div><p>
</p>
<p>In order to illustrate this we will create a the most basic (and simple ) Gantt
chart possible. This will consist of just a chart with one activity bar.</p>
<p>
</p><div class="example"><a name="example.ganttex00"></a><p class="title"><b>Example 16.6. The simplest possible Gantt graph (<code class="filename">ganttex00.php</code>) </b></p><div class="example-contents"> <div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code"> </span><span class="hl-comment">//</span><span class="hl-comment"> content="text/plain; charset=utf-8"</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-reserved">require_once</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">jpgraph/jpgraph.php</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-reserved">require_once</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">jpgraph/jpgraph_gantt.php</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> A new graph with automatic size</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttGraph</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> A new activity on row '0'</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$activity</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttBar</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-quotes">"</span><span class="hl-string">Activity 1</span><span class="hl-quotes">"</span><span class="hl-code">,</span><span class="hl-quotes">"</span><span class="hl-string">2001-12-21</span><span class="hl-quotes">"</span><span class="hl-code">,</span><span class="hl-quotes">"</span><span class="hl-string">2002-01-19</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">Add</span><span class="hl-brackets">(</span><span class="hl-var">$activity</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Display the Gantt chart</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">Stroke</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div></div></div><p><br class="example-break"> </p><div class="figure"><a name="fig.ganttex00"></a><p class="title"><b>Figure 16.57. The simplest possible Gantt graph <code class="uri"><a class="uri" href="example_src/ganttex00.html" target="_top">(<code class="filename">ganttex00.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex00.png" alt="The simplest possible Gantt graph (ganttex00.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>The example above will make use of just the default settings for all formatting
parameters but still manage to create a perfectly readable Gantt chart with only 4
lines of real code. We can note a couple of things</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>By default two scale headers are used, week and day resolution</p>
</li><li class="listitem">
<p>Weekends will have a gray background</p>
</li><li class="listitem">
<p>Sunday scale header uses red for the "Sunday"</p>
</li></ul></div><p>
</p>
<p>Lets now take the above simple graph and make a few small alterations.</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>We will add graph titles</p>
</li><li class="listitem">
<p>We will change the pattern and color of the activity bar</p>
</li><li class="listitem">
<p>We will adjust the scale headers so er have three headers and use the
date of the start day for each week (in the week scale)</p>
</li></ul></div><p>
</p>
<p>
</p><div class="figure"><a name="fig.ganttex01"></a><p class="title"><b>Figure 16.58. Making some minor alterations to the Gantt graph <code class="uri"><a class="uri" href="example_src/ganttex01.html" target="_top">(<code class="filename">ganttex01.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex01.png" alt="Making some minor alterations to the Gantt graph (ganttex01.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>To show the effect of row positioning <a class="xref" href="ch16s04.html#fig.ganttex03" title="Figure 16.59. Specifying a large vertical position (ganttex03.php)">Figure 16.59. Specifying a large vertical position <code class="uri"><a class="uri" href="example_src/ganttex03.html" target="_top">(<code class="filename">ganttex03.php</code>)</a></code> </a> shows
the effect of adding a bar to row 7. This will as can be seen create graph that is
mostly empty sine row 0-6 have no specified gantt objects.</p>
<p>
</p><div class="figure"><a name="fig.ganttex03"></a><p class="title"><b>Figure 16.59. Specifying a large vertical position <code class="uri"><a class="uri" href="example_src/ganttex03.html" target="_top">(<code class="filename">ganttex03.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex03.png" alt="Specifying a large vertical position (ganttex03.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>The height of the bars can also be adjusted. The horizontal spacing between each
bar is based on the highest single bar including the size of the title. By default
the height of the bar is 60% of the overall vertical size allocated to each row (all
the rows have the same height).</p>
<p>The height of the bar can be specified as either as an absolute number of pixels
or as a fraction of the row height. Since by default the bar height is 60% this
means that if any single line has, for example, a large title all the rows will be
adjusted to the same size and hence the bars will also be adjusted to fill 60% of
the new width.</p>
</div>
<div class="sect3" title="Adding milestones"><div class="titlepage"><div><div><h4 class="title"><a name="id2572326"></a>Adding milestones</h4></div></div></div>
<p>Instances of <code class="code">class Milestone</code> is created with the constructor</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">MileStone::__construct($aVPos,$aLabel,$aDate,$aCaption='')</code></p>
<p><code class="code">$aVPos</code>, The vertical position for the bar, [0..n] </p>
<p><code class="code">$aTitle</code>, Title for the activity </p>
<p><code class="code">$aDate</code>, Date for the milestone </p>
<p><code class="code">$aCaption</code>, Text to the right of the milestone</p>
</li></ul></div><p>
</p>
<p>Valid milestones are for example</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$ms4 = new MileStone(3, 'Code complete', '2001-12-01');
$ms5 = new MileStone(3, 'Ready for test', '2002-01-06');</span></pre></td></tr></table></div><p>
</p>
<p>By default milestones are rendered as a filled "Diamond" shape. This may be
optionally modified. The actual shape is specified by the 'mark' property of
milestone which is an instance of <code class="code">class PlotMark</code>. See <a class="xref" href="ch16s04.html#sec.adding-gantt-markers" title="Adding markers to the Gantt bars">Adding markers to the Gantt bars</a>.</p>
<p>To change the shape of a milestone to, say a triangle, you use the
<code class="code">SetType()</code> method as in</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$ms4->mark->SetType( MARK_DTRIANGLE );</span></pre></td></tr></table></div><p>
</p>
<p>An example of adding a milestone to a gantt graph is shown in <a class="xref" href="ch16s04.html#fig.ganttex04" title="Figure 16.60. Adding a milestone marker to a gantt graph (ganttex04.php)">Figure 16.60. Adding a milestone marker to a gantt graph <code class="uri"><a class="uri" href="example_src/ganttex04.html" target="_top">(<code class="filename">ganttex04.php</code>)</a></code> </a></p>
<p>
</p><div class="figure"><a name="fig.ganttex04"></a><p class="title"><b>Figure 16.60. Adding a milestone marker to a gantt graph <code class="uri"><a class="uri" href="example_src/ganttex04.html" target="_top">(<code class="filename">ganttex04.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex04.png" alt="Adding a milestone marker to a gantt graph (ganttex04.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>We note that;</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>By default the title of a milestone is set in a red color. To change
the title the "<code class="code">$title</code>" property of the milestone must be
accessed. For example</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$milestone->title->SetColor('black');</span></pre></td></tr></table></div><p>
</p>
</li><li class="listitem">
<p>A milestone has a caption in exactly the same way as an ordinary gantt
bar</p>
</li><li class="listitem">
<p>Milestones are added to the graph with the usual
<code class="code">GanttGraph::Add()</code></p>
</li></ul></div><p>
</p>
</div>
<div class="sect3" title="Adding vertical lines (GanttVLine)"><div class="titlepage"><div><div><h4 class="title"><a name="id2572634"></a>Adding vertical lines (GanttVLine)</h4></div></div></div>
<p>Instances of <code class="code">class GanttVLine</code> is created with the constructor</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttVLine::__construct($aDate,$aTitle='',$aColor='darkred',$aWeight=2,$aStyle='solid')</code></p>
<p><code class="code">$aDate</code> Date for the milestone </p>
<p><code class="code">$aTitle</code> Title for the line. The title is displayed at the
bottom of the line </p>
<p><code class="code">$aColor</code> Color of the line </p>
<p><code class="code">$aWeight</code> Line width </p>
<p><code class="code">$aStyle</code> Line style, specified as a string
<code class="code">"dashed"</code>, <code class="code">"dotted"</code> and so on</p>
</li></ul></div><p>
</p>
<p>By default a GanttVLine will cover the entire Gantt area from the top to the
bottom. It is also possible to restrict the area that the line is spanning by
specifying the start and stop row for the line with a call to the method</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttVLine::SetRowSpan($aStart, $aEnd)</code></p>
</li></ul></div><p>
</p>
<p>If the end row is left out the line will go all the way to the bottom.</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>Since there is a small margin from the top header row to the first Gantt
row this means that specifying a start row of 0 (the very first gantt row)
will leave a small margin between the line and the header row. If this is
not desirable the start row can be specified as -1 in which case the line
will go all the way up to the header row.</p>
</div><p>
</p>
<p>Valid creations of lines are for example</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$vline1 = new GanttVLine('2001-12-24', 'Phase 1');
$vline2 = new GanttVLine('2001-12-28', 'Phase 1', 'darkred', 5, 'dotted');
$vline2->SetRowSpan(3); // Start at row index=3 (fourth row) and go all the way to the bottom</span></pre></td></tr></table></div><p>
</p>
<p>In <a class="xref" href="ch16s04.html#fig.ganttex06" title="Figure 16.61. Adding a vertical line in the Gantt graph (ganttex06.php)">Figure 16.61. Adding a vertical line in the Gantt graph <code class="uri"><a class="uri" href="example_src/ganttex06.html" target="_top">(<code class="filename">ganttex06.php</code>)</a></code> </a> we have created a line with</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$vline = new GanttVLine('2001-12-24', 'Phase 1' );
$graph->Add( $vline );</span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="figure"><a name="fig.ganttex06"></a><p class="title"><b>Figure 16.61. Adding a vertical line in the Gantt graph <code class="uri"><a class="uri" href="example_src/ganttex06.html" target="_top">(<code class="filename">ganttex06.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex06.png" alt="Adding a vertical line in the Gantt graph (ganttex06.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>We note the following</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>The title of the vertical line is rendered at the bottom of the graph
in the margin.</p>
</li><li class="listitem">
<p>By default the line is drawn at the beginning of the day of the
specified date and in a "<code class="code">dashed</code>" style. This can be
modified so that the line is drawn/aligned anywhere in the specified
day. This is done by using the method
<code class="code">GanttVLine::SetDayOffset()</code> with an argument specifying
the fraction of the width of a single day where the line should be
positioned.</p>
<p>For example, if we want to display the line in the middle of the day
we need to add the line</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$vline->SetDayOffset ( 0.5 );</span></pre></td></tr></table></div><p>
</p>
<p>Adding this line to the example in <a class="xref" href="ch16s04.html#fig.ganttex06" title="Figure 16.61. Adding a vertical line in the Gantt graph (ganttex06.php)">Figure 16.61. Adding a vertical line in the Gantt graph <code class="uri"><a class="uri" href="example_src/ganttex06.html" target="_top">(<code class="filename">ganttex06.php</code>)</a></code> </a>
gives the result shown in <a class="xref" href="ch16s04.html#fig.ganttex07" title="Figure 16.62. Adjusting the position of the vertical line within the day (ganttex07.php)">Figure 16.62. Adjusting the position of the vertical line within the day <code class="uri"><a class="uri" href="example_src/ganttex07.html" target="_top">(<code class="filename">ganttex07.php</code>)</a></code> </a></p>
</li></ul></div><p>
</p>
<p>
</p><div class="figure"><a name="fig.ganttex07"></a><p class="title"><b>Figure 16.62. Adjusting the position of the vertical line within the day <code class="uri"><a class="uri" href="example_src/ganttex07.html" target="_top">(<code class="filename">ganttex07.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex07.png" alt="Adjusting the position of the vertical line within the day (ganttex07.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
<div class="sect3" title="Illustrating break in activities"><div class="titlepage"><div><div><h4 class="title"><a name="id2573105"></a>Illustrating break in activities</h4></div></div></div>
<p>Since the position of each activity is specified by row and date there is nothing
that prevents adding multiple activity bars to the same row. This observation makes
it possible to illustrate breaks in activities during a certain period. <a class="xref" href="ch16s04.html#fig.gantt_samerowex1" title="Figure 16.63. Adding several activity bars on the same row (gantt_samerowex1.php)">Figure 16.63. Adding several activity bars on the same row <code class="uri"><a class="uri" href="example_src/gantt_samerowex1.html" target="_top">(<code class="filename">gantt_samerowex1.php</code>)</a></code> </a> shows an example of this</p>
<p>
</p><div class="figure"><a name="fig.gantt_samerowex1"></a><p class="title"><b>Figure 16.63. Adding several activity bars on the same row <code class="uri"><a class="uri" href="example_src/gantt_samerowex1.html" target="_top">(<code class="filename">gantt_samerowex1.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/gantt_samerowex1.png" alt="Adding several activity bars on the same row (gantt_samerowex1.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>A common variant is to have some connection between the parts in the broken
activity. This can be accomplished by using a special variant of the gantt activity
available just for this purpose.</p>
<p>Gantt bars have the following method available</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>
<code class="code">GanttBar::SetBreakStyle($aFlg=true, $aLineStyle='dotted',
$aLineWeight=1)</code></p>
</li></ul></div><p>
</p>
<p>This will draw the gantt bar almost hollow. It will just consist of the top and
bottom line of the bar. The idea to illustrate a break is to have a bar of this
style during the break. <a class="xref" href="ch16s04.html#fig.gantt_samerowex2" title='Figure 16.64. Adding a hollow "break" bar (gantt_samerowex2.php)'>Figure 16.64. Adding a hollow "break" bar <code class="uri"><a class="uri" href="example_src/gantt_samerowex2.html" target="_top">(<code class="filename">gantt_samerowex2.php</code>)</a></code> </a> shows an example
of this.</p>
<p>
</p><div class="figure"><a name="fig.gantt_samerowex2"></a><p class="title"><b>Figure 16.64. Adding a hollow "break" bar <code class="uri"><a class="uri" href="example_src/gantt_samerowex2.html" target="_top">(<code class="filename">gantt_samerowex2.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/gantt_samerowex2.png" alt='Adding a hollow "break" bar (gantt_samerowex2.php)'></span> </div></div><p><br class="figure-break">
</p>
</div>
</div>
<div class="sect2" title="Additional formatting for activity bars (Gantt bars)"><div class="titlepage"><div><div><h3 class="title"><a name="id2573237"></a>Additional formatting for activity bars (Gantt bars)</h3></div></div></div>
<div class="sect3" title="Adding markers to the Gantt bars"><div class="titlepage"><div><div><h4 class="title"><a name="sec.adding-gantt-markers"></a>Adding markers to the Gantt bars</h4></div></div></div>
<p>Each gantt bar can have a marker either at the left or to the right of the bar.
The markers are accessed through the properties</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttBar::leftMark</code></p>
</li><li class="listitem">
<p><code class="code">GanttBar::rightMark</code></p>
</li></ul></div><p>
</p>
<p>Since the markers are instances of <code class="code">class PlotMark</code> all the features of
this class is available as described in <a class="xref" href="ch15.html#sec.adding-marks" title="Adding marks to the plot (a.k.a. plot marks)">Adding marks to the plot (a.k.a. plot marks)</a> and
in <a class="xref" href="ape.html" title="Appendix E. Available plot marks">Appendix E. <i>Available plot marks</i></a>.</p>
<p>To give a practical example of the usage of marks we will add a solid filled
circle with a title text to the right end of a activity bar by using the following
lines</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> Add a right marker</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">Show</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">SetType</span><span class="hl-brackets">(</span><span class="hl-identifier">MARK_FILLEDCIRCLE</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">SetWidth</span><span class="hl-brackets">(</span><span class="hl-number">13</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">SetColor</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">red</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">SetFillColor</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">red</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">title</span><span class="hl-code">-></span><span class="hl-identifier">Set</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">M5</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">title</span><span class="hl-code">-></span><span class="hl-identifier">SetFont</span><span class="hl-brackets">(</span><span class="hl-identifier">FF_ARIAL</span><span class="hl-code">,</span><span class="hl-identifier">FS_BOLD</span><span class="hl-code">,</span><span class="hl-number">12</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">title</span><span class="hl-code">-></span><span class="hl-identifier">SetColor</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">white</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>This would give the effect shown in <a class="xref" href="ch16s04.html#fig.adding-right-marker" title="Figure 16.65. Example of adding a right marker to the activity bar">Figure 16.65. Example of adding a right marker to the activity bar</a></p>
<p>
</p><div class="figure"><a name="fig.adding-right-marker"></a><p class="title"><b>Figure 16.65. Example of adding a right marker to the activity bar</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-bar_rightmarker.png" alt="Example of adding a right marker to the activity bar"></div>
</div></div><p><br class="figure-break">
</p>
<div class="caution" title="Caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3>
<p>Since the bar height is 60% of the row height this means that a large
marker will adjust the row size (since it must be large enough to make room
for the mark) and it might be necessary to compensate for this by calling
the <code class="code">GanttBar::SetHeight($aHeight)</code>. Remember that the reserved
height is the maximum height needed by any line. <a class="xref" href="ch16s04.html#fig.ganttex08" title="Figure 16.66. A large marker will force the row to become larger since it by default always fills 60% of the allocated height for each row (ganttex08.php)">Figure 16.66. A large marker will force the row to become larger since it by default always fills 60% of the allocated height for each row <code class="uri"><a class="uri" href="example_src/ganttex08.html" target="_top">(<code class="filename">ganttex08.php</code>)</a></code> </a> shows what happens with the bar height if
it is not adjusted.</p>
</div><p>.</p>
<p>
</p><div class="figure"><a name="fig.ganttex08"></a><p class="title"><b>Figure 16.66. A large marker will force the row to become larger since it by default always fills 60% of the allocated height for each row <code class="uri"><a class="uri" href="example_src/ganttex08.html" target="_top">(<code class="filename">ganttex08.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex08.png" alt="A large marker will force the row to become larger since it by default always fills 60% of the allocated height for each row (ganttex08.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>There are two special markers <code class="code">MARK_LEFTTRIANGLE</code> and
<code class="code">MARK_RIGHTTRIANGLE</code> not normally available that are used to
format the visual indication of a group bar header. See <a class="xref" href="ch16s04.html#sec.gouping-activities" title="Grouping activities">Grouping activities</a></p>
</div><p>
</p>
</div>
<div class="sect3" title="Specifying a fill pattern for the activity bar"><div class="titlepage"><div><div><h4 class="title"><a name="id2573438"></a>Specifying a fill pattern for the activity bar</h4></div></div></div>
<p>The pattern and color for an activity bar is specified with the method</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttBar::function
SetPattern($aPattern,$aColor="blue",$aDensity=95)</code></p>
</li></ul></div><p>
</p>
<p>The available patterns together with the symbolic names are given in <a class="xref" href="ch16s04.html#tab.grad-bar-patterns" title="Table 16.1. Gantt bar patterns">Table 16.1. Gantt bar patterns</a>.</p>
<p>
</p><div class="table"><a name="tab.grad-bar-patterns"></a><p class="title"><b>Table 16.1. Gantt bar patterns</b></p><div class="table-contents">
<table summary="Gantt bar patterns" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"><col class="c4"></colgroup><tbody><tr><td>
<p><span class="inlinemediaobject"><img src="images/gantt-bar_ldiag.png"></span></p>
<p><code class="code">GANTT_LDIAG</code></p>
</td><td>
<p><span class="inlinemediaobject"><img src="images/gantt-bar_rdiag.png"></span></p>
<p><code class="code">GANTT_RDIAG</code></p>
</td><td>
<p><span class="inlinemediaobject"><img src="images/gantt-bar_hline.png"></span></p>
<p><code class="code">GANTT_HLINE</code></p>
</td><td>
<p><span class="inlinemediaobject"><img src="images/gantt-bar_vline.png"></span></p>
<p><code class="code">GANTT_VLINE</code></p>
</td></tr><tr><td>
<p><span class="inlinemediaobject"><img src="images/gantt-bar_solid.png"></span></p>
<p><code class="code">GANTT_SOLID</code></p>
</td><td>
<p><span class="inlinemediaobject"><img src="images/gantt-bar_hvcross.png"></span></p>
<p><code class="code">GANTT_HVCROSS</code></p>
</td><td>
<p><span class="inlinemediaobject"><img src="images/gantt-bar_diagcross.png"></span></p>
<p><code class="code">GANTT_DIAGCROSS</code></p>
</td><td>
<p><span class="inlinemediaobject"><img src="images/gantt-bar_3dplane.png"></span></p>
<p><code class="code">GANTT_3DPLANE</code></p>
</td></tr></tbody></table>
</div></div><p><br class="table-break">
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>In <a class="xref" href="ch16s04.html#tab.grad-bar-patterns" title="Table 16.1. Gantt bar patterns">Table 16.1. Gantt bar patterns</a>.we have used different
value for the <code class="code">$aDensity </code>parameter to better show the pattern.
Depending on the pattern we have used a density in the range 85 to
95.</p>
</div><p>
</p>
</div>
<div class="sect3" title="Adding captions to activities"><div class="titlepage"><div><div><h4 class="title"><a name="id2573692"></a>Adding captions to activities</h4></div></div></div>
<p>The caption text is a text string that is shown to the right of the activity bar.
It can have different usages, for example a common use is to show the initials of
the person (or persons) responsible for completing a specific activity.</p>
<p>The caption is accessed through the "<code class="code">$caption</code>" property of the bar.
This property is an instance of the Text class and hence inherits all the common
text formatting options.</p>
<p>The following line sets the caption to the string <code class="code">"[AG]"</code></p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">caption</span><span class="hl-code">-></span><span class="hl-identifier">Set</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">[AG]</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">
</span><span class="hl-var">$activity</span><span class="hl-code">-></span><span class="hl-identifier">caption</span><span class="hl-code">-></span><span class="hl-identifier">SetFont</span><span class="hl-brackets">(</span><span class="hl-identifier">FF_FONT2</span><span class="hl-code">,</span><span class="hl-identifier">FS_BOLD</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p><a class="xref" href="ch16s04.html#fig.gantt-bar-caption" title="Figure 16.67. Adding a caption to a Gantt bar">Figure 16.67. Adding a caption to a Gantt bar</a> shows a small cut out from a gantt
chart that shows the typical appearance of a gantt bar caption.</p>
<p>
</p><div class="figure"><a name="fig.gantt-bar-caption"></a><p class="title"><b>Figure 16.67. Adding a caption to a Gantt bar</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-bar_caption.png" alt="Adding a caption to a Gantt bar"></div>
</div></div><p><br class="figure-break">
</p>
<p>In addition to specifying the caption as shown above the caption text can also be
specified directly when creating a gantt bar as the fifth parameter as the following
example shows</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$activity = new GanttBar(0, 'Activity 1', '2001-11-21', '2001-12-20', '[BS,ER]') ;</span></pre></td></tr></table></div><p>
</p>
<p>In order to specify the distance between the Gantt object and the caption text the
method</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttPlotObject::SetCaptionMargin($aMargin)</code></p>
</li></ul></div><p>
</p>
<p>is used. For example, to increase the margin to 20 pixels for a gantt bar the
following line must be added</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$activity->SetCaptionTitle(20);</span></pre></td></tr></table></div><p>
</p>
</div>
<div class="sect3" title="Adding progress indicators"><div class="titlepage"><div><div><h4 class="title"><a name="sec.gantt-progress"></a>Adding progress indicators</h4></div></div></div>
<p>To indicate the progress of a specific activity it is also possible to add a
progress indicator to each bar. This progress indicator consists of a smaller bar
within the bar. By default this progress bar is black and 70% of the height of the
bar. These parameter can all be changed.</p>
<p>The properties for the progress indicator are accessed through the 'progress'
property and it's methods.</p>
<p>To set the progress for a specific activity you only specify the percent as a
fraction (0-1). As in</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$activity->progress->Set( 0.4 )</span></pre></td></tr></table></div><p>
</p>
<p>In each activity uses the default format for the progress indicator, a solid bar.
To make it clearer we have also modified the caption to reflect the displayed
progress. (At the same time we also modified the scale headers just to illustrate
some more formatting options).</p>
<p>
</p><div class="figure"><a name="fig.ganttex14"></a><p class="title"><b>Figure 16.68. Adding progress bars ot the gantt chart <code class="uri"><a class="uri" href="example_src/ganttex14.html" target="_top">(<code class="filename">ganttex14.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex14.png" alt="Adding progress bars ot the gantt chart (ganttex14.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>To specify a different format for the progress the following method is used</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">Progress::SetPattern($aPattern,$aColor="blue",$aDensity=98)</code></p>
<p>The parameters follow the same structure as patterns for the activity
bars</p>
</li></ul></div><p>
</p>
<p>We can now modify the progress bar above, for example by adding the line</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$activity->progress->SetPattern( BAND_RDIAG , "blue" );</span></pre></td></tr></table></div><p>
</p>
<p>and we then get the result shown in <a class="xref" href="ch16s04.html#fig.ganttex15" title="Figure 16.69. Modifying the format for the progress pattern (ganttex15.php)">Figure 16.69. Modifying the format for the progress pattern <code class="uri"><a class="uri" href="example_src/ganttex15.html" target="_top">(<code class="filename">ganttex15.php</code>)</a></code> </a></p>
<p>
</p><div class="figure"><a name="fig.ganttex15"></a><p class="title"><b>Figure 16.69. Modifying the format for the progress pattern <code class="uri"><a class="uri" href="example_src/ganttex15.html" target="_top">(<code class="filename">ganttex15.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex15.png" alt="Modifying the format for the progress pattern (ganttex15.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
</div>
<div class="sect2" title="Adding visual indication of constraints between gantt objects"><div class="titlepage"><div><div><h3 class="title"><a name="sec.add-constraints"></a>Adding visual indication of constraints between gantt objects</h3></div></div></div>
<p>With Gantt charts there is often the need to illustrate constrains between one or
several activities. One of the most common constrain is that on activity can't start
before some other activity has finished. The constrain is visualized as an arrow between
two gantt objects.</p>
<p>The library supports visualization of the following four types of constraints</p>
<p>
</p><div class="informaltable">
<table border="1"><colgroup><col class="c1"><col class="c2"></colgroup><tbody><tr><td align="center">
<p>
</p><div class="figure"><a name="id2574041"></a><p class="title"><b>Figure 16.70. Start to end constraint</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-constraint-start-to-end.png" alt="Start to end constraint"></div>
</div></div><p><br class="figure-break">
</p>
<p>Start to End</p>
</td><td align="center">
<p>
</p><div class="figure"><a name="id2574073"></a><p class="title"><b>Figure 16.71. Start to start constraint</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-constraint-start-to-start.png" alt="Start to start constraint"></div>
</div></div><p><br class="figure-break">
</p>
<p>Start to Start</p>
</td></tr><tr><td align="center">
<p>
</p><div class="figure"><a name="id2574110"></a><p class="title"><b>Figure 16.72. End to start constraint</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-constraint-end-to-start.png" alt="End to start constraint"></div>
</div></div><p><br class="figure-break">
</p>
<p>End to Start</p>
</td><td align="center">
<p>
</p><div class="figure"><a name="id2574144"></a><p class="title"><b>Figure 16.73. End to end constraint</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-constraint-end-to-end.png" alt="End to end constraint"></div>
</div></div><p><br class="figure-break">
</p>
<p>End to End</p>
</td></tr></tbody></table>
</div><p>
</p>
<p>To visualize a constrain the method <code class="code">SetConstrain()</code> is called on the first
Gantt object that is the first part of the constraint. The signature for this method
is</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttObject::SetConstrain($aRow,$aType,$aColor='black',</code></p>
<p><code class="code"> $aArrowSize=ARROW_S2, $aArrowType=ARROWT_SOLID)</code></p>
<p><code class="code">$aRow</code>, The target row for the constrain</p>
<p><code class="code">$aType</code>, The type of constraints. Can be one of the following
symbolic defines</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
<p><code class="code">CONSTRAIN_STARTSTART</code></p>
</li><li class="listitem">
<p><code class="code">CONSTRAIN_STARTEND</code></p>
</li><li class="listitem">
<p><code class="code">CONSTRAIN_ENDSTART</code></p>
</li><li class="listitem">
<p><code class="code">CONSTRAIN_ENDEND</code></p>
</li></ul></div><p>
</p>
<p><code class="code">$aColor</code>, The color of the constraint arrow</p>
<p><code class="code">$aArrowSize</code>, The size of the constraint arrow. Can eb one of
the following symbolic defines</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
<p><code class="code">ARROW_S1</code></p>
</li><li class="listitem">
<p><code class="code">ARROW_S2</code></p>
</li><li class="listitem">
<p><code class="code">ARROW_S3</code></p>
</li><li class="listitem">
<p><code class="code">ARROW_S4</code></p>
</li><li class="listitem">
<p><code class="code">ARROW_S5</code></p>
</li></ul></div><p>
</p>
<p><code class="code">$aArrowType</code>, specifies the visual appearance of the arrow.
Can be one of the following symbolic defines</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
<p><code class="code">ARROWT_SOLID</code>, Using a solid arrow and arrow
head</p>
</li><li class="listitem">
<p><code class="code">ARROWT_OPEN</code>, Using an outline arrow and outline
arrow head</p>
</li></ul></div><p>
</p>
</li></ul></div><p>
</p>
<p>If we assume that the gantt chart have two activity bars (Gantt bars) defined as </p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$activity1 = new GanttBar(0,'First activity','2001-01-01','2001-03-01');
$activity2 = new GanttBar(1,'Second activity','2001-02-01','2001-04-15');</span></pre></td></tr></table></div><p>
</p>
<p>and that we need to visualize a end-to-start constraint from <code class="code">$activity1</code>
to <code class="code">$activity2</code> we must add the following statement</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$activity1->SetConstrain(1,CONSTRAIN_ENDSTART);</span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>The actual path followed by the arrow is controlled by some heuristics to make
it clear what the constrain is. It has been a design decision that in order to
keep the API simple the user has no further detailed controlled on the actual
path followed. </p>
</div><p>
</p>
</div>
<div class="sect2" title="Grouping activities"><div class="titlepage"><div><div><h3 class="title"><a name="sec.gouping-activities"></a>Grouping activities</h3></div></div></div>
<p>It is common to group activities. There is no special type for activity bars that are
used to illustrate grouping. The common way of illustrating this (as have been used
above) is to add "half" a triangle marker at both ends of the bar. </p>
<p>The library provides two special types of marks that are handled slightly different
than other markers just to cater for illustrating groups of activities. If the left or
right marker (see the section on adding left and right markers) are of type
<code class="code">MARK_LEFTTRIANGLE</code> or <code class="code">MARK_RIGHTTRIANGLE</code> those triangles
will be drawn under the bars to give the effect show in the examples above. </p>
<p>It is also a good idea to make the grouping bars have slightly less height than normal
activity bars since the end triangles will visually "grow" the bar. Remember that the
size of the bar can be adjusted by adding an extra parameter in the creation of the bar
and can be specified as either an absolute or as a relative (0-1) value, see <a class="xref" href="ch16s04.html#sect.adding-gantt-activity-bars" title="Adding Gantt activity bars">Adding Gantt activity bars</a></p>
<p>So to get the effect we want for a group bar we have to use the two lines</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$groupbar</span><span class="hl-code">-></span><span class="hl-identifier">leftMark</span><span class="hl-code">-></span><span class="hl-identifier">SetType</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-identifier">MARK_LEFTTRIANGLE</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$groupbar</span><span class="hl-code">-></span><span class="hl-identifier">leftMark</span><span class="hl-code">-></span><span class="hl-identifier">Show</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$groupbar</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">SetType</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-identifier">MARK_RIGHTTRIANGLE</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$groupbar</span><span class="hl-code">-></span><span class="hl-identifier">rightMark</span><span class="hl-code">-></span><span class="hl-identifier">Show</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>to add the typical group markers at the left and right end of an otherwise standard
activity bar as can bee seen in <a class="xref" href="ch16s04.html#fig.group-markers" title="Figure 16.74. Group markers">Figure 16.74. Group markers</a></p>
<p>
</p><div class="figure"><a name="fig.group-markers"></a><p class="title"><b>Figure 16.74. Group markers</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-group-illustration.png" alt="Group markers"></div>
</div></div><p><br class="figure-break">
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>Since there is not yet any formatting support to accomplish the effect of
indentation for the titles so this is accomplished by using a fixed width font
and adding spaces in front of the title. </p>
</div><p>
</p>
</div>
<div class="sect2" title="Simplifying creation of basic Gantt charts"><div class="titlepage"><div><div><h3 class="title"><a name="id2574437"></a>Simplifying creation of basic Gantt charts</h3></div></div></div>
<p>As we have shown in the previous examples constructing a Gantt chart consists of a
number of repetitive tasks; Create the individual activity bars, add possible
constraints, format them and finally add them to the graph. </p>
<p>Since many basic Gantt charts that doesn't need a very high degree of customization
and has an almost identical (but repetitive structure) the library offers a "wrapper"
method that takes a structured specification of the activities and implements most of
these repetitive tasks which will make the graphs scripts much simpler.</p>
<p>The only drawback is that in order to keep the specification simple (which is the
whole purpose) there are very limited options to format the activities.</p>
<p>The wrapper method has the following signature</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttGraph::function CreateSimple($aData, $aConstrains=array(),
$aProgress=array())</code></p>
<p><code class="code">$aData</code>, Specification of activities described below</p>
<p><code class="code">$aConstraints</code>, (optional) List of constraints</p>
<p><code class="code">$aProgress</code>, (optional) List of progress values</p>
</li></ul></div><p>
</p>
<p>The specification of the activities used for this wrapper method has the following
structure</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$spec = array(
array( <act1_row>, <act1_type>, <act1_title>, <act1_start>, <act1_end>, <act1_caption>, <act1_csimtarget>, <act1_title_csimtarget> ),
array( <act2_row>, <act2_type>, <act2_title>, <act2_start>, <act2_end>, <act2_caption>, <act2_csimtarget>, <act2_title_csimtarget> ),
...
array( <actN_row>, <actN_type>, <actN_title>, <actN_start>, <actN_end>, <actN_caption>, <actN_csimtarget>, <actN_title_csimtarget> ));</span></pre></td></tr></table></div><p>
</p>
<p>Each array within the specification creates one activity. The fields have the
following meaning</p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code"><act_row></code>, Which row in the gantt chart this activity
shall be drawn on </p>
</li><li class="listitem">
<p><code class="code"><act_type></code>, What type of activity is this. The type is one
of the following symbolic defines</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem">
<p><code class="code">ACTYPE_NORMAL</code>, A standard activity bar</p>
</li><li class="listitem">
<p><code class="code">ACTYPE_MILESTONE</code>, A milestone activity</p>
</li><li class="listitem">
<p><code class="code">ACTYPE_GROUP</code>, Create a grouping activity bar by
adding start and end group marks</p>
</li></ul></div><p>
</p>
</li><li class="listitem">
<p><code class="code"><act_title></code>, The title for the activity, can be either a
text string or an array to specify several title when several title columns
have been specified</p>
</li><li class="listitem">
<p><code class="code"><act_start></code>, <code class="code"><act_end></code>, Start and end date
for the activity. For ACTYPE_MILESTONE only the <act_start> shall be
specified.</p>
</li><li class="listitem">
<p><code class="code"><act_caption></code>, The optional caption text for the
activity</p>
</li></ul></div><p>The (optional) constraints specification has the following
structure</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$constraints = array(
array(<act1_row>, <act2_row>, <type>),
array(<act1_row>, <act2_row>, <type>),
...
array(<act1_row>, <act2_row>, <type>));</span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><act1_row>, <act2_row>, Start and end row for this constraint</p>
</li><li class="listitem">
<p><type>, Type of constraint, as described in <a class="xref" href="ch16s04.html#sec.add-constraints" title="Adding visual indication of constraints between gantt objects">Adding visual indication of constraints between gantt objects</a></p>
</li></ul></div><p>
</p>
<p>Finally the (optional) progress specification has the structure</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$progress = array(
array( <act1_row>, <act1_progress> ),
array( <act2_row>, <act2_progress> ),
...
array( <act2_row>, <act2_progress> ));</span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><act_row>, The row that has the activity with the specified
progress</p>
</li><li class="listitem">
<p><act_progress>, The progress value for the activity at the specified
row</p>
</li></ul></div><p>
</p>
<p>This does perhaps not look like a simplification but the following example will show
that it really is.</p>
<p>The following example will create a gantt graph with two activities, one milestone and
all grouped together by a group bar. The specification for these activities will
be</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code"> $data = array(
array( 0 , ACTYPE_GROUP , "Phase 1" , "2001-10-26" , "2001-11-23" , "" ),
array( 1 , ACTYPE_NORMAL , " Label 2" , "2001-10-26" , "2001-11-13" , "[KJ]" ),
array( 2 , ACTYPE_NORMAL , " Label 3" , "2001-11-20" , "2001-11-22" , "[EP]" ),
array( 3 , ACTYPE_MILESTONE , " Phase 1 Done" , "2001-11-23" , "M2" ) );</span></pre></td></tr></table></div><p>
</p>
<p>Note that we use spaces to get a the titles indented according to the group
structure.</p>
<p>We now only need to create a very basic gantt chart with some selected scale headers
and perhaps also a title. We then call the <code class="code">CreateSimple()</code> method with the
data specification above as the argument and that is all we must do.</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> Create a basic graph and set a title</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttGraph</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">title</span><span class="hl-code">-></span><span class="hl-identifier">Set</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">"</span><span class="hl-string">Gantt Graph using CreateSimple()</span><span class="hl-quotes">"</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Setup a scale</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">ShowHeaders</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-identifier">GANTT_HYEAR</span><span class="hl-code"> | </span><span class="hl-identifier">GANTT_HMONTH</span><span class="hl-code"> | </span><span class="hl-identifier">GANTT_HDAY</span><span class="hl-code"> | </span><span class="hl-identifier">GANTT_HWEEK</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">week</span><span class="hl-code">-></span><span class="hl-identifier">SetStyle</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-identifier">WEEKSTYLE_FIRSTDAY</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Add the specified activities</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">CreateSimple</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-var">$data</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> .. and stroke the graph</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">Stroke</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>Compare this to all the <code class="code">$act = new GanttBar(..)</code> etc. we would have had to
add and format using the "manual" method of adding activities to gantt graph. A complete
example of this is shown in <a class="xref" href="ch16s04.html#fig.ganttsimpleex1" title="Figure 16.75. Using the CreateSimple() wrapper method (ganttsimpleex1.php)">Figure 16.75. Using the CreateSimple() wrapper method <code class="uri"><a class="uri" href="example_src/ganttsimpleex1.html" target="_top">(<code class="filename">ganttsimpleex1.php</code>)</a></code> </a></p>
<p>
</p><div class="figure"><a name="fig.ganttsimpleex1"></a><p class="title"><b>Figure 16.75. Using the CreateSimple() wrapper method <code class="uri"><a class="uri" href="example_src/ganttsimpleex1.html" target="_top">(<code class="filename">ganttsimpleex1.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttsimpleex1.png" alt="Using the CreateSimple() wrapper method (ganttsimpleex1.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>As we mentioned above the format options are very limited when using
<code class="code">CreateSimple()</code> since that is the whole idea. However, there are two
methods to at least partially affect the format and the visual appearance of the
activities.</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttGraph::SetSimpleFont($aFont,$aSize)</code></p>
<p><code class="code">$aFont</code>, Font family for titles</p>
<p><code class="code">$aSize</code>, Font size for titles</p>
</li><li class="listitem">
<p><code class="code">GanttGraph::SetSimpleStyle($aPattern,$aColor,$aFillColor)</code></p>
<p><code class="code">$aPattern</code>, Specifies the pattern (if any) to use for filling
the activity bars </p>
<p><code class="code">$aColor</code>, The pattern color</p>
<p><code class="code">$aFillColor</code>, The fill color of the activity bar</p>
</li></ul></div><p>
</p>
</div>
<div class="sect2" title="Using multiple title columns"><div class="titlepage"><div><div><h3 class="title"><a name="id2574887"></a>Using multiple title columns</h3></div></div></div>
<p>It is often of interest not only to show one title for a gantt bar but often one wants
to show, title, start date, end date, duration or effort and so on. Up until now we
have, to keep things simple only shown a single title for each activity. We will now
show how to use an arbitrary number of columns/titles for each gantt activity (gantt bar
or gantt milestone).</p>
<p>
</p><div class="figure"><a name="fig.ganttmonthyearex3"></a><p class="title"><b>Figure 16.76. Using multiple columns as titles for activties <code class="uri"><a class="uri" href="example_src/ganttmonthyearex3.html" target="_top">(<code class="filename">ganttmonthyearex3.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttmonthyearex3.png" alt="Using multiple columns as titles for activties (ganttmonthyearex3.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>To use multiple columns there are two steps needed. </p>
<p>
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>The number of columns to be used as titles together with the headings and
the headings properties like text, font and color are specified</p>
</li><li class="listitem">
<p>The second step is to add the proper titles to each activity to be
displayed in the specified columns</p>
</li></ol></div><p>
</p>
<p>To set the columns the "Activity information" property of the scale must be accessed.
To specify the headers of the title column the following method is used</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">ActivityInfo::SetColTitles($aHeaderArray, $aMinWidths)</code></p>
</li></ul></div><p>
</p>
<p>The following code excerpt shows an example on how to do this</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->scale->actinfo->SetColTitles(
array( 'Note', 'Task', 'Duration', 'Start', 'Finish' ),
array( 30 , 100 ));</span></pre></td></tr></table></div><p>
</p>
<p>Furthermore it is possible to modify the background colors and the style and colors of
the vertical dividing grid lines. In the previous image we used the lines</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">actinfo</span><span class="hl-code">-></span><span class="hl-identifier">SetBackgroundColor</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">green:0.5@0.5</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">actinfo</span><span class="hl-code">-></span><span class="hl-identifier">SetFont</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-identifier">FF_ARIAL</span><span class="hl-code"> , </span><span class="hl-identifier">FS_NORMAL</span><span class="hl-code"> , </span><span class="hl-number">10</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">actinfo</span><span class="hl-code">-></span><span class="hl-identifier">vgrid</span><span class="hl-code">-></span><span class="hl-identifier">SetStyle</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">solid</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">actinfo</span><span class="hl-code">-></span><span class="hl-identifier">vgrid</span><span class="hl-code">-></span><span class="hl-identifier">SetColor</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">gray</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>The style for the grid lines is as usual specified with one of the strings be
"<code class="code">solid</code>","<code class="code">dashed</code>", "<code class="code">dotted</code>" or
"<code class="code">longdashed</code>" as in other line formatting contexts within the library. </p>
<p>It is also possible to specify if a small "3D" effect should be used in the titles. By
default this is enabled. You can easily turn this of with a call to</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->scale->actinfo->SetStyle( ACTINFO_2D );</span></pre></td></tr></table></div><p>
</p>
<p>To adjust the colors of the vertical dividing lines in the title the method
<code class="code">SetColor()</code> is used as in</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->scale->actinfo->SetColor('navy');</span></pre></td></tr></table></div><p>
</p>
<p>Once the format of the title column is set up the data in the columns (the texts)
needs to be entered. </p>
<p>This is done when the activity bars are added to the graph. By default only a single
columns is used as a title and then the title of the activity is specified as a string.
When multiple columns are used then the title of each activity is specified as an array
of texts, each entry in the array corresponding to one column.</p>
<p>Specifying two column titles could be done with the following creation of the activity
bar</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$title1 = '...';
$title2 = '...';
$bar = new GanttBar(0 ,array( $title1 , $title2 ), "2003-11-23" , "2003-12-05" );</span></pre></td></tr></table></div><p>
</p>
<div class="sidebar"><div class="titlepage"></div>
<p>Apart from specifying the titles as separate entries in an array there is actually
one additional (older) way to specify the text that should go into each column and
that is to separate each text string with a "\t" tab character. So for example the
lines above could also have been written as </p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$title1 = '...';
$title2 = '...';
$bar = new GanttBar(0 , $title1 . "\t" . $title2, "2003-11-23" , "2003-12-05" );</span></pre></td></tr></table></div><p>
</p>
<p>Note the quote character used to encode the <code class="code">"\t"</code> character. There is
however a very crucial semantic difference between these two ways of specifying the
texts and that is that with the method of tab characters the columns will not be
automatically resized to fit the text string. This means that when the columns are
setup they must have a big enough width to cater for all the strings.</p>
</div>
<div class="sect3" title="Adjusting the individual fonts for each column"><div class="titlepage"><div><div><h4 class="title"><a name="id2575159"></a>Adjusting the individual fonts for each column</h4></div></div></div>
<p><span class="italic">Note: This feature is only available in versions >= 3.0.3
of the library.</span></p>
<p>When using the method <code class="code">GanttBar::title::SetFont()</code> the same font will
be applied to all columns for that particular activity. To specify individual fonts
for each column the method <code class="code">GanttBar::title::SetColumnFonts()</code> must be
used.</p>
<p>This method accept an array of font arrays where each font array specifies the
font family, style and size for that particular column. If fewer fonts specification
than columns are given then the remaining columns will be using the default fonts
specification (as defined by the <code class="code">SetFont()</code> method).</p>
<p>For example the two lines of code</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$bar</span><span class="hl-code">-></span><span class="hl-identifier">title</span><span class="hl-code">-></span><span class="hl-identifier">SetFont</span><span class="hl-brackets">(</span><span class="hl-identifier">FF_ARIAL</span><span class="hl-code">,</span><span class="hl-identifier">FS_NORMAL</span><span class="hl-code">,</span><span class="hl-number">10</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$bar</span><span class="hl-code">-></span><span class="hl-identifier">title</span><span class="hl-code">-></span><span class="hl-identifier">SetColumnFonts</span><span class="hl-brackets">(</span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-identifier">FF_ARIAL</span><span class="hl-code">,</span><span class="hl-identifier">FS_BOLD</span><span class="hl-code">,</span><span class="hl-number">11</span><span class="hl-brackets">)</span><span class="hl-brackets">)</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>will cause the first column to be set in a bold font and the remaining columns
falling back to the default non-bold font style.</p>
<p>A complete example on how to use this is shown in <a class="xref" href="ch16s04.html#fig.ganttcolumnfontsex01" title="Figure 16.77. Using different fonts for individual columns (ganttcolumnfontsex01.php)">Figure 16.77. Using different fonts for individual columns <code class="uri"><a class="uri" href="example_src/ganttcolumnfontsex01.html" target="_top">(<code class="filename">ganttcolumnfontsex01.php</code>)</a></code> </a> below.</p>
<p>
</p><div class="figure"><a name="fig.ganttcolumnfontsex01"></a><p class="title"><b>Figure 16.77. Using different fonts for individual columns <code class="uri"><a class="uri" href="example_src/ganttcolumnfontsex01.html" target="_top">(<code class="filename">ganttcolumnfontsex01.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttcolumnfontsex01.png" alt="Using different fonts for individual columns (ganttcolumnfontsex01.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
<div class="sect3" title="Adding an overview title for all columns"><div class="titlepage"><div><div><h4 class="title"><a name="id2575229"></a>Adding an overview title for all columns</h4></div></div></div>
<p>It is possible to add a title that spans all the defined title columns. An example
of this is shown in <a class="xref" href="ch16s04.html#fig.ganttmonthyearex4" title="Figure 16.78. Adding a spanning title over all title columns (ganttmonthyearex4.php)">Figure 16.78. Adding a spanning title over all title columns <code class="uri"><a class="uri" href="example_src/ganttmonthyearex4.html" target="_top">(<code class="filename">ganttmonthyearex4.php</code>)</a></code> </a>. This title is
specified with the property "<code class="code">$tableTitle</code>" of the scale. Specifying a
table title will automatically adjust the height of the column titles to fit the
table title. The small code snippet below shows how to add a title.</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">tableTitle</span><span class="hl-code">-></span><span class="hl-identifier">Set</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">Phase 1</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">tableTitle</span><span class="hl-code">-></span><span class="hl-identifier">SetFont</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-identifier">FF_ARIAL</span><span class="hl-code"> , </span><span class="hl-identifier">FS_NORMAL</span><span class="hl-code"> , </span><span class="hl-number">12</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">SetTableTitleBackground</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">darkgreen@0.6</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">tableTitle</span><span class="hl-code">-></span><span class="hl-identifier">Show</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-reserved">true</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="figure"><a name="fig.ganttmonthyearex4"></a><p class="title"><b>Figure 16.78. Adding a spanning title over all title columns <code class="uri"><a class="uri" href="example_src/ganttmonthyearex4.html" target="_top">(<code class="filename">ganttmonthyearex4.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttmonthyearex4.png" alt="Adding a spanning title over all title columns (ganttmonthyearex4.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>
</p><div class="caution" title="Caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3>
<p>Remember that the overall height available for both title column header
and the spanning column title is limited to the height of the specified
scale header. This means that having only a single scale header will not
leave enough room to add a spanning title.</p>
</div><p>
</p>
</div>
</div>
<div class="sect2" title="Built-in icons for use in activity titles"><div class="titlepage"><div><div><h3 class="title"><a name="id2575300"></a>Built-in icons for use in activity titles</h3></div></div></div>
<p>To assist in getting visual clues to how to interpret activities in the Gantt chart it
is possible to add icons in the title columns. These icons can also act as hot-spots in
CSIM graphs. The available built-in icons are listed in <a class="xref" href="ch16s04.html#fig.gantt-icons" title="Figure 16.79. Built-in icons for Gantt charts">Figure 16.79. Built-in icons for Gantt charts</a> together with there symbolic names.</p>
<p>In order to add an icon in a title column first an instance of <code class="code">class
IconPlot</code> is created and it is then added in exactly the same was as a text
string. The signature for the constructor is</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">IconPlot::__construct($aIcon,$aScale=1)</code></p>
<p><code class="code">$aIcon</code>, is either one of the symbolic names in <a class="xref" href="ch16s04.html#fig.gantt-icons" title="Figure 16.79. Built-in icons for Gantt charts">Figure 16.79. Built-in icons for Gantt charts</a> or a text string which is a filename of
an arbitrary image to use as icon.</p>
<p><code class="code">$aScale</code>, is the initial scaling of the image</p>
</li></ul></div><p>
</p>
<p>For example the following code snippet adds a "folder open image" in the first column
and scaling it to be 60% of its original size</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$iconopen</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">IconImage</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">GICON_FOLDEROPEN</span><span class="hl-code"> , </span><span class="hl-number">0</span><span class="hl-number">.6</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$title2</span><span class="hl-code"> = </span><span class="hl-quotes">'</span><span class="hl-string">...</span><span class="hl-quotes">'</span><span class="hl-code"> ;
</span><span class="hl-var">$bar</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttBar</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code"> ,</span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-var">$iconopen</span><span class="hl-code"> , </span><span class="hl-var">$title2</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-quotes">'</span><span class="hl-string">2003-11-23</span><span class="hl-quotes">'</span><span class="hl-code"> , </span><span class="hl-quotes">'</span><span class="hl-string">2003-12-05</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>To instead use an arbitrary image as icon the code would have to be changed to</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$iconopen</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">IconImage</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">myiconimage.jpg</span><span class="hl-quotes">'</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-number">.6</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$title2</span><span class="hl-code"> = </span><span class="hl-quotes">'</span><span class="hl-string">...</span><span class="hl-quotes">'</span><span class="hl-code"> ;
</span><span class="hl-var">$bar</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttBar</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code"> ,</span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-var">$iconopen</span><span class="hl-code"> , </span><span class="hl-var">$title2</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-quotes">'</span><span class="hl-string">2003-11-23</span><span class="hl-quotes">'</span><span class="hl-code"> , </span><span class="hl-quotes">'</span><span class="hl-string">2003-12-05</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="figure"><a name="fig.gantt-icons"></a><p class="title"><b>Figure 16.79. Built-in icons for Gantt charts</b></p><div class="figure-contents">
<div class="informaltable">
<table border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"></colgroup><tbody><tr><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_error.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_WARNINGYELLOW</code></p>
</td><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_warning.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_WARNINGRED</code></p>
</td><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_edit.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_TEXT</code></p>
</td></tr><tr><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_endconstrain.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_ENDCONS</code></p>
</td><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_startconstrain.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_STARTCONS</code></p>
</td><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_mail.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_MAIL</code></p>
</td></tr><tr><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_calc.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_CALC</code></p>
</td><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_viewmag.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_MAGNIFIER</code></p>
</td><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_lock.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_LOCK</code></p>
</td></tr><tr><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_stop.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_STOP</code></p>
</td><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_folder_orange_open.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_FOLDEROPEN</code></p>
</td><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_folder_orange.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_FOLDER</code></p>
</td></tr><tr><td align="center">
<p><span class="inlinemediaobject"><img src="images/gantticon_file_important.png" alt="Built-in icons for Gantt charts"></span></p>
<p><code class="code">GICON_TEXTIMPORTANT</code></p>
</td><td> </td><td> </td></tr></tbody></table>
</div>
</div></div><p><br class="figure-break">
</p>
<p>An example of using icons in the titles is shown in <a class="xref" href="ch16s04.html#fig.gantticonex1" title="Figure 16.80. Adding built in icons in titles (gantticonex1.php)">Figure 16.80. Adding built in icons in titles <code class="uri"><a class="uri" href="example_src/gantticonex1.html" target="_top">(<code class="filename">gantticonex1.php</code>)</a></code> </a></p>
<p>
</p><div class="figure"><a name="fig.gantticonex1"></a><p class="title"><b>Figure 16.80. Adding built in icons in titles <code class="uri"><a class="uri" href="example_src/gantticonex1.html" target="_top">(<code class="filename">gantticonex1.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/gantticonex1.png" alt="Adding built in icons in titles (gantticonex1.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
<div class="sect2" title="More general Gantt formatting"><div class="titlepage"><div><div><h3 class="title"><a name="id2575812"></a>More general Gantt formatting</h3></div></div></div>
<p>In this section we will show a few more ways by which you may customize the gantt
chart itself. This include among other thing</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p>Adding a table title (not to be confused with the graph title)</p>
</li><li class="listitem">
<p>Adjusting appearance of the various lines in the bar chart</p>
</li><li class="listitem">
<p>Adjusting the zoom factor for the width when using automatic
scaling</p>
</li></ul></div><p>
</p>
<div class="sect3" title="Adjusting the scale zoom factor"><div class="titlepage"><div><div><h4 class="title"><a name="sec.zoom-factor"></a>Adjusting the scale zoom factor</h4></div></div></div>
<p>By default the scale will be just wide enough to fit the chosen scale headers with
some small margins on each side. It is possible to adjust the width when using
automatic graph sizing by setting a zoom factor for the scale. The default width
corresponds to a zoom factor of 1.0.</p>
<p>The zoom factor is adjusted by the method</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttGraph::SetZoomFactor($aZoomFactor)</code></p>
<p><code class="code">$aZoomFactor</code>, A real number that specifies the zoom of
the date scale. A zoom factor of 2.0 will double the default horizontal
spacing.</p>
</li></ul></div><p>
</p>
<p>In the following two examples the same Gantt chart is first shown with a scale
factor of 0.7 (=70% of the original width) and in <a class="xref" href="ch16s04.html#fig.ganttex13-zoom2" title="Figure 16.82. A zoom factor of 1.5 (ganttex13-zoom2.php)">Figure 16.82. A zoom factor of 1.5 <code class="uri"><a class="uri" href="example_src/ganttex13-zoom2.html" target="_top">(<code class="filename">ganttex13-zoom2.php</code>)</a></code> </a> a zoom factor of 1.5 (=150%) is used.</p>
<p>
</p><div class="figure"><a name="fig.ganttex13-zoom1"></a><p class="title"><b>Figure 16.81. A zoom factor of 0.7 <code class="uri"><a class="uri" href="example_src/ganttex13-zoom1.html" target="_top">(<code class="filename">ganttex13-zoom1.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex13-zoom1.png" alt="A zoom factor of 0.7 (ganttex13-zoom1.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>
</p><div class="figure"><a name="fig.ganttex13-zoom2"></a><p class="title"><b>Figure 16.82. A zoom factor of 1.5 <code class="uri"><a class="uri" href="example_src/ganttex13-zoom2.html" target="_top">(<code class="filename">ganttex13-zoom2.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex13-zoom2.png" alt="A zoom factor of 1.5 (ganttex13-zoom2.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>There is no limit for the zoom factor but from a practical point of view
the useful range is [0.5,3.0]</p>
</div><p>
</p>
</div>
<div class="sect3" title="Adding a table title"><div class="titlepage"><div><div><h4 class="title"><a name="id2575994"></a>Adding a table title</h4></div></div></div>
<p>The (default) white area in the top left of the gantt table may have a title. This
is accessed by the '<code class="code">tableTitle</code>' property of the gantt scale. Using this
is straightforward as the following code snippet shows.</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">tableTitle</span><span class="hl-code">-></span><span class="hl-identifier">Set</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">(Rev: 1.22)</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">tableTitle</span><span class="hl-code">-></span><span class="hl-identifier">SetFont</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-identifier">FF_FONT1</span><span class="hl-code"> , </span><span class="hl-identifier">FS_BOLD</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">SetTableTitleBackground</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">silver</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">tableTitle</span><span class="hl-code">-></span><span class="hl-identifier">Show</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>The example lines above also changes the default white background to silver. An
example of this is shown in <a class="xref" href="ch16s04.html#fig.ganttex16" title="Figure 16.83. Adding a table title in the top left corner (ganttex16.php)">Figure 16.83. Adding a table title in the top left corner <code class="uri"><a class="uri" href="example_src/ganttex16.html" target="_top">(<code class="filename">ganttex16.php</code>)</a></code> </a>. As can be seen the
width of the left column which holds all the titles has been adjusted to make it
wide enough to fit the table title.</p>
<p>
</p><div class="figure"><a name="fig.ganttex16"></a><p class="title"><b>Figure 16.83. Adding a table title in the top left corner <code class="uri"><a class="uri" href="example_src/ganttex16.html" target="_top">(<code class="filename">ganttex16.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex16.png" alt="Adding a table title in the top left corner (ganttex16.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
<div class="sect3" title="Modifying the divider lines"><div class="titlepage"><div><div><h4 class="title"><a name="id2576032"></a>Modifying the divider lines</h4></div></div></div>
<p>The vertical and horizontal lines between the activity titles and the plot area
and the bars can be modified by accessing the vertical divider
'<code class="code">divider</code>' and the horizontal divider '<code class="code">dividerh</code>' properties
of the scale. <a class="xref" href="ch16s04.html#fig.gantt-divider-lines" title="Figure 16.84. Gantt divider lines">Figure 16.84. Gantt divider lines</a> shows the exact location
of the divider lines.</p>
<p>
</p><div class="figure"><a name="fig.gantt-divider-lines"></a><p class="title"><b>Figure 16.84. Gantt divider lines</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-divider-lines-original-amended.png" alt="Gantt divider lines"></div>
</div></div><p><br class="figure-break">
</p>
<p>Again, this is straightforward as the following code snippet shows.</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">divider</span><span class="hl-code">-></span><span class="hl-identifier">SetWeight</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-number">3</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">divider</span><span class="hl-code">-></span><span class="hl-identifier">SetColor</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">navy</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">dividerh</span><span class="hl-code">-></span><span class="hl-identifier">SetWeight</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-number">3</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">scale</span><span class="hl-code">-></span><span class="hl-identifier">dividerh</span><span class="hl-code">-></span><span class="hl-identifier">SetColor</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">navy</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>An example of this can be seen in <a class="xref" href="ch16s04.html#fig.ganttex18" title="Figure 16.85. Adjusting the plot box around the gantt chart (ganttex18.php)">Figure 16.85. Adjusting the plot box around the gantt chart <code class="uri"><a class="uri" href="example_src/ganttex18.html" target="_top">(<code class="filename">ganttex18.php</code>)</a></code> </a></p>
</div>
<div class="sect3" title="Modifying the box around the plot"><div class="titlepage"><div><div><h4 class="title"><a name="id2576136"></a>Modifying the box around the plot</h4></div></div></div>
<p>In a similar manner to the other plots in the library the Box around the plot can
be modified with the gantt graph method '<code class="code">GanttGraph::SetBox()</code>' . The
following line will result in a thicker plot box around the plot area as can be seen
in <a class="xref" href="ch16s04.html#fig.ganttex18" title="Figure 16.85. Adjusting the plot box around the gantt chart (ganttex18.php)">Figure 16.85. Adjusting the plot box around the gantt chart <code class="uri"><a class="uri" href="example_src/ganttex18.html" target="_top">(<code class="filename">ganttex18.php</code>)</a></code> </a></p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->SetBox(true, 'navy', 3);</span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="figure"><a name="fig.ganttex18"></a><p class="title"><b>Figure 16.85. Adjusting the plot box around the gantt chart <code class="uri"><a class="uri" href="example_src/ganttex18.html" target="_top">(<code class="filename">ganttex18.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex18.png" alt="Adjusting the plot box around the gantt chart (ganttex18.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
<div class="sect3" title="Horizontal grids and alternating line colors"><div class="titlepage"><div><div><h4 class="title"><a name="id2576209"></a>Horizontal grids and alternating line colors</h4></div></div></div>
<p>In order to make large charts easier to read it is possible to specify alternating
an horizontal grid and optional alternating line colors in the background for Gantt
charts. The horizontal grid is accessed through the <code class="code">Graph::hgrid</code>
property and the line (used in the grid) is accessed through the
<code class="code">Graph::hgrid::line</code> sub-property.</p>
<p>In order to specify alternating line colors the following method is used</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">HorizontalGridLine::SetRowFillColor($aColor1,$aColor2='')</code></p>
<p><code class="code">$aColor1</code>, <code class="code">$aColor2</code>, alternating color for
each activity line</p>
</li></ul></div><p>
</p>
<p>For example, to use an alternating blue background with blue grid line the
following lines would have to be added to the graph script</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> Setup a horizontal grid</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">hgrid</span><span class="hl-code">-></span><span class="hl-identifier">Show</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">hgrid</span><span class="hl-code">-></span><span class="hl-identifier">line</span><span class="hl-code">-></span><span class="hl-identifier">SetColor</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">lightblue</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">hgrid</span><span class="hl-code">-></span><span class="hl-identifier">SetRowFillColor</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">darkblue@0.9</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>An example,of this is shown in <a class="xref" href="ch16s04.html#fig.gantthgridex1" title="Figure 16.86. (gantthgridex1.php)">Figure 16.86. <code class="uri"><a class="uri" href="example_src/gantthgridex1.html" target="_top">(<code class="filename">gantthgridex1.php</code>)</a></code> </a></p>
</div>
<div class="sect3" title="Adding icons to Gantt graphs"><div class="titlepage"><div><div><h4 class="title"><a name="id2576277"></a>Adding icons to Gantt graphs</h4></div></div></div>
<p>In the same way as for ordinary x-y graphs it is possible to add small images (or
icons) to a Gantt graph by creating an instance of <code class="code">class IconPlot</code> and
then adding that instance to the graph. </p>
<p>For example the following line will add an icon (similar to what was shown in ??)
to a gantt chart with the result shown in <a class="xref" href="ch16s04.html#fig.gantthgridex1" title="Figure 16.86. (gantthgridex1.php)">Figure 16.86. <code class="uri"><a class="uri" href="example_src/gantthgridex1.html" target="_top">(<code class="filename">gantthgridex1.php</code>)</a></code> </a></p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$icon</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">IconPlot</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">penguin.png</span><span class="hl-quotes">'</span><span class="hl-code"> , </span><span class="hl-number">0</span><span class="hl-number">.01</span><span class="hl-code"> , </span><span class="hl-number">0</span><span class="hl-number">.95</span><span class="hl-code"> , </span><span class="hl-number">1</span><span class="hl-code"> , </span><span class="hl-number">15</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$icon</span><span class="hl-code">-></span><span class="hl-identifier">SetAnchor</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">left</span><span class="hl-quotes">'</span><span class="hl-code">, </span><span class="hl-quotes">'</span><span class="hl-string">bottom</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">Add</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-var">$icon</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>
</p><div class="figure"><a name="fig.gantthgridex1"></a><p class="title"><b>Figure 16.86. <code class="uri"><a class="uri" href="example_src/gantthgridex1.html" target="_top">(<code class="filename">gantthgridex1.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/gantthgridex1.png" alt="(gantthgridex1.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
<div class="sect3" title="Adjusting the vertical spacing between activity bars"><div class="titlepage"><div><div><h4 class="title"><a name="id2576317"></a>Adjusting the vertical spacing between activity bars</h4></div></div></div>
<p>By default the library adds 20% margin above and below each activity bar. In order
to set the activities closer or further away from each other the method</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttGraph::SetVMarginFactor($aFractionMargin)</code></p>
</li></ul></div><p>
</p>
<p>can be used. For example</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->SetVMarginFactor(0.0);</span></pre></td></tr></table></div><p>
</p>
<p>will cause the gantt bars to touch each other since there will be no margins. If
we instead use</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->SetVMarginFactor(1.0);</span></pre></td></tr></table></div><p>
</p>
<p>we will in effect get "double-line-spacing" since we add the width of one activity
height as margin. The default 40% corresponds to</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->SetVMarginFactor(0.4);</span></pre></td></tr></table></div><p>
</p>
</div>
<div class="sect3" title="Adjusting the margins with auto-sizing"><div class="titlepage"><div><div><h4 class="title"><a name="id2576346"></a>Adjusting the margins with auto-sizing</h4></div></div></div>
<p>It is possible to use <code class="code">GanttGraph::SetMargin()</code> to specify the margin
for a Gantt graph even when the vertical height is determined automatically. For
example to generate a graph with no left, right or bottom margin the following lines
would be needed</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttGraph</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-number">500</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">SetMargin</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">30</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
</div>
<div class="sect3" title="Limiting the date range for the Gantt chart"><div class="titlepage"><div><div><h4 class="title"><a name="id2576439"></a>Limiting the date range for the Gantt chart</h4></div></div></div>
<p>By default the scale will be wide enough to make room for all specified
activities. It is however possible to manually set the scale range to limit the size
of the Gantt chart.</p>
<p>This is done by calling the method</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttGraph::SetDateRange($aStartDate, $aEndDate)</code></p>
</li></ul></div><p>
</p>
<p>For example the following code snippet would set the specified start and end
date</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->SetDateRange('2001-12-20', '2002-01-20');</span></pre></td></tr></table></div><p>
</p>
</div>
<div class="sect3" title="Specifying the first day in the week"><div class="titlepage"><div><div><h4 class="title"><a name="id2576440"></a>Specifying the first day in the week</h4></div></div></div>
<p>By default Monday is the first day of the week. It is possible to manually set an
arbitrary start day by calling the method</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttScale::SetWeekStart($aStartDay)</code></p>
<p><code class="code">$aStartDay</code>, Specified as an integer in the range 0-6
where 0=Sunday, 1=Monday, ..., 6=Saturday</p>
</li></ul></div><p>
</p>
</div>
<div class="sect3" title="Adding plot icons to the graph"><div class="titlepage"><div><div><h4 class="title"><a name="id2576511"></a>Adding plot icons to the graph</h4></div></div></div>
<p>In the same way as was described in <a class="xref" href="ch14s14.html" title="Adding icons (and small images) to the graph">Adding icons (and small images) to the graph</a> for x-y graphs it is possible to add icons and country flags to a Gantt chart.
The following code snippet adds a Norwegian flag to the top left corner of a
graph</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> Setup the Gantt graph</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">GanttGraph</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Create some activities</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> ...</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$icon</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">IconPlot</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$icon</span><span class="hl-code">-></span><span class="hl-identifier">SetAnchor</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">left</span><span class="hl-quotes">'</span><span class="hl-code">,</span><span class="hl-quotes">'</span><span class="hl-string">top</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$icon</span><span class="hl-code">-></span><span class="hl-identifier">SetCountryFlag</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">norway</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$icon</span><span class="hl-code">-></span><span class="hl-identifier">SetPos</span><span class="hl-brackets">(</span><span class="hl-number">5</span><span class="hl-code">,</span><span class="hl-number">5</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$icon</span><span class="hl-code">-></span><span class="hl-identifier">SetMix</span><span class="hl-brackets">(</span><span class="hl-number">50</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$icon</span><span class="hl-code">-></span><span class="hl-identifier">SetScale</span><span class="hl-brackets">(</span><span class="hl-number">1</span><span class="hl-number">.0</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> The above four method calls could also have been done as</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> $icon->SetCountryFlag('norway', 5,5, 1.0, 50);</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">Add</span><span class="hl-brackets">(</span><span class="hl-var">$icon</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Any other gantt formatting</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> ...</span><span class="hl-comment"></span></pre></td></tr></table></div><p>
</p>
<p>The result of adding these lines to a typical Gantt chart is shown in <a class="xref" href="ch16s04.html#fig.ganttex17-flag" title="Figure 16.87. Adding a country flag to the top left corner of the gantt graph (ganttex17-flag.php)">Figure 16.87. Adding a country flag to the top left corner of the gantt graph <code class="uri"><a class="uri" href="example_src/ganttex17-flag.html" target="_top">(<code class="filename">ganttex17-flag.php</code>)</a></code> </a></p>
<p>
</p><div class="figure"><a name="fig.ganttex17-flag"></a><p class="title"><b>Figure 16.87. Adding a country flag to the top left corner of the gantt graph <code class="uri"><a class="uri" href="example_src/ganttex17-flag.html" target="_top">(<code class="filename">ganttex17-flag.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex17-flag.png" alt="Adding a country flag to the top left corner of the gantt graph (ganttex17-flag.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>For more details on adding icons to a graph see <a class="xref" href="ch14s14.html" title="Adding icons (and small images) to the graph">Adding icons (and small images) to the graph</a> .</p>
</div>
<div class="sect3" title="Adding text strings to the graph"><div class="titlepage"><div><div><h4 class="title"><a name="id2576573"></a>Adding text strings to the graph</h4></div></div></div>
<p>In exactly the same way as was described in <a class="xref" href="ch14s17.html" title="Adding arbitrary texts to the graph">Adding arbitrary texts to the graph</a> it is also possible to add arbitrary
formatted text paragraphs to the gantt chart. </p>
<p>The position of the text strings is specified as either an absolute position in
pixels (as usual the top left corner is (0,0)) or the position can be specified as a
scale position with date and row index. The following two method of the text class
is used for this</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">Text::SetPos($aPosX, $aPosY)</code></p>
<p>Set the absolute position for the text anchor point</p>
</li><li class="listitem">
<p><code class="code">Text::SetScalePos($aDate,$aRow)</code></p>
<p>Set the position for the text anchor point using the actual date scale
(as the horizontal position) and the row number as the vertical
position.</p>
</li></ul></div><p>
</p>
<p>For example the lines below show how to add one text with absolute scale position
in the top left corner and one text string at the second row at the date
"2002-01.01"</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags"><?php</span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> Add text to top left corner of graph</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$txt1</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Text</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$txt1</span><span class="hl-code">-></span><span class="hl-identifier">SetPos</span><span class="hl-brackets">(</span><span class="hl-number">5</span><span class="hl-code">,</span><span class="hl-number">2</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$txt1</span><span class="hl-code">-></span><span class="hl-identifier">Set</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">Note:</span><span class="hl-special">\n</span><span class="hl-string">Estimate done w148</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$txt1</span><span class="hl-code">-></span><span class="hl-identifier">SetFont</span><span class="hl-brackets">(</span><span class="hl-identifier">FF_ARIAL</span><span class="hl-code">,</span><span class="hl-identifier">FS_BOLD</span><span class="hl-code">,</span><span class="hl-number">12</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$txt1</span><span class="hl-code">-></span><span class="hl-identifier">SetColor</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">darkred</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">Add</span><span class="hl-brackets">(</span><span class="hl-var">$txt1</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-comment">//</span><span class="hl-comment"> Add text to the top bar</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$txt2</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Text</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$txt2</span><span class="hl-code">-></span><span class="hl-identifier">SetScalePos</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">2002-01-01</span><span class="hl-quotes">'</span><span class="hl-code">,</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$txt2</span><span class="hl-code">-></span><span class="hl-identifier">SetFont</span><span class="hl-brackets">(</span><span class="hl-identifier">FF_ARIAL</span><span class="hl-code">,</span><span class="hl-identifier">FS_BOLD</span><span class="hl-code">,</span><span class="hl-number">12</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$txt2</span><span class="hl-code">-></span><span class="hl-identifier">SetAlign</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">left</span><span class="hl-quotes">'</span><span class="hl-code">,</span><span class="hl-quotes">'</span><span class="hl-string">center</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$txt2</span><span class="hl-code">-></span><span class="hl-identifier">Set</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">Remember this!</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$txt2</span><span class="hl-code">-></span><span class="hl-identifier">SetBox</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">yellow</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$graph</span><span class="hl-code">-></span><span class="hl-identifier">Add</span><span class="hl-brackets">(</span><span class="hl-var">$txt2</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?></span></pre></td></tr></table></div><p>
</p>
<p>The result of adding these lines to a typical gantt graph is shown in <a class="xref" href="ch16s04.html#fig.gantt_textex1" title="Figure 16.88. Adding two text objects to a Gantt graph (gantt_textex1.php)">Figure 16.88. Adding two text objects to a Gantt graph <code class="uri"><a class="uri" href="example_src/gantt_textex1.html" target="_top">(<code class="filename">gantt_textex1.php</code>)</a></code> </a></p>
<p>
</p><div class="figure"><a name="fig.gantt_textex1"></a><p class="title"><b>Figure 16.88. Adding two text objects to a Gantt graph <code class="uri"><a class="uri" href="example_src/gantt_textex1.html" target="_top">(<code class="filename">gantt_textex1.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/gantt_textex1.png" alt="Adding two text objects to a Gantt graph (gantt_textex1.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>Since there is no other changes in functionality we refer to <a class="xref" href="ch14s17.html" title="Adding arbitrary texts to the graph">Adding arbitrary texts to the graph</a> for a full discussion of text
paragraph features.</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>This feature was added in v2.5</p>
</div><p>
</p>
</div>
</div>
<div class="sect2" title="Localizing the Gantt chart scale"><div class="titlepage"><div><div><h3 class="title"><a name="sec.gantt-localizing"></a>Localizing the Gantt chart scale</h3></div></div></div>
<p>Since the name of the week and months are constructed by the library it must be
possible to adjust which locale should be used to construct the names.</p>
<p>Depending on the server setup of PHP there might be support for several locales. By
default the locale is set to use the default locale on the server.</p>
<p>A specific locale is specified with the locale string, for example American English is
specified with the string 'EN_US', British English with 'EN_UK' 'nl_NL' for Dutch and so
on. If the server installation does not support the specified locale an error message
like the one shown in <a class="xref" href="ch16s04.html#fig.gantt-locale-error" title="Figure 16.89. Error message when using an unsupported Locale in Gantt chart">Figure 16.89. Error message when using an unsupported Locale in Gantt chart</a> will be shown. </p>
<p>
</p><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3>
<p>If the server is running on a Unix derivate the supported locales can be found
by the following command</p>
<p><span class="command"><strong>$> locale -a</strong></span></p>
</div><p>
</p>
<p>
</p><div class="figure"><a name="fig.gantt-locale-error"></a><p class="title"><b>Figure 16.89. Error message when using an unsupported Locale in Gantt chart</b></p><div class="figure-contents">
<div class="mediaobject"><img src="images/gantt-locale-error.png" alt="Error message when using an unsupported Locale in Gantt chart"></div>
</div></div><p><br class="figure-break">
</p>
<p>To set the locale the following method is used</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttScale::SetDateLocale($aLocaleString)</code></p>
</li></ul></div><p>
</p>
<p>For example to set the locale to swedish the following line would be needed</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$graph->scale->SetDateLocale('sv_SE');</span></pre></td></tr></table></div><p>
</p>
<p>An example of using Swedish locale is shown in <a class="xref" href="ch16s04.html#fig.ganttex19" title="Figure 16.90. Using Swedish locale. Notice the L for Lordag instead of S for Saturday (ganttex19.php)">Figure 16.90. Using Swedish locale. Notice the L for Lordag instead of S for Saturday <code class="uri"><a class="uri" href="example_src/ganttex19.html" target="_top">(<code class="filename">ganttex19.php</code>)</a></code> </a></p>
<p>
</p><div class="figure"><a name="fig.ganttex19"></a><p class="title"><b>Figure 16.90. Using Swedish locale. Notice the L for Lordag instead of S for Saturday <code class="uri"><a class="uri" href="example_src/ganttex19.html" target="_top">(<code class="filename">ganttex19.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex19.png" alt="Using Swedish locale. Notice the L for Lordag instead of S for Saturday (ganttex19.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>Internally the library uses the PHP function <code class="code">setlocale()</code> and only
affects the category <code class="code">LC_TIME</code></p>
</div><p>
</p>
</div>
<div class="sect2" title="CSIM Support in Gantt charts"><div class="titlepage"><div><div><h3 class="title"><a name="id2576896"></a>CSIM Support in Gantt charts</h3></div></div></div>
<p>The generic description on how to use CSIM (Client side image maps) together with the
library is fully described in <a class="xref" href="ch10.html" title="Chapter 10. Using CSIM (Client side image maps)">Chapter 10. <i>Using CSIM (Client side image maps)</i></a> .</p>
<div class="sect3" title="Adding CSIM (Client side Image Maps) to Gantt charts"><div class="titlepage"><div><div><h4 class="title"><a name="id2576932"></a>Adding CSIM (Client side Image Maps) to Gantt charts</h4></div></div></div>
<p>Gantt charts can have independent (different targets) hot spots in both the
activities and in the associated title (or titles) for each activity. For activities
both activity bars and milestones support CSIM functionality.</p>
<p>The targets and the associated "Alt" text for an activity bar is set by using one
or both of the methods</p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttPlotObject::SetCSIMTarget($aTarget,$aAlt='',
$aWinTarget='')</code></p>
</li><li class="listitem">
<p><code class="code">GanttPlotObject::SetCSIMAlt($aAlt)</code></p>
</li></ul></div><p>The following code snippet sets CSIM targets fro bot the entire
activity bar as well as the title</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$bar->SetCSIMTarget( "http://localhost/abc/", "Alt Text for the bar" );
$bar->title->SetCSIMTarget( "http://localhost/abc", "Alt Text for the title" );</span></pre></td></tr></table></div><p>
</p>
<p>The following properties of a Gantt object can have CSIM targets</p>
<p>
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
<p><code class="code">GanttPlotObject::title</code>, </p>
</li><li class="listitem">
<p><code class="code">GanttPlotObject::leftmark</code>,
<code class="code">BarPlot::rightmark</code></p>
</li><li class="listitem">
<p><code class="code">GanttPlotObject::caption</code></p>
</li></ul></div><p>
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>In the example directory there are several complete examples of how to use
CSIM together with Gantt charts.</p>
</div><p>
</p>
</div>
<div class="sect3" title="Specifying CSIM entries for column titles"><div class="titlepage"><div><div><h4 class="title"><a name="id2577044"></a>Specifying CSIM entries for column titles</h4></div></div></div>
<p>In exactly the same way as for a single title it is possible to specify individual
CSIM targets for each of the title columns. This is accomplished by specifying an
array for both the target and the alt text instead of a single string as arguments
for <code class="code">SetCSIMTarget()</code> The following code snippet shows how to specify
that.</p>
<p>
</p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-code">$bar->title->SetCSIMTarget(
array('sometarget1.html', 'sometarget1.html'),
array('alttext1', 'alttext2'));</span></pre></td></tr></table></div><p>
</p>
</div>
</div>
<div class="sect2" title="Some final Gantt graph examples"><div class="titlepage"><div><div><h3 class="title"><a name="id2577062"></a>Some final Gantt graph examples</h3></div></div></div>
<p>The example given below illustrates one or more of the features available for the
gantt graphs and shows how they may be combined to achive the wanted effect.</p>
<p></p>
<div class="sect3" title="Examples of using hours and minute scales"><div class="titlepage"><div><div><h4 class="title"><a name="id2577082"></a>Examples of using hours and minute scales</h4></div></div></div>
<p>
</p><div class="figure"><a name="fig.gantthourminex1"></a><p class="title"><b>Figure 16.91. Using multiple title columns with a scale of one day <code class="uri"><a class="uri" href="example_src/gantthourminex1.html" target="_top">(<code class="filename">gantthourminex1.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/gantthourminex1.png" alt="Using multiple title columns with a scale of one day (gantthourminex1.php)"></span> </div></div><p><br class="figure-break">
</p>
<p>
</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
<p>It is not possible to show less than one day in the scale. This is a
limitation of the library.</p>
</div><p>
</p>
</div>
<div class="sect3" title="Adding multiple activities with markers and indenting titles"><div class="titlepage"><div><div><h4 class="title"><a name="id2577145"></a>Adding multiple activities with markers and indenting titles</h4></div></div></div>
<p>
</p><div class="figure"><a name="fig.ganttex30"></a><p class="title"><b>Figure 16.92. Using multiple markers and indenting titles in the Gantt chart <code class="uri"><a class="uri" href="example_src/ganttex30.html" target="_top">(<code class="filename">ganttex30.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttex30.png" alt="Using multiple markers and indenting titles in the Gantt chart (ganttex30.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
<div class="sect3" title="Using grouping of bars together with constraints"><div class="titlepage"><div><div><h4 class="title"><a name="id2577161"></a>Using grouping of bars together with constraints</h4></div></div></div>
<p>
</p><div class="figure"><a name="fig.ganttconstrainex2"></a><p class="title"><b>Figure 16.93. Using a grouping bar together with constraints <code class="uri"><a class="uri" href="example_src/ganttconstrainex2.html" target="_top">(<code class="filename">ganttconstrainex2.php</code>)</a></code> </b></p><div class="figure-contents"> <span class="inlinemediaobject"><img src="images/ganttconstrainex2.png" alt="Using a grouping bar together with constraints (ganttconstrainex2.php)"></span> </div></div><p><br class="figure-break">
</p>
</div>
</div>
</div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"><a accesskey="u" href="ch16.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>