OSDN Git Service

Automatically align underspecified tasks boundaries on project boundaries when possible.
[tjqt4port/tj2qt4.git] / taskjuggler / HTMLTaskReportElement.cpp
1 /*
2  * HTMLTaskReportElement.h - TaskJuggler
3  *
4  * Copyright (c) 2001, 2002, 2003, 2004 by Chris Schlaeger <cs@kde.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of version 2 of the GNU General Public License as
8  * published by the Free Software Foundation.
9  *
10  * $Id$
11  */
12
13 #include "HTMLTaskReportElement.h"
14 #include "TableLineInfo.h"
15 #include "ExpressionTree.h"
16 #include "Operation.h"
17 #include "Project.h"
18 #include "Resource.h"
19
20 HTMLTaskReportElement::HTMLTaskReportElement(Report* r, const QString& df,
21                                              int dl) :
22     HTMLReportElement(r, df, dl)
23 {
24     int sc = r->getProject()->getMaxScenarios();
25     columns.append(new TableColumnInfo(sc, "no"));
26     columns.append(new TableColumnInfo(sc, "name"));
27     columns.append(new TableColumnInfo(sc, "start"));
28     columns.append(new TableColumnInfo(sc, "end"));
29
30     // show all tasks
31     setHideTask(new ExpressionTree(new Operation(0)));
32     // hide all resources
33     setHideResource(new ExpressionTree(new Operation(1)));
34
35     taskSortCriteria[0] = CoreAttributesList::TreeMode;
36     taskSortCriteria[1] = CoreAttributesList::StartUp;
37     taskSortCriteria[2] = CoreAttributesList::EndUp;
38     resourceSortCriteria[0] = CoreAttributesList::TreeMode;
39 }
40
41 HTMLTaskReportElement::~HTMLTaskReportElement()
42 {
43 }
44
45 bool
46 HTMLTaskReportElement::generate()
47 {
48     generateHeader();
49     
50     generateTableHeader();
51
52     s() << " <tbody>" << endl;
53
54     TaskList filteredTaskList;
55     if (!filterTaskList(filteredTaskList, 0, getHideTask(), getRollUpTask()))
56         return false;
57     sortTaskList(filteredTaskList);
58     maxDepthTaskList = filteredTaskList.maxDepth();
59
60     ResourceList filteredResourceList;
61     if (!filterResourceList(filteredResourceList, 0, getHideResource(),
62                        getRollUpResource()))
63         return false;
64     maxDepthResourceList = filteredResourceList.maxDepth();
65     
66     int tNo = 1;
67     for (TaskListIterator tli(filteredTaskList); *tli != 0; ++tli, ++tNo)
68     {
69         TableLineInfo tli1;
70         tli1.ca1 = *tli;
71         tli1.task = *tli;
72         for (uint sc = 0; sc < scenarios.count(); ++sc)
73         {
74             tli1.row = sc;
75             tli1.sc = scenarios[sc];
76             tli1.idxNo = tNo;
77             tli1.bgCol = colors.getColor("default").dark(100 + sc * 10);
78             generateLine(&tli1, sc == 0 ? 2 : 3);
79         }
80
81         if (!filterResourceList(filteredResourceList, *tli, 
82                                 getHideResource(), getRollUpResource()))
83             return false;
84         sortResourceList(filteredResourceList);
85         int rNo = 1;
86         for (ResourceListIterator rli(filteredResourceList); *rli != 0; 
87              ++rli, ++rNo)
88         {
89             TableLineInfo tli2;
90             tli2.ca1 = tli2.resource = *rli;
91             tli2.ca2 = tli2.task = *tli;
92             for (uint sc = 0; sc < scenarios.count(); ++sc)
93             {
94                 tli2.row = sc;
95                 tli2.sc = scenarios[sc];
96                 tli2.idxNo = rNo;
97                 tli2.bgCol = colors.getColor("default").light(120).
98                     dark(100 + sc * 10);
99                 generateLine(&tli2, sc == 0 ? 4 : 5);
100             }
101         }
102     }
103     s() << " </tbody>" << endl;
104     s() << "</table>" << endl;
105
106     generateFooter();
107
108     return true;
109 }
110