kdgantt

KDGanttViewItem.cpp
1/*
2 $Id: KDGanttViewItem.cpp 523435 2006-03-28 08:01:15Z mlaurent $
3 KDGantt - a multi-platform charting engine
4*/
5
6/****************************************************************************
7 ** Copyright (C) 2002-2004 Klarälvdalens Datakonsult AB. All rights reserved.
8 **
9 ** This file is part of the KDGantt library.
10 **
11 ** This file may be distributed and/or modified under the terms of the
12 ** GNU General Public License version 2 as published by the Free Software
13 ** Foundation and appearing in the file LICENSE.GPL included in the
14 ** packaging of this file.
15 **
16 ** Licensees holding valid commercial KDGantt licenses may use this file in
17 ** accordance with the KDGantt Commercial License Agreement provided with
18 ** the Software.
19 **
20 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
21 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22 **
23 ** See http://www.klaralvdalens-datakonsult.se/Public/products/ for
24 ** information about KDGantt Commercial License Agreements.
25 **
26 ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
27 ** licensing are not clear to you.
28 **
29 ** As a special exception, permission is given to link this program
30 ** with any edition of TQt, and distribute the resulting executable,
31 ** without including the source code for TQt in the source distribution.
32 **
33 **********************************************************************/
34
35
36#include "KDGanttViewSubwidgets.h"
37#include "KDGanttViewTaskItem.h"
38#include "KDGanttViewSummaryItem.h"
39#include "KDGanttViewEventItem.h"
40#include "itemAttributeDialog.h"
41
42#include "tqpainter.h"
43
44#include "KDGanttXMLTools.h"
45
46
160TQDict<KDGanttViewItem> KDGanttViewItem::sItemDict;
161
172 const TQString& lvtext,
173 const TQString& name ) :
174 TQListViewItem(view->myListView,lvtext)
175{
176 initColorAndShapes(type);
178}
179
180
192 const TQString& lvtext,
193 const TQString& name ) :
194 TQListViewItem(parentItem,lvtext)
195{
196 initColorAndShapes(type);
198}
199
200
213 KDGanttViewItem* after,
214 const TQString& lvtext,
215 const TQString& name ) :
216 TQListViewItem(view->myListView,after, lvtext)
217{
218 initColorAndShapes(type);
220}
221
222
235 KDGanttViewItem* after,
236 const TQString& lvtext,
237 const TQString& name ) :
238 TQListViewItem( parentItem, after, lvtext )
239{
240 initColorAndShapes(type);
242}
243
244
249{
250 myGanttView->notifyEditdialog( this );
251 if ( startLine ) delete startLine;
252 if ( endLine ) delete endLine ;
253 if ( startLineBack ) delete startLineBack ;
254 if ( endLineBack ) delete endLineBack ;
255 if ( actualEnd ) delete actualEnd ;
256 if ( textCanvas ) delete textCanvas ;
257 if ( startShape ) delete startShape ;
258 if ( midShape ) delete midShape ;
259 if ( endShape ) delete endShape ;
260 if ( startShapeBack ) delete startShapeBack ;
261 if ( midShapeBack ) delete midShapeBack ;
262 if ( endShapeBack ) delete endShapeBack ;
263 if ( progressShape ) delete progressShape ;
264 if ( floatStartShape ) delete floatStartShape ;
265 if ( floatEndShape ) delete floatEndShape ;
266 myGanttView->myTimeTable->removeItemFromTasklinks( this );
267 myGanttView->myCanvasView->resetCutPaste( this );
268 if ( listView() ) {
269 if ( isOpen() )
270 setOpen( false );
271 if ( parent() )
272 parent()->takeItem( this );
273 else
274 myGanttView->myListView->takeItem( this );
275 myGanttView->myTimeTable->updateMyContent();
276 }
277 // myGanttView->myTimeTable->removeItemFromTasklinks( this );
278 // myGanttView->myCanvasView->resetCutPaste( this );
279}
280
281
286void KDGanttViewItem::generateAndInsertName( const TQString& name )
287{
288 // First check if we already had a name. This can be the case if
289 // the item was reconstructed from an XML file.
290 if( !_name.isEmpty() )
291 // We had a name, remove it
292 sItemDict.remove( _name );
293
294 TQString newName;
295 if ( name.isEmpty() || sItemDict.find( name ) ) {
296 // create unique name
297 newName.sprintf( "%p", (void* )this );
298 while( sItemDict.find( newName ) ) {
299 newName += "_0";
300 }
301 } else {
302 newName = name;
303 }
304 sItemDict.insert( newName, this );
305 _name = newName;
306}
307
308
314TQString KDGanttViewItem::name() const
315{
316 return _name;
317}
318
319
329{
330 if (name.isEmpty()) // avoid error msg from TQDict
331 return 0;
332 return sItemDict.find( name );
333}
334
335
336
345{
346
347 return myType;
348}
349
350
363{
364 _enabled = on;
365 if ( displaySubitemsAsGroup() ) {
366 myGanttView->myTimeTable->inc_blockUpdating();
368 while (temp != 0) {
369 temp->setEnabled( on );
370 temp = temp->nextSibling();
371 }
372 TQListViewItem::setEnabled( on );
373 myGanttView->myTimeTable->dec_blockUpdating();
374 }
376}
377
378
386{
387 return _enabled;
388}
389
390
391// *********************************
399{
400 if ( on ) {
401 resetSubitemVisibility();
402 } else
403 setVisible( false );
404 //updateCanvasItems();
405 myGanttView->myTimeTable->updateMyContent();
406}
407
408
416{
417 return TQListViewItem::isVisible();
418}
419
420
421// *************************************
422
430void KDGanttViewItem::setEditable( bool editable )
431{
433}
434
435
444{
445 return isEditable;
446}
447
448
462{
463 if ( !show && _displaySubitemsAsGroup)
465 _displaySubitemsAsGroup = show;
466 if ( parent() )
467 if ( parent()->isOpen() )
468 parent()->setOpen( true );
469 if ( isOpen() )
470 setOpen( true );
472}
473
474
483{
484 return _displaySubitemsAsGroup;
485}
486
487
508{
509 if ( prio < 1 )
510 prio = 1;
511 if (prio > 199 )
512 prio = 199;
513 _priority = prio;
515}
516
517
524{
525 return _priority;
526}
527
528
537void KDGanttViewItem::setStartTime( const TQDateTime& )
538{
539}
540
541
549{
550 return myStartTime;
551}
552
553
562void KDGanttViewItem::setEndTime( const TQDateTime& end )
563{
564 switch( type() ) {
565 case Event:
566 tqDebug( "KDGantt:Event Item has no end time" );
567 break;
568 case Summary:
569 ((KDGanttViewSummaryItem*)this)->setEndTime( end );
570 break;
571 case Task:
572 tqDebug( "KDGantt:Task Item has no end time" );
573 break;
574 default:
575 tqDebug( "Unknown type in KDGanttViewItem::typeToString()" );
576 }
577}
578
579
586TQDateTime KDGanttViewItem::endTime() const
587{
588 return myEndTime;
589}
590
591
603void KDGanttViewItem::setText( const TQString& text )
604{
605 textCanvas->setText(text);
608}
609
610
618TQString KDGanttViewItem::text() const
619{
620 return textCanvasText;
621}
622
623
627void KDGanttViewItem::setListViewText( const TQString& text, int column )
628{
629 TQListViewItem::setText( column, text );
630}
631
632
640void KDGanttViewItem::setListViewText( int column, const TQString& text )
641{
642 TQListViewItem::setText( column, text );
643}
644
645
654TQString KDGanttViewItem::listViewText( int column ) const
655{
656 return TQListViewItem::text( column );
657}
658
659
666void KDGanttViewItem::setFont( const TQFont& font )
667{
668 textCanvas->setFont(font);
670}
671
672
680{
681 return textCanvas->font();
682}
683
684
691void KDGanttViewItem::setTooltipText( const TQString& text )
692{
693 myToolTipText = text;
694}
695
696
704{
705
706 return myToolTipText;
707}
708
709
716void KDGanttViewItem::setWhatsThisText( const TQString& text )
717{
718 myWhatsThisText = text;
719}
720
721
730{
731 return myWhatsThisText;
732}
733
734
746void KDGanttViewItem::setHighlight( bool highlight )
747{
749 if ( displaySubitemsAsGroup() ) {
750 myGanttView->myTimeTable->inc_blockUpdating();
752 while (temp != 0) {
753 temp->setHighlight( highlight );
754 temp = temp->nextSibling();
755 }
756 myGanttView->myTimeTable->dec_blockUpdating();
757 }
759}
760
761
770{
771 return isHighlighted;
772}
773
774
787void KDGanttViewItem::setShapes( Shape start, Shape middle, Shape end )
788{
789
790 myStartShape = start;
791 myMiddleShape= middle;
792 myEndShape= end;
793 createShape(startShape,startShapeBack,start);
794 createShape(midShape,midShapeBack,middle);
795 midShape->setZ( 4 );
796 createShape(endShape,endShapeBack,end);
798}
799
800
813void KDGanttViewItem::createShape( KDCanvasPolygonItem* &itemShape,
814 KDCanvasPolygonItem* &itemShapeBack,
815 Shape shape )
816{
817 if ( itemShape && type() == Task )
818 return;
819 if (itemShape) delete itemShape;
820 if (itemShapeBack) delete itemShapeBack;
821
822 TQCanvasPolygonalItem * item;
823 TQCanvasPolygonalItem * itemBack;
824 int size = myItemSize+2;
825 int hei = (myItemSize/3)/2;
826 switch (shape) {
827 case TriangleDown:
828 {
829 item = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
830 TQPointArray arr = TQPointArray(3);
831 arr.setPoint(0,-size/2,-hei);
832 arr.setPoint(1,size/2,-hei);
833 arr.setPoint(2,0,((size/2)-hei));
834 ((TQCanvasPolygon*)item)->setPoints(arr);
835 size += 4;hei +=1;
836 itemBack = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
837 arr.setPoint(0,-size/2,-hei);
838 arr.setPoint(1,size/2,-hei);
839 arr.setPoint(2,0,((size/2)-hei));
840 ((TQCanvasPolygon*)itemBack)->setPoints(arr);
841
842 break;
843 }
844 case TriangleUp:
845 {
846 // I really do not know why, but we get only an TriangleUp-icon
847 // of the same size as a TriangleDown-icon, if we increment the size by 2
848 size+=2;
849 item = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
850 TQPointArray arr = TQPointArray(3);
851 arr.setPoint(0,-size/2,hei);
852 arr.setPoint(1,size/2,hei);
853 arr.setPoint(2,0,(-size/2)+hei);
854 ((TQCanvasPolygon*)item)->setPoints(arr);
855 size += 4;hei +=1;
856 itemBack = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
857 arr.setPoint(0,-size/2,hei);
858 arr.setPoint(1,size/2,hei);
859 arr.setPoint(2,0,(-size/2)+hei);
860 ((TQCanvasPolygon*)itemBack)->setPoints(arr);
861
862 break;
863 }
864
865 case Diamond:
866 {
867 item = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
868 TQPointArray arr = TQPointArray(4);
869 arr.setPoint(0,0,-size/2);
870 arr.setPoint(1,size/2,0);
871 arr.setPoint(2,0,size/2);
872 arr.setPoint(3,-size/2,0);
873 ((TQCanvasPolygon*)item)->setPoints(arr);
874 size += 2;hei +=1;
875 itemBack = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
876 arr.setPoint(0,0,-size/2);
877 arr.setPoint(1,size/2,0);
878 arr.setPoint(2,0,size/2);
879 arr.setPoint(3,-size/2,0);
880 ((TQCanvasPolygon*)itemBack)->setPoints(arr);
881 break;
882 }
883
884 case Square:
885 {
886 size -=2;
887 item = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
888 TQPointArray arr = TQPointArray(4);
889 arr.setPoint(0,-size/2,-size/2);
890 arr.setPoint(1,size/2,-size/2);
891 arr.setPoint(2,size/2,size/2);
892 arr.setPoint(3,-size/2,size/2);
893 ((TQCanvasPolygon*)item)->setPoints(arr);
894 size += 2;hei +=1;
895 itemBack = new KDCanvasPolygon(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
896 arr.setPoint(0,-size/2,-size/2);
897 arr.setPoint(1,size/2,-size/2);
898 arr.setPoint(2,size/2,size/2);
899 arr.setPoint(3,-size/2,size/2);
900 ((TQCanvasPolygon*)itemBack)->setPoints(arr);
901 break;
902 }
903
904 case Circle:
905 {
906 size -= 2;
907 item = new KDCanvasEllipse(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
908 ((KDCanvasEllipse*)item)->setSize(size,size);
909 size += 2;hei +=1;
910 itemBack = new KDCanvasEllipse(myGanttView->myTimeTable, this,Type_is_KDGanttViewItem);
911 ((KDCanvasEllipse*)itemBack)->setSize(size,size);
912 break;
913 }
914 default:
915 // Uninitialized shape, can e.g. be the case with free-busy
916 // items which don't have any shapes
917 return;
918 }
919 item->setBrush(TQt::SolidPattern);
920 item->setZ(5);
921 itemShape = (KDCanvasPolygonItem*) item;
922 itemBack->setBrush(TQt::SolidPattern);
923 itemBack->setZ(3);
924 itemShapeBack = (KDCanvasPolygonItem*) itemBack;
925
926}
927
928
937void KDGanttViewItem::shapes( Shape& start, Shape& middle, Shape& end ) const
938{
939 start = myStartShape;
940 middle = myMiddleShape;
941 end = myEndShape;
942}
943
944
957void KDGanttViewItem::setColors( const TQColor& start, const TQColor& middle,
958 const TQColor& end )
959{
960
961 myStartColor=start ;
962 myMiddleColor= middle;
963 myEndColor= end;
964 if ( displaySubitemsAsGroup() ) {
965 myGanttView->myTimeTable->inc_blockUpdating();
967 while (temp != 0) {
968 temp->setColors( start, middle, end );
969 temp = temp->nextSibling();
970 }
971 myGanttView->myTimeTable->dec_blockUpdating();
972 }
974}
975
976
985void KDGanttViewItem::colors( TQColor& start, TQColor& middle, TQColor& end ) const
986{
987 start = myStartColor ;
988 middle = myMiddleColor;
989 end = myEndColor;
990
991}
992
993
1011void KDGanttViewItem::setHighlightColors( const TQColor& start, const TQColor& middle, const TQColor& end )
1012{
1013 myStartColorHL=start ;
1014 myMiddleColorHL= middle;
1015 myEndColorHL= end;
1016 if ( displaySubitemsAsGroup() ) {
1017 myGanttView->myTimeTable->inc_blockUpdating();
1019 while (temp != 0) {
1020 temp->setHighlightColors( start, middle, end );
1021 temp = temp->nextSibling();
1022 }
1023 myGanttView->myTimeTable->dec_blockUpdating();
1024 }
1026}
1027
1028
1037void KDGanttViewItem::highlightColors( TQColor& start, TQColor& middle, TQColor& end ) const
1038{
1039 start = myStartColorHL ;
1040 middle = myMiddleColorHL;
1041 end = myEndColorHL;
1042}
1043
1044
1057void KDGanttViewItem::setTextColor( const TQColor& color )
1058{
1059
1060 myTextColor = color;
1061 if ( displaySubitemsAsGroup() ) {
1062 myGanttView->myTimeTable->inc_blockUpdating();
1064 while (temp != 0) {
1065 temp->setTextColor(color);
1066 temp = temp->nextSibling();
1067 }
1068 myGanttView->myTimeTable->dec_blockUpdating();
1069 }
1071}
1072
1073
1081{
1082 return myTextColor;
1083}
1084
1085
1108void KDGanttViewItem::setPixmap( int column, const TQPixmap& pixmap )
1109{
1110 TQListViewItem::setPixmap( column, pixmap );
1111}
1112
1116void KDGanttViewItem::setPixmap( const TQPixmap& pixmap )
1117{
1118 TQListViewItem::setPixmap( 0, pixmap );
1119}
1120
1121
1129const TQPixmap* KDGanttViewItem::pixmap( int column ) const
1130{
1131 return TQListViewItem::pixmap( column );
1132}
1133
1134
1150void KDGanttViewItem::setDefaultColor( const TQColor& color )
1151{
1152 myDefaultColor = color;
1153
1154
1155 if ( displaySubitemsAsGroup() ) {
1156 myGanttView->myTimeTable->inc_blockUpdating();
1158 while (temp != 0) {
1159 temp->setDefaultColor( color );
1160 temp = temp->nextSibling();
1161 }
1162 myGanttView->myTimeTable->dec_blockUpdating();
1163 }
1165}
1166
1167
1168
1177{
1178 return myDefaultColor;
1179}
1180
1181
1198{
1199 myDefaultColorHL = color;
1200 if ( displaySubitemsAsGroup() ) {
1201 myGanttView->myTimeTable->inc_blockUpdating();
1203 while (temp != 0) {
1204 temp->setDefaultHighlightColor( color );
1205 temp = temp->nextSibling();
1206 }
1207 myGanttView->myTimeTable->dec_blockUpdating();
1208 }
1210}
1211
1212
1221{
1222 return myDefaultColorHL;
1223}
1224
1225
1232{
1233
1234 return (KDGanttViewItem* )TQListViewItem::firstChild();
1235}
1236
1237
1245{
1246 return (KDGanttViewItem* )TQListViewItem::nextSibling();
1247}
1248
1249
1257{
1258 return (KDGanttViewItem*)TQListViewItem::parent();
1259}
1260
1261
1268{
1269 return (KDGanttViewItem* )TQListViewItem::itemAbove();
1270}
1271
1272
1282{
1283
1284 KDGanttViewItem* retItem = (KDGanttViewItem* )TQListViewItem::itemBelow();
1285 if ( !includeDisabled ) {
1286 return retItem;
1287 }
1288 if ( retItem ) {
1289 if (itemPos() + height() == retItem->itemPos() ) {
1290 return retItem;
1291 }
1292 }
1293 KDGanttViewItem* Item2 = (KDGanttViewItem* )TQListViewItem::listView()->itemAt(TQPoint (2, TQListViewItem::itemPos() + TQListViewItem::height() +2) );
1294 if ( Item2 != 0 )
1295 if (!Item2->enabled() )
1296 return Item2;
1297 return retItem;
1298}
1299
1300
1305{
1306 if (blockUpdating) return;
1307 TQPen p,pBack;
1308 TQBrush b;
1309 b.setStyle(TQt::SolidPattern);
1310 if ( enabled() ) {
1311 textCanvas->setColor(myTextColor);
1312 if (isHighlighted) {
1313 b.setStyle(TQt::SolidPattern);
1314 b.setColor(myStartColorHL);
1315 startShape->setBrush(b);
1316 b.setColor(myMiddleColorHL);
1317 midShape->setBrush(b);
1318 b.setColor(myEndColorHL);
1319 endShape->setBrush(b);
1320 p.setWidth(myItemSize/3 -1);
1321 p.setColor(myStartColorHL);
1322 startLine->setPen(p);
1323 p.setColor(myEndColorHL);
1324 endLine->setPen(p);
1325 } else {
1326 b.setStyle(TQt::SolidPattern);
1327 b.setColor(myStartColor);
1328 // tqDebug("update color %s %s", listViewText().latin1(),myStartColor.name().latin1() );
1329 startShape->setBrush(b);
1330 b.setColor(myMiddleColor);
1331 midShape->setBrush(b);
1332 b.setColor(myEndColor);
1333 endShape->setBrush(b);
1334 p.setWidth(myItemSize/3-1);
1335 p.setColor(myStartColor);
1336 startLine->setPen(p);
1337 p.setColor(myEndColor);
1338 endLine->setPen(p);
1339 }
1340 } else {
1341 //TQColor discol = TQt::lightGray;
1342 TQColor discol = TQColor(232,232,232);
1343 textCanvas->setColor( TQColor(150,150,150) );
1344 b.setStyle(TQt::SolidPattern);
1345 b.setColor(discol);
1346 startShape->setBrush(b);
1347 midShape->setBrush(b);
1348 endShape->setBrush(b);
1349 p.setWidth(myItemSize/3 -1);
1350 p.setColor(discol);
1351 startLine->setPen(p);
1352 endLine->setPen(p);
1353 }
1354 pBack.setWidth((myItemSize/3-1)+2);
1355 startLineBack->setPen(pBack);
1356 endLineBack->setPen(pBack);
1357 TQFont f = textCanvas->font();
1358 f.setPixelSize(myItemSize);
1359 textCanvas->setFont(f);
1360 //if (isvisible) {
1361 myGanttView->myTimeTable->updateMyContent();
1362 //}
1363}
1364
1365
1366void KDGanttViewItem::initItem()
1367{
1368}
1369
1370
1375{
1376 if ( _callListViewOnSetOpen ) {
1377 // notify the listview about a programatically called setOpen()
1378 if ( listView () )
1379 listView ()->setOpen( this, open );
1380
1381 } else {
1382
1383 TQListViewItem::setOpen( open );
1384 }
1385}
1386
1387
1388void KDGanttViewItem::showItem( bool, int )
1389{
1390}
1391
1392
1393TQPoint KDGanttViewItem::getTaskLinkStartCoord(TQPoint p)
1394{
1395 textCanvas->move(p.x()+myItemSize, itemPos() + height()/2-myItemSize/2);
1396 return TQPoint (myGanttView->myTimeHeader->getCoordX(myEndTime) +myItemSize/2,itemPos()+height()/2);
1397}
1398
1399
1400TQPoint KDGanttViewItem::getTaskLinkEndCoord()
1401{
1402 return TQPoint (myGanttView->myTimeHeader->getCoordX(myStartTime)-myItemSize/2 ,itemPos()-myItemSize/2+height()/2-2);
1403}
1404
1405
1406void KDGanttViewItem::hideSubtree()
1407{
1408 if (firstChild())
1409 firstChild()->hideSubtree();
1410 if ( nextSibling () )
1411 nextSibling ()->hideSubtree();
1412 showItem(false);
1413}
1414
1415
1416void KDGanttViewItem::setCallListViewOnSetOpen( bool call )
1417{
1418 _callListViewOnSetOpen = call;
1419}
1420
1421
1422void KDGanttViewItem::initColorAndShapes(Type t)
1423{
1424 setTextOffset(TQPoint(0,0));
1425 //_isCalendar = false;
1426 _callListViewOnSetOpen = true;
1427 myType = t;
1428 myProgress = 0;
1429 progressShape = 0;
1430 floatStartShape = 0;
1431 floatEndShape = 0;
1432 blockUpdating = true;
1433 isVisibleInGanttView = false;
1434 startShape = 0;
1435 midShape = 0;
1436 endShape = 0;
1437 startShapeBack = 0;
1438 midShapeBack = 0;
1439 endShapeBack = 0;
1440
1441 myItemSize = 10;
1442 myGanttView = ((KDListView *)listView())->myGanttView;
1443 myGanttView->myTimeHeader->saveCenterDateTime();
1444 myStartTime = myGanttView->myTimeHeader->myCenterDateTime;
1446 myToolTipText =TQListViewItem::text(0);
1447 myWhatsThisText = TQListViewItem::text(0);
1448 isHighlighted = false;
1449 isEditable = true;
1450 _displaySubitemsAsGroup = myGanttView->displaySubitemsAsGroup();
1451 startLine = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);//KDGanttViewItem );
1452 endLine = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
1453 startLine->setZ(2);endLine->setZ(2);
1454 startLineBack = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);//KDGanttViewItem );
1455 endLineBack = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
1456 startLineBack->setZ(1);endLineBack->setZ(1);
1457 actualEnd = new KDCanvasLine(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
1458 actualEnd->setZ(5);
1459 actualEnd->setPen( TQPen ( TQt::red, 3 ) );
1460
1461 textCanvas = new KDCanvasText(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
1462 textCanvas->setText("");
1463 textCanvas->setZ(10);
1464 // set textcolor
1466 // set default color
1468 // set default highlight color
1470 // set shapes
1471 if (!( shapeDefined = (myGanttView->shapes(myType,myStartShape,myMiddleShape,myEndShape)))) {
1472
1473 //tqDebug("KDGantt::KDGanttViewItem created with not user defined shapes");
1474 };
1475
1476 setShapes(myStartShape,myMiddleShape,myEndShape);
1477 if ( type() == Task ) {
1478 //tqDebug("new task %s ", listViewText().latin1());
1479 if ( startShape )
1480 delete startShape;
1481 startShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
1482 progressShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
1483 }
1484 floatStartShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
1485 floatEndShape = (KDCanvasPolygonItem*)new KDCanvasRectangle(myGanttView->myTimeTable,this,Type_is_KDGanttViewItem);
1486
1487 // set color of shapes
1488 if (!( colorDefined = (myGanttView->colors(myType,myStartColor,myMiddleColor,myEndColor)))) {
1489
1490 };
1492 // set highlight color of shapes
1493 if (!( colorHLDefined = (myGanttView->highlightColors(myType,myStartColorHL,myMiddleColorHL,myEndColorHL)))) {
1494
1495 };
1497 setFont(myGanttView->font());
1498 // if (type() == Task)
1499 //setText(TQListViewItem::text(0)); // testing only
1500 //isvisible = true;
1501 _priority = 150;
1502 _showNoInformation = false;
1503 _enabled = true;
1504 blockUpdating = false;
1506}
1507
1508
1509TQString KDGanttViewItem::shapeToString( Shape shape )
1510{
1511 switch( shape ) {
1512 case TriangleDown:
1513 return "TriangleDown";
1514 case TriangleUp:
1515 return "TriangleUp";
1516 case Diamond:
1517 return "Diamond";
1518 case Square:
1519 return "Square";
1520 case Circle:
1521 return "Circle";
1522 }
1523 return "";
1524}
1525
1526
1527KDGanttViewItem::Shape KDGanttViewItem::stringToShape( const TQString& string )
1528{
1529 if( string == "TriangleDown" )
1530 return TriangleDown;
1531 else if( string == "TriangleUp" )
1532 return TriangleUp;
1533 else if( string == "Diamond" )
1534 return Diamond;
1535 else if( string == "Square" )
1536 return Square;
1537 else if( string == "Circle" )
1538 return Circle;
1539 else
1540 return TriangleDown;
1541}
1542
1543
1550void KDGanttViewItem::createNode( TQDomDocument& doc,
1551 TQDomElement& parentElement )
1552{
1553 TQDomElement itemElement = doc.createElement( "Item" );
1554 parentElement.appendChild( itemElement );
1555 itemElement.setAttribute( "Type", typeToString( type() ) );
1556
1557 KDGanttXML::createDateTimeNode( doc, itemElement, "StartTime", startTime() );
1558 KDGanttXML::createDateTimeNode( doc, itemElement, "EndTime", endTime() );
1559 KDGanttXML::createFontNode( doc, itemElement, "Font", font() );
1560 KDGanttXML::createStringNode( doc, itemElement, "Text", text() );
1561 KDGanttXML::createStringNode( doc, itemElement, "TooltipText", tooltipText() );
1562 KDGanttXML::createStringNode( doc, itemElement, "WhatsThisText",
1563 whatsThisText() );
1564 if( pixmap() )
1565 KDGanttXML::createPixmapNode( doc, itemElement, "Pixmap", *pixmap() );
1566 if( !listViewText().isNull() )
1567 KDGanttXML::createStringNode( doc, itemElement, "ListViewText",
1568 listViewText() );
1569 KDGanttXML::createBoolNode( doc, itemElement, "Open", isOpen() );
1570 KDGanttXML::createBoolNode( doc, itemElement, "Highlight", highlight() );
1571 Shape startShape, middleShape, endShape;
1572 shapes( startShape, middleShape, endShape );
1573 KDGanttXML::createStringNode( doc, itemElement, "StartShape",
1574 shapeToString( startShape ) );
1575 KDGanttXML::createStringNode( doc, itemElement, "MiddleShape",
1576 shapeToString( middleShape ) );
1577 KDGanttXML::createStringNode( doc, itemElement, "EndShape",
1578 shapeToString( endShape ) );
1579 KDGanttXML::createColorNode( doc, itemElement, "DefaultColor", defaultColor() );
1580 TQColor startColor, middleColor, endColor;
1581 colors( startColor, middleColor, endColor );
1582 KDGanttXML::createColorNode( doc, itemElement, "StartColor", startColor );
1583 KDGanttXML::createColorNode( doc, itemElement, "MiddleColor", middleColor );
1584 KDGanttXML::createColorNode( doc, itemElement, "EndColor", endColor );
1585 KDGanttXML::createColorNode( doc, itemElement, "DefaultHighlightColor",
1587 highlightColors( startColor, middleColor, endColor );
1588 KDGanttXML::createColorNode( doc, itemElement, "StartHighlightColor",
1589 startColor );
1590 KDGanttXML::createColorNode( doc, itemElement, "MiddleHighlightColor",
1591 middleColor );
1592 KDGanttXML::createColorNode( doc, itemElement, "EndHighlightColor", endColor );
1593 KDGanttXML::createColorNode( doc, itemElement, "TextColor", textColor() );
1594 KDGanttXML::createStringNode( doc, itemElement, "Name", name() );
1595 TQDomElement itemsElement = doc.createElement( "Items" );
1596 itemElement.appendChild( itemsElement );
1597 KDGanttViewItem* currentItem = firstChild();
1598 while( currentItem ) {
1599 currentItem->createNode( doc, itemsElement );
1600 currentItem = currentItem->nextSibling();
1601 }
1602
1603}
1604
1605
1606
1616 TQDomElement& element )
1617{
1618 TQString typeString = element.attribute( "Type" );
1619 Q_ASSERT( !typeString.isEmpty() );
1620 KDGanttViewItem* item;
1621 if( typeString == "Task" )
1622 item = new KDGanttViewTaskItem( view );
1623 else if( typeString == "Summary" )
1624 item = new KDGanttViewSummaryItem( view );
1625 else if( typeString == "Event" )
1626 item = new KDGanttViewEventItem( view );
1627 else {
1628 tqDebug( "Unknown item type %s in KDGanttViewItem::createFromDomElement()", typeString.latin1() );
1629 return 0;
1630 }
1631
1632 item->loadFromDomElement( element );
1633 return item;
1634}
1635
1636
1647 KDGanttViewItem* previous,
1648 TQDomElement& element )
1649{
1650 TQString typeString = element.attribute( "Type" );
1651 Q_ASSERT( !typeString.isEmpty() );
1652 KDGanttViewItem* item;
1653 if( typeString == "Task" )
1654 item = new KDGanttViewTaskItem( view, previous );
1655 else if( typeString == "Summary" )
1656 item = new KDGanttViewSummaryItem( view, previous );
1657 else if( typeString == "Event" )
1658 item = new KDGanttViewEventItem( view, previous );
1659 else {
1660 tqDebug( "Unknown item type in KDGanttViewItem::createFromDomElement()" );
1661 return 0;
1662 }
1663
1664 item->loadFromDomElement( element );
1665 return item;
1666}
1667
1668
1669
1670
1680 TQDomElement& element )
1681{
1682 TQString typeString = element.attribute( "Type" );
1683 Q_ASSERT( !typeString.isEmpty() );
1684 KDGanttViewItem* item;
1685 if( typeString == "Task" )
1686 item = new KDGanttViewTaskItem( parent );
1687 else if( typeString == "Summary" )
1688 item = new KDGanttViewSummaryItem( parent );
1689 else if( typeString == "Event" )
1690 item = new KDGanttViewEventItem( parent );
1691 else {
1692 tqDebug( "Unknown item type in KDGanttViewItem::createFromDomElement()" );
1693 return 0;
1694 }
1695
1696 item->loadFromDomElement( element );
1697 return item;
1698}
1699
1700
1711 KDGanttViewItem* previous,
1712 TQDomElement& element )
1713{
1714 TQString typeString = element.attribute( "Type" );
1715 Q_ASSERT( !typeString.isEmpty() );
1716 KDGanttViewItem* item;
1717 if( typeString == "Task" )
1718 item = new KDGanttViewTaskItem( parent, previous );
1719 else if( typeString == "Summary" )
1720 item = new KDGanttViewSummaryItem( parent, previous );
1721 else if( typeString == "Event" )
1722 item = new KDGanttViewEventItem( parent, previous );
1723 else {
1724 tqDebug( "Unknown item type in KDGanttViewItem::createFromDomElement()" );
1725 return 0;
1726 }
1727
1728 item->loadFromDomElement( element );
1729 return item;
1730}
1731
1732
1733/*
1734 Fills in the values in the item by reading the DOM element.
1735*/
1736void KDGanttViewItem::loadFromDomElement( TQDomElement& element )
1737{
1738 TQDomNode node = element.firstChild();
1739 Shape startShape = TriangleDown, middleShape = TriangleDown,
1740 endShape = TriangleDown;
1741 TQColor startColor, middleColor, endColor;
1742 TQColor startHighlightColor, middleHighlightColor, endHighlightColor;
1743 TQString tempName;
1744 while( !node.isNull() ) {
1745 TQDomElement element = node.toElement();
1746 if( !element.isNull() ) { // was really an element
1747 TQString tagName = element.tagName();
1748 if( tagName == "StartTime" ) {
1749 TQDateTime value;
1750 if( KDGanttXML::readDateTimeNode( element, value ) )
1751 setStartTime( value );
1752 } else if( tagName == "EndTime" ) {
1753 TQDateTime value;
1754 if( KDGanttXML::readDateTimeNode( element, value ) )
1755 setEndTime( value );
1756 } else if( tagName == "Text" ) {
1757 TQString value;
1758 if( KDGanttXML::readStringNode( element, value ) )
1759 setText( value );
1760 } else if( tagName == "Font" ) {
1761 TQFont value;
1762 if( KDGanttXML::readFontNode( element, value ) )
1763 setFont( value );
1764 } else if( tagName == "TooltipText" ) {
1765 TQString value;
1766 if( KDGanttXML::readStringNode( element, value ) )
1767 setTooltipText( value );
1768 } else if( tagName == "WhatsThisText" ) {
1769 TQString value;
1770 if( KDGanttXML::readStringNode( element, value ) )
1771 setWhatsThisText( value );
1772 } else if( tagName == "Pixmap" ) {
1773 TQPixmap value;
1774 if( KDGanttXML::readPixmapNode( element, value ) )
1775 setPixmap( value );
1776 } else if( tagName == "ListViewText" ) {
1777 TQString value;
1778 if( KDGanttXML::readStringNode( element, value ) )
1779 setListViewText( value );
1780 } else if( tagName == "Open" ) {
1781 bool value;
1782 if( KDGanttXML::readBoolNode( element, value ) )
1783 setOpen( value );
1784 } else if( tagName == "Highlight" ) {
1785 bool value;
1786 if( KDGanttXML::readBoolNode( element, value ) )
1787 setHighlight( value );
1788 } else if( tagName == "StartShape" ) {
1789 TQString value;
1790 if( KDGanttXML::readStringNode( element, value ) )
1791 startShape = stringToShape( value );
1792 } else if( tagName == "MiddleShape" ) {
1793 TQString value;
1794 if( KDGanttXML::readStringNode( element, value ) )
1795 middleShape = stringToShape( value );
1796 } else if( tagName == "EndShape" ) {
1797 TQString value;
1798 if( KDGanttXML::readStringNode( element, value ) )
1799 endShape = stringToShape( value );
1800 } else if( tagName == "DefaultColor" ) {
1801 TQColor value;
1802 if( KDGanttXML::readColorNode( element, value ) )
1803 setDefaultColor( value );
1804 } else if( tagName == "StartColor" ) {
1805 TQColor value;
1806 if( KDGanttXML::readColorNode( element, value ) )
1807 startColor = value;
1808 } else if( tagName == "MiddleColor" ) {
1809 TQColor value;
1810 if( KDGanttXML::readColorNode( element, value ) )
1811 middleColor = value;
1812 } else if( tagName == "EndColor" ) {
1813 TQColor value;
1814 if( KDGanttXML::readColorNode( element, value ) )
1815 endColor = value;
1816 } else if( tagName == "DefaultHighlightColor" ) {
1817 TQColor value;
1818 if( KDGanttXML::readColorNode( element, value ) )
1819 setDefaultHighlightColor( value );
1820 } else if( tagName == "StartHighlightColor" ) {
1821 TQColor value;
1822 if( KDGanttXML::readColorNode( element, value ) )
1823 startHighlightColor = value;
1824 } else if( tagName == "MiddleHighlightColor" ) {
1825 TQColor value;
1826 if( KDGanttXML::readColorNode( element, value ) )
1827 middleHighlightColor = value;
1828 } else if( tagName == "EndHighlightColor" ) {
1829 TQColor value;
1830 if( KDGanttXML::readColorNode( element, value ) )
1831 endHighlightColor = value;
1832 } else if( tagName == "TextColor" ) {
1833 TQColor value;
1834 if( KDGanttXML::readColorNode( element, value ) )
1835 setTextColor( value );
1836 } else if( tagName == "Name" ) {
1837 TQString value;
1838 if( KDGanttXML::readStringNode( element, value ) )
1839 tempName = value;
1840 } else if( tagName == "Items" ) {
1841 TQDomNode node = element.firstChild();
1842 KDGanttViewItem* previous = 0;
1843 while( !node.isNull() ) {
1844 TQDomElement element = node.toElement();
1845 if( !element.isNull() ) { // was really an element
1846 TQString tagName = element.tagName();
1847 if( tagName == "Item" ) {
1848 KDGanttViewItem* newItem;
1849 if( previous )
1850 newItem =
1852 previous,
1853 element );
1854 else
1855 newItem =
1857 element );
1858 previous = newItem;
1859 } else {
1860 tqDebug( "Unrecognized tag name: %s", tagName.latin1() );
1861 Q_ASSERT( false );
1862 }
1863 }
1864
1865 node = node.nextSibling();
1866 }
1867 } else {
1868 tqDebug( "Unrecognized tag name: %s", tagName.latin1() );
1869 Q_ASSERT( false );
1870 }
1871 }
1872
1873 node = node.nextSibling();
1874 }
1875
1876 setColors( startColor, middleColor, endColor );
1877 setHighlightColors( startHighlightColor, middleHighlightColor,
1878 endHighlightColor );
1879 setShapes( startShape, middleShape, endShape );
1880 generateAndInsertName( tempName );
1881}
1882
1883
1884TQString KDGanttViewItem::typeToString( Type type )
1885{
1886 switch( type ) {
1887 case Event:
1888 return "Event";
1889 case Summary:
1890 return "Summary";
1891 case Task:
1892 return "Task";
1893 default:
1894 tqDebug( "Unknown type in KDGanttViewItem::typeToString()" );
1895 return "Summary";
1896 }
1897 return "";
1898}
1899
1900
1907{
1908 return itemPos() + height()/2;
1909}
1910
1911
1912void KDGanttViewItem::showSubItems()
1913{
1914 showSubitemTree( getCoordY() );
1915}
1916
1917
1918void KDGanttViewItem::showSubitemTree( int CoordY )
1919{
1920
1921 KDGanttViewItem* temp = firstChild();
1922 if (temp) {
1923 while (temp != 0) {
1924 if (temp->isOpen() || !temp->displaySubitemsAsGroup() ) {
1925 temp->showItem( true, CoordY );
1926 if ( temp->firstChild() )
1927 temp->firstChild()->hideSubtree();
1928 } else {
1929 if ( temp->displaySubitemsAsGroup() && temp->firstChild() )
1930 temp->hideSubtree();
1931 else {
1932 temp->showSubitemTree( CoordY );
1933 }
1934 }
1935 temp = temp->nextSibling();
1936 }
1937 showItem( false );
1938 } else {
1939 showItem( true, CoordY );
1940 }
1941}
1942
1943
1950{
1951 TQDateTime ret, tempTime;
1952 bool set = true;
1954 if (temp) {
1955 while (temp != 0) {
1956 if ( !temp->displaySubitemsAsGroup() ) {
1957 tempTime = temp->startTime();
1958 } else {
1959 tempTime = temp->myChildStartTime();
1960 }
1961 if ( set ) {
1962 set = false;
1963 ret = tempTime;
1964 } else {
1965 if ( tempTime < ret ) {
1966 ret = tempTime;
1967 }
1968 }
1969 temp = temp->nextSibling();
1970 }
1971 } else {
1972 ret = startTime();
1973 }
1974 return ret;
1975}
1976
1977
1984{
1985 TQDateTime ret, tempTime;
1986 bool set = true;
1988 if (temp) {
1989 while (temp != 0) {
1990 if ( !temp->displaySubitemsAsGroup() ) {
1991 tempTime = temp->endTime();
1992 } else {
1993 tempTime = temp->myChildEndTime();
1994 }
1995 if ( set ) {
1996 set = false;
1997 ret = tempTime;
1998 } else {
1999 if ( tempTime > ret ) {
2000 ret = tempTime;
2001 }
2002 }
2003 temp = temp->nextSibling();
2004 }
2005 } else {
2006 ret = endTime();
2007 }
2008 return ret;
2009}
2010
2011
2019{
2020 return _showNoInformation;
2021}
2022
2023
2036{
2037 _showNoInformation = show;
2038 myGanttView->myTimeTable->updateMyContent();
2039}
2040
2041
2051{
2052 if ( listViewText() == name )
2053 return this;
2054 KDGanttViewItem* temp = firstChild(),* ret;
2055 while (temp != 0) {
2056 if ( (ret = temp->getChildByName( name )))
2057 return ret;
2058 temp = temp->nextSibling();
2059 }
2060 return 0;
2061}
2062
2063
2064/*
2065void KDGanttViewItem::printinfo( TQString s )
2066{
2067 KDGanttViewItem* temp = firstChild();
2068 while (temp != 0) {
2069 temp->printinfo(" "+s );
2070 temp = temp->nextSibling();
2071 }
2072}
2073*/
2074
2075
2084{
2085 KDGanttViewItem* temp = firstChild();
2086 bool ret = false;
2087 while (temp) {
2088 if (temp->firstChild() || temp->displaySubitemsAsGroup() ) {
2089 ret = true;
2090 break;
2091 }
2092 temp = temp->nextSibling();
2093 }
2094 return ret;
2095}
2096
2097
2098int KDGanttViewItem::computeHeight()
2099{
2100 int hei = 0;
2101 // if not visible, hide item and all subitems, return height = 0
2102 if ( !isVisible() ) {
2103 showItem( false );
2104 if ( firstChild() )
2105 firstChild()->hideSubtree();
2106 // tqDebug("KDGanttViewItem::computeHeight() %s returns 0 ", TQListViewItem::text(0).latin1());
2107 return 0;
2108 }
2109
2110 KDGanttViewItem* temp;
2111 bool show = true;
2112
2113 // explanation of terms:
2114 // display opened item as usual:
2115 // display this item opened, display Gantt part on the timeline of this item.
2116 // the same for all subitems: display all subitems on its own timeline
2117 // display closed item as usual:
2118 // display this item closed, display Gantt part on the timeline of this item.
2119 // do not display any subitem.
2120
2121 // desired behaviour:
2122 // if not in calendar mode( GanttView is NOT in calendar mode ):
2123 // opened:
2124 // display opened item as usual
2125 // closed:
2126 // if not displaySubitemsAsGroup()
2127 // display closed item as usual
2128 // else ( displaySubitemsAsGroup() == true )
2129 // display not this item, display subitems on the timeline of this item
2130 // else ( GanttView is in calendar mode )
2131 // 4 cases:
2132 // opened && displaySubitemsAsGroup():
2133 // display not this item, display subitems on the timeline of this item,
2134 // which have the property displaySubitemsAsGroup() == false
2135 // display the other items,
2136 // which have the property displaySubitemsAsGroup() == true,
2137 // as usual below this item on their own timeline
2138 // opened && NOT displaySubitemsAsGroup():
2139 // display opened item as usual
2140 // closed && displaySubitemsAsGroup():
2141 // display not this item, display subitems on the timeline of this item,
2142 // which have the property displaySubitemsAsGroup() == false
2143 // closed && NOT displaySubitemsAsGroup():
2144 // display closed item as usual
2145 //
2146 if ( isOpen() ) {
2147 //tqDebug("KDGanttViewItem::computeHeight() %s is open ", TQListViewItem::text(0).latin1());
2148 temp = firstChild();
2149 // if item opened, iterate over all subitems
2150 int tempHeight;
2151 // introduced special for performance reasons
2152 bool special = displaySubitemsAsGroup() && myGanttView->calendarMode();
2153 while (temp != 0) {
2154 tempHeight = temp->computeHeight();
2155 if ( special ) {
2156 if ( temp->displaySubitemsAsGroup() ) {
2157 hei += tempHeight;
2158 //tqDebug(" hei added ");
2159 } else {
2160 temp->showSubitemTree( getCoordY() );
2161
2162 }
2163 } else {
2164 hei += tempHeight;
2165 //tqDebug(" hei added ");
2166 }
2167 temp = temp->nextSibling();
2168 }
2169 } else { // closed!
2170 //tqDebug("KDGanttViewItem::computeHeight() %s is closed ", TQListViewItem::text(0).latin1());
2171
2172 if ( !displaySubitemsAsGroup() ) {
2173 if ( firstChild() ) {
2174 firstChild()->hideSubtree();
2175 }
2176 } else {
2177 if ( firstChild() ) {
2178 showSubitemTree( getCoordY() );
2179 show = false ;
2180 }
2181 }
2182
2183 }
2184 if ( show )
2185 showItem( true );
2186
2187 hei += height();
2188 //tqDebug("KDGanttViewItem::computeHeight() %s returns: %d ", TQListViewItem::text(0).latin1(), hei);
2189 return hei;
2190}
2191
2192
2193// if this item has at least one subitem which has the property displaySubitemsAsGroup(),
2194// a false is returned
2195bool KDGanttViewItem::showNoCross()
2196{
2197 KDGanttViewItem * temp = firstChild();
2198 if ( !temp )
2199 return false;
2200 while ( temp ) {
2201 if ( temp->displaySubitemsAsGroup() ) {
2202 return false;
2203 }
2204 temp = temp->nextSibling();
2205 }
2206 return true;
2207}
2208
2209
2210void KDGanttViewItem::paintBranches ( TQPainter* p, const TQColorGroup& cg,
2211 int w, int y, int h )
2212{
2213 TQListViewItem::paintBranches ( p, cg, w, y, h);
2214 if ( !myGanttView->calendarMode() )
2215 return;
2216 else {
2217 KDGanttViewItem * temp = firstChild();
2218 while ( temp ) {
2219 if ( temp->showNoCross() ) {
2220 //tqDebug("paintNoCross %s ", temp->listViewText(0).latin1());
2221 int y_coord = temp->itemPos() -height ()- itemPos();
2222 int hei = temp->height();
2223 //tqDebug(" y %d w %d h %d ", y,w,h);
2224 //tqDebug("yc %d hei %d",y_coord,hei );
2225 myGanttView->myListView->paintemptyarea( p, TQRect( 0,y+y_coord,w,hei));
2226 int x_c = w/2;
2227 int y_c = y+y_coord+ temp->height ()/2;
2228 int y_ce ;
2229 if ( temp->itemBelow() && temp->itemBelow()->parent() == this )
2230 y_ce =y+y_coord+ temp->height ();
2231 else
2232 y_ce = y_c;
2233 int i;
2234 for (i = y+y_coord+1; i <= y_ce; i+=2 ) {
2235 p->drawPoint( x_c, i );
2236 }
2237 for (i = x_c+2; i < w; i+=2 ) {
2238 p->drawPoint( i, y_c );
2239 }
2240 }
2241 temp = temp->nextSibling();
2242 }
2243 }
2244}
2245
2246
2247// resets the visibility os the subitems according to the setting of calendar mode
2248void KDGanttViewItem::resetSubitemVisibility()
2249{
2250 KDGanttViewItem* temp;
2251 temp = firstChild();
2252 bool allow = false;
2253 if ( myGanttView->calendarMode() ) {
2254 // in calendarmode only items can be opened which have subitems which have subitems
2255 if ( ! temp ) {
2256 if ( !parent() )
2257 // has no parent, has no child : show!
2258 setVisible( true );
2259 else
2260 // has parent, has no child : hide!
2261 setVisible( false );
2262 return;
2263 }
2264 setVisible( true );
2265 while (temp) {
2266 if (temp->firstChild()) {
2267 allow = true;
2268 temp->resetSubitemVisibility();
2269 }
2270 else {
2271 temp->setVisible(false);
2272 }
2273 temp = temp->nextSibling();
2274 }
2275 } else {
2276 setVisible( true );
2277 // all items can be opened
2278 allow = true;
2279 while (temp != 0) {
2280 temp->resetSubitemVisibility();
2281 temp = temp->nextSibling();
2282 }
2283 }
2284 if ( !allow && isOpen() )
2285 setOpen( false );
2286
2287}
2288
2289
2307/* removed
2308void KDGanttViewItem::setIsCalendar( bool cal )
2309{
2310 _isCalendar = cal;
2311 updateCanvasItems();
2312}
2313*/
2314
2323/* removed
2324bool KDGanttViewItem::isCalendar( ) const
2325{
2326 return _isCalendar;
2327}
2328*/
2329
2330
2466TQPoint KDGanttViewItem::middleLeft()
2467{
2468 return TQPoint(myGanttView->myTimeHeader->getCoordX(myStartTime), itemPos()+height()/2);
2469}
2473TQPoint KDGanttViewItem::middleRight()
2474{
2475 return TQPoint(myGanttView->myTimeHeader->getCoordX(myEndTime), itemPos()+height()/2);
2476}
2481{
2482 int mx = x + myTextOffset.x();
2483 int my = y + myTextOffset.y();
2484 if (myTextOffset.x() != 0)
2485 mx -= 2*myItemSize; // keep old behaviour
2486
2487 textCanvas->move(mx+2*myItemSize,my-myItemSize/2);
2488 //tqDebug("%s: moveTextCanvas(%d,%d) offset: %d,%d moved to %d,%d",listViewText(0).latin1(),x,y,myTextOffset.x(),myTextOffset.y(),mx+2*myItemSize,my-myItemSize/2);
2489}
2490
2495void KDGanttViewItem::moveTextCanvas()
2496{
2497 TQPoint m = myTextOffset+middleRight();
2498 textCanvas->move(m.x(), m.y()-myItemSize/2);
2499}
2500
2504void KDGanttViewItem::setTextOffset(TQPoint p)
2505{
2506 //tqDebug("%s: setTextOffset() offset: %d,%d",listViewText(0).latin1(),p.x(),p.y());
2507 myTextOffset.setX(p.x());
2508 myTextOffset.setY(p.y());
2509}
2510
2511bool KDGanttViewItem::isMyTextCanvas(TQCanvasItem *tc)
2512{
2513 return tc == textCanvas;
2514}
2515
2524{
2525 myProgress = TQMAX(0, percent);
2526 myProgress = TQMIN(100, myProgress);
2527}
2528
2535void KDGanttViewItem::setFloatStartTime(const TQDateTime &start)
2536{
2537 myFloatStartTime = start;
2538}
2539
2546void KDGanttViewItem::setFloatEndTime(const TQDateTime &end)
2547{
2548 myFloatEndTime = end;
2549}
void setTextColor(const TQColor &color)
KDCanvasPolygonItem * midShapeBack
TQString listViewText(int column=0) const
TQColor defaultColor() const
void setFont(const TQFont &font)
void setTooltipText(const TQString &text)
KDCanvasLine * endLine
KDCanvasText * textCanvas
TQString textCanvasText
void setText(const TQString &text)
KDGanttViewItem * getChildByName(const TQString &name)
void setItemVisible(bool on)
const TQPixmap * pixmap(int column=0) const
void setShowNoInformation(bool show)
KDGanttViewItem * itemBelow(bool includeDisabled=true)
TQFont font() const
KDCanvasPolygonItem * startShape
KDCanvasPolygonItem * midShape
virtual void setEndTime(const TQDateTime &end)
TQDateTime myStartTime
void moveTextCanvas(int x, int y)
void setPriority(int prio)
KDGanttViewItem * itemAbove()
virtual void setStartTime(const TQDateTime &start)
void setEditable(bool editable)
void generateAndInsertName(const TQString &name)
static KDGanttViewItem * find(const TQString &name)
KDCanvasLine * actualEnd
KDCanvasPolygonItem * endShapeBack
KDCanvasLine * endLineBack
void setEnabled(bool on)
TQString whatsThisText() const
void setColors(const TQColor &start, const TQColor &middle, const TQColor &end)
void createNode(TQDomDocument &doc, TQDomElement &parentElement)
KDCanvasPolygonItem * startShapeBack
KDGanttViewItem * nextSibling() const
KDGanttViewItem * parent() const
TQDateTime myChildStartTime()
TQDateTime endTime() const
TQString tooltipText() const
KDGanttView * myGanttView
bool editable() const
bool itemVisible() const
KDCanvasLine * startLineBack
TQColor defaultHighlightColor() const
void setFloatStartTime(const TQDateTime &start)
void highlightColors(TQColor &start, TQColor &middle, TQColor &end) const
TQString text() const
void setPixmap(int column, const TQPixmap &pixmap)
static KDGanttViewItem * createFromDomElement(KDGanttView *view, TQDomElement &element)
void setProgress(int percent)
void setShapes(Shape start, Shape middle, Shape end)
void colors(TQColor &start, TQColor &middle, TQColor &end) const
void setFloatEndTime(const TQDateTime &end)
void setDisplaySubitemsAsGroup(bool show)
bool displaySubitemsAsGroup() const
KDGanttViewItem * firstChild() const
TQDateTime myEndTime
void setDefaultColor(const TQColor &)
KDCanvasLine * startLine
void setHighlightColors(const TQColor &start, const TQColor &middle, const TQColor &end)
void setListViewText(const TQString &text, int column=0)
TQColor textColor() const
TQDateTime myChildEndTime()
TQDateTime startTime() const
bool subitemIsCalendar() const
TQString name() const
KDGanttViewItem(Type type, KDGanttView *view, const TQString &lvtext=TQString(), const TQString &name=TQString())
void setWhatsThisText(const TQString &text)
KDCanvasPolygonItem * endShape
bool highlight() const
void shapes(Shape &start, Shape &middle, Shape &end) const
void setDefaultHighlightColor(const TQColor &)
virtual void setOpen(bool o)
bool colors(KDGanttViewItem::Type type, TQColor &start, TQColor &middle, TQColor &end) const
bool calendarMode() const
bool highlightColors(KDGanttViewItem::Type type, TQColor &start, TQColor &middle, TQColor &end) const
TQColor defaultHighlightColor(KDGanttViewItem::Type type) const
TQColor defaultColor(KDGanttViewItem::Type type) const
bool shapes(KDGanttViewItem::Type type, KDGanttViewItem::Shape &start, KDGanttViewItem::Shape &middle, KDGanttViewItem::Shape &end) const
TQColor textColor() const
bool displaySubitemsAsGroup() const