00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "KDGanttViewSubwidgets.h"
00037 #include "KDGanttViewTaskItem.h"
00038 #include "KDGanttViewSummaryItem.h"
00039 #include "KDGanttViewEventItem.h"
00040 #include "itemAttributeDialog.h"
00041
00042 #include "qpainter.h"
00043
00044 #include "KDGanttXMLTools.h"
00045
00046
00160 QDict<KDGanttViewItem> KDGanttViewItem::sItemDict;
00161
00171 KDGanttViewItem::KDGanttViewItem( Type type, KDGanttView* view,
00172 const QString& lvtext,
00173 const QString& name ) :
00174 QListViewItem(view->myListView,lvtext)
00175 {
00176 initColorAndShapes(type);
00177 generateAndInsertName( name );
00178 }
00179
00180
00191 KDGanttViewItem::KDGanttViewItem( Type type, KDGanttViewItem* parentItem,
00192 const QString& lvtext,
00193 const QString& name ) :
00194 QListViewItem(parentItem,lvtext)
00195 {
00196 initColorAndShapes(type);
00197 generateAndInsertName( name );
00198 }
00199
00200
00212 KDGanttViewItem::KDGanttViewItem( Type type, KDGanttView* view,
00213 KDGanttViewItem* after,
00214 const QString& lvtext,
00215 const QString& name ) :
00216 QListViewItem(view->myListView,after, lvtext)
00217 {
00218 initColorAndShapes(type);
00219 generateAndInsertName( name );
00220 }
00221
00222
00234 KDGanttViewItem::KDGanttViewItem( Type type, KDGanttViewItem* parentItem,
00235 KDGanttViewItem* after,
00236 const QString& lvtext,
00237 const QString& name ) :
00238 QListViewItem( parentItem, after, lvtext )
00239 {
00240 initColorAndShapes(type);
00241 generateAndInsertName( name );
00242 }
00243
00244
00248 KDGanttViewItem::~KDGanttViewItem()
00249 {
00250 myGanttView->notifyEditdialog( this );
00251 if ( startLine ) delete startLine;
00252 if ( endLine ) delete endLine ;
00253 if ( startLineBack ) delete startLineBack ;
00254 if ( endLineBack ) delete endLineBack ;
00255 if ( actualEnd ) delete actualEnd ;
00256 if ( textCanvas ) delete textCanvas ;
00257 if ( startShape ) delete startShape ;
00258 if ( midShape ) delete midShape ;
00259 if ( endShape ) delete endShape ;
00260 if ( startShapeBack ) delete startShapeBack ;
00261 if ( midShapeBack ) delete midShapeBack ;
00262 if ( endShapeBack ) delete endShapeBack ;
00263 if ( progressShape ) delete progressShape ;
00264 if ( floatStartShape ) delete floatStartShape ;
00265 if ( floatEndShape ) delete floatEndShape ;
00266 myGanttView->myTimeTable->removeItemFromTasklinks( this );
00267 myGanttView->myCanvasView->resetCutPaste( this );
00268 if ( listView() ) {
00269 if ( isOpen() )
00270 setOpen( false );
00271 if ( parent() )
00272 parent()->takeItem( this );
00273 else
00274 myGanttView->myListView->takeItem( this );
00275 myGanttView->myTimeTable->updateMyContent();
00276 }
00277
00278
00279 }
00280
00281
00286 void KDGanttViewItem::generateAndInsertName( const QString& name )
00287 {
00288
00289
00290 if( !_name.isEmpty() )
00291
00292 sItemDict.remove( _name );
00293
00294 QString newName;
00295 if ( name.isEmpty() || sItemDict.find( name ) ) {
00296
00297 newName.sprintf( "%p", (void* )this );
00298 while( sItemDict.find( newName ) ) {
00299 newName += "_0";
00300 }
00301 } else {
00302 newName = name;
00303 }
00304 sItemDict.insert( newName, this );
00305 _name = newName;
00306 }
00307
00308
00314 QString KDGanttViewItem::name() const
00315 {
00316 return _name;
00317 }
00318
00319
00328 KDGanttViewItem* KDGanttViewItem::find( const QString& name )
00329 {
00330 if (name.isEmpty())
00331 return 0;
00332 return sItemDict.find( name );
00333 }
00334
00335
00336
00344 KDGanttViewItem::Type KDGanttViewItem::type() const
00345 {
00346
00347 return myType;
00348 }
00349
00350
00362 void KDGanttViewItem::setEnabled( bool on )
00363 {
00364 _enabled = on;
00365 if ( displaySubitemsAsGroup() ) {
00366 myGanttView->myTimeTable->inc_blockUpdating();
00367 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
00368 while (temp != 0) {
00369 temp->setEnabled( on );
00370 temp = temp->nextSibling();
00371 }
00372 QListViewItem::setEnabled( on );
00373 myGanttView->myTimeTable->dec_blockUpdating();
00374 }
00375 updateCanvasItems();
00376 }
00377
00378
00385 bool KDGanttViewItem::enabled () const
00386 {
00387 return _enabled;
00388 }
00389
00390
00391
00398 void KDGanttViewItem::setItemVisible( bool on )
00399 {
00400 if ( on ) {
00401 resetSubitemVisibility();
00402 } else
00403 setVisible( false );
00404
00405 myGanttView->myTimeTable->updateMyContent();
00406 }
00407
00408
00415 bool KDGanttViewItem::itemVisible () const
00416 {
00417 return QListViewItem::isVisible();
00418 }
00419
00420
00421
00422
00430 void KDGanttViewItem::setEditable( bool editable )
00431 {
00432 isEditable = editable;
00433 }
00434
00435
00443 bool KDGanttViewItem::editable() const
00444 {
00445 return isEditable;
00446 }
00447
00448
00461 void KDGanttViewItem::setDisplaySubitemsAsGroup( bool show )
00462 {
00463 if ( !show && _displaySubitemsAsGroup)
00464 isVisibleInGanttView = true;
00465 _displaySubitemsAsGroup = show;
00466 if ( parent() )
00467 if ( parent()->isOpen() )
00468 parent()->setOpen( true );
00469 if ( isOpen() )
00470 setOpen( true );
00471 updateCanvasItems();
00472 }
00473
00474
00482 bool KDGanttViewItem::displaySubitemsAsGroup() const
00483 {
00484 return _displaySubitemsAsGroup;
00485 }
00486
00487
00507 void KDGanttViewItem::setPriority( int prio )
00508 {
00509 if ( prio < 1 )
00510 prio = 1;
00511 if (prio > 199 )
00512 prio = 199;
00513 _priority = prio;
00514 updateCanvasItems();
00515 }
00516
00517
00523 int KDGanttViewItem::priority()
00524 {
00525 return _priority;
00526 }
00527
00528
00537 void KDGanttViewItem::setStartTime( const QDateTime& )
00538 {
00539 }
00540
00541
00548 QDateTime KDGanttViewItem::startTime() const
00549 {
00550 return myStartTime;
00551 }
00552
00553
00562 void KDGanttViewItem::setEndTime( const QDateTime& end )
00563 {
00564 switch( type() ) {
00565 case Event:
00566 qDebug( "KDGantt:Event Item has no end time" );
00567 break;
00568 case Summary:
00569 ((KDGanttViewSummaryItem*)this)->setEndTime( end );
00570 break;
00571 case Task:
00572 qDebug( "KDGantt:Task Item has no end time" );
00573 break;
00574 default:
00575 qDebug( "Unknown type in KDGanttViewItem::typeToString()" );
00576 }
00577 }
00578
00579
00586 QDateTime KDGanttViewItem::endTime() const
00587 {
00588 return myEndTime;
00589 }
00590
00591
00603 void KDGanttViewItem::setText( const QString& text )
00604 {
00605 textCanvas->setText(text);
00606 textCanvasText = text;
00607 updateCanvasItems();
00608 }
00609
00610
00618 QString KDGanttViewItem::text() const
00619 {
00620 return textCanvasText;
00621 }
00622
00623
00627 void KDGanttViewItem::setListViewText( const QString& text, int column )
00628 {
00629 QListViewItem::setText( column, text );
00630 }
00631
00632
00640 void KDGanttViewItem::setListViewText( int column, const QString& text )
00641 {
00642 QListViewItem::setText( column, text );
00643 }
00644
00645
00654 QString KDGanttViewItem::listViewText( int column ) const
00655 {
00656 return QListViewItem::text( column );
00657 }
00658
00659
00666 void KDGanttViewItem::setFont( const QFont& font )
00667 {
00668 textCanvas->setFont(font);
00669 updateCanvasItems();
00670 }
00671
00672
00679 QFont KDGanttViewItem::font() const
00680 {
00681 return textCanvas->font();
00682 }
00683
00684
00691 void KDGanttViewItem::setTooltipText( const QString& text )
00692 {
00693 myToolTipText = text;
00694 }
00695
00696
00703 QString KDGanttViewItem::tooltipText() const
00704 {
00705
00706 return myToolTipText;
00707 }
00708
00709
00716 void KDGanttViewItem::setWhatsThisText( const QString& text )
00717 {
00718 myWhatsThisText = text;
00719 }
00720
00721
00729 QString KDGanttViewItem::whatsThisText() const
00730 {
00731 return myWhatsThisText;
00732 }
00733
00734
00746 void KDGanttViewItem::setHighlight( bool highlight )
00747 {
00748 isHighlighted = highlight;
00749 if ( displaySubitemsAsGroup() ) {
00750 myGanttView->myTimeTable->inc_blockUpdating();
00751 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
00752 while (temp != 0) {
00753 temp->setHighlight( highlight );
00754 temp = temp->nextSibling();
00755 }
00756 myGanttView->myTimeTable->dec_blockUpdating();
00757 }
00758 updateCanvasItems();
00759 }
00760
00761
00769 bool KDGanttViewItem::highlight() const
00770 {
00771 return isHighlighted;
00772 }
00773
00774
00787 void KDGanttViewItem::setShapes( Shape start, Shape middle, Shape end )
00788 {
00789
00790 myStartShape = start;
00791 myMiddleShape= middle;
00792 myEndShape= end;
00793 createShape(startShape,startShapeBack,start);
00794 createShape(midShape,midShapeBack,middle);
00795 midShape->setZ( 4 );
00796 createShape(endShape,endShapeBack,end);
00797 updateCanvasItems();
00798 }
00799
00800
00813 void KDGanttViewItem::createShape( KDCanvasPolygonItem* &itemShape,
00814 KDCanvasPolygonItem* &itemShapeBack,
00815 Shape shape )
00816 {
00817 if ( itemShape && type() == Task )
00818 return;
00819 if (itemShape) delete itemShape;
00820 if (itemShapeBack) delete itemShapeBack;
00821
00822 QCanvasPolygonalItem * item;
00823 QCanvasPolygonalItem * itemBack;
00824 int size = myItemSize+2;
00825 int hei = (myItemSize/3)/2;
00826 switch (shape) {
00827 case TriangleDown:
00828 {
00829 item = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00830 QPointArray arr = QPointArray(3);
00831 arr.setPoint(0,-size/2,-hei);
00832 arr.setPoint(1,size/2,-hei);
00833 arr.setPoint(2,0,((size/2)-hei));
00834 ((QCanvasPolygon*)item)->setPoints(arr);
00835 size += 4;hei +=1;
00836 itemBack = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00837 arr.setPoint(0,-size/2,-hei);
00838 arr.setPoint(1,size/2,-hei);
00839 arr.setPoint(2,0,((size/2)-hei));
00840 ((QCanvasPolygon*)itemBack)->setPoints(arr);
00841
00842 break;
00843 }
00844 case TriangleUp:
00845 {
00846
00847
00848 size+=2;
00849 item = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00850 QPointArray arr = QPointArray(3);
00851 arr.setPoint(0,-size/2,hei);
00852 arr.setPoint(1,size/2,hei);
00853 arr.setPoint(2,0,(-size/2)+hei);
00854 ((QCanvasPolygon*)item)->setPoints(arr);
00855 size += 4;hei +=1;
00856 itemBack = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00857 arr.setPoint(0,-size/2,hei);
00858 arr.setPoint(1,size/2,hei);
00859 arr.setPoint(2,0,(-size/2)+hei);
00860 ((QCanvasPolygon*)itemBack)->setPoints(arr);
00861
00862 break;
00863 }
00864
00865 case Diamond:
00866 {
00867 item = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00868 QPointArray arr = QPointArray(4);
00869 arr.setPoint(0,0,-size/2);
00870 arr.setPoint(1,size/2,0);
00871 arr.setPoint(2,0,size/2);
00872 arr.setPoint(3,-size/2,0);
00873 ((QCanvasPolygon*)item)->setPoints(arr);
00874 size += 2;hei +=1;
00875 itemBack = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00876 arr.setPoint(0,0,-size/2);
00877 arr.setPoint(1,size/2,0);
00878 arr.setPoint(2,0,size/2);
00879 arr.setPoint(3,-size/2,0);
00880 ((QCanvasPolygon*)itemBack)->setPoints(arr);
00881 break;
00882 }
00883
00884 case Square:
00885 {
00886 size -=2;
00887 item = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00888 QPointArray arr = QPointArray(4);
00889 arr.setPoint(0,-size/2,-size/2);
00890 arr.setPoint(1,size/2,-size/2);
00891 arr.setPoint(2,size/2,size/2);
00892 arr.setPoint(3,-size/2,size/2);
00893 ((QCanvasPolygon*)item)->setPoints(arr);
00894 size += 2;hei +=1;
00895 itemBack = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00896 arr.setPoint(0,-size/2,-size/2);
00897 arr.setPoint(1,size/2,-size/2);
00898 arr.setPoint(2,size/2,size/2);
00899 arr.setPoint(3,-size/2,size/2);
00900 ((QCanvasPolygon*)itemBack)->setPoints(arr);
00901 break;
00902 }
00903
00904 case Circle:
00905 {
00906 size -= 2;
00907 item = new KDCanvasEllipse(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00908 ((KDCanvasEllipse*)item)->setSize(size,size);
00909 size += 2;hei +=1;
00910 itemBack = new KDCanvasEllipse(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
00911 ((KDCanvasEllipse*)itemBack)->setSize(size,size);
00912 break;
00913 }
00914 default:
00915
00916
00917 return;
00918 }
00919 item->setBrush(Qt::SolidPattern);
00920 item->setZ(5);
00921 itemShape = (KDCanvasPolygonItem*) item;
00922 itemBack->setBrush(Qt::SolidPattern);
00923 itemBack->setZ(3);
00924 itemShapeBack = (KDCanvasPolygonItem*) itemBack;
00925
00926 }
00927
00928
00937 void KDGanttViewItem::shapes( Shape& start, Shape& middle, Shape& end ) const
00938 {
00939 start = myStartShape;
00940 middle = myMiddleShape;
00941 end = myEndShape;
00942 }
00943
00944
00957 void KDGanttViewItem::setColors( const QColor& start, const QColor& middle,
00958 const QColor& end )
00959 {
00960
00961 myStartColor=start ;
00962 myMiddleColor= middle;
00963 myEndColor= end;
00964 if ( displaySubitemsAsGroup() ) {
00965 myGanttView->myTimeTable->inc_blockUpdating();
00966 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
00967 while (temp != 0) {
00968 temp->setColors( start, middle, end );
00969 temp = temp->nextSibling();
00970 }
00971 myGanttView->myTimeTable->dec_blockUpdating();
00972 }
00973 updateCanvasItems();
00974 }
00975
00976
00985 void KDGanttViewItem::colors( QColor& start, QColor& middle, QColor& end ) const
00986 {
00987 start = myStartColor ;
00988 middle = myMiddleColor;
00989 end = myEndColor;
00990
00991 }
00992
00993
01011 void KDGanttViewItem::setHighlightColors( const QColor& start, const QColor& middle, const QColor& end )
01012 {
01013 myStartColorHL=start ;
01014 myMiddleColorHL= middle;
01015 myEndColorHL= end;
01016 if ( displaySubitemsAsGroup() ) {
01017 myGanttView->myTimeTable->inc_blockUpdating();
01018 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
01019 while (temp != 0) {
01020 temp->setHighlightColors( start, middle, end );
01021 temp = temp->nextSibling();
01022 }
01023 myGanttView->myTimeTable->dec_blockUpdating();
01024 }
01025 updateCanvasItems();
01026 }
01027
01028
01037 void KDGanttViewItem::highlightColors( QColor& start, QColor& middle, QColor& end ) const
01038 {
01039 start = myStartColorHL ;
01040 middle = myMiddleColorHL;
01041 end = myEndColorHL;
01042 }
01043
01044
01057 void KDGanttViewItem::setTextColor( const QColor& color )
01058 {
01059
01060 myTextColor = color;
01061 if ( displaySubitemsAsGroup() ) {
01062 myGanttView->myTimeTable->inc_blockUpdating();
01063 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
01064 while (temp != 0) {
01065 temp->setTextColor(color);
01066 temp = temp->nextSibling();
01067 }
01068 myGanttView->myTimeTable->dec_blockUpdating();
01069 }
01070 updateCanvasItems();
01071 }
01072
01073
01080 QColor KDGanttViewItem::textColor() const
01081 {
01082 return myTextColor;
01083 }
01084
01085
01108 void KDGanttViewItem::setPixmap( int column, const QPixmap& pixmap )
01109 {
01110 QListViewItem::setPixmap( column, pixmap );
01111 }
01112
01116 void KDGanttViewItem::setPixmap( const QPixmap& pixmap )
01117 {
01118 QListViewItem::setPixmap( 0, pixmap );
01119 }
01120
01121
01129 const QPixmap* KDGanttViewItem::pixmap( int column ) const
01130 {
01131 return QListViewItem::pixmap( column );
01132 }
01133
01134
01150 void KDGanttViewItem::setDefaultColor( const QColor& color )
01151 {
01152 myDefaultColor = color;
01153
01154
01155 if ( displaySubitemsAsGroup() ) {
01156 myGanttView->myTimeTable->inc_blockUpdating();
01157 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
01158 while (temp != 0) {
01159 temp->setDefaultColor( color );
01160 temp = temp->nextSibling();
01161 }
01162 myGanttView->myTimeTable->dec_blockUpdating();
01163 }
01164 updateCanvasItems();
01165 }
01166
01167
01168
01176 QColor KDGanttViewItem::defaultColor() const
01177 {
01178 return myDefaultColor;
01179 }
01180
01181
01197 void KDGanttViewItem::setDefaultHighlightColor( const QColor& color )
01198 {
01199 myDefaultColorHL = color;
01200 if ( displaySubitemsAsGroup() ) {
01201 myGanttView->myTimeTable->inc_blockUpdating();
01202 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
01203 while (temp != 0) {
01204 temp->setDefaultHighlightColor( color );
01205 temp = temp->nextSibling();
01206 }
01207 myGanttView->myTimeTable->dec_blockUpdating();
01208 }
01209 updateCanvasItems();
01210 }
01211
01212
01220 QColor KDGanttViewItem::defaultHighlightColor() const
01221 {
01222 return myDefaultColorHL;
01223 }
01224
01225
01231 KDGanttViewItem* KDGanttViewItem::firstChild() const
01232 {
01233
01234 return (KDGanttViewItem* )QListViewItem::firstChild();
01235 }
01236
01237
01244 KDGanttViewItem* KDGanttViewItem::nextSibling() const
01245 {
01246 return (KDGanttViewItem* )QListViewItem::nextSibling();
01247 }
01248
01249
01256 KDGanttViewItem* KDGanttViewItem::parent() const
01257 {
01258 return (KDGanttViewItem*)QListViewItem::parent();
01259 }
01260
01261
01267 KDGanttViewItem* KDGanttViewItem::itemAbove()
01268 {
01269 return (KDGanttViewItem* )QListViewItem::itemAbove();
01270 }
01271
01272
01281 KDGanttViewItem* KDGanttViewItem::itemBelow( bool includeDisabled )
01282 {
01283
01284 KDGanttViewItem* retItem = (KDGanttViewItem* )QListViewItem::itemBelow();
01285 if ( !includeDisabled ) {
01286 return retItem;
01287 }
01288 if ( retItem ) {
01289 if (itemPos() + height() == retItem->itemPos() ) {
01290 return retItem;
01291 }
01292 }
01293 KDGanttViewItem* Item2 = (KDGanttViewItem* )QListViewItem::listView()->itemAt(QPoint (2, QListViewItem::itemPos() + QListViewItem::height() +2) );
01294 if ( Item2 != 0 )
01295 if (!Item2->enabled() )
01296 return Item2;
01297 return retItem;
01298 }
01299
01300
01304 void KDGanttViewItem::updateCanvasItems()
01305 {
01306 if (blockUpdating) return;
01307 QPen p,pBack;
01308 QBrush b;
01309 b.setStyle(Qt::SolidPattern);
01310 if ( enabled() ) {
01311 textCanvas->setColor(myTextColor);
01312 if (isHighlighted) {
01313 b.setStyle(Qt::SolidPattern);
01314 b.setColor(myStartColorHL);
01315 startShape->setBrush(b);
01316 b.setColor(myMiddleColorHL);
01317 midShape->setBrush(b);
01318 b.setColor(myEndColorHL);
01319 endShape->setBrush(b);
01320 p.setWidth(myItemSize/3 -1);
01321 p.setColor(myStartColorHL);
01322 startLine->setPen(p);
01323 p.setColor(myEndColorHL);
01324 endLine->setPen(p);
01325 } else {
01326 b.setStyle(Qt::SolidPattern);
01327 b.setColor(myStartColor);
01328
01329 startShape->setBrush(b);
01330 b.setColor(myMiddleColor);
01331 midShape->setBrush(b);
01332 b.setColor(myEndColor);
01333 endShape->setBrush(b);
01334 p.setWidth(myItemSize/3-1);
01335 p.setColor(myStartColor);
01336 startLine->setPen(p);
01337 p.setColor(myEndColor);
01338 endLine->setPen(p);
01339 }
01340 } else {
01341
01342 QColor discol = QColor(232,232,232);
01343 textCanvas->setColor( QColor(150,150,150) );
01344 b.setStyle(Qt::SolidPattern);
01345 b.setColor(discol);
01346 startShape->setBrush(b);
01347 midShape->setBrush(b);
01348 endShape->setBrush(b);
01349 p.setWidth(myItemSize/3 -1);
01350 p.setColor(discol);
01351 startLine->setPen(p);
01352 endLine->setPen(p);
01353 }
01354 pBack.setWidth((myItemSize/3-1)+2);
01355 startLineBack->setPen(pBack);
01356 endLineBack->setPen(pBack);
01357 QFont f = textCanvas->font();
01358 f.setPixelSize(myItemSize);
01359 textCanvas->setFont(f);
01360
01361 myGanttView->myTimeTable->updateMyContent();
01362
01363 }
01364
01365
01366 void KDGanttViewItem::initItem()
01367 {
01368 }
01369
01370
01374 void KDGanttViewItem::setOpen( bool open )
01375 {
01376 if ( _callListViewOnSetOpen ) {
01377
01378 if ( listView () )
01379 listView ()->setOpen( this, open );
01380
01381 } else {
01382
01383 QListViewItem::setOpen( open );
01384 }
01385 }
01386
01387
01388 void KDGanttViewItem::showItem( bool, int )
01389 {
01390 }
01391
01392
01393 QPoint KDGanttViewItem::getTaskLinkStartCoord(QPoint p)
01394 {
01395 textCanvas->move(p.x()+myItemSize, itemPos() + height()/2-myItemSize/2);
01396 return QPoint (myGanttView->myTimeHeader->getCoordX(myEndTime) +myItemSize/2,itemPos()+height()/2);
01397 }
01398
01399
01400 QPoint KDGanttViewItem::getTaskLinkEndCoord()
01401 {
01402 return QPoint (myGanttView->myTimeHeader->getCoordX(myStartTime)-myItemSize/2 ,itemPos()-myItemSize/2+height()/2-2);
01403 }
01404
01405
01406 void KDGanttViewItem::hideSubtree()
01407 {
01408 if (firstChild())
01409 firstChild()->hideSubtree();
01410 if ( nextSibling () )
01411 nextSibling ()->hideSubtree();
01412 showItem(false);
01413 }
01414
01415
01416 void KDGanttViewItem::setCallListViewOnSetOpen( bool call )
01417 {
01418 _callListViewOnSetOpen = call;
01419 }
01420
01421
01422 void KDGanttViewItem::initColorAndShapes(Type t)
01423 {
01424 setTextOffset(QPoint(0,0));
01425
01426 _callListViewOnSetOpen = true;
01427 myType = t;
01428 myProgress = 0;
01429 progressShape = 0;
01430 floatStartShape = 0;
01431 floatEndShape = 0;
01432 blockUpdating = true;
01433 isVisibleInGanttView = false;
01434 startShape = 0;
01435 midShape = 0;
01436 endShape = 0;
01437 startShapeBack = 0;
01438 midShapeBack = 0;
01439 endShapeBack = 0;
01440
01441 myItemSize = 10;
01442 myGanttView = ((KDListView *)listView())->myGanttView;
01443 myGanttView->myTimeHeader->saveCenterDateTime();
01444 myStartTime = myGanttView->myTimeHeader->myCenterDateTime;
01445 myEndTime = myStartTime;
01446 myToolTipText =QListViewItem::text(0);
01447 myWhatsThisText = QListViewItem::text(0);
01448 isHighlighted = false;
01449 isEditable = true;
01450 _displaySubitemsAsGroup = myGanttView->displaySubitemsAsGroup();
01451 startLine = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01452 endLine = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01453 startLine->setZ(2);endLine->setZ(2);
01454 startLineBack = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01455 endLineBack = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01456 startLineBack->setZ(1);endLineBack->setZ(1);
01457 actualEnd = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01458 actualEnd->setZ(5);
01459 actualEnd->setPen( QPen ( Qt::red, 3 ) );
01460
01461 textCanvas = new KDCanvasText(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01462 textCanvas->setText("");
01463 textCanvas->setZ(10);
01464
01465 setTextColor( myGanttView->textColor());
01466
01467 setDefaultColor( myGanttView->defaultColor(myType));
01468
01469 setDefaultHighlightColor(myGanttView->defaultHighlightColor(myType));
01470
01471 if (!( shapeDefined = (myGanttView->shapes(myType,myStartShape,myMiddleShape,myEndShape)))) {
01472
01473
01474 };
01475
01476 setShapes(myStartShape,myMiddleShape,myEndShape);
01477 if ( type() == Task ) {
01478
01479 if ( startShape )
01480 delete startShape;
01481 startShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01482 progressShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01483 }
01484 floatStartShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01485 floatEndShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01486
01487
01488 if (!( colorDefined = (myGanttView->colors(myType,myStartColor,myMiddleColor,myEndColor)))) {
01489
01490 };
01491 setColors(defaultColor(),defaultColor(), defaultColor());
01492
01493 if (!( colorHLDefined = (myGanttView->highlightColors(myType,myStartColorHL,myMiddleColorHL,myEndColorHL)))) {
01494
01495 };
01496 setHighlightColors(defaultHighlightColor(),defaultHighlightColor(), defaultHighlightColor());
01497 setFont(myGanttView->font());
01498
01499
01500
01501 _priority = 150;
01502 _showNoInformation = false;
01503 _enabled = true;
01504 blockUpdating = false;
01505 updateCanvasItems();
01506 }
01507
01508
01509 QString KDGanttViewItem::shapeToString( Shape shape )
01510 {
01511 switch( shape ) {
01512 case TriangleDown:
01513 return "TriangleDown";
01514 case TriangleUp:
01515 return "TriangleUp";
01516 case Diamond:
01517 return "Diamond";
01518 case Square:
01519 return "Square";
01520 case Circle:
01521 return "Circle";
01522 }
01523 return "";
01524 }
01525
01526
01527 KDGanttViewItem::Shape KDGanttViewItem::stringToShape( const QString& string )
01528 {
01529 if( string == "TriangleDown" )
01530 return TriangleDown;
01531 else if( string == "TriangleUp" )
01532 return TriangleUp;
01533 else if( string == "Diamond" )
01534 return Diamond;
01535 else if( string == "Square" )
01536 return Square;
01537 else if( string == "Circle" )
01538 return Circle;
01539 else
01540 return TriangleDown;
01541 }
01542
01543
01550 void KDGanttViewItem::createNode( QDomDocument& doc,
01551 QDomElement& parentElement )
01552 {
01553 QDomElement itemElement = doc.createElement( "Item" );
01554 parentElement.appendChild( itemElement );
01555 itemElement.setAttribute( "Type", typeToString( type() ) );
01556
01557 KDGanttXML::createDateTimeNode( doc, itemElement, "StartTime", startTime() );
01558 KDGanttXML::createDateTimeNode( doc, itemElement, "EndTime", endTime() );
01559 KDGanttXML::createFontNode( doc, itemElement, "Font", font() );
01560 KDGanttXML::createStringNode( doc, itemElement, "Text", text() );
01561 KDGanttXML::createStringNode( doc, itemElement, "TooltipText", tooltipText() );
01562 KDGanttXML::createStringNode( doc, itemElement, "WhatsThisText",
01563 whatsThisText() );
01564 if( pixmap() )
01565 KDGanttXML::createPixmapNode( doc, itemElement, "Pixmap", *pixmap() );
01566 if( !listViewText().isNull() )
01567 KDGanttXML::createStringNode( doc, itemElement, "ListViewText",
01568 listViewText() );
01569 KDGanttXML::createBoolNode( doc, itemElement, "Open", isOpen() );
01570 KDGanttXML::createBoolNode( doc, itemElement, "Highlight", highlight() );
01571 Shape startShape, middleShape, endShape;
01572 shapes( startShape, middleShape, endShape );
01573 KDGanttXML::createStringNode( doc, itemElement, "StartShape",
01574 shapeToString( startShape ) );
01575 KDGanttXML::createStringNode( doc, itemElement, "MiddleShape",
01576 shapeToString( middleShape ) );
01577 KDGanttXML::createStringNode( doc, itemElement, "EndShape",
01578 shapeToString( endShape ) );
01579 KDGanttXML::createColorNode( doc, itemElement, "DefaultColor", defaultColor() );
01580 QColor startColor, middleColor, endColor;
01581 colors( startColor, middleColor, endColor );
01582 KDGanttXML::createColorNode( doc, itemElement, "StartColor", startColor );
01583 KDGanttXML::createColorNode( doc, itemElement, "MiddleColor", middleColor );
01584 KDGanttXML::createColorNode( doc, itemElement, "EndColor", endColor );
01585 KDGanttXML::createColorNode( doc, itemElement, "DefaultHighlightColor",
01586 defaultHighlightColor() );
01587 highlightColors( startColor, middleColor, endColor );
01588 KDGanttXML::createColorNode( doc, itemElement, "StartHighlightColor",
01589 startColor );
01590 KDGanttXML::createColorNode( doc, itemElement, "MiddleHighlightColor",
01591 middleColor );
01592 KDGanttXML::createColorNode( doc, itemElement, "EndHighlightColor", endColor );
01593 KDGanttXML::createColorNode( doc, itemElement, "TextColor", textColor() );
01594 KDGanttXML::createStringNode( doc, itemElement, "Name", name() );
01595 QDomElement itemsElement = doc.createElement( "Items" );
01596 itemElement.appendChild( itemsElement );
01597 KDGanttViewItem* currentItem = firstChild();
01598 while( currentItem ) {
01599 currentItem->createNode( doc, itemsElement );
01600 currentItem = currentItem->nextSibling();
01601 }
01602
01603 }
01604
01605
01606
01615 KDGanttViewItem* KDGanttViewItem::createFromDomElement( KDGanttView* view,
01616 QDomElement& element )
01617 {
01618 QString typeString = element.attribute( "Type" );
01619 Q_ASSERT( !typeString.isEmpty() );
01620 KDGanttViewItem* item;
01621 if( typeString == "Task" )
01622 item = new KDGanttViewTaskItem( view );
01623 else if( typeString == "Summary" )
01624 item = new KDGanttViewSummaryItem( view );
01625 else if( typeString == "Event" )
01626 item = new KDGanttViewEventItem( view );
01627 else {
01628 qDebug( "Unknown item type %s in KDGanttViewItem::createFromDomElement()", typeString.latin1() );
01629 return 0;
01630 }
01631
01632 item->loadFromDomElement( element );
01633 return item;
01634 }
01635
01636
01646 KDGanttViewItem* KDGanttViewItem::createFromDomElement( KDGanttView* view,
01647 KDGanttViewItem* previous,
01648 QDomElement& element )
01649 {
01650 QString typeString = element.attribute( "Type" );
01651 Q_ASSERT( !typeString.isEmpty() );
01652 KDGanttViewItem* item;
01653 if( typeString == "Task" )
01654 item = new KDGanttViewTaskItem( view, previous );
01655 else if( typeString == "Summary" )
01656 item = new KDGanttViewSummaryItem( view, previous );
01657 else if( typeString == "Event" )
01658 item = new KDGanttViewEventItem( view, previous );
01659 else {
01660 qDebug( "Unknown item type in KDGanttViewItem::createFromDomElement()" );
01661 return 0;
01662 }
01663
01664 item->loadFromDomElement( element );
01665 return item;
01666 }
01667
01668
01669
01670
01679 KDGanttViewItem* KDGanttViewItem::createFromDomElement( KDGanttViewItem* parent,
01680 QDomElement& element )
01681 {
01682 QString typeString = element.attribute( "Type" );
01683 Q_ASSERT( !typeString.isEmpty() );
01684 KDGanttViewItem* item;
01685 if( typeString == "Task" )
01686 item = new KDGanttViewTaskItem( parent );
01687 else if( typeString == "Summary" )
01688 item = new KDGanttViewSummaryItem( parent );
01689 else if( typeString == "Event" )
01690 item = new KDGanttViewEventItem( parent );
01691 else {
01692 qDebug( "Unknown item type in KDGanttViewItem::createFromDomElement()" );
01693 return 0;
01694 }
01695
01696 item->loadFromDomElement( element );
01697 return item;
01698 }
01699
01700
01710 KDGanttViewItem* KDGanttViewItem::createFromDomElement( KDGanttViewItem* parent,
01711 KDGanttViewItem* previous,
01712 QDomElement& element )
01713 {
01714 QString typeString = element.attribute( "Type" );
01715 Q_ASSERT( !typeString.isEmpty() );
01716 KDGanttViewItem* item;
01717 if( typeString == "Task" )
01718 item = new KDGanttViewTaskItem( parent, previous );
01719 else if( typeString == "Summary" )
01720 item = new KDGanttViewSummaryItem( parent, previous );
01721 else if( typeString == "Event" )
01722 item = new KDGanttViewEventItem( parent, previous );
01723 else {
01724 qDebug( "Unknown item type in KDGanttViewItem::createFromDomElement()" );
01725 return 0;
01726 }
01727
01728 item->loadFromDomElement( element );
01729 return item;
01730 }
01731
01732
01733
01734
01735
01736 void KDGanttViewItem::loadFromDomElement( QDomElement& element )
01737 {
01738 QDomNode node = element.firstChild();
01739 Shape startShape = TriangleDown, middleShape = TriangleDown,
01740 endShape = TriangleDown;
01741 QColor startColor, middleColor, endColor;
01742 QColor startHighlightColor, middleHighlightColor, endHighlightColor;
01743 QString tempName;
01744 while( !node.isNull() ) {
01745 QDomElement element = node.toElement();
01746 if( !element.isNull() ) {
01747 QString tagName = element.tagName();
01748 if( tagName == "StartTime" ) {
01749 QDateTime value;
01750 if( KDGanttXML::readDateTimeNode( element, value ) )
01751 setStartTime( value );
01752 } else if( tagName == "EndTime" ) {
01753 QDateTime value;
01754 if( KDGanttXML::readDateTimeNode( element, value ) )
01755 setEndTime( value );
01756 } else if( tagName == "Text" ) {
01757 QString value;
01758 if( KDGanttXML::readStringNode( element, value ) )
01759 setText( value );
01760 } else if( tagName == "Font" ) {
01761 QFont value;
01762 if( KDGanttXML::readFontNode( element, value ) )
01763 setFont( value );
01764 } else if( tagName == "TooltipText" ) {
01765 QString value;
01766 if( KDGanttXML::readStringNode( element, value ) )
01767 setTooltipText( value );
01768 } else if( tagName == "WhatsThisText" ) {
01769 QString value;
01770 if( KDGanttXML::readStringNode( element, value ) )
01771 setWhatsThisText( value );
01772 } else if( tagName == "Pixmap" ) {
01773 QPixmap value;
01774 if( KDGanttXML::readPixmapNode( element, value ) )
01775 setPixmap( value );
01776 } else if( tagName == "ListViewText" ) {
01777 QString value;
01778 if( KDGanttXML::readStringNode( element, value ) )
01779 setListViewText( value );
01780 } else if( tagName == "Open" ) {
01781 bool value;
01782 if( KDGanttXML::readBoolNode( element, value ) )
01783 setOpen( value );
01784 } else if( tagName == "Highlight" ) {
01785 bool value;
01786 if( KDGanttXML::readBoolNode( element, value ) )
01787 setHighlight( value );
01788 } else if( tagName == "StartShape" ) {
01789 QString value;
01790 if( KDGanttXML::readStringNode( element, value ) )
01791 startShape = stringToShape( value );
01792 } else if( tagName == "MiddleShape" ) {
01793 QString value;
01794 if( KDGanttXML::readStringNode( element, value ) )
01795 middleShape = stringToShape( value );
01796 } else if( tagName == "EndShape" ) {
01797 QString value;
01798 if( KDGanttXML::readStringNode( element, value ) )
01799 endShape = stringToShape( value );
01800 } else if( tagName == "DefaultColor" ) {
01801 QColor value;
01802 if( KDGanttXML::readColorNode( element, value ) )
01803 setDefaultColor( value );
01804 } else if( tagName == "StartColor" ) {
01805 QColor value;
01806 if( KDGanttXML::readColorNode( element, value ) )
01807 startColor = value;
01808 } else if( tagName == "MiddleColor" ) {
01809 QColor value;
01810 if( KDGanttXML::readColorNode( element, value ) )
01811 middleColor = value;
01812 } else if( tagName == "EndColor" ) {
01813 QColor value;
01814 if( KDGanttXML::readColorNode( element, value ) )
01815 endColor = value;
01816 } else if( tagName == "DefaultHighlightColor" ) {
01817 QColor value;
01818 if( KDGanttXML::readColorNode( element, value ) )
01819 setDefaultHighlightColor( value );
01820 } else if( tagName == "StartHighlightColor" ) {
01821 QColor value;
01822 if( KDGanttXML::readColorNode( element, value ) )
01823 startHighlightColor = value;
01824 } else if( tagName == "MiddleHighlightColor" ) {
01825 QColor value;
01826 if( KDGanttXML::readColorNode( element, value ) )
01827 middleHighlightColor = value;
01828 } else if( tagName == "EndHighlightColor" ) {
01829 QColor value;
01830 if( KDGanttXML::readColorNode( element, value ) )
01831 endHighlightColor = value;
01832 } else if( tagName == "TextColor" ) {
01833 QColor value;
01834 if( KDGanttXML::readColorNode( element, value ) )
01835 setTextColor( value );
01836 } else if( tagName == "Name" ) {
01837 QString value;
01838 if( KDGanttXML::readStringNode( element, value ) )
01839 tempName = value;
01840 } else if( tagName == "Items" ) {
01841 QDomNode node = element.firstChild();
01842 KDGanttViewItem* previous = 0;
01843 while( !node.isNull() ) {
01844 QDomElement element = node.toElement();
01845 if( !element.isNull() ) {
01846 QString tagName = element.tagName();
01847 if( tagName == "Item" ) {
01848 KDGanttViewItem* newItem;
01849 if( previous )
01850 newItem =
01851 KDGanttViewItem::createFromDomElement( this,
01852 previous,
01853 element );
01854 else
01855 newItem =
01856 KDGanttViewItem::createFromDomElement( this,
01857 element );
01858 previous = newItem;
01859 } else {
01860 qDebug( "Unrecognized tag name: %s", tagName.latin1() );
01861 Q_ASSERT( false );
01862 }
01863 }
01864
01865 node = node.nextSibling();
01866 }
01867 } else {
01868 qDebug( "Unrecognized tag name: %s", tagName.latin1() );
01869 Q_ASSERT( false );
01870 }
01871 }
01872
01873 node = node.nextSibling();
01874 }
01875
01876 setColors( startColor, middleColor, endColor );
01877 setHighlightColors( startHighlightColor, middleHighlightColor,
01878 endHighlightColor );
01879 setShapes( startShape, middleShape, endShape );
01880 generateAndInsertName( tempName );
01881 }
01882
01883
01884 QString KDGanttViewItem::typeToString( Type type )
01885 {
01886 switch( type ) {
01887 case Event:
01888 return "Event";
01889 case Summary:
01890 return "Summary";
01891 case Task:
01892 return "Task";
01893 default:
01894 qDebug( "Unknown type in KDGanttViewItem::typeToString()" );
01895 return "Summary";
01896 }
01897 return "";
01898 }
01899
01900
01906 int KDGanttViewItem::getCoordY()
01907 {
01908 return itemPos() + height()/2;
01909 }
01910
01911
01912 void KDGanttViewItem::showSubItems()
01913 {
01914 showSubitemTree( getCoordY() );
01915 }
01916
01917
01918 void KDGanttViewItem::showSubitemTree( int CoordY )
01919 {
01920
01921 KDGanttViewItem* temp = firstChild();
01922 if (temp) {
01923 while (temp != 0) {
01924 if (temp->isOpen() || !temp->displaySubitemsAsGroup() ) {
01925 temp->showItem( true, CoordY );
01926 if ( temp->firstChild() )
01927 temp->firstChild()->hideSubtree();
01928 } else {
01929 if ( temp->displaySubitemsAsGroup() && temp->firstChild() )
01930 temp->hideSubtree();
01931 else {
01932 temp->showSubitemTree( CoordY );
01933 }
01934 }
01935 temp = temp->nextSibling();
01936 }
01937 showItem( false );
01938 } else {
01939 showItem( true, CoordY );
01940 }
01941 }
01942
01943
01949 QDateTime KDGanttViewItem::myChildStartTime()
01950 {
01951 QDateTime ret, tempTime;
01952 bool set = true;
01953 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
01954 if (temp) {
01955 while (temp != 0) {
01956 if ( !temp->displaySubitemsAsGroup() ) {
01957 tempTime = temp->startTime();
01958 } else {
01959 tempTime = temp->myChildStartTime();
01960 }
01961 if ( set ) {
01962 set = false;
01963 ret = tempTime;
01964 } else {
01965 if ( tempTime < ret ) {
01966 ret = tempTime;
01967 }
01968 }
01969 temp = temp->nextSibling();
01970 }
01971 } else {
01972 ret = startTime();
01973 }
01974 return ret;
01975 }
01976
01977
01983 QDateTime KDGanttViewItem::myChildEndTime()
01984 {
01985 QDateTime ret, tempTime;
01986 bool set = true;
01987 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
01988 if (temp) {
01989 while (temp != 0) {
01990 if ( !temp->displaySubitemsAsGroup() ) {
01991 tempTime = temp->endTime();
01992 } else {
01993 tempTime = temp->myChildEndTime();
01994 }
01995 if ( set ) {
01996 set = false;
01997 ret = tempTime;
01998 } else {
01999 if ( tempTime > ret ) {
02000 ret = tempTime;
02001 }
02002 }
02003 temp = temp->nextSibling();
02004 }
02005 } else {
02006 ret = endTime();
02007 }
02008 return ret;
02009 }
02010
02011
02018 bool KDGanttViewItem::showNoInformation()
02019 {
02020 return _showNoInformation;
02021 }
02022
02023
02035 void KDGanttViewItem::setShowNoInformation( bool show )
02036 {
02037 _showNoInformation = show;
02038 myGanttView->myTimeTable->updateMyContent();
02039 }
02040
02041
02050 KDGanttViewItem* KDGanttViewItem::getChildByName( const QString& name )
02051 {
02052 if ( listViewText() == name )
02053 return this;
02054 KDGanttViewItem* temp = firstChild(),* ret;
02055 while (temp != 0) {
02056 if ( (ret = temp->getChildByName( name )))
02057 return ret;
02058 temp = temp->nextSibling();
02059 }
02060 return 0;
02061 }
02062
02063
02064
02065
02066
02067
02068
02069
02070
02071
02072
02073
02074
02075
02083 bool KDGanttViewItem::subitemIsCalendar() const
02084 {
02085 KDGanttViewItem* temp = firstChild();
02086 bool ret = false;
02087 while (temp) {
02088 if (temp->firstChild() || temp->displaySubitemsAsGroup() ) {
02089 ret = true;
02090 break;
02091 }
02092 temp = temp->nextSibling();
02093 }
02094 return ret;
02095 }
02096
02097
02098 int KDGanttViewItem::computeHeight()
02099 {
02100 int hei = 0;
02101
02102 if ( !isVisible() ) {
02103 showItem( false );
02104 if ( firstChild() )
02105 firstChild()->hideSubtree();
02106
02107 return 0;
02108 }
02109
02110 KDGanttViewItem* temp;
02111 bool show = true;
02112
02113
02114
02115
02116
02117
02118
02119
02120
02121
02122
02123
02124
02125
02126
02127
02128
02129
02130
02131
02132
02133
02134
02135
02136
02137
02138
02139
02140
02141
02142
02143
02144
02145
02146 if ( isOpen() ) {
02147
02148 temp = firstChild();
02149
02150 int tempHeight;
02151
02152 bool special = displaySubitemsAsGroup() && myGanttView->calendarMode();
02153 while (temp != 0) {
02154 tempHeight = temp->computeHeight();
02155 if ( special ) {
02156 if ( temp->displaySubitemsAsGroup() ) {
02157 hei += tempHeight;
02158
02159 } else {
02160 temp->showSubitemTree( getCoordY() );
02161
02162 }
02163 } else {
02164 hei += tempHeight;
02165
02166 }
02167 temp = temp->nextSibling();
02168 }
02169 } else {
02170
02171
02172 if ( !displaySubitemsAsGroup() ) {
02173 if ( firstChild() ) {
02174 firstChild()->hideSubtree();
02175 }
02176 } else {
02177 if ( firstChild() ) {
02178 showSubitemTree( getCoordY() );
02179 show = false ;
02180 }
02181 }
02182
02183 }
02184 if ( show )
02185 showItem( true );
02186
02187 hei += height();
02188
02189 return hei;
02190 }
02191
02192
02193
02194
02195 bool KDGanttViewItem::showNoCross()
02196 {
02197 KDGanttViewItem * temp = firstChild();
02198 if ( !temp )
02199 return false;
02200 while ( temp ) {
02201 if ( temp->displaySubitemsAsGroup() ) {
02202 return false;
02203 }
02204 temp = temp->nextSibling();
02205 }
02206 return true;
02207 }
02208
02209
02210 void KDGanttViewItem::paintBranches ( QPainter* p, const QColorGroup& cg,
02211 int w, int y, int h )
02212 {
02213 QListViewItem::paintBranches ( p, cg, w, y, h);
02214 if ( !myGanttView->calendarMode() )
02215 return;
02216 else {
02217 KDGanttViewItem * temp = firstChild();
02218 while ( temp ) {
02219 if ( temp->showNoCross() ) {
02220
02221 int y_coord = temp->itemPos() -height ()- itemPos();
02222 int hei = temp->height();
02223
02224
02225 myGanttView->myListView->paintemptyarea( p, QRect( 0,y+y_coord,w,hei));
02226 int x_c = w/2;
02227 int y_c = y+y_coord+ temp->height ()/2;
02228 int y_ce ;
02229 if ( temp->itemBelow() && temp->itemBelow()->parent() == this )
02230 y_ce =y+y_coord+ temp->height ();
02231 else
02232 y_ce = y_c;
02233 int i;
02234 for (i = y+y_coord+1; i <= y_ce; i+=2 ) {
02235 p->drawPoint( x_c, i );
02236 }
02237 for (i = x_c+2; i < w; i+=2 ) {
02238 p->drawPoint( i, y_c );
02239 }
02240 }
02241 temp = temp->nextSibling();
02242 }
02243 }
02244 }
02245
02246
02247
02248 void KDGanttViewItem::resetSubitemVisibility()
02249 {
02250 KDGanttViewItem* temp;
02251 temp = firstChild();
02252 bool allow = false;
02253 if ( myGanttView->calendarMode() ) {
02254
02255 if ( ! temp ) {
02256 if ( !parent() )
02257
02258 setVisible( true );
02259 else
02260
02261 setVisible( false );
02262 return;
02263 }
02264 setVisible( true );
02265 while (temp) {
02266 if (temp->firstChild()) {
02267 allow = true;
02268 temp->resetSubitemVisibility();
02269 }
02270 else {
02271 temp->setVisible(false);
02272 }
02273 temp = temp->nextSibling();
02274 }
02275 } else {
02276 setVisible( true );
02277
02278 allow = true;
02279 while (temp != 0) {
02280 temp->resetSubitemVisibility();
02281 temp = temp->nextSibling();
02282 }
02283 }
02284 if ( !allow && isOpen() )
02285 setOpen( false );
02286
02287 }
02288
02289
02307
02308
02309
02310
02311
02312
02313
02314
02323
02324
02325
02326
02327
02328
02329
02330
02466 QPoint KDGanttViewItem::middleLeft()
02467 {
02468 return QPoint(myGanttView->myTimeHeader->getCoordX(myStartTime), itemPos()+height()/2);
02469 }
02473 QPoint KDGanttViewItem::middleRight()
02474 {
02475 return QPoint(myGanttView->myTimeHeader->getCoordX(myEndTime), itemPos()+height()/2);
02476 }
02480 void KDGanttViewItem::moveTextCanvas(int x, int y)
02481 {
02482 int mx = x + myTextOffset.x();
02483 int my = y + myTextOffset.y();
02484 if (myTextOffset.x() != 0)
02485 mx -= 2*myItemSize;
02486
02487 textCanvas->move(mx+2*myItemSize,my-myItemSize/2);
02488
02489 }
02490
02495 void KDGanttViewItem::moveTextCanvas()
02496 {
02497 QPoint m = myTextOffset+middleRight();
02498 textCanvas->move(m.x(), m.y()-myItemSize/2);
02499 }
02500
02504 void KDGanttViewItem::setTextOffset(QPoint p)
02505 {
02506
02507 myTextOffset.setX(p.x());
02508 myTextOffset.setY(p.y());
02509 }
02510
02511 bool KDGanttViewItem::isMyTextCanvas(QCanvasItem *tc)
02512 {
02513 return tc == textCanvas;
02514 }
02515
02523 void KDGanttViewItem::setProgress(int percent)
02524 {
02525 myProgress = QMAX(0, percent);
02526 myProgress = QMIN(100, myProgress);
02527 }
02528
02535 void KDGanttViewItem::setFloatStartTime(const QDateTime &start)
02536 {
02537 myFloatStartTime = start;
02538 }
02539
02546 void KDGanttViewItem::setFloatEndTime(const QDateTime &end)
02547 {
02548 myFloatEndTime = end;
02549 }