You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/kplato/kptcanvasitem.h

289 lines
6.9 KiB

/* 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