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.
212 lines
7.0 KiB
212 lines
7.0 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2005 Dag Andersen <danders@get2net.dk>
|
|
Copyright (C) 2006 Raphael Langerhorst <raphael.langerhorst@kdemail.net>
|
|
|
|
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
|