diff options
Diffstat (limited to 'kdgantt/KDGanttViewEventItem.cpp')
-rw-r--r-- | kdgantt/KDGanttViewEventItem.cpp | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/kdgantt/KDGanttViewEventItem.cpp b/kdgantt/KDGanttViewEventItem.cpp new file mode 100644 index 000000000..aa6e707db --- /dev/null +++ b/kdgantt/KDGanttViewEventItem.cpp @@ -0,0 +1,306 @@ +/* -*- Mode: C++ -*- + $Id$ + KDGantt - a multi-platform charting engine +*/ + +/**************************************************************************** + ** Copyright (C) 2002-2004 Klarälvdalens Datakonsult AB. All rights reserved. + ** + ** This file is part of the KDGantt library. + ** + ** This file may be distributed and/or modified under the terms of the + ** GNU General Public License version 2 as published by the Free Software + ** Foundation and appearing in the file LICENSE.GPL included in the + ** packaging of this file. + ** + ** Licensees holding valid commercial KDGantt licenses may use this file in + ** accordance with the KDGantt Commercial License Agreement provided with + ** the Software. + ** + ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + ** + ** See http://www.klaralvdalens-datakonsult.se/Public/products/ for + ** information about KDGantt Commercial License Agreements. + ** + ** Contact info@klaralvdalens-datakonsult.se if any conditions of this + ** licensing are not clear to you. + ** + ** As a special exception, permission is given to link this program + ** with any edition of Qt, and distribute the resulting executable, + ** without including the source code for Qt in the source distribution. + ** + **********************************************************************/ + + +#include "KDGanttViewEventItem.h" +#include "KDGanttViewSubwidgets.h" +#include "itemAttributeDialog.h" + +/*! + \class KDGanttViewEventItem KDGanttViewEventItem.h + An event item in a Gantt chart. + + This class represents event items in Gantt charts. +*/ + +/*! + Constructs an empty Gantt item of type event. + + \param view the Gantt view to insert this item into + \param lvtext the text to show in the list view + \param name the name by which the item can be identified. If no name + is specified, a unique name will be generated +*/ +KDGanttViewEventItem::KDGanttViewEventItem( KDGanttView* view, + const QString& lvtext, + const QString& name ) : + KDGanttViewItem( Event, view, lvtext, name ) +{ + initItem(); +} + + +/*! + Constructs an empty Gantt item of type event. + + \param parent a parent item under which this one goes + \param lvtext the text to show in the list view + \param name the name by which the item can be identified. If no name + is specified, a unique name will be generated +*/ +KDGanttViewEventItem::KDGanttViewEventItem( KDGanttViewItem* parent, + const QString& lvtext, + const QString& name ) : + KDGanttViewItem( Event, parent, lvtext, name ) +{ + initItem(); + +} + + +/*! + Constructs an empty Gantt item of type event. + + \param view the Gantt view to insert this item into + \param after another item at the same level behind which this one should go + \param lvtext the text to show in the list view + \param name the name by which the item can be identified. If no name + is specified, a unique name will be generated +*/ +KDGanttViewEventItem::KDGanttViewEventItem( KDGanttView* view, + KDGanttViewItem* after, + const QString& lvtext, + const QString& name ) : + KDGanttViewItem( Event, view, after, lvtext, name ) +{ + + initItem(); +} + + +/*! + Constructs an empty Gantt item of type event. + + \param parent a parent item under which this one goes + \param after another item at the same level behind which this one should go + \param lvtext the text to show in the list view + \param name the name by which the item can be identified. If no name + is specified, a unique name will be generated +*/ +KDGanttViewEventItem::KDGanttViewEventItem( KDGanttViewItem* parent, + KDGanttViewItem* after, + const QString& lvtext, + const QString& name ) : + KDGanttViewItem( Event, parent, after, lvtext, name ) +{ + + initItem(); +} + + +/*! + The destructor. Nothing done here. +*/ +KDGanttViewEventItem::~KDGanttViewEventItem() +{ + + +} +/*! + Specifies the start time of this item. The parameter must be valid + and non-null. If the parameter is invalid or null, no value is set. + If the start time is less than the lead time, + the lead time is set to this start time automatically. + + \param start the start time + \sa startTime() +*/ +void KDGanttViewEventItem::setStartTime( const QDateTime& start ) +{ + if (! start.isValid() ) { + qDebug("KDGanttViewEventItem::setStartTime():Invalid parameter-no time set"); + return; + } + myStartTime = start; + myEndTime = start; + if ( myStartTime < leadTime() ) + setLeadTime( myStartTime ); + else { + updateCanvasItems(); + } + +} + + +/*! + Specifies whether the event item should be shown with a lead time + line, and if yes, when the lead time starts. + If the start time is less than the lead time, + the start time is set to this lead time automatically. + + \param leadTimeStart the start time of the lead time; pass an + invalid QDateTime object in order to turn the lead time off. + \sa leadTime() +*/ + +void KDGanttViewEventItem::setLeadTime( const QDateTime& leadTimeStart ) +{ + if (!myLeadTime) myLeadTime = new QDateTime; + *myLeadTime = leadTimeStart; + if ( startTime() < leadTime() ) + setStartTime( leadTimeStart ); + else { + updateCanvasItems(); + } + +} + + +/*! + Returns whether the event item is shown with a lead time line and if + yes, when the lead time starts. + + \return if the event item is shown with a lead time line, returns + the QDateTime object representing the start of the lead time, + otherwise returns an invalid QDateTime object + \sa setLeadTime() +*/ +QDateTime KDGanttViewEventItem::leadTime() const +{ + if(myLeadTime) + return *myLeadTime; + return myStartTime; +} + + +void KDGanttViewEventItem::hideMe() +{ + startShape->hide(); + startShapeBack->hide(); + startLine->hide(); + startLineBack->hide(); + textCanvas->hide(); + floatStartShape->hide(); + floatEndShape->hide(); +} + + +void KDGanttViewEventItem::showItem(bool show, int coordY) +{ + isVisibleInGanttView = show; + invalidateHeight () ; + if (!show) { + hideMe(); + return; + } + float prio = ((float) ( priority() - 100 )) / 100.0; + startShape->setZ( prio + 0.0055 ); + startShapeBack->setZ( prio + 0.003 ); + startLine->setZ( prio + 0.0015 ); + floatStartShape->setZ(prio + 0.004); + floatStartShape->hide(); + floatEndShape->setZ(prio + 0.004); + floatEndShape->hide(); + textCanvas->setZ( prio + 0.006 ); + startLineBack->setZ( prio ); + + if ( displaySubitemsAsGroup() && firstChild() ) { + myStartTime = myChildStartTime(); + myEndTime = myChildEndTime(); + } + int startX, endX, allY; + if ( coordY ) + allY = coordY; + else + allY = getCoordY(); + startX = myGanttView->myTimeHeader->getCoordX(myStartTime); + if (myLeadTime) { + endX = myGanttView->myTimeHeader->getCoordX(*myLeadTime); + startLine->setPoints(startX,allY,endX,allY); + startLine->show(); + startLineBack->setPoints(startX+1,allY,endX-1,allY); + startLineBack->show(); + } + else { + startLine->hide(); + startLineBack->hide(); + } + startShape->move(startX,allY); + startShape->show(); + startShapeBack->move(startX,allY); + startShapeBack->show(); + if (myFloatStartTime.isValid()) { + KDCanvasRectangle* floatStartTemp = (KDCanvasRectangle*) floatStartShape; + int floatStartX = myGanttView->myTimeHeader->getCoordX(myFloatStartTime); + int hei = startShape->boundingRect().height(); + // FIXME: Configurable colors + QBrush b(startShape->brush().color(), Dense4Pattern); + floatStartTemp->setBrush(b); + floatStartTemp->setPen(QPen(gray)); + if (floatStartX < startX) { + floatStartTemp->setSize(startX - floatStartX, hei/2); + floatStartTemp->move(floatStartX, allY-hei/4); + } else { + floatStartTemp->setSize(floatStartX - startX, hei/2); + floatStartTemp->move(startX, allY-hei/4); + } + floatStartShape->show(); + } + if (myFloatEndTime.isValid()) { + KDCanvasRectangle* floatEndTemp = (KDCanvasRectangle*) floatEndShape; + int floatEndX = myGanttView->myTimeHeader->getCoordX(myFloatEndTime); + int hei = startShape->boundingRect().height(); + // FIXME: Configurable colors + QBrush b(startShape->brush().color(), Dense4Pattern); + floatEndTemp->setBrush(b); + floatEndTemp->setPen(QPen(gray)); + if (floatEndX > startX) { + floatEndTemp->setSize(floatEndX - startX, hei/2); + floatEndTemp->move(startX, allY-hei/4); + } else { + floatEndTemp->setSize(startX - floatEndX, hei/2); + floatEndTemp->move(floatEndX, allY-hei/4); + } + floatEndShape->show(); + } + + moveTextCanvas(startX,allY); + textCanvas->show(); + if (textCanvas->text().isEmpty()) + textCanvas->hide(); +} + + +void KDGanttViewEventItem::initItem() +{ + isVisibleInGanttView = false; + myLeadTime = 0; + showItem(true); + myGanttView->myTimeTable->updateMyContent(); + setDragEnabled( myGanttView->dragEnabled() ); + setDropEnabled( myGanttView->dropEnabled() ); +} + + + |