• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdepim
  • Sitemap
  • Contact Us
 

kdgantt1

KDGanttViewEventItem.cpp

Go to the documentation of this file.
00001 /* -*- Mode: C++ -*-
00002    $Id: KDGanttViewEventItem.cpp 836291 2008-07-22 04:34:42Z pradeepto $
00003    KDGantt - a multi-platform charting engine
00004 */
00005 
00006 /****************************************************************************
00007  ** Copyright (C)  2002-2004 Klarälvdalens Datakonsult AB.  All rights reserved.
00008  **
00009  ** This file is part of the KDGantt library.
00010  **
00011  ** This file may be used under the terms of the GNU General Public
00012  ** License versions 2.0 or 3.0 as published by the Free Software
00013  ** Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3
00014  ** included in the packaging of this file.  Alternatively you may (at
00015  ** your option) use any later version of the GNU General Public
00016  ** License if such license has been publicly approved by
00017  ** Klarälvdalens Datakonsult AB (or its successors, if any).
00018  ** 
00019  ** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
00020  ** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
00021  ** A PARTICULAR PURPOSE. Klarälvdalens Datakonsult AB reserves all rights
00022  ** not expressly granted herein.
00023  ** 
00024  ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00025  ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00026  **
00027  ** As a special exception, permission is given to link this program
00028  ** with any edition of Qt, and distribute the resulting executable,
00029  ** without including the source code for Qt in the source distribution.
00030  **
00031  **********************************************************************/
00032 
00033 
00034 #include "KDGanttViewSubwidgets.h"
00035 #include "KDGanttViewEventItem.h"
00036 #if QT_VERSION < 0x040000
00037 #include "itemAttributeDialog.h"
00038 #endif
00039 
00055 KDGanttViewEventItem::KDGanttViewEventItem( KDGanttView* view,
00056                                             const QString& lvtext,
00057                                             const QString& name ) :
00058     KDGanttViewItem( Event, view, lvtext, name )
00059 {
00060   initItem();
00061 }
00062 
00063 
00072 KDGanttViewEventItem::KDGanttViewEventItem( KDGanttViewItem* parent,
00073                                             const QString& lvtext,
00074                                             const QString& name ) :
00075     KDGanttViewItem( Event, parent, lvtext, name )
00076 {
00077  initItem();
00078 
00079 }
00080 
00081 
00091 KDGanttViewEventItem::KDGanttViewEventItem( KDGanttView* view,
00092                                             KDGanttViewItem* after,
00093                                             const QString& lvtext,
00094                                             const QString& name ) :
00095     KDGanttViewItem( Event, view, after, lvtext, name )
00096 {
00097 
00098   initItem();
00099 }
00100 
00101 
00111 KDGanttViewEventItem::KDGanttViewEventItem( KDGanttViewItem* parent,
00112                                             KDGanttViewItem* after,
00113                                             const QString& lvtext,
00114                                             const QString& name ) :
00115     KDGanttViewItem( Event, parent, after, lvtext, name )
00116 {
00117 
00118   initItem();
00119 }
00120 
00121 
00125 KDGanttViewEventItem::~KDGanttViewEventItem()
00126 {
00127     if ( myLeadTime ) 
00128         delete myLeadTime;
00129 }
00130 
00139 bool KDGanttViewEventItem::moveConnector( KDGanttViewItem::Connector c, QPoint p )
00140 {
00141  switch( c ) {
00142     case Start:
00143         setStartTime( myGanttView->myTimeHeader->getDateTimeForIndex( p.x() ) );
00144         return true;
00145         break;
00146     case Lead:
00147         if ( myLeadTime ) {
00148             setLeadTime( myGanttView->myTimeHeader->getDateTimeForIndex( p.x() ) );
00149             return true;
00150         }
00151         break;
00152     case Move:
00153         {
00154             int secsLead = -1;
00155             if ( myLeadTime )
00156                 secsLead = myLeadTime->secsTo( myStartTime );
00157             myStartTime = myGanttView->myTimeHeader->getDateTimeForIndex( p.x() - mCurrentConnectorDiffX );
00158             if ( secsLead >= 0 )
00159                 *myLeadTime = myStartTime.addSecs( -secsLead );
00160             setStartTime( myStartTime  );
00161             return true;
00162         }
00163         break;
00164      case TaskLinkStart:
00165      case TaskLinkEnd:
00166         // handled externally
00167         break;
00168     default:
00169         qDebug( "Unsupported connector type in KDGanttViewTaskItem::moveConnector: %d", c );
00170     }
00171 
00172     return false;
00173 
00174 }
00175 
00176 
00177 
00186 KDGanttViewItem::Connector  KDGanttViewEventItem::getConnector( QPoint p )
00187 {
00188 
00189     if (! enabled() || displaySubitemsAsGroup() )
00190         return KDGanttViewItem::NoConnector;
00191 
00192     mCurrentConnectorCoordX =  p.x();
00193     mCurrentConnectorDiffX =  int(p.x() - startShape->x());
00194 
00195     // Eventitems support: Lead, Start, Move, TaskLinkEnd
00196     QPoint topleft = startShape->boundingRect().topLeft();
00197     if ( myLeadTime ) {
00198         if ( startLine->isVisible () ) {
00199             topleft = startLine->boundingRect().topLeft();
00200             int margin = 5;
00201             int wid = startLine->boundingRect().width();
00202             if ( wid < 0 ) wid = -wid;
00203             if ( wid < 14 ) {
00204                 --margin;
00205                 if (  wid  < 10 )
00206                     --margin;
00207                 if (  wid < 8 )
00208                     --margin;
00209             } else if ( wid > 50 ) {
00210                 margin = 10;
00211             }
00212             if (  p.x() < topleft.x() + margin ) {
00213                 return KDGanttViewItem::Lead;
00214             }
00215         }
00216     }
00217     QRect boundingRect = QRect(topleft, startShape->boundingRect().bottomRight() );
00218     if ( boundingRect.contains( p ) ) {
00219         int c = 0;
00220         bool start = myGanttView->isConnectorEnabled(KDGanttViewItem::Start);
00221         if ( start ) {
00222             c++;
00223         }
00224         bool move = myGanttView->isConnectorEnabled(KDGanttViewItem::Move);
00225         if ( move ) {
00226             c++;
00227         }
00228         bool linkEnd = myGanttView->isConnectorEnabled(KDGanttViewItem::TaskLinkEnd);
00229         if ( linkEnd ) {
00230             c++;
00231         }
00232         int wid = startShape->boundingRect().width();
00233         if (wid < 0) wid = -wid;
00234         int margin = wid / c;
00235         if (margin == 0 && start) {
00236             c--;
00237             start = false;
00238             margin = wid / c;
00239         }
00240         if (margin == 0 && move) {
00241             c--;
00242             move = false;
00243             margin = wid / c;
00244         }
00245         if (start &&  mCurrentConnectorCoordX <= boundingRect.left() + margin ) {
00246             return KDGanttViewItem::Start;
00247         }
00248         if (move &&  mCurrentConnectorCoordX <= boundingRect.left() + margin + margin ) {
00249             return KDGanttViewItem::Move;
00250         }
00251         if (linkEnd &&  mCurrentConnectorCoordX >= boundingRect.right() - margin ) {
00252             return KDGanttViewItem::TaskLinkEnd;
00253         }
00254     }
00255     return KDGanttViewItem::NoConnector;
00256 }
00257 
00258 KDGanttViewItem::Connector KDGanttViewEventItem::getConnector( QPoint p, bool linkMode )
00259 {
00260     if ( !linkMode ) {
00261         return getConnector( p );
00262     }
00263     if ( startShape->boundingRect().contains( p ) ) {
00264         return KDGanttViewItem::TaskLinkStart;
00265     }
00266     return KDGanttViewItem::NoConnector; // shouldn't happen
00267 }
00268 
00279 void KDGanttViewEventItem::setStartTime( const QDateTime& start )
00280 {
00281   if (! start.isValid() ) {
00282     qDebug("KDGanttViewEventItem::setStartTime():Invalid parameter-no time set");
00283     return;
00284   }
00285     myStartTime = start;
00286     myEndTime = start; // Avoid dangling endtime
00287     if ( myStartTime < leadTime() )
00288       setLeadTime( myStartTime );
00289     else {
00290       updateCanvasItems();
00291     }
00292 
00293 }
00294 
00295 
00307 void KDGanttViewEventItem::setLeadTime( const QDateTime& leadTimeStart )
00308 {
00309   if (!myLeadTime) myLeadTime = new QDateTime;
00310   *myLeadTime =  leadTimeStart;
00311   if ( startTime() < leadTime() )
00312       setStartTime( leadTimeStart );
00313   else {
00314     updateCanvasItems();
00315   }
00316 
00317 }
00318 
00319 
00329 QDateTime KDGanttViewEventItem::leadTime() const
00330 {
00331   if(myLeadTime)
00332     return *myLeadTime;
00333   return myStartTime;
00334 }
00335 
00336 
00337 void KDGanttViewEventItem::hideMe()
00338 {
00339     startShape->hide();
00340     startShapeBack->hide();
00341     startLine->hide();
00342     startLineBack->hide();
00343     if ( mTextCanvas )
00344         mTextCanvas->hide();
00345 
00346     floatStartShape->hide();
00347     floatEndShape->hide();
00348 }
00349 
00350 
00351 void KDGanttViewEventItem::showItem(bool show, int coordY)
00352 {
00353   isVisibleInGanttView = show;
00354     mCurrentCoord_Y = coordY;
00355   invalidateHeight () ;
00356   if (!show) {
00357     hideMe();
00358     return;
00359   }
00360   float prio = ((float) ( priority() - 100 )) / 100.0;
00361   startShape->setZ( prio + 0.0055 );
00362   startShapeBack->setZ( prio + 0.003 ); // less than mTextCanvas
00363   startLine->setZ( prio + 0.0015  );
00364   floatStartShape->setZ(prio - 0.003); // less than startShape
00365   floatStartShape->hide();
00366   floatEndShape->setZ(prio - 0.003); // less than startShape
00367   floatEndShape->hide();
00368   if ( mTextCanvas )
00369       mTextCanvas->setZ( prio + 0.006 );
00370   startLineBack->setZ( prio );
00371   if ( displaySubitemsAsGroup() ) {
00372       myStartTime = myChildStartTime();
00373       myEndTime = myChildEndTime();
00374   }
00375   if ( !myStartTime.isValid() || !myEndTime.isValid() ) {
00376       hideMe();
00377       return;
00378   }
00379   int startX, endX, allY;
00380   if ( coordY )
00381     allY = coordY;
00382   else
00383     allY = getCoordY();
00384   startX = myGanttView->myTimeHeader->getCoordX(myStartTime);
00385   if (myLeadTime) {
00386     checkCoord( &startX );
00387     endX = myGanttView->myTimeHeader->getCoordX(*myLeadTime);
00388     checkCoord( &endX );
00389     startLine->setPoints(startX,allY,endX,allY);
00390     startLine->show();
00391     startLineBack->setPoints(startX+1,allY,endX-1,allY);
00392     startLineBack->show();
00393   }
00394   else {
00395     startLine->hide();
00396     startLineBack->hide();
00397   }
00398   startShape->move(startX,allY);
00399   startShape->show();
00400   startShapeBack->move(startX,allY);
00401   startShapeBack->show();
00402 
00403   if (myFloatStartTime.isValid()) {
00404       KDCanvasRectangle* floatStartTemp = (KDCanvasRectangle*) floatStartShape;
00405       int floatStartX = myGanttView->myTimeHeader->getCoordX(myFloatStartTime);
00406       int hei = startShape->boundingRect().height();
00407       // FIXME: Configurable colors
00408       QBrush b(startShape->brush().color(), Qt::Dense4Pattern);
00409       floatStartTemp->setBrush(b);
00410       floatStartTemp->setPen(QPen(Qt::gray));
00411       if (floatStartX < startX) {
00412           floatStartTemp->setSize(startX - floatStartX, hei/2);
00413           floatStartTemp->move(floatStartX, allY-hei/4);
00414       } else {
00415           floatStartTemp->setSize(floatStartX - startX, hei/2);
00416           floatStartTemp->move(startX, allY-hei/4);
00417       }
00418       floatStartShape->show();    
00419   }
00420   if (myFloatEndTime.isValid()) {
00421       KDCanvasRectangle* floatEndTemp = (KDCanvasRectangle*) floatEndShape;
00422       int floatEndX = myGanttView->myTimeHeader->getCoordX(myFloatEndTime);
00423       int hei = startShape->boundingRect().height();
00424       // FIXME: Configurable colors
00425       QBrush b(startShape->brush().color(), Qt::Dense4Pattern);
00426       floatEndTemp->setBrush(b);
00427       floatEndTemp->setPen(QPen(Qt::gray));
00428       if (floatEndX > startX) {
00429           floatEndTemp->setSize(floatEndX - startX, hei/2);
00430           floatEndTemp->move(startX, allY-hei/4);
00431       } else {
00432           floatEndTemp->setSize(startX - floatEndX, hei/2);
00433           floatEndTemp->move(floatEndX, allY-hei/4);
00434       }
00435       floatEndShape->show();    
00436   }
00437 
00438   if ( mTextCanvas ) {
00439       mTextCanvas->move(startX+2*myItemSize,allY-myItemSize/2 );
00440       mTextCanvas->show();
00441       if (mTextCanvas->text().isEmpty())
00442           mTextCanvas->hide();
00443   }
00444 }
00445 
00446 
00447 void KDGanttViewEventItem::initItem()
00448 {
00449   isVisibleInGanttView = false;
00450   myLeadTime = 0;
00451   showItem(true);
00452   myGanttView->myTimeTable->updateMyContent();
00453   setDragEnabled( myGanttView->dragEnabled() );
00454   setDropEnabled( myGanttView->dropEnabled() );
00455 }
00456 
00457 
00458 

kdgantt1

Skip menu "kdgantt1"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdepim

Skip menu "kdepim"
  • akonadi
  •   clients
  •   kabc
  •   kcal
  •   kcm
  • akregator
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt
  • kdgantt1
  • kjots
  • kleopatra
  • kmail
  • kmobiletools
  • knode
  • knotes
  • kontact
  • kontactinterfaces
  • korganizer
  •   korgac
  • kpilot
  • ktimetracker
  • libkdepim
  • libkholidays
  • libkleo
  • libkpgp
  • maildir
Generated for kdepim by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal