summaryrefslogtreecommitdiffstats
path: root/kplato/kptcanvasitem.h
diff options
context:
space:
mode:
Diffstat (limited to 'kplato/kptcanvasitem.h')
-rw-r--r--kplato/kptcanvasitem.h288
1 files changed, 288 insertions, 0 deletions
diff --git a/kplato/kptcanvasitem.h b/kplato/kptcanvasitem.h
new file mode 100644
index 00000000..fdd5891e
--- /dev/null
+++ b/kplato/kptcanvasitem.h
@@ -0,0 +1,288 @@
+/* This file is part of the KDE project
+ Copyright (C) 2003 - 2004 Dag Andersen <danders@get2net.dk>
+
+ 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 KPTCANVASITEM_H
+#define KPTCANVASITEM_H
+
+#include "kptnode.h"
+#include "KDGanttView.h"
+#include "KDGanttViewItem.h"
+#include "KDGanttViewSummaryItem.h"
+#include "KDGanttViewTaskItem.h"
+#include "KDGanttViewEventItem.h"
+
+#include <qcanvas.h>
+#include <qrect.h>
+
+class QPainter;
+
+namespace KPlato
+{
+
+class Task;
+class Relation;
+class PertCanvas;
+class PertRelationItem;
+class PertNodeItem;
+class GanttView;
+
+class PertNodeItem : public QCanvasPolygon
+{
+private:
+ class PertNodeRelation
+ {
+ public:
+ PertNodeRelation(Relation *r, PertNodeItem *n) { relation = r; childItem = n; }
+ ~PertNodeRelation() {}
+ Relation *relation;
+ PertNodeItem * childItem;
+ };
+
+public:
+ PertNodeItem( PertCanvas *view, Node &node, int row, int col );
+ virtual ~PertNodeItem();
+
+ virtual int rtti() const;
+ static int RTTI;
+
+ void setVisible(bool yes);
+ void move(PertCanvas *view, int row, int col);
+
+ QPoint exitPoint(Relation::Type type) const;
+ QPoint entryPoint(Relation::Type type) const;
+
+ Node &node() const { return m_node; }
+
+ QRect rect() const { return QRect(m_left, m_right); }
+ void setRow(int row) { m_row = row; }
+ int row() const { return m_row; }
+ void setColumn(int col) { m_col = col; }
+ int column() const { return m_col; }
+ int x() const { return m_x; }
+ int x(int col) const { return m_wgap + col*(m_width+m_wgap); }
+ int y() const { return m_y; }
+ int y(int row) const { return m_hgap + row*(m_height+m_hgap); }
+ int width() const { return m_width; }
+ int height() const { return m_height; }
+
+ void addChildRelation(Relation *relation, PertNodeItem *node)
+ { m_childRelations.append(new PertNodeRelation(relation, node)); }
+
+ bool hasParent() { return m_node.numDependParentNodes(); }
+ bool hasChild() { return m_node.numDependChildNodes(); }
+
+protected:
+ void drawShape(QPainter & p);
+
+ int m_wgap;
+ int m_hgap;
+ int m_width;
+ int m_height;
+ int m_x;
+ int m_y;
+
+ QPtrList<PertNodeRelation> m_childRelations;
+
+private:
+ Node &m_node;
+ int m_row, m_col;
+ QPoint m_right; // Entry/exit point
+ QPoint m_left; // Entry/exit point
+ QCanvasText *m_name;
+ QCanvasText *m_leader;
+
+#ifndef NDEBUG
+ void printDebug( int );
+#endif
+
+};
+
+class PertProjectItem : public PertNodeItem
+{
+public:
+ PertProjectItem( PertCanvas *view, Node &node, int row=-1, int col=-1 );
+ virtual ~PertProjectItem();
+
+ virtual int rtti() const;
+ static int RTTI;
+
+#ifndef NDEBUG
+ void printDebug( int );
+#endif
+
+};
+
+class PertTaskItem : public PertNodeItem
+{
+public:
+ PertTaskItem( PertCanvas *view, Node &node, int row=-1, int col=-1 );
+ virtual ~PertTaskItem();
+
+ virtual int rtti() const;
+ static int RTTI;
+
+#ifndef NDEBUG
+ void printDebug( int );
+#endif
+
+};
+
+class PertMilestoneItem : public PertNodeItem
+{
+public:
+ PertMilestoneItem( PertCanvas *view, Node &node, int row=-1, int col=-1 );
+ virtual ~PertMilestoneItem();
+
+ virtual int rtti() const;
+ static int RTTI;
+
+ void draw();
+
+#ifndef NDEBUG
+ void printDebug( int );
+#endif
+
+};
+
+///////////////// PertRelationItem ////////////////////
+
+class PertRelationItem : public QCanvasPolygon
+{
+public:
+ PertRelationItem(PertCanvas *view, PertNodeItem *parent, PertNodeItem *child, Relation *rel);
+ virtual ~PertRelationItem();
+
+ virtual int rtti() const;
+ static int RTTI;
+
+ Relation::Type type() { return m_rel->type(); }
+ void draw();
+
+ void setFinishStartPoints();
+ void setFinishFinishPoints();
+ void setStartStartPoints();
+ QPointArray areaPoints() const;
+
+ bool rowFree(int row, int startCol, int endCol);
+
+protected:
+ void drawShape(QPainter &p);
+
+private:
+ PertCanvas *m_view;
+ Relation *m_rel;
+ PertNodeItem *m_parentItem;
+ PertNodeItem *m_childItem;
+ int left, top, right, bottom;
+
+ int parentTop;
+ int parentBottom;
+ int childTop;
+
+ int childRow;
+ int childCol;
+ int parentRow;
+ int parentCol;
+
+ int wgap;
+ int hgap;
+
+
+#ifndef NDEBUG
+ void printDebug( int );
+#endif
+
+};
+
+class ItemBase
+{
+protected:
+ KDGanttViewTaskLink::LinkType kdLinkType(int relationType);
+};
+
+
+///////////////// GanttViewSummaryItem ////////////////////
+
+class GanttViewSummaryItem : public KDGanttViewSummaryItem, public ItemBase
+{
+public:
+ GanttViewSummaryItem(KDGanttView *parent, Node *node);
+ GanttViewSummaryItem(KDGanttViewItem *parent, Node *node);
+
+ Node *getNode() { return m_node; }
+ void insertRelations(GanttView *view);
+ KDGanttViewItem *find(Node *node);
+ KDGanttViewItem *find(KDGanttViewItem *item, Node *node);
+ KDGanttView *ganttView() const { return m_view; }
+ bool isDrawn() const { return m_drawn; }
+ void setDrawn(bool drawn) { m_drawn = drawn; }
+
+protected:
+ Node *m_node; // can be Project or Task
+ KDGanttView *m_view;
+ bool m_drawn;
+};
+
+///////////////// GanttViewTaskItem ////////////////////
+
+class GanttViewTaskItem : public KDGanttViewTaskItem, public ItemBase
+{
+public:
+ GanttViewTaskItem(KDGanttView *parent, KPlato::Task *task);
+ GanttViewTaskItem(KDGanttViewItem *parent, KPlato::Task *task);
+
+ KPlato::Task *getTask() const { return m_task; }
+ void insertRelations(GanttView *view);
+ KDGanttViewItem *find(Node *node);
+ KDGanttViewItem *find(KDGanttViewItem *item, Node *node);
+ KDGanttView *ganttView() const { return m_view; }
+ bool isDrawn() const { return m_drawn; }
+ void setDrawn(bool drawn) { m_drawn = drawn; }
+
+protected:
+ KPlato::Task *m_task;
+ KDGanttView *m_view;
+ bool m_drawn;
+};
+
+///////////////// GanttViewEventItem ////////////////////
+
+class GanttViewEventItem : public KDGanttViewEventItem, public ItemBase
+{
+public:
+ GanttViewEventItem(KDGanttView *parent, KPlato::Task *task);
+ GanttViewEventItem(KDGanttViewItem *parent, KPlato::Task *task);
+
+ KPlato::Task *getTask() { return m_task; }
+ void insertRelations(GanttView *view);
+ KDGanttViewItem *find(Node *node);
+ KDGanttViewItem *find(KDGanttViewItem *item, Node *node);
+ KDGanttView *ganttView() const { return m_view; }
+ bool isDrawn() const { return m_drawn; }
+ void setDrawn(bool drawn) { m_drawn = drawn; }
+
+protected:
+ KPlato::Task *m_task;
+ KDGanttView *m_view;
+ bool m_drawn;
+};
+
+} //KPlato namespace
+
+#endif