diff options
Diffstat (limited to 'kplato/kptganttview.h')
-rw-r--r-- | kplato/kptganttview.h | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/kplato/kptganttview.h b/kplato/kptganttview.h new file mode 100644 index 00000000..8a249abc --- /dev/null +++ b/kplato/kptganttview.h @@ -0,0 +1,211 @@ +/* This file is part of the KDE project + Copyright (C) 2005 Dag Andersen <[email protected]> + Copyright (C) 2006 Raphael Langerhorst <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; + version 2 of the License. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef KPTGANTTVIEW_H +#define KPTGANTTVIEW_H + +#include "kptcontext.h" + +#include <qsplitter.h> +#include <qcursor.h> + +class QLayout; +class QListViewItem; +class QPoint; +class QListView; +class QLineEdit; +class QSpinBox; + +class KDGanttViewSummaryItem; +class KDGanttViewTaskItem; +class KDGanttViewEventItem; +class KDGanttViewItem; +class KDGanttViewTaskLink; + +class KPrinter; + +namespace KPlato +{ + +class MyKDGanttView; +class TaskAppointmentsView; + +class Node; +class Task; +class Project; +class Relation; + +class GanttView : public QSplitter +{ + Q_OBJECT + + public: + + GanttView(QWidget *parent, bool readWrite=true, const char* name = 0 ); + + //~GanttView(); + + void setZoom(double zoom); + + void draw(Project &project); + void drawChanges(Project &project); + + /** + * Call draw() or drawChanges() before calling this. + */ + void drawOnPainter(QPainter* painter, const QRect rect); + + Node *currentNode() const; + + void clear(); + void print(KPrinter &prts); + + void addTaskLink(KDGanttViewTaskLink *link); + + bool exportGantt(QIODevice* device); // testing + + virtual bool setContext(Context::Ganttview &context, Project &project); + virtual void getContext(Context::Ganttview &context) const; + + void setReadWriteMode(bool on); + bool isReadWriteMode() const { return m_readWrite; } + KDGanttViewItem *currentItem() const { return m_currentItem; } + + bool showNoInformation() const { return m_showNoInformation; } + +signals: + void enableActions(bool); + void modifyRelation(Relation *rel) ; + void addRelation(Node *par, Node *child); + void modifyRelation(Relation *rel, int linkType) ; + void addRelation(Node *par, Node *child, int linkType); + void itemDoubleClicked(); + + void itemRenamed(Node*, const QString&); + + /** + * Requests a specific type of popup menu. + * Usually a KPlato::View object is connected to this signal. + */ + void requestPopupMenu(const QString& menuname, const QPoint & pos); + +public slots: + /** + * Determines the correct type of popup menu and emits requestPopupMenu() + */ + void popupMenuRequested(KDGanttViewItem * item, const QPoint & pos, int); + + void setShowExpected(bool on) { m_showExpected = on; } + void setShowOptimistic(bool on) { m_showOptimistic = on; } + void setShowPessimistic(bool on) { m_showPessimistic = on; } + void setShowResources(bool on) { m_showResources = on; } + void setShowTaskName(bool on) { m_showTaskName = on; } + void setShowTaskLinks(bool on) { m_showTaskLinks = on; } + void setShowProgress(bool on) { m_showProgress = on; } + void setShowPositiveFloat(bool on) { m_showPositiveFloat = on; } + void setShowCriticalTasks(bool on) { m_showCriticalTasks = on; } + void setShowCriticalPath(bool on) { m_showCriticalPath = on; } + void setShowNoInformation(bool on) { m_showNoInformation = on; } + void setShowAppointments(bool on) { m_showAppointments = on; } + +private slots: + void currentItemChanged(KDGanttViewItem *); + void slotItemDoubleClicked(QListViewItem*); + void slotItemRenamed(KDGanttViewItem*, int, const QString&); + + void slotLinkItems(KDGanttViewItem* from, KDGanttViewItem* to, int linkType); + + void slotGvItemClicked(KDGanttViewItem*); + + void slotModifyLink(KDGanttViewTaskLink* link); + +protected: + int linkTypeToRelation(int linkType); + void setRenameEnabled(QListViewItem *item, bool on); +private: + KDGanttViewItem *findItem(Node *node); + KDGanttViewItem *findItem(Node *node, KDGanttViewItem *item); + Node *getNode(KDGanttViewItem *item) const; + bool isDrawn(KDGanttViewItem *item); + void setDrawn(KDGanttViewItem *item, bool state); + void resetDrawn(KDGanttViewItem *_item); + void removeNotDrawn(KDGanttViewItem *_item); + void deleteItem(KDGanttViewItem *item); + KDGanttViewItem *correctType(KDGanttViewItem *item, Node *node); + void correctPosition(KDGanttViewItem *item, Node *node); + KDGanttViewItem *correctParent(KDGanttViewItem *item, Node *node); + + void updateChildren(Node *node); + void updateNode(Node *node); + + void modifyChildren(Node *node); + void modifyNode(Node *node); + void modifyProject(KDGanttViewItem *item, Node *node); + void modifySummaryTask(KDGanttViewItem *item, Task *task); + void modifyTask(KDGanttViewItem *item, Task *task); + void modifyMilestone(KDGanttViewItem *item, Task *task); + + KDGanttViewItem *addNode(KDGanttViewItem *parentItem, Node *node,KDGanttViewItem *after=0); + + KDGanttViewItem *addProject(KDGanttViewItem *parentItem, Node *node, KDGanttViewItem *after=0); + KDGanttViewItem *addSubProject(KDGanttViewItem *parentItem, Node *node, KDGanttViewItem *after=0); + KDGanttViewItem *addSummaryTask(KDGanttViewItem *parentItem, Task *task, KDGanttViewItem *after=0); + KDGanttViewItem *addTask(KDGanttViewItem *parentItem, Task *task, KDGanttViewItem *after=0); + KDGanttViewItem *addMilestone(KDGanttViewItem *parentItem, Task *task, KDGanttViewItem *after=0); + + void drawChildren(KDGanttViewItem *item, Node &node); + void drawProject(KDGanttViewItem *parentItem, Node *node); + void drawSubProject(KDGanttViewItem *parentItem, Node *node); + void drawSummaryTask(KDGanttViewItem *parentItem, Task *task); + void drawTask(KDGanttViewItem *parentItem, Task *task); + void drawMilestone(KDGanttViewItem *parentItem, Task *task); + + void drawRelations(); + void drawRelations(KDGanttViewItem *item); + void drawChildRelations(KDGanttViewItem *item); + + void getContextClosedNodes(Context::Ganttview &context, KDGanttViewItem *item) const; + +private: + bool m_readWrite; + int m_defaultFontSize; + KDGanttViewItem *m_currentItem; + MyKDGanttView *m_gantt; + TaskAppointmentsView *m_taskView; + bool m_showExpected; + bool m_showOptimistic; + bool m_showPessimistic; + bool m_showResources; + bool m_showTaskName; + bool m_showTaskLinks; + bool m_showProgress; + bool m_showPositiveFloat; + bool m_showCriticalTasks; + bool m_showCriticalPath; + bool m_showNoInformation; + bool m_showAppointments; + bool m_firstTime; + QPtrList<KDGanttViewTaskLink> m_taskLinks; + Project *m_project; +}; + +} //KPlato namespace + +#endif |