kplato

kptproject.h

00001 /* This file is part of the KDE project
00002    Copyright (C) 2001 Thomas Zander zander@kde.org
00003    Copyright (C) 2004, 2005 Dag Andersen <danders@get2net.dk>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #ifndef KPTPROJECT_H
00022 #define KPTPROJECT_H
00023 
00024 #include "kptnode.h"
00025 
00026 #include "kptaccount.h"
00027 #include "kptcalendar.h"
00028 #include "kptdatetime.h"
00029 #include "kptduration.h"
00030 #include "kptresource.h"
00031 
00032 #include <qmap.h>
00033 #include <qptrlist.h>
00034 #include <qdict.h>
00035 
00036 #include <klistview.h>
00037 #include <klocale.h>
00038 
00039 namespace KPlato
00040 {
00041 
00042 class Part;
00043 class Schedule;
00044 class StandardWorktime;
00045 
00046 //#define DEBUGPERT
00052 class Project : public Node {
00053 public:
00054     Project(Node *parent = 0);
00055     ~Project();
00056 
00058     virtual int type() const;
00059 
00065     void calculate(Schedule *scedule);
00071     void calculate(Effort::Use use);
00073     void calculate();
00074      
00075     virtual bool calcCriticalPath(bool fromEnd);
00076     
00077     virtual DateTime startTime() const;
00078     virtual DateTime endTime() const;
00079 
00081     Duration *getExpectedDuration();
00082 
00088     Duration *getRandomDuration();
00089 
00090     virtual bool load(QDomElement &element);
00091     virtual void save(QDomElement &element) const;
00092 
00093     QPtrList<ResourceGroup> &resourceGroups();
00094     virtual void addResourceGroup(ResourceGroup *resource);
00095     virtual void insertResourceGroup(unsigned int index, ResourceGroup *resource);
00096     void removeResourceGroup(ResourceGroup *resource);
00097     void removeResourceGroup(int number);
00098     ResourceGroup *takeResourceGroup(ResourceGroup *resource)
00099         { return m_resourceGroups.take(m_resourceGroups.findRef(resource)); }
00100 
00101     bool addTask( Node* task, Node* position );
00102     bool addSubTask( Node* task, Node* position );
00103     bool canIndentTask(Node* node);
00104     bool indentTask( Node* node );
00105     bool canUnindentTask( Node* node );
00106     bool unindentTask( Node* node );
00107     bool canMoveTaskUp( Node* node );
00108     bool moveTaskUp( Node* node );
00109     bool canMoveTaskDown( Node* node );
00110     bool moveTaskDown( Node* node );
00111     Task *createTask(Node* parent);
00112     Task *createTask(Task &def, Node* parent);
00113     
00115     ResourceGroup *group(QString id);
00117     Resource *resource(QString id);
00118 
00119     virtual EffortCostMap plannedEffortCostPrDay(const QDate &start, const QDate &end) const;
00120     
00122     virtual Duration plannedEffort();
00124     virtual Duration plannedEffort(const QDate &date);
00126     virtual Duration plannedEffortTo(const QDate &date);
00127     
00129     virtual Duration actualEffort();
00131     virtual Duration actualEffort(const QDate &date);
00133     virtual Duration actualEffortTo(const QDate &date);
00137     virtual double plannedCost();
00139     virtual double plannedCost(const QDate &date);
00141     virtual double plannedCostTo(const QDate &date);
00142     
00146     virtual double actualCost();
00148     virtual double actualCost(const QDate &date);
00150     virtual double actualCostTo(const QDate &date);
00151 
00152     Calendar *defaultCalendar() { return m_defaultCalendar; }
00153     QPtrList<Calendar> calendars();
00154     void addCalendar(Calendar *calendar);
00156     Calendar *calendar(const QString id) const;
00157 
00163     StandardWorktime *standardWorktime() { return m_standardWorktime; }
00164     void setStandardWorktime(StandardWorktime * worktime);
00165     void setDefaultCalendar(Calendar *cal);
00166 
00168     bool legalToLink(Node *par, Node *child);
00169     
00170     virtual const QDict<Node> &nodeDict() { return nodeIdDict; }
00171     
00173     virtual Node *findNode(const QString &id) const 
00174         { return (m_parent ? m_parent->findNode(id) : nodeIdDict.find(id)); }
00176     virtual bool removeId(const QString &id);
00178     virtual void insertId(const QString &id, const Node *node);
00179     QString uniqueNodeId(int seed=1);
00180     
00181     ResourceGroup *findResourceGroup(const QString &id) const 
00182         { return resourceGroupIdDict.find(id); }
00184     bool removeResourceGroupId(const QString &id) 
00185         { return resourceGroupIdDict.remove(id); }
00187     void insertResourceGroupId(const QString &id, const ResourceGroup* group) 
00188         { resourceGroupIdDict.insert(id, group); }
00189     
00190     Resource *findResource(const QString &id) const 
00191         { return resourceIdDict.find(id); }
00193     bool removeResourceId(const QString &id) 
00194         { return resourceIdDict.remove(id); }
00196     void insertResourceId(const QString &id, const Resource *resource) 
00197         { resourceIdDict.insert(id, resource); }
00198 
00200     virtual Calendar *findCalendar(const QString &id) const 
00201         { return id.isEmpty() ? 0 : calendarIdDict.find(id); }
00203     virtual bool removeCalendarId(const QString &id);
00205     virtual void insertCalendarId(const QString &id, const Calendar *calendar);
00206     
00211     void setBaselined(bool on) { m_baselined = on; }
00215     bool isBaselined() const { return m_baselined; }
00216     
00217     void generateWBS(int count, WBSDefinition &def, QString wbs=QString());
00218 
00219     Accounts &accounts() { return m_accounts; }
00220     
00222     virtual void setCurrentSchedule(long id);
00224     MainSchedule *createSchedule(QString name, Schedule::Type type);
00226     virtual void setParentSchedule(Schedule *sch);
00227     
00228 protected:
00229     Accounts m_accounts;
00230     QPtrList<ResourceGroup> m_resourceGroups;
00231 
00232     Calendar *m_defaultCalendar;
00233     QPtrList<Calendar> m_calendars;
00234 
00235     StandardWorktime *m_standardWorktime;
00236         
00237     DateTime calculateForward(int use);
00238     DateTime calculateBackward(int use);
00239     DateTime scheduleForward(const DateTime &earliest, int use);
00240     DateTime scheduleBackward(const DateTime &latest, int use);
00241     void adjustSummarytask();
00242 
00243     void initiateCalculation(Schedule &sch);
00244     void initiateCalculationLists(QPtrList<Node> &startnodes, QPtrList<Node> &endnodes, QPtrList<Node> &summarytasks);
00245 
00246     bool legalParents(Node *par, Node *child);
00247     bool legalChildren(Node *par, Node *child);
00248     
00249 private:
00250     void init();
00251     
00252     QPtrList<Node> m_startNodes;
00253     QPtrList<Node> m_endNodes;
00254     QPtrList<Node> m_summarytasks;
00255     
00256     bool m_baselined;
00257     
00258     QDict<ResourceGroup> resourceGroupIdDict;
00259     QDict<Resource> resourceIdDict;
00260     QDict<Node> nodeIdDict;        
00261     QDict<Calendar> calendarIdDict;
00262     
00263 #ifndef NDEBUG
00264 #include <qcstring.h>
00265 public:
00266     void printDebug(bool children, QCString indent);
00267     void printCalendarDebug(QCString indent="");
00268 #ifdef DEBUGPERT
00269     static void pert_test();
00270     static void printTree(Node *n, QString s);
00271 #endif
00272 #endif
00273 };
00274 
00275 }  //KPlato namespace
00276 
00277 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys