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) 
00177         { return (m_parent ? m_parent->removeId(id) : nodeIdDict.remove(id)); }
00179     virtual void insertId(const QString &id, const Node *node)
00180         { m_parent ? m_parent->insertId(id, node) : nodeIdDict.insert(id, node); }
00181     QString uniqueNodeId(int seed=1);
00182     
00183     ResourceGroup *findResourceGroup(const QString &id) const 
00184         { return resourceGroupIdDict.find(id); }
00186     bool removeResourceGroupId(const QString &id) 
00187         { return resourceGroupIdDict.remove(id); }
00189     void insertResourceGroupId(const QString &id, const ResourceGroup* group) 
00190         { resourceGroupIdDict.insert(id, group); }
00191     
00192     Resource *findResource(const QString &id) const 
00193         { return resourceIdDict.find(id); }
00195     bool removeResourceId(const QString &id) 
00196         { return resourceIdDict.remove(id); }
00198     void insertResourceId(const QString &id, const Resource *resource) 
00199         { resourceIdDict.insert(id, resource); }
00200 
00202     virtual Calendar *findCalendar(const QString &id) const 
00203         { return id.isEmpty() ? 0 : calendarIdDict.find(id); }
00205     virtual bool removeCalendarId(const QString &id) 
00206         { return calendarIdDict.remove(id); }
00208     virtual void insertCalendarId(const QString &id, const Calendar *calendar)
00209         { calendarIdDict.insert(id, calendar); }
00210     
00215     void setBaselined(bool on) { m_baselined = on; }
00219     bool isBaselined() const { return m_baselined; }
00220     
00221     void generateWBS(int count, WBSDefinition &def, QString wbs=QString());
00222 
00223     Accounts &accounts() { return m_accounts; }
00224     
00226     virtual void setCurrentSchedule(long id);
00228     MainSchedule *createSchedule(QString name, Schedule::Type type);
00230     virtual void setParentSchedule(Schedule *sch);
00231     
00232 protected:
00233     Accounts m_accounts;
00234     QPtrList<ResourceGroup> m_resourceGroups;
00235 
00236     Calendar *m_defaultCalendar;
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