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 _isMoveable = false;
01425 _isResizeable = false;
01426 setTextOffset(QPoint(0,0));
01427
01428 _callListViewOnSetOpen = true;
01429 myType = t;
01430 myProgress = 0;
01431 progressShape = 0;
01432 floatStartShape = 0;
01433 floatEndShape = 0;
01434 blockUpdating = true;
01435 isVisibleInGanttView = false;
01436 startShape = 0;
01437 midShape = 0;
01438 endShape = 0;
01439 startShapeBack = 0;
01440 midShapeBack = 0;
01441 endShapeBack = 0;
01442
01443 myItemSize = 10;
01444 myGanttView = ((KDListView *)listView())->myGanttView;
01445 myGanttView->myTimeHeader->saveCenterDateTime();
01446 myStartTime = myGanttView->myTimeHeader->myCenterDateTime;
01447 myEndTime = myStartTime;
01448 myToolTipText =QListViewItem::text(0);
01449 myWhatsThisText = QListViewItem::text(0);
01450 isHighlighted = false;
01451 isEditable = true;
01452 _displaySubitemsAsGroup = myGanttView->displaySubitemsAsGroup();
01453 startLine = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01454 endLine = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01455 startLine->setZ(2);endLine->setZ(2);
01456 startLineBack = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01457 endLineBack = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01458 startLineBack->setZ(1);endLineBack->setZ(1);
01459 actualEnd = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01460 actualEnd->setZ(5);
01461 actualEnd->setPen( QPen ( Qt::red, 3 ) );
01462
01463 textCanvas = new KDCanvasText(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01464 textCanvas->setText("");
01465 textCanvas->setZ(10);
01466
01467 setTextColor( myGanttView->textColor());
01468
01469 setDefaultColor( myGanttView->defaultColor(myType));
01470
01471 setDefaultHighlightColor(myGanttView->defaultHighlightColor(myType));
01472
01473 if (!( shapeDefined = (myGanttView->shapes(myType,myStartShape,myMiddleShape,myEndShape)))) {
01474
01475
01476 };
01477
01478 setShapes(myStartShape,myMiddleShape,myEndShape);
01479 if ( type() == Task ) {
01480
01481 if ( startShape )
01482 delete startShape;
01483 startShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01484 progressShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01485 }
01486 floatStartShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01487 floatEndShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
01488
01489
01490 if (!( colorDefined = (myGanttView->colors(myType,myStartColor,myMiddleColor,myEndColor)))) {
01491
01492 };
01493 setColors(defaultColor(),defaultColor(), defaultColor());
01494
01495 if (!( colorHLDefined = (myGanttView->highlightColors(myType,myStartColorHL,myMiddleColorHL,myEndColorHL)))) {
01496
01497 };
01498 setHighlightColors(defaultHighlightColor(),defaultHighlightColor(), defaultHighlightColor());
01499 setFont(myGanttView->font());
01500
01501
01502
01503 _priority = 150;
01504 _showNoInformation = false;
01505 _enabled = true;
01506 blockUpdating = false;
01507 updateCanvasItems();
01508 }
01509
01510
01511 QString KDGanttViewItem::shapeToString( Shape shape )
01512 {
01513 switch( shape ) {
01514 case TriangleDown:
01515 return "TriangleDown";
01516 case TriangleUp:
01517 return "TriangleUp";
01518 case Diamond:
01519 return "Diamond";
01520 case Square:
01521 return "Square";
01522 case Circle:
01523 return "Circle";
01524 }
01525 return "";
01526 }
01527
01528
01529 KDGanttViewItem::Shape KDGanttViewItem::stringToShape( const QString& string )
01530 {
01531 if( string == "TriangleDown" )
01532 return TriangleDown;
01533 else if( string == "TriangleUp" )
01534 return TriangleUp;
01535 else if( string == "Diamond" )
01536 return Diamond;
01537 else if( string == "Square" )
01538 return Square;
01539 else if( string == "Circle" )
01540 return Circle;
01541 else
01542 return TriangleDown;
01543 }
01544
01545
01552 void KDGanttViewItem::createNode( QDomDocument& doc,
01553 QDomElement& parentElement )
01554 {
01555 QDomElement itemElement = doc.createElement( "Item" );
01556 parentElement.appendChild( itemElement );
01557 itemElement.setAttribute( "Type", typeToString( type() ) );
01558
01559 KDGanttXML::createDateTimeNode( doc, itemElement, "StartTime", startTime() );
01560 KDGanttXML::createDateTimeNode( doc, itemElement, "EndTime", endTime() );
01561 KDGanttXML::createFontNode( doc, itemElement, "Font", font() );
01562 KDGanttXML::createStringNode( doc, itemElement, "Text", text() );
01563 KDGanttXML::createStringNode( doc, itemElement, "TooltipText", tooltipText() );
01564 KDGanttXML::createStringNode( doc, itemElement, "WhatsThisText",
01565 whatsThisText() );
01566 if( pixmap() )
01567 KDGanttXML::createPixmapNode( doc, itemElement, "Pixmap", *pixmap() );
01568 if( !listViewText().isNull() )
01569 KDGanttXML::createStringNode( doc, itemElement, "ListViewText",
01570 listViewText() );
01571 KDGanttXML::createBoolNode( doc, itemElement, "Open", isOpen() );
01572 KDGanttXML::createBoolNode( doc, itemElement, "Highlight", highlight() );
01573 Shape startShape, middleShape, endShape;
01574 shapes( startShape, middleShape, endShape );
01575 KDGanttXML::createStringNode( doc, itemElement, "StartShape",
01576 shapeToString( startShape ) );
01577 KDGanttXML::createStringNode( doc, itemElement, "MiddleShape",
01578 shapeToString( middleShape ) );
01579 KDGanttXML::createStringNode( doc, itemElement, "EndShape",
01580 shapeToString( endShape ) );
01581 KDGanttXML::createColorNode( doc, itemElement, "DefaultColor", defaultColor() );
01582 QColor startColor, middleColor, endColor;
01583 colors( startColor, middleColor, endColor );
01584 KDGanttXML::createColorNode( doc, itemElement, "StartColor", startColor );
01585 KDGanttXML::createColorNode( doc, itemElement, "MiddleColor", middleColor );
01586 KDGanttXML::createColorNode( doc, itemElement, "EndColor", endColor );
01587 KDGanttXML::createColorNode( doc, itemElement, "DefaultHighlightColor",
01588 defaultHighlightColor() );
01589 highlightColors( startColor, middleColor, endColor );
01590 KDGanttXML::createColorNode( doc, itemElement, "StartHighlightColor",
01591 startColor );
01592 KDGanttXML::createColorNode( doc, itemElement, "MiddleHighlightColor",
01593 middleColor );
01594 KDGanttXML::createColorNode( doc, itemElement, "EndHighlightColor", endColor );
01595 KDGanttXML::createColorNode( doc, itemElement, "TextColor", textColor() );
01596 KDGanttXML::createStringNode( doc, itemElement, "Name", name() );
01597 QDomElement itemsElement = doc.createElement( "Items" );
01598 itemElement.appendChild( itemsElement );
01599 KDGanttViewItem* currentItem = firstChild();
01600 while( currentItem ) {
01601 currentItem->createNode( doc, itemsElement );
01602 currentItem = currentItem->nextSibling();
01603 }
01604
01605 }
01606
01607
01608
01617 KDGanttViewItem* KDGanttViewItem::createFromDomElement( KDGanttView* view,
01618 QDomElement& element )
01619 {
01620 QString typeString = element.attribute( "Type" );
01621 Q_ASSERT( !typeString.isEmpty() );
01622 KDGanttViewItem* item;
01623 if( typeString == "Task" )
01624 item = new KDGanttViewTaskItem( view );
01625 else if( typeString == "Summary" )
01626 item = new KDGanttViewSummaryItem( view );
01627 else if( typeString == "Event" )
01628 item = new KDGanttViewEventItem( view );
01629 else {
01630 qDebug( "Unknown item type %s in KDGanttViewItem::createFromDomElement()", typeString.latin1() );
01631 return 0;
01632 }
01633
01634 item->loadFromDomElement( element );
01635 return item;
01636 }
01637
01638
01648 KDGanttViewItem* KDGanttViewItem::createFromDomElement( KDGanttView* view,
01649 KDGanttViewItem* previous,
01650 QDomElement& element )
01651 {
01652 QString typeString = element.attribute( "Type" );
01653 Q_ASSERT( !typeString.isEmpty() );
01654 KDGanttViewItem* item;
01655 if( typeString == "Task" )
01656 item = new KDGanttViewTaskItem( view, previous );
01657 else if( typeString == "Summary" )
01658 item = new KDGanttViewSummaryItem( view, previous );
01659 else if( typeString == "Event" )
01660 item = new KDGanttViewEventItem( view, previous );
01661 else {
01662 qDebug( "Unknown item type in KDGanttViewItem::createFromDomElement()" );
01663 return 0;
01664 }
01665
01666 item->loadFromDomElement( element );
01667 return item;
01668 }
01669
01670
01671
01672
01681 KDGanttViewItem* KDGanttViewItem::createFromDomElement( KDGanttViewItem* parent,
01682 QDomElement& element )
01683 {
01684 QString typeString = element.attribute( "Type" );
01685 Q_ASSERT( !typeString.isEmpty() );
01686 KDGanttViewItem* item;
01687 if( typeString == "Task" )
01688 item = new KDGanttViewTaskItem( parent );
01689 else if( typeString == "Summary" )
01690 item = new KDGanttViewSummaryItem( parent );
01691 else if( typeString == "Event" )
01692 item = new KDGanttViewEventItem( parent );
01693 else {
01694 qDebug( "Unknown item type in KDGanttViewItem::createFromDomElement()" );
01695 return 0;
01696 }
01697
01698 item->loadFromDomElement( element );
01699 return item;
01700 }
01701
01702
01712 KDGanttViewItem* KDGanttViewItem::createFromDomElement( KDGanttViewItem* parent,
01713 KDGanttViewItem* previous,
01714 QDomElement& element )
01715 {
01716 QString typeString = element.attribute( "Type" );
01717 Q_ASSERT( !typeString.isEmpty() );
01718 KDGanttViewItem* item;
01719 if( typeString == "Task" )
01720 item = new KDGanttViewTaskItem( parent, previous );
01721 else if( typeString == "Summary" )
01722 item = new KDGanttViewSummaryItem( parent, previous );
01723 else if( typeString == "Event" )
01724 item = new KDGanttViewEventItem( parent, previous );
01725 else {
01726 qDebug( "Unknown item type in KDGanttViewItem::createFromDomElement()" );
01727 return 0;
01728 }
01729
01730 item->loadFromDomElement( element );
01731 return item;
01732 }
01733
01734
01735
01736
01737
01738 void KDGanttViewItem::loadFromDomElement( QDomElement& element )
01739 {
01740 QDomNode node = element.firstChild();
01741 Shape startShape = TriangleDown, middleShape = TriangleDown,
01742 endShape = TriangleDown;
01743 QColor startColor, middleColor, endColor;
01744 QColor startHighlightColor, middleHighlightColor, endHighlightColor;
01745 QString tempName;
01746 while( !node.isNull() ) {
01747 QDomElement element = node.toElement();
01748 if( !element.isNull() ) {
01749 QString tagName = element.tagName();
01750 if( tagName == "StartTime" ) {
01751 QDateTime value;
01752 if( KDGanttXML::readDateTimeNode( element, value ) )
01753 setStartTime( value );
01754 } else if( tagName == "EndTime" ) {
01755 QDateTime value;
01756 if( KDGanttXML::readDateTimeNode( element, value ) )
01757 setEndTime( value );
01758 } else if( tagName == "Text" ) {
01759 QString value;
01760 if( KDGanttXML::readStringNode( element, value ) )
01761 setText( value );
01762 } else if( tagName == "Font" ) {
01763 QFont value;
01764 if( KDGanttXML::readFontNode( element, value ) )
01765 setFont( value );
01766 } else if( tagName == "TooltipText" ) {
01767 QString value;
01768 if( KDGanttXML::readStringNode( element, value ) )
01769 setTooltipText( value );
01770 } else if( tagName == "WhatsThisText" ) {
01771 QString value;
01772 if( KDGanttXML::readStringNode( element, value ) )
01773 setWhatsThisText( value );
01774 } else if( tagName == "Pixmap" ) {
01775 QPixmap value;
01776 if( KDGanttXML::readPixmapNode( element, value ) )
01777 setPixmap( value );
01778 } else if( tagName == "ListViewText" ) {
01779 QString value;
01780 if( KDGanttXML::readStringNode( element, value ) )
01781 setListViewText( value );
01782 } else if( tagName == "Open" ) {
01783 bool value;
01784 if( KDGanttXML::readBoolNode( element, value ) )
01785 setOpen( value );
01786 } else if( tagName == "Highlight" ) {
01787 bool value;
01788 if( KDGanttXML::readBoolNode( element, value ) )
01789 setHighlight( value );
01790 } else if( tagName == "StartShape" ) {
01791 QString value;
01792 if( KDGanttXML::readStringNode( element, value ) )
01793 startShape = stringToShape( value );
01794 } else if( tagName == "MiddleShape" ) {
01795 QString value;
01796 if( KDGanttXML::readStringNode( element, value ) )
01797 middleShape = stringToShape( value );
01798 } else if( tagName == "EndShape" ) {
01799 QString value;
01800 if( KDGanttXML::readStringNode( element, value ) )
01801 endShape = stringToShape( value );
01802 } else if( tagName == "DefaultColor" ) {
01803 QColor value;
01804 if( KDGanttXML::readColorNode( element, value ) )
01805 setDefaultColor( value );
01806 } else if( tagName == "StartColor" ) {
01807 QColor value;
01808 if( KDGanttXML::readColorNode( element, value ) )
01809 startColor = value;
01810 } else if( tagName == "MiddleColor" ) {
01811 QColor value;
01812 if( KDGanttXML::readColorNode( element, value ) )
01813 middleColor = value;
01814 } else if( tagName == "EndColor" ) {
01815 QColor value;
01816 if( KDGanttXML::readColorNode( element, value ) )
01817 endColor = value;
01818 } else if( tagName == "DefaultHighlightColor" ) {
01819 QColor value;
01820 if( KDGanttXML::readColorNode( element, value ) )
01821 setDefaultHighlightColor( value );
01822 } else if( tagName == "StartHighlightColor" ) {
01823 QColor value;
01824 if( KDGanttXML::readColorNode( element, value ) )
01825 startHighlightColor = value;
01826 } else if( tagName == "MiddleHighlightColor" ) {
01827 QColor value;
01828 if( KDGanttXML::readColorNode( element, value ) )
01829 middleHighlightColor = value;
01830 } else if( tagName == "EndHighlightColor" ) {
01831 QColor value;
01832 if( KDGanttXML::readColorNode( element, value ) )
01833 endHighlightColor = value;
01834 } else if( tagName == "TextColor" ) {
01835 QColor value;
01836 if( KDGanttXML::readColorNode( element, value ) )
01837 setTextColor( value );
01838 } else if( tagName == "Name" ) {
01839 QString value;
01840 if( KDGanttXML::readStringNode( element, value ) )
01841 tempName = value;
01842 } else if( tagName == "Items" ) {
01843 QDomNode node = element.firstChild();
01844 KDGanttViewItem* previous = 0;
01845 while( !node.isNull() ) {
01846 QDomElement element = node.toElement();
01847 if( !element.isNull() ) {
01848 QString tagName = element.tagName();
01849 if( tagName == "Item" ) {
01850 KDGanttViewItem* newItem;
01851 if( previous )
01852 newItem =
01853 KDGanttViewItem::createFromDomElement( this,
01854 previous,
01855 element );
01856 else
01857 newItem =
01858 KDGanttViewItem::createFromDomElement( this,
01859 element );
01860 previous = newItem;
01861 } else {
01862 qDebug( "Unrecognized tag name: %s", tagName.latin1() );
01863 Q_ASSERT( false );
01864 }
01865 }
01866
01867 node = node.nextSibling();
01868 }
01869 } else {
01870 qDebug( "Unrecognized tag name: %s", tagName.latin1() );
01871 Q_ASSERT( false );
01872 }
01873 }
01874
01875 node = node.nextSibling();
01876 }
01877
01878 setColors( startColor, middleColor, endColor );
01879 setHighlightColors( startHighlightColor, middleHighlightColor,
01880 endHighlightColor );
01881 setShapes( startShape, middleShape, endShape );
01882 generateAndInsertName( tempName );
01883 }
01884
01885
01886 QString KDGanttViewItem::typeToString( Type type )
01887 {
01888 switch( type ) {
01889 case Event:
01890 return "Event";
01891 case Summary:
01892 return "Summary";
01893 case Task:
01894 return "Task";
01895 default:
01896 qDebug( "Unknown type in KDGanttViewItem::typeToString()" );
01897 return "Summary";
01898 }
01899 return "";
01900 }
01901
01902
01908 int KDGanttViewItem::getCoordY()
01909 {
01910 return itemPos() + height()/2;
01911 }
01912
01913
01914 void KDGanttViewItem::showSubItems()
01915 {
01916 showSubitemTree( getCoordY() );
01917 }
01918
01919
01920 void KDGanttViewItem::showSubitemTree( int CoordY )
01921 {
01922
01923 KDGanttViewItem* temp = firstChild();
01924 if (temp) {
01925 while (temp != 0) {
01926 if (temp->isOpen() || !temp->displaySubitemsAsGroup() ) {
01927 temp->showItem( true, CoordY );
01928 if ( temp->firstChild() )
01929 temp->firstChild()->hideSubtree();
01930 } else {
01931 if ( temp->displaySubitemsAsGroup() && temp->firstChild() )
01932 temp->hideSubtree();
01933 else {
01934 temp->showSubitemTree( CoordY );
01935 }
01936 }
01937 temp = temp->nextSibling();
01938 }
01939 showItem( false );
01940 } else {
01941 showItem( true, CoordY );
01942 }
01943 }
01944
01945
01951 QDateTime KDGanttViewItem::myChildStartTime()
01952 {
01953 QDateTime ret, tempTime;
01954 bool set = true;
01955 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
01956 if (temp) {
01957 while (temp != 0) {
01958 if ( !temp->displaySubitemsAsGroup() ) {
01959 tempTime = temp->startTime();
01960 } else {
01961 tempTime = temp->myChildStartTime();
01962 }
01963 if ( set ) {
01964 set = false;
01965 ret = tempTime;
01966 } else {
01967 if ( tempTime < ret ) {
01968 ret = tempTime;
01969 }
01970 }
01971 temp = temp->nextSibling();
01972 }
01973 } else {
01974 ret = startTime();
01975 }
01976 return ret;
01977 }
01978
01979
01985 QDateTime KDGanttViewItem::myChildEndTime()
01986 {
01987 QDateTime ret, tempTime;
01988 bool set = true;
01989 KDGanttViewItem* temp = (KDGanttViewItem*) firstChild();
01990 if (temp) {
01991 while (temp != 0) {
01992 if ( !temp->displaySubitemsAsGroup() ) {
01993 tempTime = temp->endTime();
01994 } else {
01995 tempTime = temp->myChildEndTime();
01996 }
01997 if ( set ) {
01998 set = false;
01999 ret = tempTime;
02000 } else {
02001 if ( tempTime > ret ) {
02002 ret = tempTime;
02003 }
02004 }
02005 temp = temp->nextSibling();
02006 }
02007 } else {
02008 ret = endTime();
02009 }
02010 return ret;
02011 }
02012
02013
02020 bool KDGanttViewItem::showNoInformation()
02021 {
02022 return _showNoInformation;
02023 }
02024
02025
02037 void KDGanttViewItem::setShowNoInformation( bool show )
02038 {
02039 _showNoInformation = show;
02040 myGanttView->myTimeTable->updateMyContent();
02041 }
02042
02043
02052 KDGanttViewItem* KDGanttViewItem::getChildByName( const QString& name )
02053 {
02054 if ( listViewText() == name )
02055 return this;
02056 KDGanttViewItem* temp = firstChild(),* ret;
02057 while (temp != 0) {
02058 if ( (ret = temp->getChildByName( name )))
02059 return ret;
02060 temp = temp->nextSibling();
02061 }
02062 return 0;
02063 }
02064
02065
02066
02067
02068
02069
02070
02071
02072
02073
02074
02075
02076
02077
02085 bool KDGanttViewItem::subitemIsCalendar() const
02086 {
02087 KDGanttViewItem* temp = firstChild();
02088 bool ret = false;
02089 while (temp) {
02090 if (temp->firstChild() || temp->displaySubitemsAsGroup() ) {
02091 ret = true;
02092 break;
02093 }
02094 temp = temp->nextSibling();
02095 }
02096 return ret;
02097 }
02098
02099
02100 int KDGanttViewItem::computeHeight()
02101 {
02102 int hei = 0;
02103
02104 if ( !isVisible() ) {
02105 showItem( false );
02106 if ( firstChild() )
02107 firstChild()->hideSubtree();
02108
02109 return 0;
02110 }
02111
02112 KDGanttViewItem* temp;
02113 bool show = true;
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
02147
02148 if ( isOpen() ) {
02149
02150 temp = firstChild();
02151
02152 int tempHeight;
02153
02154 bool special = displaySubitemsAsGroup() && myGanttView->calendarMode();
02155 while (temp != 0) {
02156 tempHeight = temp->computeHeight();
02157 if ( special ) {
02158 if ( temp->displaySubitemsAsGroup() ) {
02159 hei += tempHeight;
02160
02161 } else {
02162 temp->showSubitemTree( getCoordY() );
02163
02164 }
02165 } else {
02166 hei += tempHeight;
02167
02168 }
02169 temp = temp->nextSibling();
02170 }
02171 } else {
02172
02173
02174 if ( !displaySubitemsAsGroup() ) {
02175 if ( firstChild() ) {
02176 firstChild()->hideSubtree();
02177 }
02178 } else {
02179 if ( firstChild() ) {
02180 showSubitemTree( getCoordY() );
02181 show = false ;
02182 }
02183 }
02184
02185 }
02186 if ( show )
02187 showItem( true );
02188
02189 hei += height();
02190
02191 return hei;
02192 }
02193
02194
02195
02196
02197 bool KDGanttViewItem::showNoCross()
02198 {
02199 KDGanttViewItem * temp = firstChild();
02200 if ( !temp )
02201 return false;
02202 while ( temp ) {
02203 if ( temp->displaySubitemsAsGroup() ) {
02204 return false;
02205 }
02206 temp = temp->nextSibling();
02207 }
02208 return true;
02209 }
02210
02211
02212 void KDGanttViewItem::paintBranches ( QPainter* p, const QColorGroup& cg,
02213 int w, int y, int h )
02214 {
02215 QListViewItem::paintBranches ( p, cg, w, y, h);
02216 if ( !myGanttView->calendarMode() )
02217 return;
02218 else {
02219 KDGanttViewItem * temp = firstChild();
02220 while ( temp ) {
02221 if ( temp->showNoCross() ) {
02222
02223 int y_coord = temp->itemPos() -height ()- itemPos();
02224 int hei = temp->height();
02225
02226
02227 myGanttView->myListView->paintemptyarea( p, QRect( 0,y+y_coord,w,hei));
02228 int x_c = w/2;
02229 int y_c = y+y_coord+ temp->height ()/2;
02230 int y_ce ;
02231 if ( temp->itemBelow() && temp->itemBelow()->parent() == this )
02232 y_ce =y+y_coord+ temp->height ();
02233 else
02234 y_ce = y_c;
02235 int i;
02236 for (i = y+y_coord+1; i <= y_ce; i+=2 ) {
02237 p->drawPoint( x_c, i );
02238 }
02239 for (i = x_c+2; i < w; i+=2 ) {
02240 p->drawPoint( i, y_c );
02241 }
02242 }
02243 temp = temp->nextSibling();
02244 }
02245 }
02246 }
02247
02248
02249
02250 void KDGanttViewItem::resetSubitemVisibility()
02251 {
02252 KDGanttViewItem* temp;
02253 temp = firstChild();
02254 bool allow = false;
02255 if ( myGanttView->calendarMode() ) {
02256
02257 if ( ! temp ) {
02258 if ( !parent() )
02259
02260 setVisible( true );
02261 else
02262
02263 setVisible( false );
02264 return;
02265 }
02266 setVisible( true );
02267 while (temp) {
02268 if (temp->firstChild()) {
02269 allow = true;
02270 temp->resetSubitemVisibility();
02271 }
02272 else {
02273 temp->setVisible(false);
02274 }
02275 temp = temp->nextSibling();
02276 }
02277 } else {
02278 setVisible( true );
02279
02280 allow = true;
02281 while (temp != 0) {
02282 temp->resetSubitemVisibility();
02283 temp = temp->nextSibling();
02284 }
02285 }
02286 if ( !allow && isOpen() )
02287 setOpen( false );
02288
02289 }
02290
02291
02309
02310
02311
02312
02313
02314
02315
02316
02325
02326
02327
02328
02329
02330
02331
02332
02468 QPoint KDGanttViewItem::middleLeft()
02469 {
02470 return QPoint(myGanttView->myTimeHeader->getCoordX(myStartTime), itemPos()+height()/2);
02471 }
02475 QPoint KDGanttViewItem::middleRight()
02476 {
02477 return QPoint(myGanttView->myTimeHeader->getCoordX(myEndTime), itemPos()+height()/2);
02478 }
02482 void KDGanttViewItem::moveTextCanvas(int x, int y)
02483 {
02484 int mx = x + myTextOffset.x();
02485 int my = y + myTextOffset.y();
02486 if (myTextOffset.x() != 0)
02487 mx -= 2*myItemSize;
02488
02489 textCanvas->move(mx+2*myItemSize,my-myItemSize/2);
02490
02491 }
02492
02497 void KDGanttViewItem::moveTextCanvas()
02498 {
02499 QPoint m = myTextOffset+middleRight();
02500 textCanvas->move(m.x(), m.y()-myItemSize/2);
02501 }
02502
02506 void KDGanttViewItem::setTextOffset(QPoint p)
02507 {
02508
02509 myTextOffset.setX(p.x());
02510 myTextOffset.setY(p.y());
02511 }
02512
02513 bool KDGanttViewItem::isMyTextCanvas(QCanvasItem *tc)
02514 {
02515 return tc == textCanvas;
02516 }
02517
02525 void KDGanttViewItem::setProgress(int percent)
02526 {
02527 myProgress = QMAX(0, percent);
02528 myProgress = QMIN(100, myProgress);
02529 }
02530
02537 void KDGanttViewItem::setFloatStartTime(const QDateTime &start)
02538 {
02539 myFloatStartTime = start;
02540 }
02541
02548 void KDGanttViewItem::setFloatEndTime(const QDateTime &end)
02549 {
02550 myFloatEndTime = end;
02551 }
02552
02553 void KDGanttViewItem::setMoveable(bool m)
02554 {
02555 _isMoveable = m;
02556 }
02557
02558 bool KDGanttViewItem::isMoveable() const
02559 {
02560 return _isMoveable;
02561 }
02562
02563 bool KDGanttViewItem::isResizeable() const
02564 {
02565 return _isResizeable;
02566 }
02567
02568 void KDGanttViewItem::setResizeable(bool r)
02569 {
02570 _isResizeable = r;
02571 }