OSDN Git Service

adjust integer's signedness
[tjqt4port/tj2qt4.git] / taskjuggler / HTMLResourceReportElement.cpp
1 /*
2  * HTMLResourceReportElement.h - ResourceJuggler
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 "HTMLResourceReportElement.h"
14 #include "TableLineInfo.h"
15 #include "ExpressionTree.h"
16 #include "Operation.h"
17 #include "Project.h"
18 #include "Resource.h"
19
20 HTMLResourceReportElement::HTMLResourceReportElement(Report* r,
21                                                      const QString& df,
22                                                      int dl) :
23     HTMLReportElement(r, df, dl)
24 {
25     uint sc = r->getProject()->getMaxScenarios();
26     columns.append(new TableColumnInfo(sc, "no"));
27     columns.append(new TableColumnInfo(sc, "name"));
28     columns.append(new TableColumnInfo(sc, "start"));
29     columns.append(new TableColumnInfo(sc, "end"));
30
31     // show all resources
32     setHideResource(new ExpressionTree(new Operation(0)));
33     // hide all tasks
34     setHideTask(new ExpressionTree(new Operation(1)));
35
36     taskSortCriteria[0] = CoreAttributesList::TreeMode;
37     taskSortCriteria[1] = CoreAttributesList::StartUp;
38     taskSortCriteria[2] = CoreAttributesList::EndUp;
39     resourceSortCriteria[0] = CoreAttributesList::TreeMode;
40 }
41
42 HTMLResourceReportElement::~HTMLResourceReportElement()
43 {
44 }
45
46 bool
47 HTMLResourceReportElement::generate()
48 {
49     generateHeader();
50
51     generateTableHeader();
52
53     s() << "<tbody>" << endl;
54
55     ResourceList filteredResourceList;
56     if (!filterResourceList(filteredResourceList, 0, hideResource,
57                             rollUpResource))
58         return false;
59     sortResourceList(filteredResourceList);
60     maxDepthResourceList = filteredResourceList.maxDepth();
61
62     TaskList filteredTaskList;
63     if (!filterTaskList(filteredTaskList, 0, hideTask, rollUpTask))
64         return false;
65     maxDepthTaskList = filteredTaskList.maxDepth();
66
67     int rNo = 1;
68     for (ResourceListIterator rli(filteredResourceList); *rli != 0;
69          ++rli, ++rNo)
70     {
71         TableLineInfo tli1;
72         tli1.ca1 = tli1.resource = *rli;
73         for (uint sc = 0; sc < scenarios.count(); ++sc)
74         {
75             tli1.row = sc;
76             tli1.sc = scenarios[sc];
77             tli1.idxNo = rNo;
78             tli1.bgCol = colors.getColor("default").dark(100 + sc * 10);
79             generateLine(&tli1, sc == 0 ? 4 : 5);
80         }
81
82         /* We only want to show the nested task list for leaf resources. Leaf
83          * in this case means "task has no visible childs". */
84         bool hasVisibleChilds = false;
85         for (ResourceListIterator cli((*rli)->getSubListIterator());
86              *cli; ++cli)
87              if (filteredResourceList.findRef(*cli) >= 0)
88              {
89                  hasVisibleChilds = true;
90                  break;
91              }
92
93         if (hasVisibleChilds)
94             continue;
95
96         if (!filterTaskList(filteredTaskList, *rli, hideTask, rollUpTask))
97             return false;
98         sortTaskList(filteredTaskList);
99
100         int tNo = 1;
101         for (TaskListIterator tli(filteredTaskList); *tli != 0; ++tli, ++tNo)
102         {
103             TableLineInfo tli2;
104             tli2.ca1 = tli2.task = *tli;
105             tli2.ca2 = tli2.resource = *rli;
106             for (uint sc = 0; sc < scenarios.count(); ++sc)
107             {
108                 tli2.row = sc;
109                 tli2.sc = scenarios[sc];
110                 tli2.idxNo = tNo;
111                 tli2.bgCol = colors.getColor("default").light(120).
112                     dark(100 + sc * 10);
113                 generateLine(&tli2, sc == 0 ? 2 : 3);
114             }
115         }
116     }
117     s() << "</tbody>" << endl;
118     s() << "</table>" << endl;
119     generateFooter();
120
121     return true;
122 }
123