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 - 2006 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 addSubTask( Node* task, int index, Node* parent );
00104     void delTask(Node *node);
00105     bool canIndentTask(Node* node);
00106     bool indentTask( Node* node );
00107     bool canUnindentTask( Node* node );
00108     bool unindentTask( Node* node );
00109     bool canMoveTaskUp( Node* node );
00110     bool moveTaskUp( Node* node );
00111     bool canMoveTaskDown( Node* node );
00112     bool moveTaskDown( Node* node );
00113     Task *createTask(Node* parent);
00114     Task *createTask(Task &def, Node* parent);
00115     
00117     ResourceGroup *group(QString id);
00119     Resource *resource(QString id);
00120 
00121     virtual EffortCostMap plannedEffortCostPrDay(const QDate &start, const QDate &end) const;
00122     
00124     virtual Duration plannedEffort();
00126     virtual Duration plannedEffort(const QDate &date);
00128     virtual Duration plannedEffortTo(const QDate &date);
00129     
00131     virtual Duration actualEffort();
00133     virtual Duration actualEffort(const QDate &date);
00135     virtual Duration actualEffortTo(const QDate &date);
00139     virtual double plannedCost();
00141     virtual double plannedCost(const QDate &date);
00143     virtual double plannedCostTo(const QDate &date);
00144     
00148     virtual double actualCost();
00150     virtual double actualCost(const QDate &date);
00152     virtual double actualCostTo(const QDate &date);
00153 
00154     Calendar *defaultCalendar() { return m_standardWorktime->calendar(); }
00155     QPtrList<Calendar> calendars();
00156     void addCalendar(Calendar *calendar);
00158     Calendar *calendar(const QString id) const;
00159 
00166     StandardWorktime *standardWorktime() { return m_standardWorktime; }
00167     void setStandardWorktime(StandardWorktime * worktime);
00168 
00170     bool legalToLink(Node *par, Node *child);
00171     
00172     virtual const QDict<Node> &nodeDict() { return nodeIdDict; }
00173     
00175     virtual Node *findNode(const QString &id) const 
00176         { return (m_parent ? m_parent->findNode(id) : nodeIdDict.find(id)); }
00178     virtual bool removeId(const QString &id);
00180     virtual void insertId(const QString &id, const Node *node);
00182     bool registerNodeId(Node *node);
00184     QString uniqueNodeId(int seed=1);
00185     
00186     ResourceGroup *findResourceGroup(const QString &id) const 
00187         { return resourceGroupIdDict.find(id); }
00189     bool removeResourceGroupId(const QString &id) 
00190         { return resourceGroupIdDict.remove(id); }
00192     void insertResourceGroupId(const QString &id, const ResourceGroup* group) 
00193         { resourceGroupIdDict.insert(id, group); }
00194     
00195     Resource *findResource(const QString &id) const 
00196         { return resourceIdDict.find(id); }
00198     bool removeResourceId(const QString &id) 
00199         { return resourceIdDict.remove(id); }
00201     void insertResourceId(const QString &id, const Resource *resource) 
00202         { resourceIdDict.insert(id, resource); }
00203 
00205     virtual Calendar *findCalendar(const QString &id) const 
00206         { return id.isEmpty() ? 0 : calendarIdDict.find(id); }
00208     virtual bool removeCalendarId(const QString &id);
00210     virtual void insertCalendarId(const QString &id, const Calendar *calendar);
00211     
00216     void setBaselined(bool on) { m_baselined = on; }
00220     bool isBaselined() const { return m_baselined; }
00221     
00222     void generateWBS(int count, WBSDefinition &def, QString wbs=QString());
00223 
00224     Accounts &accounts() { return m_accounts; }
00225     
00227     virtual void setCurrentSchedule(long id);
00229     MainSchedule *createSchedule(QString name, Schedule::Type type);
00231     virtual void setParentSchedule(Schedule *sch);
00232     
00233 protected:
00234     Accounts m_accounts;
00235     QPtrList<ResourceGroup> m_resourceGroups;
00236 
00237     QPtrList<Calendar> m_calendars;
00238 
00239     StandardWorktime *m_standardWorktime;
00240         
00241     DateTime calculateForward(int use);
00242     DateTime calculateBackward(int use);
00243     DateTime scheduleForward(const DateTime &earliest, int use);
00244     DateTime scheduleBackward(const DateTime &latest, int use);
00245     void adjustSummarytask();
00246 
00247     void initiateCalculation(Schedule &sch);
00248     void initiateCalculationLists(QPtrList<Node> &startnodes, QPtrList<Node> &endnodes, QPtrList<Node> &summarytasks);
00249 
00250     bool legalParents(Node *par, Node *child);
00251     bool legalChildren(Node *par, Node *child);
00252     
00253 private:
00254     void init();
00255     
00256     QPtrList<Node> m_startNodes;
00257     QPtrList<Node> m_endNodes;
00258     QPtrList<Node> m_summarytasks;
00259     
00260     bool m_baselined;
00261     
00262     QDict<ResourceGroup> resourceGroupIdDict;
00263     QDict<Resource> resourceIdDict;
00264     QDict<Node> nodeIdDict;        
00265     QDict<Calendar> calendarIdDict;
00266     
00267 #ifndef NDEBUG
00268 #include <qcstring.h>
00269 public:
00270     void printDebug(bool children, QCString indent);
00271     void printCalendarDebug(QCString indent="");
00272 #ifdef DEBUGPERT
00273     static void pert_test();
00274     static void printTree(Node *n, QString s);
00275 #endif
00276 #endif
00277 };
00278 
00279 }  //KPlato namespace
00280 
00281 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys