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 #include "KDGanttViewTaskLink.h"
00036 #include "KDGanttViewTaskLinkGroup.h"
00037 #include "KDGanttViewSubwidgets.h"
00038 #include "KDGanttXMLTools.h"
00039
00040
00065 KDGanttViewTaskLink::KDGanttViewTaskLink( QPtrList<KDGanttViewItem> from,
00066 QPtrList<KDGanttViewItem> to,
00067 LinkType type )
00068 {
00069 fromList= from;
00070 toList = to;
00071 myGroup = 0;
00072 setLinkType(type);
00073 initTaskLink();
00074 }
00075
00076
00088 KDGanttViewTaskLink::KDGanttViewTaskLink( KDGanttViewItem* from,
00089 KDGanttViewItem* to,
00090 LinkType type )
00091 {
00092 fromList.append(from);
00093 toList.append(to);
00094 myGroup = 0;
00095 setLinkType(type);
00096 initTaskLink();
00097
00098 }
00099
00111 KDGanttViewTaskLink::KDGanttViewTaskLink( KDGanttViewTaskLinkGroup* group,
00112 QPtrList<KDGanttViewItem> from,
00113 QPtrList<KDGanttViewItem> to,
00114 LinkType type )
00115 {
00116 fromList = from;
00117 toList = to;
00118 myGroup = 0;
00119 setLinkType(type);
00120 initTaskLink();
00121 setGroup(group);
00122 }
00123
00138 KDGanttViewTaskLink::KDGanttViewTaskLink( KDGanttViewTaskLinkGroup* group,
00139 KDGanttViewItem* from,
00140 KDGanttViewItem* to,
00141 LinkType type )
00142 {
00143 fromList.append(from);
00144 toList.append(to);
00145 myGroup = 0;
00146 setLinkType(type);
00147 initTaskLink();
00148 setGroup(group);
00149 }
00150
00151
00152 KDGanttViewTaskLink::~KDGanttViewTaskLink( )
00153 {
00154 setGroup(0);
00155 myTimeTable->myTaskLinkList.remove(this);
00156 delete horLineList;
00157 delete verLineList;
00158 delete horLineList2;
00159 delete verLineList2;
00160 delete horLineList3;
00161 delete topList;
00162 delete topLeftList;
00163 delete topRightList;
00164 }
00165
00166
00167 void KDGanttViewTaskLink::initTaskLink()
00168 {
00169 horLineList = new QPtrList<KDCanvasLine>;
00170 verLineList = new QPtrList<KDCanvasLine>;
00171 horLineList2 = new QPtrList<KDCanvasLine>;
00172 verLineList2 = new QPtrList<KDCanvasLine>;
00173 horLineList3 = new QPtrList<KDCanvasLine>;
00174 topList = new QPtrList<KDCanvasPolygon>;
00175 topLeftList = new QPtrList<KDCanvasPolygon>;
00176 topRightList = new QPtrList<KDCanvasPolygon>;
00177 horLineList->setAutoDelete( true );
00178 verLineList->setAutoDelete( true );
00179 horLineList2->setAutoDelete( true );
00180 verLineList2->setAutoDelete( true );
00181 horLineList3->setAutoDelete( true );
00182 topList->setAutoDelete( true );
00183 topLeftList->setAutoDelete( true );
00184 topRightList->setAutoDelete( true );
00185 myTimeTable = fromList.getFirst()->myGanttView->myTimeTable;
00186 KDCanvasLine* horLine,*verLine;
00187 KDCanvasLine* horLine2,*verLine2;
00188 KDCanvasLine* horLine3;
00189 KDCanvasPolygon* top;
00190 KDCanvasPolygon* topLeft;
00191 KDCanvasPolygon* topRight;
00192 unsigned int i, j;
00193 for ( i = 0;i < fromList.count();++i) {
00194 for ( j = 0;j < toList.count();++j) {
00195 horLine = new KDCanvasLine(myTimeTable,this,Type_is_KDGanttTaskLink);
00196 verLine = new KDCanvasLine(myTimeTable,this,Type_is_KDGanttTaskLink);
00197 horLine2 = new KDCanvasLine(myTimeTable,this,Type_is_KDGanttTaskLink);
00198 verLine2 = new KDCanvasLine(myTimeTable,this,Type_is_KDGanttTaskLink);
00199 horLine3 = new KDCanvasLine(myTimeTable,this,Type_is_KDGanttTaskLink);
00200 top = new KDCanvasPolygon(myTimeTable,this,Type_is_KDGanttTaskLink);
00201 topLeft = new KDCanvasPolygon(myTimeTable,this,Type_is_KDGanttTaskLink);
00202 topRight = new KDCanvasPolygon(myTimeTable,this,Type_is_KDGanttTaskLink);
00203 QPointArray arr = QPointArray(3);
00204 arr.setPoint(0,-4,-5);
00205 arr.setPoint(1,4,-5);
00206 arr.setPoint(2,0,0);
00207 top->setPoints(arr);
00208 arr.setPoint(0,5,-5);
00209 arr.setPoint(1,5,5);
00210 arr.setPoint(2,0,0);
00211 topLeft->setPoints(arr);
00212 arr.setPoint(0,-5,-4);
00213 arr.setPoint(1,-5,4);
00214 arr.setPoint(2,0,0);
00215 topRight->setPoints(arr);
00216 horLineList->append(horLine);
00217 verLineList->append(verLine);
00218 horLineList2->append(horLine2);
00219 verLineList2->append(verLine2);
00220 horLineList3->append(horLine3);
00221 topList->append(top);
00222 topLeftList->append(topLeft);
00223 topRightList->append(topRight);
00224 horLine->setZ(1);
00225 verLine->setZ(1);
00226 horLine2->setZ(1);
00227 verLine2->setZ(1);
00228 horLine3->setZ(1);
00229 top->setZ(1);
00230 topLeft->setZ(1);
00231 topRight->setZ(1);
00232 }
00233 }
00234
00235 setTooltipText( "Tasklink" );
00236 setWhatsThisText( "Tasklink" );
00237 myTimeTable->myTaskLinkList.append(this);
00238 setHighlight( false);
00239 setHighlightColor(Qt::red );
00240 setColor(Qt::black);
00241 setVisible(true);
00242 }
00243
00244
00253 void KDGanttViewTaskLink::setVisible( bool visible )
00254 {
00255 showMe ( visible );
00256 myTimeTable->updateMyContent();
00257 }
00258 void KDGanttViewTaskLink::showMe( bool visible )
00259 {
00260 if (linkType() != None) {
00261 showMeType(visible);
00262 return;
00263 }
00264 hide();
00265
00266 isvisible = visible;
00267 int wid = 1;
00268 QPen p;
00269 QBrush b;
00270 p.setWidth(wid);
00271 b.setStyle(Qt::SolidPattern);
00272 if (ishighlighted) {
00273 b.setColor(myColorHL);
00274 p.setColor(myColorHL);
00275
00276 } else {
00277 b.setColor(myColor);
00278 p.setColor(myColor);
00279 }
00280 QPoint start, end;
00281 QPtrListIterator<KDCanvasLine> horIt(*horLineList);
00282 QPtrListIterator<KDCanvasLine> verIt(*verLineList);
00283 QPtrListIterator<KDCanvasPolygon> topIt(*topList);
00284 QPtrListIterator<KDGanttViewItem> fromIt(fromList);
00285 QPtrListIterator<KDGanttViewItem> toIt(toList);
00286 for ( ; fromIt.current(); ++fromIt ) {
00287 (*fromIt)->setTextOffset(QPoint(0,0));
00288 toIt.toFirst();
00289 for ( ; toIt.current(); ++toIt ) {
00290 (*toIt)->setTextOffset(QPoint(0,0));
00291 if (!isvisible || ! (*fromIt)->isVisibleInGanttView || !(*toIt)->isVisibleInGanttView || !myTimeTable->taskLinksVisible) {
00292 (*horIt)->hide();
00293 (*verIt)->hide();
00294 (*topIt)->hide();
00295 ++horIt;
00296 ++verIt;
00297 ++topIt;
00298 } else {
00299 (*horIt)->setPen(p);
00300 (*verIt)->setPen(p);
00301 (*topIt)->setBrush(b);
00302 end = (*toIt)->getTaskLinkEndCoord();
00303 start = (*fromIt)->getTaskLinkStartCoord(end);
00304 (*horIt)->setPoints(start.x(),start.y(),end.x()+wid,start.y());
00305 (*verIt)->setPoints(end.x()+wid/2,start.y(),end.x()+wid/2,end.y()-2);
00306 (*topIt)->move(end.x()+wid/2,end.y());
00307 (*horIt)->show();
00308 (*verIt)->show();
00309 (*topIt)->show();
00310 ++horIt;
00311 ++verIt;
00312 ++topIt;
00313
00314 }
00315 }
00316 }
00317 while ( horIt.current() ) {
00318 (*horIt)->hide();
00319 (*verIt)->hide();
00320 (*topIt)->hide();
00321 ++horIt;
00322 ++verIt;
00323 ++topIt;
00324 }
00325 }
00326
00327 void KDGanttViewTaskLink::showMeType( bool visible )
00328 {
00329
00330 hide();
00331 isvisible = visible;
00332 int wid = 1;
00333 QPen p;
00334 QBrush b;
00335 p.setWidth(wid);
00336 b.setStyle(Qt::SolidPattern);
00337 if (ishighlighted) {
00338 b.setColor(myColorHL);
00339 p.setColor(myColorHL);
00340
00341 } else {
00342 b.setColor(myColor);
00343 p.setColor(myColor);
00344 }
00345 QPoint start, end;
00346 QPtrListIterator<KDCanvasLine> horIt(*horLineList);
00347 QPtrListIterator<KDCanvasLine> verIt(*verLineList);
00348 QPtrListIterator<KDCanvasLine> horIt2(*horLineList2);
00349 QPtrListIterator<KDCanvasLine> verIt2(*verLineList2);
00350 QPtrListIterator<KDCanvasLine> horIt3(*horLineList3);
00351 QPtrListIterator<KDCanvasPolygon> topIt(*topList);
00352 QPtrListIterator<KDCanvasPolygon> topLeftIt(*topLeftList);
00353 QPtrListIterator<KDCanvasPolygon> topRightIt(*topRightList);
00354 QPtrListIterator<KDGanttViewItem> fromIt(fromList);
00355 QPtrListIterator<KDGanttViewItem> toIt(toList);
00356 for ( ; fromIt.current(); ++fromIt ) {
00357 (*fromIt)->setTextOffset(QPoint(30,0));
00358 (*fromIt)->moveTextCanvas();
00359 toIt.toFirst();
00360 for ( ; toIt.current(); ++toIt ) {
00361 if (isvisible && (*fromIt)->isVisibleInGanttView &&
00362 (*toIt)->isVisibleInGanttView && myTimeTable->taskLinksVisible) {
00363 (*horIt)->setPen(p);
00364 (*verIt)->setPen(p);
00365 (*horIt2)->setPen(p);
00366 (*verIt2)->setPen(p);
00367 (*horIt3)->setPen(p);
00368 (*topIt)->setBrush(b);
00369 (*topLeftIt)->setBrush(b);
00370 (*topRightIt)->setBrush(b);
00371 (*toIt)->setTextOffset(QPoint(30,0));
00372 (*toIt)->moveTextCanvas();
00373 switch (linkType()) {
00374 case StartStart: {
00375 start = (*fromIt)->middleLeft();
00376 end = (*toIt)->middleLeft()-QPoint(12,0);
00377 bool down = start.y() < end.y();
00378 (*horIt)->setPoints(start.x()-xOffset(*fromIt),start.y(),
00379 start.x()-10, start.y());
00380 (*verIt)->setPoints(
00381 (*horIt)->endPoint().x(),
00382 (*horIt)->endPoint().y(),
00383 (*horIt)->endPoint().x(),
00384 (down ? (*toIt)->itemPos()+1
00385 : (*toIt)->itemPos()+(*toIt)->height()-1));
00386 (*horIt2)->setPoints((*verIt)->endPoint().x(),
00387 (*verIt)->endPoint().y(),
00388 end.x()-12,
00389 (*verIt)->endPoint().y());
00390 (*verIt2)->setPoints((*horIt2)->endPoint().x(),
00391 (*horIt2)->endPoint().y(),
00392 (*horIt2)->endPoint().x(),
00393 end.y());
00394 (*horIt3)->setPoints((*verIt2)->endPoint().x(),
00395 (*verIt2)->endPoint().y(),
00396 end.x(),
00397 end.y());
00398 (*topRightIt)->move(end.x(),end.y());
00399 (*topRightIt)->show();
00400 break;
00401 }
00402 case FinishFinish: {
00403 start = (*fromIt)->middleRight();
00404 end = (*toIt)->middleRight()+QPoint(12,0);
00405 bool down = start.y() < end.y();
00406 (*horIt)->setPoints(start.x()+xOffset(*fromIt),start.y(),
00407 start.x()+10, start.y());
00408 (*verIt)->setPoints(
00409 (*horIt)->endPoint().x(),
00410 (*horIt)->endPoint().y(),
00411 (*horIt)->endPoint().x(),
00412 (down ? (*toIt)->itemPos()+1
00413 : (*toIt)->itemPos()+(*toIt)->height()-1));
00414 (*horIt2)->setPoints((*verIt)->endPoint().x(),
00415 (*verIt)->endPoint().y(),
00416 end.x()+12,
00417 (*verIt)->endPoint().y());
00418 (*verIt2)->setPoints((*horIt2)->endPoint().x(),
00419 (*horIt2)->endPoint().y(),
00420 (*horIt2)->endPoint().x(),
00421 end.y());
00422 (*horIt3)->setPoints((*verIt2)->endPoint().x(),
00423 (*verIt2)->endPoint().y(),
00424 end.x(),
00425 end.y());
00426 (*topLeftIt)->move(end.x(),end.y());
00427 (*topLeftIt)->show();
00428 break;
00429 }
00430 case FinishStart: {
00431 start = (*fromIt)->middleRight();
00432 end = (*toIt)->middleLeft() - QPoint(12,0);
00433 bool down = start.y() < end.y();
00434 (*horIt)->setPoints(start.x()+xOffset(*fromIt),start.y(),
00435 start.x()+10,start.y());
00436 (*verIt)->setPoints(
00437 (*horIt)->endPoint().x(),
00438 (*horIt)->endPoint().y(),
00439 (*horIt)->endPoint().x(),
00440 (down ? (*toIt)->itemPos()+1
00441 : (*toIt)->itemPos()+(*toIt)->height()-1));
00442 (*horIt2)->setPoints((*verIt)->endPoint().x(),
00443 (*verIt)->endPoint().y(),
00444 end.x()-12,
00445 (*verIt)->endPoint().y());
00446 (*verIt2)->setPoints((*horIt2)->endPoint().x(),
00447 (*horIt2)->endPoint().y(),
00448 (*horIt2)->endPoint().x(),
00449 end.y());
00450 (*horIt3)->setPoints((*verIt2)->endPoint().x(),
00451 (*verIt2)->endPoint().y(),
00452 end.x(),
00453 end.y());
00454 (*topRightIt)->move(end.x(),end.y());
00455
00456 (*topRightIt)->show();
00457
00458 break;
00459 }
00460 case StartFinish: {
00461 start = (*fromIt)->middleRight();
00462 end = (*toIt)->middleRight()+QPoint(12,0);
00463 bool down = start.y() < end.y();
00464 (*horIt)->setPoints(start.x()+xOffset(*fromIt),start.y(),
00465 start.x()+10, start.y());
00466 (*verIt)->setPoints(
00467 (*horIt)->endPoint().x(),
00468 (*horIt)->endPoint().y(),
00469 (*horIt)->endPoint().x(),
00470 (down ? (*toIt)->itemPos()+1
00471 : (*toIt)->itemPos()+(*toIt)->height()-1));
00472 (*horIt2)->setPoints((*verIt)->endPoint().x(),
00473 (*verIt)->endPoint().y(),
00474 end.x()-12,
00475 (*verIt)->endPoint().y());
00476 (*verIt2)->setPoints((*horIt2)->endPoint().x(),
00477 (*horIt2)->endPoint().y(),
00478 (*horIt2)->endPoint().x(),
00479 end.y());
00480 (*horIt3)->setPoints((*verIt2)->endPoint().x(),
00481 (*verIt2)->endPoint().y(),
00482 end.x(),
00483 end.y());
00484 (*topRightIt)->move(end.x(),end.y());
00485 (*topRightIt)->show();
00486 break;
00487 }
00488 default:
00489 qWarning("KDGanttViewTaskLink: Unknown link type");
00490 break;
00491 }
00492 (*horIt)->show();
00493 (*verIt)->show();
00494 (*horIt2)->show();
00495 (*verIt2)->show();
00496 (*horIt3)->show();
00497 }
00498 ++horIt;
00499 ++verIt;
00500 ++horIt2;
00501 ++verIt2;
00502 ++horIt3;
00503 ++topIt;
00504 ++topLeftIt;
00505 ++topRightIt;
00506 }
00507 }
00508 }
00509
00516 bool KDGanttViewTaskLink::isVisible() const
00517 {
00518
00519 return isvisible;
00520 }
00521
00522
00530 KDGanttViewTaskLinkGroup* KDGanttViewTaskLink::group()
00531 {
00532 return myGroup;
00533 }
00534
00535
00544 void KDGanttViewTaskLink::setGroup(KDGanttViewTaskLinkGroup* group)
00545 {
00546
00547 myTimeTable->myGanttView->addTaskLinkGroup(group);
00548 if(myGroup == group)
00549 return;
00550 if (myGroup != 0)
00551 myGroup->removeItem(this);
00552 myGroup = group;
00553 if (myGroup != 0)
00554 myGroup->insertItem(this);
00555 }
00556
00557
00565 void KDGanttViewTaskLink::setHighlight( bool highlight )
00566 {
00567 ishighlighted = highlight ;
00568
00569 myTimeTable->updateMyContent();
00570 }
00571
00572
00580 bool KDGanttViewTaskLink::highlight() const
00581 {
00582 return ishighlighted;
00583 }
00584
00585
00592 void KDGanttViewTaskLink::setColor( const QColor& color )
00593 {
00594 myColor = color;
00595
00596 myTimeTable->updateMyContent();
00597 }
00598
00599
00606 QColor KDGanttViewTaskLink::color() const
00607 {
00608 return myColor;
00609 }
00610
00611
00618 void KDGanttViewTaskLink::setHighlightColor( const QColor& color )
00619 {
00620 myColorHL = color;
00621
00622 myTimeTable->updateMyContent();
00623 }
00624
00625
00632 QColor KDGanttViewTaskLink::highlightColor() const
00633 {
00634 return myColorHL;
00635 }
00636
00637
00644 void KDGanttViewTaskLink::setTooltipText( const QString& text )
00645 {
00646 myToolTipText = text;
00647 }
00648
00649
00656 QString KDGanttViewTaskLink::tooltipText() const
00657 {
00658 return myToolTipText;
00659 }
00660
00661
00668 void KDGanttViewTaskLink::setWhatsThisText( const QString& text )
00669 {
00670 myWhatsThisText = text;
00671
00672 }
00673
00674
00681 QString KDGanttViewTaskLink::whatsThisText() const
00682 {
00683 return myWhatsThisText;
00684 }
00685
00686
00693 QPtrList<KDGanttViewItem> KDGanttViewTaskLink::from() const
00694 {
00695 return fromList;
00696 }
00697
00698
00704 void KDGanttViewTaskLink::removeItemFromList( KDGanttViewItem* item )
00705 {
00706 bool itemremoved = false;
00707 if (fromList.remove( item )) {
00708 itemremoved = true;
00709 }
00710 if ( toList.remove( item )) {
00711 itemremoved = true;
00712 }
00713 if ( itemremoved ) {
00714 setVisible( isvisible );
00715 }
00716 }
00717
00718
00725 QPtrList<KDGanttViewItem> KDGanttViewTaskLink::to() const
00726 {
00727 return toList;
00728 }
00729
00730
00737 void KDGanttViewTaskLink::createNode( QDomDocument& doc,
00738 QDomElement& parentElement )
00739 {
00740 QDomElement taskLinkElement = doc.createElement( "TaskLink" );
00741 parentElement.appendChild( taskLinkElement );
00742
00743 QDomElement fromItemsElement = doc.createElement( "FromItems" );
00744 taskLinkElement.appendChild( fromItemsElement );
00745 QPtrList<KDGanttViewItem> fromList = from();
00746 KDGanttViewItem* item;
00747 for( item = fromList.first(); item;
00748 item = fromList.next() )
00749 KDGanttXML::createStringNode( doc, fromItemsElement, "Item", item->name() );
00750
00751 QDomElement toItemsElement = doc.createElement( "ToItems" );
00752 taskLinkElement.appendChild( toItemsElement );
00753 QPtrList<KDGanttViewItem> toList = to();
00754 for( item = toList.first(); item;
00755 item = toList.next() )
00756 KDGanttXML::createStringNode( doc, toItemsElement, "Item", item->name() );
00757
00758 KDGanttXML::createBoolNode( doc, taskLinkElement, "Highlight", highlight() );
00759 KDGanttXML::createColorNode( doc, taskLinkElement, "Color", color() );
00760 KDGanttXML::createColorNode( doc, taskLinkElement, "HighlightColor",
00761 highlightColor() );
00762 KDGanttXML::createStringNode( doc, taskLinkElement, "TooltipText",
00763 tooltipText() );
00764 KDGanttXML::createStringNode( doc, taskLinkElement, "WhatsThisText",
00765 whatsThisText() );
00766 if( group() )
00767 KDGanttXML::createStringNode( doc, taskLinkElement, "Group",
00768 group()->name() );
00769 KDGanttXML::createBoolNode( doc, taskLinkElement, "Visible",
00770 isVisible() );
00771 KDGanttXML::createStringNode( doc, taskLinkElement, "Linktype",
00772 linkTypeToString( myLinkType ) );
00773 }
00774
00775
00783 KDGanttViewTaskLink* KDGanttViewTaskLink::createFromDomElement( QDomElement& element )
00784 {
00785 QDomNode node = element.firstChild();
00786 QStringList fromList, toList;
00787 bool highlight = false, visible = false;
00788 QColor color, highlightColor;
00789 QString tooltipText, whatsThisText, group;
00790 LinkType linktype=None;
00791 while( !node.isNull() ) {
00792 QDomElement element = node.toElement();
00793 if( !element.isNull() ) {
00794 QString tagName = element.tagName();
00795 if( tagName == "FromItems" ) {
00796 QDomNode node = element.firstChild();
00797 while( !node.isNull() ) {
00798 QDomElement element = node.toElement();
00799 if( !element.isNull() ) {
00800 QString tagName = element.tagName();
00801 if( tagName == "Item" ) {
00802 QString value;
00803 if( KDGanttXML::readStringNode( element, value ) )
00804 fromList << value;
00805 } else {
00806 qDebug( "Unrecognized tag name: %s", tagName.latin1() );
00807 Q_ASSERT( false );
00808 }
00809 }
00810 node = node.nextSibling();
00811 }
00812 } else if( tagName == "ToItems" ) {
00813 QDomNode node = element.firstChild();
00814 while( !node.isNull() ) {
00815 QDomElement element = node.toElement();
00816 if( !element.isNull() ) {
00817 QString tagName = element.tagName();
00818 if( tagName == "Item" ) {
00819 QString value;
00820 if( KDGanttXML::readStringNode( element, value ) )
00821 toList << value;
00822 } else {
00823 qDebug( "Unrecognized tag name: %s", tagName.latin1() );
00824 Q_ASSERT( false );
00825 }
00826 }
00827 node = node.nextSibling();
00828 }
00829 } else if( tagName == "Highlight" ) {
00830 bool value;
00831 if( KDGanttXML::readBoolNode( element, value ) )
00832 highlight = value;
00833 } else if( tagName == "Visible" ) {
00834 bool value;
00835 if( KDGanttXML::readBoolNode( element, value ) )
00836 visible = value;
00837 } else if( tagName == "Color" ) {
00838 QColor value;
00839 if( KDGanttXML::readColorNode( element, value ) )
00840 color = value;
00841 } else if( tagName == "HighlightColor" ) {
00842 QColor value;
00843 if( KDGanttXML::readColorNode( element, value ) )
00844 highlightColor = value;
00845 } else if( tagName == "TooltipText" ) {
00846 QString value;
00847 if( KDGanttXML::readStringNode( element, value ) )
00848 tooltipText = value;
00849 } else if( tagName == "WhatsThisText" ) {
00850 QString value;
00851 if( KDGanttXML::readStringNode( element, value ) )
00852 whatsThisText = value;
00853 } else if( tagName == "Group" ) {
00854 QString value;
00855 if( KDGanttXML::readStringNode( element, value ) )
00856 group = value;
00857 } else if( tagName == "Linktype" ) {
00858 QString value;
00859 if( KDGanttXML::readStringNode( element, value ) )
00860 linktype = stringToLinkType( value );
00861 } else {
00862 qDebug( "Unrecognized tag name: %s", tagName.latin1() );
00863 Q_ASSERT( false );
00864 }
00865 }
00866 node = node.nextSibling();
00867 }
00868
00869 QPtrList<KDGanttViewItem> fromItemList;
00870 QPtrList<KDGanttViewItem> toItemList;
00871 for( QStringList::const_iterator fromIt = fromList.begin();
00872 fromIt != fromList.end(); ++fromIt ) {
00873 KDGanttViewItem* item = KDGanttViewItem::find( *fromIt );
00874 if( item )
00875 fromItemList.append( item );
00876 }
00877 for( QStringList::const_iterator toIt = toList.begin();
00878 toIt != toList.end(); ++toIt ) {
00879 KDGanttViewItem* item = KDGanttViewItem::find( *toIt );
00880 if( item )
00881 toItemList.append( item );
00882 }
00883
00884 if (fromItemList.isEmpty()) {
00885 qDebug("Cannot create link: fromItemList is empty");
00886 return 0;
00887 }
00888 if (toItemList.isEmpty()) {
00889 qDebug("Cannot create link: toItemList is empty");
00890 return 0;
00891 }
00892 KDGanttViewTaskLink* tl = new KDGanttViewTaskLink( fromItemList,
00893 toItemList );
00894 tl->setLinkType( linktype );
00895 tl->setVisible( visible );
00896 tl->setHighlight( highlight );
00897 tl->setColor( color );
00898 tl->setHighlightColor( highlightColor );
00899 tl->setTooltipText( tooltipText );
00900 tl->setWhatsThisText( whatsThisText );
00901 KDGanttViewTaskLinkGroup* gr = KDGanttViewTaskLinkGroup::find( group );
00902 if( gr )
00903 tl->setGroup( gr );
00904
00905 return tl;
00906 }
00907
00908 int KDGanttViewTaskLink::linkType()
00909 {
00910 return myLinkType;
00911 }
00912
00913 void KDGanttViewTaskLink::setLinkType(int type)
00914 {
00915 myLinkType = static_cast<LinkType>(type);
00916 }
00917
00918 int KDGanttViewTaskLink::xOffset(KDGanttViewItem *item)
00919 {
00920 switch (item->type()) {
00921 case KDGanttViewItem::Task:
00922 return 0;
00923 break;
00924 case KDGanttViewItem::Event:
00925 return 4;
00926 break;
00927 case KDGanttViewItem::Summary:
00928 return 4;
00929 break;
00930 default:
00931 break;
00932 }
00933 return 0;
00934 }
00935
00936 void KDGanttViewTaskLink::hide()
00937 {
00938 QPtrListIterator<KDCanvasLine> horIt(*horLineList);
00939 QPtrListIterator<KDCanvasLine> verIt(*verLineList);
00940 QPtrListIterator<KDCanvasLine> horIt2(*horLineList2);
00941 QPtrListIterator<KDCanvasLine> verIt2(*verLineList2);
00942 QPtrListIterator<KDCanvasLine> horIt3(*horLineList3);
00943 QPtrListIterator<KDCanvasPolygon> topIt(*topList);
00944 QPtrListIterator<KDCanvasPolygon> topLeftIt(*topLeftList);
00945 QPtrListIterator<KDCanvasPolygon> topRightIt(*topRightList);
00946 QPtrListIterator<KDGanttViewItem> fromIt(fromList);
00947 QPtrListIterator<KDGanttViewItem> toIt(toList);
00948 for ( ; fromIt.current(); ++fromIt ) {
00949 toIt.toFirst();
00950 for ( ; toIt.current(); ++toIt ) {
00951 (*horIt)->hide();
00952 (*verIt)->hide();
00953 (*horIt2)->hide();
00954 (*verIt2)->hide();
00955 (*horIt3)->hide();
00956 (*topIt)->hide();
00957 (*topLeftIt)->hide();
00958 (*topRightIt)->hide();
00959 ++horIt;
00960 ++verIt;
00961 ++horIt2;
00962 ++verIt2;
00963 ++horIt3;
00964 ++topIt;
00965 ++topLeftIt;
00966 ++topRightIt;
00967 }
00968 }
00969 }
00970
00971 QString KDGanttViewTaskLink::linkTypeToString( LinkType type )
00972 {
00973 switch( type ) {
00974 case None:
00975 return "None";
00976 break;
00977 case FinishStart:
00978 return "FinishStart";
00979 break;
00980 case FinishFinish:
00981 return "FinishFinish";
00982 break;
00983 case StartStart:
00984 return "StartStart";
00985 break;
00986 case StartFinish:
00987 return "StartFinish";
00988 break;
00989 default:
00990 break;
00991 }
00992 return "";
00993 }
00994
00995 KDGanttViewTaskLink::LinkType KDGanttViewTaskLink::stringToLinkType( const QString type )
00996 {
00997 if (type == "FinishStart")
00998 return FinishStart;
00999 if (type == "FinishFinish")
01000 return FinishFinish;
01001 if (type == "StartStart")
01002 return StartStart;
01003 if (type == "StartFinish")
01004 return StartFinish;
01005
01006 return None;
01007 }