summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagenda.cpp6
-rw-r--r--korganizer/koagendaitem.cpp11
-rw-r--r--korganizer/koagendaitem.h1
3 files changed, 15 insertions, 3 deletions
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp
index 01cef35..0280c74 100644
--- a/korganizer/koagenda.cpp
+++ b/korganizer/koagenda.cpp
@@ -1477,386 +1477,388 @@ void KOAgenda::drawContentsToPainter( QPainter* paint, bool backgroundOnly )// i
1477 if (xEnd > x2) xEnd = x2; 1477 if (xEnd > x2) xEnd = x2;
1478 if ( mSelectedDates[gxStart] == curDate && KOPrefs::instance()->mHighlightCurrentDay ) { 1478 if ( mSelectedDates[gxStart] == curDate && KOPrefs::instance()->mHighlightCurrentDay ) {
1479 if ( KOPrefs::instance()->mUseHighlightLightColor ) 1479 if ( KOPrefs::instance()->mUseHighlightLightColor )
1480 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1480 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1481 KOPrefs::instance()->mWorkingHoursColor.light()); 1481 KOPrefs::instance()->mWorkingHoursColor.light());
1482 else 1482 else
1483 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1483 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1484 KOPrefs::instance()->mWorkingHoursColor.dark()); 1484 KOPrefs::instance()->mWorkingHoursColor.dark());
1485 } else { 1485 } else {
1486 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1486 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1487 KOPrefs::instance()->mWorkingHoursColor); 1487 KOPrefs::instance()->mWorkingHoursColor);
1488 } 1488 }
1489 } 1489 }
1490 ++gxStart; 1490 ++gxStart;
1491 } 1491 }
1492 } 1492 }
1493 } 1493 }
1494 /* 1494 /*
1495 int selectionX = KOGlobals::self()->reverseLayout() ? 1495 int selectionX = KOGlobals::self()->reverseLayout() ?
1496 (mColumns - 1 - mSelectionCellX) * mGridSpacingX : 1496 (mColumns - 1 - mSelectionCellX) * mGridSpacingX :
1497 mSelectionCellX * mGridSpacingX; 1497 mSelectionCellX * mGridSpacingX;
1498 1498
1499 // Draw selection 1499 // Draw selection
1500 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && 1500 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) &&
1501 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { 1501 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) {
1502 // TODO: paint only part within cx,cy,cw,ch 1502 // TODO: paint only part within cx,cy,cw,ch
1503 p->fillRect( selectionX, mSelectionYTop, mGridSpacingX, 1503 p->fillRect( selectionX, mSelectionYTop, mGridSpacingX,
1504 mSelectionHeight, KOPrefs::instance()->mHighlightColor ); 1504 mSelectionHeight, KOPrefs::instance()->mHighlightColor );
1505 } 1505 }
1506 */ 1506 */
1507 // Draw vertical lines of grid 1507 // Draw vertical lines of grid
1508 1508
1509 int x = ((int)(cx/mGridSpacingX))*mGridSpacingX; 1509 int x = ((int)(cx/mGridSpacingX))*mGridSpacingX;
1510 if ( mGridSpacingX > 0 ) { 1510 if ( mGridSpacingX > 0 ) {
1511 while (x < cx + cw) { 1511 while (x < cx + cw) {
1512 p->drawLine(x,cy,x,cy+ch); 1512 p->drawLine(x,cy,x,cy+ch);
1513 x+=mGridSpacingX; 1513 x+=mGridSpacingX;
1514 } 1514 }
1515 } 1515 }
1516 // Draw horizontal lines of grid 1516 // Draw horizontal lines of grid
1517 int y = ((int)(cy/lGridSpacingY))*lGridSpacingY; 1517 int y = ((int)(cy/lGridSpacingY))*lGridSpacingY;
1518 if ( lGridSpacingY > 0 ) { 1518 if ( lGridSpacingY > 0 ) {
1519 while (y < cy + ch) { 1519 while (y < cy + ch) {
1520 p->setPen( SolidLine ); 1520 p->setPen( SolidLine );
1521 p->drawLine(cx,y,cx+cw,y); 1521 p->drawLine(cx,y,cx+cw,y);
1522 y+=lGridSpacingY; 1522 y+=lGridSpacingY;
1523 p->setPen( DotLine ); 1523 p->setPen( DotLine );
1524 p->drawLine(cx,y,cx+cw,y); 1524 p->drawLine(cx,y,cx+cw,y);
1525 y+=lGridSpacingY; 1525 y+=lGridSpacingY;
1526 } 1526 }
1527 p->setPen( SolidLine ); 1527 p->setPen( SolidLine );
1528 } 1528 }
1529 mPixPainter.end() ; 1529 mPixPainter.end() ;
1530} 1530}
1531 1531
1532/* 1532/*
1533 Convert srcollview contents coordinates to agenda grid coordinates. 1533 Convert srcollview contents coordinates to agenda grid coordinates.
1534*/ 1534*/
1535void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy) 1535void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy)
1536{ 1536{
1537 gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX : 1537 gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX :
1538 x/mGridSpacingX; 1538 x/mGridSpacingX;
1539 gy = y/mGridSpacingY; 1539 gy = y/mGridSpacingY;
1540} 1540}
1541 1541
1542/* 1542/*
1543 Convert agenda grid coordinates to scrollview contents coordinates. 1543 Convert agenda grid coordinates to scrollview contents coordinates.
1544*/ 1544*/
1545void KOAgenda::gridToContents (int gx, int gy, int& x, int& y) 1545void KOAgenda::gridToContents (int gx, int gy, int& x, int& y)
1546{ 1546{
1547 x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX: 1547 x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX:
1548 gx*mGridSpacingX; 1548 gx*mGridSpacingX;
1549 y = gy*mGridSpacingY; 1549 y = gy*mGridSpacingY;
1550} 1550}
1551 1551
1552 1552
1553/* 1553/*
1554 Return Y coordinate corresponding to time. Coordinates are rounded to fit into 1554 Return Y coordinate corresponding to time. Coordinates are rounded to fit into
1555 the grid. 1555 the grid.
1556*/ 1556*/
1557int KOAgenda::timeToY(const QTime &time) 1557int KOAgenda::timeToY(const QTime &time)
1558{ 1558{
1559 int minutesPerCell = 24 * 60 / mRows; 1559 int minutesPerCell = 24 * 60 / mRows;
1560 int timeMinutes = time.hour() * 60 + time.minute(); 1560 int timeMinutes = time.hour() * 60 + time.minute();
1561 int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell; 1561 int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell;
1562 return Y; 1562 return Y;
1563} 1563}
1564 1564
1565 1565
1566/* 1566/*
1567 Return time corresponding to cell y coordinate. Coordinates are rounded to 1567 Return time corresponding to cell y coordinate. Coordinates are rounded to
1568 fit into the grid. 1568 fit into the grid.
1569*/ 1569*/
1570QTime KOAgenda::gyToTime(int gy) 1570QTime KOAgenda::gyToTime(int gy)
1571{ 1571{
1572 1572
1573 int secondsPerCell = 24 * 60 * 60/ mRows; 1573 int secondsPerCell = 24 * 60 * 60/ mRows;
1574 1574
1575 int timeSeconds = secondsPerCell * gy; 1575 int timeSeconds = secondsPerCell * gy;
1576 1576
1577 QTime time( 0, 0, 0 ); 1577 QTime time( 0, 0, 0 );
1578 if ( timeSeconds < 24 * 60 * 60 ) { 1578 if ( timeSeconds < 24 * 60 * 60 ) {
1579 time = time.addSecs(timeSeconds); 1579 time = time.addSecs(timeSeconds);
1580 } else { 1580 } else {
1581 time.setHMS( 23, 59, 59 ); 1581 time.setHMS( 23, 59, 59 );
1582 } 1582 }
1583 1583
1584 return time; 1584 return time;
1585} 1585}
1586 1586
1587void KOAgenda::setStartHour(int startHour) 1587void KOAgenda::setStartHour(int startHour)
1588{ 1588{
1589 int startCell = startHour * mRows / 24; 1589 int startCell = startHour * mRows / 24;
1590 setContentsPos(0,startCell * gridSpacingY()); 1590 setContentsPos(0,startCell * gridSpacingY());
1591} 1591}
1592void KOAgenda::hideUnused() 1592void KOAgenda::hideUnused()
1593{ 1593{
1594 // experimental only 1594 // experimental only
1595 // return; 1595 // return;
1596 KOAgendaItem *item; 1596 KOAgendaItem *item;
1597 for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) { 1597 for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) {
1598 item->hide(); 1598 item->hide();
1599 } 1599 }
1600} 1600}
1601 1601
1602 1602
1603KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view) 1603KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view)
1604{ 1604{
1605 1605
1606 KOAgendaItem *fi; 1606 KOAgendaItem *fi;
1607 for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) { 1607 for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) {
1608 if ( fi->incidence() == event ) { 1608 if ( fi->incidence() == event ) {
1609 mUnusedItems.remove(); 1609 mUnusedItems.remove();
1610 fi->init( event, qd ); 1610 fi->init( event, qd );
1611 return fi; 1611 return fi;
1612 } 1612 }
1613 } 1613 }
1614 fi=mUnusedItems.first(); 1614 fi=mUnusedItems.first();
1615 if ( fi ) { 1615 if ( fi ) {
1616 mUnusedItems.remove(); 1616 mUnusedItems.remove();
1617 fi->init( event, qd ); 1617 fi->init( event, qd );
1618 return fi; 1618 return fi;
1619 } 1619 }
1620 // qDebug("new KOAgendaItem "); 1620 // qDebug("new KOAgendaItem ");
1621 1621
1622 KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode ); 1622 KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode );
1623 agendaItem->installEventFilter(this); 1623 agendaItem->installEventFilter(this);
1624 addChild(agendaItem,0,0); 1624 addChild(agendaItem,0,0);
1625 return agendaItem; 1625 return agendaItem;
1626} 1626}
1627KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo ) 1627KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo )
1628{ 1628{
1629 KOAgendaItem *item; 1629 KOAgendaItem *item;
1630 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1630 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1631 if ( item->incidence() == todo ) { 1631 if ( item->incidence() == todo ) {
1632 mItems.remove(); 1632 mItems.remove();
1633 return item; 1633 return item;
1634 } 1634 }
1635 } 1635 }
1636 return 0; 1636 return 0;
1637} 1637}
1638 1638
1639 1639
1640void KOAgenda::updateTodo( Todo * todo, int days, bool remove) 1640void KOAgenda::updateTodo( Todo * todo, int days, bool remove)
1641{ 1641{
1642 // ( todo->hasCompletedDate() && todo->completed().date() == currentDate )|| 1642 // ( todo->hasCompletedDate() && todo->completed().date() == currentDate )||
1643 KOAgendaItem *item; 1643 KOAgendaItem *item;
1644 item = getItemForTodo ( todo ); 1644 item = getItemForTodo ( todo );
1645 //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove); 1645 //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove);
1646 if ( item ) { 1646 if ( item ) {
1647 blockSignals( true ); 1647 blockSignals( true );
1648 //qDebug("item found "); 1648 //qDebug("item found ");
1649 item->hide(); 1649 item->hide();
1650 item->setCellX(-2, -1 ); 1650 item->setCellX(-2, -1 );
1651 item->select(false); 1651 item->select(false);
1652 mUnusedItems.append( item ); 1652 mUnusedItems.append( item );
1653 mItems.remove( item ); 1653 mItems.remove( item );
1654 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); 1654 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems();
1655 KOAgendaItem *itemit; 1655 KOAgendaItem *itemit;
1656 //globalFlagBlockAgendaItemPaint = 1; 1656 //globalFlagBlockAgendaItemPaint = 1;
1657 for ( itemit=oldconflictItems.first(); itemit != 0; 1657 for ( itemit=oldconflictItems.first(); itemit != 0;
1658 itemit=oldconflictItems.next() ) { 1658 itemit=oldconflictItems.next() ) {
1659 if ( itemit != item ) 1659 if ( itemit != item )
1660 placeSubCells(itemit); 1660 placeSubCells(itemit);
1661 } 1661 }
1662 qApp->processEvents(); 1662 qApp->processEvents();
1663 //globalFlagBlockAgendaItemPaint = 0; 1663 //globalFlagBlockAgendaItemPaint = 0;
1664 for ( itemit=oldconflictItems.first(); itemit != 0; 1664 for ( itemit=oldconflictItems.first(); itemit != 0;
1665 itemit=oldconflictItems.next() ) { 1665 itemit=oldconflictItems.next() ) {
1666 globalFlagBlockAgendaItemUpdate = 0; 1666 globalFlagBlockAgendaItemUpdate = 0;
1667 if ( itemit != item ) 1667 if ( itemit != item )
1668 itemit->repaintMe(); 1668 itemit->repaintMe();
1669 globalFlagBlockAgendaItemUpdate = 1; 1669 globalFlagBlockAgendaItemUpdate = 1;
1670 itemit->repaint(); 1670 //qDebug("sigleshot ");
1671 QTimer::singleShot( 0, itemit, SLOT ( repaintItem() ));
1672 //itemit->repaint( false ); repaintItem()
1671 } 1673 }
1672 blockSignals( false ); 1674 blockSignals( false );
1673 } 1675 }
1674 if ( remove ) { 1676 if ( remove ) {
1675 //qDebug("remove****************************************** "); 1677 //qDebug("remove****************************************** ");
1676 return; 1678 return;
1677 } 1679 }
1678 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda ) 1680 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda )
1679 return; 1681 return;
1680 //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ "); 1682 //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ ");
1681 QDate currentDate = QDate::currentDate(); 1683 QDate currentDate = QDate::currentDate();
1682 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < currentDate)&& ( KOPrefs::instance()->mShowTodoInAgenda ); 1684 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < currentDate)&& ( KOPrefs::instance()->mShowTodoInAgenda );
1683 QDateTime dt; 1685 QDateTime dt;
1684 if ( todo->hasCompletedDate() ) 1686 if ( todo->hasCompletedDate() )
1685 dt = todo->completed(); 1687 dt = todo->completed();
1686 else 1688 else
1687 dt = todo->dtDue(); 1689 dt = todo->dtDue();
1688 if ( overdue ) { 1690 if ( overdue ) {
1689 days += todo->dtDue().date().daysTo( currentDate ); 1691 days += todo->dtDue().date().daysTo( currentDate );
1690 } 1692 }
1691 else 1693 else
1692 currentDate = dt.date(); 1694 currentDate = dt.date();
1693 1695
1694 if (( todo->doesFloat() || overdue) && !todo->hasCompletedDate() ) { 1696 if (( todo->doesFloat() || overdue) && !todo->hasCompletedDate() ) {
1695 if ( ! mAllDayMode ) return; 1697 if ( ! mAllDayMode ) return;
1696 // aldayagenda 1698 // aldayagenda
1697 globalFlagBlockAgendaItemPaint = 1; 1699 globalFlagBlockAgendaItemPaint = 1;
1698 item = insertAllDayItem(todo, currentDate,days, days); 1700 item = insertAllDayItem(todo, currentDate,days, days);
1699 item->show(); 1701 item->show();
1700 1702
1701 } 1703 }
1702 else { 1704 else {
1703 if ( mAllDayMode ) return; 1705 if ( mAllDayMode ) return;
1704 // mAgenda 1706 // mAgenda
1705 globalFlagBlockAgendaItemPaint = 1; 1707 globalFlagBlockAgendaItemPaint = 1;
1706 int endY = timeToY(dt.time()) - 1; 1708 int endY = timeToY(dt.time()) - 1;
1707 int hi = 12/KOPrefs::instance()->mHourSize; 1709 int hi = 12/KOPrefs::instance()->mHourSize;
1708 int startY = endY - 1-hi; 1710 int startY = endY - 1-hi;
1709 item = insertItem(todo,currentDate,days,startY,endY); 1711 item = insertItem(todo,currentDate,days,startY,endY);
1710 item->show(); 1712 item->show();
1711 } 1713 }
1712 qApp->processEvents(); 1714 qApp->processEvents();
1713 globalFlagBlockAgendaItemPaint = 0; 1715 globalFlagBlockAgendaItemPaint = 0;
1714 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); 1716 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems();
1715 KOAgendaItem *itemit; 1717 KOAgendaItem *itemit;
1716 for ( itemit=oldconflictItems.first(); itemit != 0; 1718 for ( itemit=oldconflictItems.first(); itemit != 0;
1717 itemit=oldconflictItems.next() ) { 1719 itemit=oldconflictItems.next() ) {
1718 globalFlagBlockAgendaItemUpdate = 0; 1720 globalFlagBlockAgendaItemUpdate = 0;
1719 itemit->repaintMe(); 1721 itemit->repaintMe();
1720 globalFlagBlockAgendaItemUpdate = 1; 1722 globalFlagBlockAgendaItemUpdate = 1;
1721 itemit->repaint(); 1723 itemit->repaint();
1722 } 1724 }
1723 globalFlagBlockAgendaItemUpdate = 0; 1725 globalFlagBlockAgendaItemUpdate = 0;
1724 item->repaintMe(); 1726 item->repaintMe();
1725 globalFlagBlockAgendaItemUpdate = 1; 1727 globalFlagBlockAgendaItemUpdate = 1;
1726 item->repaint(); 1728 item->repaint();
1727} 1729}
1728/* 1730/*
1729 Insert KOAgendaItem into agenda. 1731 Insert KOAgendaItem into agenda.
1730*/ 1732*/
1731KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom) 1733KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom)
1732{ 1734{
1733 if (mAllDayMode) { 1735 if (mAllDayMode) {
1734 qDebug("KOAgenda: calling insertItem in all-day mode is illegal. "); 1736 qDebug("KOAgenda: calling insertItem in all-day mode is illegal. ");
1735 return 0; 1737 return 0;
1736 } 1738 }
1737 1739
1738 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); 1740 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport());
1739 //agendaItem->setFrameStyle(WinPanel|Raised); 1741 //agendaItem->setFrameStyle(WinPanel|Raised);
1740 1742
1741 int YSize = YBottom - YTop + 1; 1743 int YSize = YBottom - YTop + 1;
1742 if (YSize < 0) { 1744 if (YSize < 0) {
1743 YSize = 1; 1745 YSize = 1;
1744 } 1746 }
1745 int iheight = mGridSpacingY * YSize; 1747 int iheight = mGridSpacingY * YSize;
1746 1748
1747 agendaItem->resize(mGridSpacingX,iheight ); 1749 agendaItem->resize(mGridSpacingX,iheight );
1748 agendaItem->setCellXY(X,YTop,YBottom); 1750 agendaItem->setCellXY(X,YTop,YBottom);
1749 agendaItem->setCellXWidth(X); 1751 agendaItem->setCellXWidth(X);
1750 1752
1751 //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY); 1753 //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY);
1752 mItems.append(agendaItem); 1754 mItems.append(agendaItem);
1753 1755
1754 placeSubCells(agendaItem); 1756 placeSubCells(agendaItem);
1755 1757
1756 //agendaItem->show(); 1758 //agendaItem->show();
1757 1759
1758 marcus_bains(); 1760 marcus_bains();
1759 1761
1760 return agendaItem; 1762 return agendaItem;
1761} 1763}
1762 1764
1763 1765
1764/* 1766/*
1765 Insert all-day KOAgendaItem into agenda. 1767 Insert all-day KOAgendaItem into agenda.
1766*/ 1768*/
1767KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd) 1769KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd)
1768{ 1770{
1769 if (!mAllDayMode) { 1771 if (!mAllDayMode) {
1770 return 0; 1772 return 0;
1771 } 1773 }
1772 1774
1773 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); 1775 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport());
1774 1776
1775 agendaItem->setCellXY(XBegin,0,0); 1777 agendaItem->setCellXY(XBegin,0,0);
1776 agendaItem->setCellXWidth(XEnd); 1778 agendaItem->setCellXWidth(XEnd);
1777 agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY); 1779 agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY);
1778 1780
1779 //addChild(agendaItem,XBegin*mGridSpacingX,0); 1781 //addChild(agendaItem,XBegin*mGridSpacingX,0);
1780 mItems.append(agendaItem); 1782 mItems.append(agendaItem);
1781 1783
1782 placeSubCells(agendaItem); 1784 placeSubCells(agendaItem);
1783 1785
1784 //agendaItem->show(); 1786 //agendaItem->show();
1785 1787
1786 return agendaItem; 1788 return agendaItem;
1787} 1789}
1788 1790
1789 1791
1790void KOAgenda::insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, 1792void KOAgenda::insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd,
1791 int YTop,int YBottom) 1793 int YTop,int YBottom)
1792{ 1794{
1793 if (mAllDayMode) { 1795 if (mAllDayMode) {
1794 ; 1796 ;
1795 return; 1797 return;
1796 } 1798 }
1797 1799
1798 int cellX,cellYTop,cellYBottom; 1800 int cellX,cellYTop,cellYBottom;
1799 QString newtext; 1801 QString newtext;
1800 int width = XEnd - XBegin + 1; 1802 int width = XEnd - XBegin + 1;
1801 int count = 0; 1803 int count = 0;
1802 KOAgendaItem *current = 0; 1804 KOAgendaItem *current = 0;
1803 QPtrList<KOAgendaItem> multiItems; 1805 QPtrList<KOAgendaItem> multiItems;
1804 for (cellX = XBegin;cellX <= XEnd;++cellX) { 1806 for (cellX = XBegin;cellX <= XEnd;++cellX) {
1805 if (cellX == XBegin) cellYTop = YTop; 1807 if (cellX == XBegin) cellYTop = YTop;
1806 else cellYTop = 0; 1808 else cellYTop = 0;
1807 if (cellX == XEnd) cellYBottom = YBottom; 1809 if (cellX == XEnd) cellYBottom = YBottom;
1808 else cellYBottom = rows() - 1; 1810 else cellYBottom = rows() - 1;
1809 newtext = QString("(%1/%2): ").arg(++count).arg(width); 1811 newtext = QString("(%1/%2): ").arg(++count).arg(width);
1810 newtext.append(event->summary()); 1812 newtext.append(event->summary());
1811 current = insertItem(event,qd,cellX,cellYTop,cellYBottom); 1813 current = insertItem(event,qd,cellX,cellYTop,cellYBottom);
1812 current->setText(newtext); 1814 current->setText(newtext);
1813 multiItems.append(current); 1815 multiItems.append(current);
1814 } 1816 }
1815 1817
1816 KOAgendaItem *next = 0; 1818 KOAgendaItem *next = 0;
1817 KOAgendaItem *last = multiItems.last(); 1819 KOAgendaItem *last = multiItems.last();
1818 KOAgendaItem *first = multiItems.first(); 1820 KOAgendaItem *first = multiItems.first();
1819 KOAgendaItem *setFirst,*setLast; 1821 KOAgendaItem *setFirst,*setLast;
1820 current = first; 1822 current = first;
1821 while (current) { 1823 while (current) {
1822 next = multiItems.next(); 1824 next = multiItems.next();
1823 if (current == first) setFirst = 0; 1825 if (current == first) setFirst = 0;
1824 else setFirst = first; 1826 else setFirst = first;
1825 if (current == last) setLast = 0; 1827 if (current == last) setLast = 0;
1826 else setLast = last; 1828 else setLast = last;
1827 1829
1828 current->setMultiItem(setFirst,next,setLast); 1830 current->setMultiItem(setFirst,next,setLast);
1829 current = next; 1831 current = next;
1830 } 1832 }
1831 1833
1832 marcus_bains(); 1834 marcus_bains();
1833} 1835}
1834 1836
1835 1837
1836//QSizePolicy KOAgenda::sizePolicy() const 1838//QSizePolicy KOAgenda::sizePolicy() const
1837//{ 1839//{
1838 // Thought this would make the all-day event agenda minimum size and the 1840 // Thought this would make the all-day event agenda minimum size and the
1839 // normal agenda take the remaining space. But it doesn´t work. The QSplitter 1841 // normal agenda take the remaining space. But it doesn´t work. The QSplitter
1840 // don´t seem to think that an Expanding widget needs more space than a 1842 // don´t seem to think that an Expanding widget needs more space than a
1841 // Preferred one. 1843 // Preferred one.
1842 // But it doesn´t hurt, so it stays. 1844 // But it doesn´t hurt, so it stays.
1843// if (mAllDayMode) { 1845// if (mAllDayMode) {
1844// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); 1846// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
1845// } else { 1847// } else {
1846// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); 1848// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
1847// } 1849// }
1848//} 1850//}
1849void KOAgenda::finishResize ( ) 1851void KOAgenda::finishResize ( )
1850{ 1852{
1851 //qDebug("finishResize+++++++++++++++++++++++++++++++ ( ) "); 1853 //qDebug("finishResize+++++++++++++++++++++++++++++++ ( ) ");
1852 if ( globalFlagBlockAgenda == 0 ) { 1854 if ( globalFlagBlockAgenda == 0 ) {
1853 finishUpdate(); 1855 finishUpdate();
1854 //qDebug("finishUpdate() called "); 1856 //qDebug("finishUpdate() called ");
1855 } 1857 }
1856} 1858}
1857/* 1859/*
1858 Overridden from QScrollView to provide proper resizing of KOAgendaItems. 1860 Overridden from QScrollView to provide proper resizing of KOAgendaItems.
1859*/ 1861*/
1860void KOAgenda::resizeEvent ( QResizeEvent *ev ) 1862void KOAgenda::resizeEvent ( QResizeEvent *ev )
1861{ 1863{
1862 mSelectionHeight = 0; 1864 mSelectionHeight = 0;
diff --git a/korganizer/koagendaitem.cpp b/korganizer/koagendaitem.cpp
index f855b03..8675ff6 100644
--- a/korganizer/koagendaitem.cpp
+++ b/korganizer/koagendaitem.cpp
@@ -303,391 +303,400 @@ void KOAgendaItem::select(bool selected)
303 KOAgendaItem * placeItem = nextMultiItem(); 303 KOAgendaItem * placeItem = nextMultiItem();
304 while ( placeItem ) { 304 while ( placeItem ) {
305 placeItem->select( selected ); 305 placeItem->select( selected );
306 placeItem = placeItem->nextMultiItem(); 306 placeItem = placeItem->nextMultiItem();
307 } 307 }
308 } 308 }
309 globalFlagBlockAgendaItemUpdate = 0; 309 globalFlagBlockAgendaItemUpdate = 0;
310 paintMe( selected ); 310 paintMe( selected );
311 globalFlagBlockAgendaItemUpdate = 1; 311 globalFlagBlockAgendaItemUpdate = 1;
312 repaint( false ); 312 repaint( false );
313} 313}
314 314
315 315
316/* 316/*
317 The eventFilter has to filter the mouse events of the agenda item childs. The 317 The eventFilter has to filter the mouse events of the agenda item childs. The
318 events are fed into the event handling method of KOAgendaItem. This allows the 318 events are fed into the event handling method of KOAgendaItem. This allows the
319 KOAgenda to handle the KOAgendaItems by using an eventFilter. 319 KOAgenda to handle the KOAgendaItems by using an eventFilter.
320*/ 320*/
321bool KOAgendaItem::eventFilter ( QObject *object, QEvent *e ) 321bool KOAgendaItem::eventFilter ( QObject *object, QEvent *e )
322{ 322{
323 if (e->type() == QEvent::MouseButtonPress || 323 if (e->type() == QEvent::MouseButtonPress ||
324 e->type() == QEvent::MouseButtonDblClick || 324 e->type() == QEvent::MouseButtonDblClick ||
325 e->type() == QEvent::MouseButtonRelease || 325 e->type() == QEvent::MouseButtonRelease ||
326 e->type() == QEvent::MouseMove) { 326 e->type() == QEvent::MouseMove) {
327 QMouseEvent *me = (QMouseEvent *)e; 327 QMouseEvent *me = (QMouseEvent *)e;
328 QPoint itemPos = this->mapFromGlobal(((QWidget *)object)-> 328 QPoint itemPos = this->mapFromGlobal(((QWidget *)object)->
329 mapToGlobal(me->pos())); 329 mapToGlobal(me->pos()));
330 QMouseEvent returnEvent (e->type(),itemPos,me->button(),me->state()); 330 QMouseEvent returnEvent (e->type(),itemPos,me->button(),me->state());
331 return event(&returnEvent); 331 return event(&returnEvent);
332 } else { 332 } else {
333 return false; 333 return false;
334 } 334 }
335} 335}
336void KOAgendaItem::repaintMe( ) 336void KOAgendaItem::repaintMe( )
337{ 337{
338 paintMe ( mSelected ); 338 paintMe ( mSelected );
339} 339}
340void KOAgendaItem::paintMe( bool selected, QPainter* paint ) 340void KOAgendaItem::paintMe( bool selected, QPainter* paint )
341{ 341{
342 if ( globalFlagBlockAgendaItemUpdate && ! selected) 342 if ( globalFlagBlockAgendaItemUpdate && ! selected)
343 return; 343 return;
344 QPainter pa; 344 QPainter pa;
345 345
346 if ( mSelected ) { 346 if ( mSelected ) {
347 pa.begin( this ); 347 pa.begin( this );
348 } else { 348 } else {
349 if ( mAllDay ) 349 if ( mAllDay )
350 pa.begin( paintPixAllday() ); 350 pa.begin( paintPixAllday() );
351 else 351 else
352 pa.begin( paintPix() ); 352 pa.begin( paintPix() );
353 } 353 }
354 int x, yy, w, h; 354 int x, yy, w, h;
355 float nfh = 7.0; 355 float nfh = 7.0;
356 x = pos().x(); w = width(); h = height (); 356 x = pos().x(); w = width(); h = height ();
357 if ( mAllDay ) 357 if ( mAllDay )
358 yy = y(); 358 yy = y();
359 else 359 else
360 yy = mCellYTop * ( height() / cellHeight() ); 360 yy = mCellYTop * ( height() / cellHeight() );
361 if ( mSelected ) { 361 if ( mSelected ) {
362 pa.translate( -x, -yy ); 362 pa.translate( -x, -yy );
363 } 363 }
364 xPaintCoord= x; 364 xPaintCoord= x;
365 yPaintCoord = yy; 365 yPaintCoord = yy;
366 wPaintCoord = width(); 366 wPaintCoord = width();
367 hPaintCoord = height(); 367 hPaintCoord = height();
368 //qDebug("paintMe %s %d %d %d %d",incidence()->summary().latin1(), x, yy, width(), height()); 368 //qDebug("paintMe %s %d %d %d %d",incidence()->summary().latin1(), x, yy, width(), height());
369 if ( paint == 0 ) 369 if ( paint == 0 )
370 paint = &pa; 370 paint = &pa;
371 bool horLayout = ( w < h ); 371 bool horLayout = ( w < h );
372 int maxhei = mFontPixelSize+4; 372 int maxhei = mFontPixelSize+4;
373 if ( horLayout ) 373 if ( horLayout )
374 maxhei += AGENDA_ICON_SIZE -4; 374 maxhei += AGENDA_ICON_SIZE -4;
375 bool small = ( h < maxhei ); 375 bool small = ( h < maxhei );
376 if ( ! small ) 376 if ( ! small )
377 paint->setFont(KOPrefs::instance()->mAgendaViewFont); 377 paint->setFont(KOPrefs::instance()->mAgendaViewFont);
378 else { 378 else {
379 QFont f = KOPrefs::instance()->mAgendaViewFont; 379 QFont f = KOPrefs::instance()->mAgendaViewFont;
380 f.setBold( false ); 380 f.setBold( false );
381 int fh = f.pointSize(); 381 int fh = f.pointSize();
382 nfh = (((float)height())/(float)(mFontPixelSize+4))*fh; 382 nfh = (((float)height())/(float)(mFontPixelSize+4))*fh;
383 if ( nfh < 6 ) 383 if ( nfh < 6 )
384 nfh = 6; 384 nfh = 6;
385 f.setPointSize( nfh ); 385 f.setPointSize( nfh );
386 paint->setFont(f); 386 paint->setFont(f);
387 } 387 }
388 paint->fillRect ( x, yy, w, h, mBackgroundColor ); 388 paint->fillRect ( x, yy, w, h, mBackgroundColor );
389 static const QPixmap completedPxmp = SmallIcon("greenhook16"); 389 static const QPixmap completedPxmp = SmallIcon("greenhook16");
390 static const QPixmap overduePxmp = SmallIcon("redcross16"); 390 static const QPixmap overduePxmp = SmallIcon("redcross16");
391 if ( mIncidence->typeID() == todoID ) { 391 if ( mIncidence->typeID() == todoID ) {
392 Todo* tempTodo = static_cast<Todo*>(mIncidence); 392 Todo* tempTodo = static_cast<Todo*>(mIncidence);
393 int xx = pos().x()+(width()-completedPxmp.width()-3 ); 393 int xx = pos().x()+(width()-completedPxmp.width()-3 );
394 int yyy = yy+3; 394 int yyy = yy+3;
395 if ( tempTodo->isCompleted() ) 395 if ( tempTodo->isCompleted() )
396 paint->drawPixmap ( xx, yyy, completedPxmp ); 396 paint->drawPixmap ( xx, yyy, completedPxmp );
397 else { 397 else {
398 paint->drawPixmap ( xx, yyy, overduePxmp ); 398 paint->drawPixmap ( xx, yyy, overduePxmp );
399 399
400 } 400 }
401 } 401 }
402 bool addIcon = false; 402 bool addIcon = false;
403 if ( ! small || w > 3 * h || h > 3* w ) 403 if ( ! small || w > 3 * h || h > 3* w )
404 addIcon = updateIcons( paint, horLayout ); 404 addIcon = updateIcons( paint, horLayout );
405 405
406 //qDrawShadePanel (paint, x, yy, w, h, mColorGroup, selected , 2, 0); 406 //qDrawShadePanel (paint, x, yy, w, h, mColorGroup, selected , 2, 0);
407 qDrawWinPanel (paint, x, yy, w, h, mColorGroup, selected ,0); 407 qDrawWinPanel (paint, x, yy, w, h, mColorGroup, selected ,0);
408 //qDebug("draw rect %d %d %d %d ",x, yy, w, h ); 408 //qDebug("draw rect %d %d %d %d ",x, yy, w, h );
409 if ( ! small ) { 409 if ( ! small ) {
410 x += 3; yy += 3;w -= 6; h-= 5; 410 x += 3; yy += 3;w -= 6; h-= 5;
411 } else { 411 } else {
412 x += 2; yy += 1;w -= 4; h-= 4; 412 x += 2; yy += 1;w -= 4; h-= 4;
413 if ( nfh < 6.01 ) { 413 if ( nfh < 6.01 ) {
414 yy -= 2; 414 yy -= 2;
415 h += 4; 415 h += 4;
416 } 416 }
417 else 417 else
418 if ( nfh < h -2 ) 418 if ( nfh < h -2 )
419 ++yy; 419 ++yy;
420 } 420 }
421 int align; 421 int align;
422#ifndef DESKTOP_VERSION 422#ifndef DESKTOP_VERSION
423 align = ( AlignLeft|WordBreak|AlignTop); 423 align = ( AlignLeft|WordBreak|AlignTop);
424#else 424#else
425 align = ( AlignLeft|BreakAnywhere|WordBreak|AlignTop); 425 align = ( AlignLeft|BreakAnywhere|WordBreak|AlignTop);
426#endif 426#endif
427 if ( addIcon ) { 427 if ( addIcon ) {
428 if ( ! horLayout ) { 428 if ( ! horLayout ) {
429 x += AGENDA_ICON_SIZE+3; 429 x += AGENDA_ICON_SIZE+3;
430 w -= (AGENDA_ICON_SIZE+3); 430 w -= (AGENDA_ICON_SIZE+3);
431 } 431 }
432 else { 432 else {
433 yy+= AGENDA_ICON_SIZE+2; 433 yy+= AGENDA_ICON_SIZE+2;
434 h -=(AGENDA_ICON_SIZE+3); 434 h -=(AGENDA_ICON_SIZE+3);
435 } 435 }
436 } 436 }
437 if ( mWhiteText ) 437 if ( mWhiteText )
438 paint->setPen ( white); 438 paint->setPen ( white);
439 if ( x < 0 ) { 439 if ( x < 0 ) {
440 w = w+x-3; 440 w = w+x-3;
441 x = 3; 441 x = 3;
442 if ( !horLayout && addIcon ) 442 if ( !horLayout && addIcon )
443 x += AGENDA_ICON_SIZE+3; 443 x += AGENDA_ICON_SIZE+3;
444 if ( w > parentWidget()->width() ){ 444 if ( w > parentWidget()->width() ){
445 w = parentWidget()->width() - 6; 445 w = parentWidget()->width() - 6;
446#ifndef DESKTOP_VERSION 446#ifndef DESKTOP_VERSION
447 align = ( AlignHCenter|WordBreak|AlignTop); 447 align = ( AlignHCenter|WordBreak|AlignTop);
448#else 448#else
449 align = ( AlignHCenter|BreakAnywhere|WordBreak|AlignTop); 449 align = ( AlignHCenter|BreakAnywhere|WordBreak|AlignTop);
450#endif 450#endif
451 451
452 } 452 }
453 } 453 }
454 QRect dr; 454 QRect dr;
455 if ( w + x > parentWidget()->width() ) 455 if ( w + x > parentWidget()->width() )
456 w = parentWidget()->width()-x; 456 w = parentWidget()->width()-x;
457 paint->drawText ( x, yy, w, h, align, mDisplayedText, -1, &dr ); 457 paint->drawText ( x, yy, w, h, align, mDisplayedText, -1, &dr );
458 //qDebug("%d %d %d %d ", x, yy, w, h ); 458 //qDebug("%d %d %d %d ", x, yy, w, h );
459 if ( mIncidence->cancelled() ){ 459 if ( mIncidence->cancelled() ){
460 460
461 461
462 small = ( height() < 20 ); 462 small = ( height() < 20 );
463 463
464 if ( ! small ) { 464 if ( ! small ) {
465 QFontMetrics fm ( paint->font() ); 465 QFontMetrics fm ( paint->font() );
466 paint->drawLine(dr.left(), yy+fm.height()/2, dr.right()-2, yy+fm.height()/2); 466 paint->drawLine(dr.left(), yy+fm.height()/2, dr.right()-2, yy+fm.height()/2);
467 } 467 }
468 468
469 } 469 }
470 pa.end(); 470 pa.end();
471 471
472} 472}
473 473
474QPixmap * KOAgendaItem::paintPix() 474QPixmap * KOAgendaItem::paintPix()
475{ 475{
476 static QPixmap* mPaintPix = 0; 476 static QPixmap* mPaintPix = 0;
477 if ( ! mPaintPix ) { 477 if ( ! mPaintPix ) {
478 int w = QApplication::desktop()->width(); 478 int w = QApplication::desktop()->width();
479 int h = QApplication::desktop()->height(); 479 int h = QApplication::desktop()->height();
480 mPaintPix = new QPixmap(w,h); 480 mPaintPix = new QPixmap(w,h);
481 } 481 }
482 return mPaintPix ; 482 return mPaintPix ;
483} 483}
484QPixmap * KOAgendaItem::paintPixAllday() 484QPixmap * KOAgendaItem::paintPixAllday()
485{ 485{
486 static QPixmap* mPaintPixA = 0; 486 static QPixmap* mPaintPixA = 0;
487 if ( ! mPaintPixA ) { 487 if ( ! mPaintPixA ) {
488 int w = QApplication::desktop()->width(); 488 int w = QApplication::desktop()->width();
489 int h = QApplication::desktop()->height()/5; 489 int h = QApplication::desktop()->height()/5;
490 mPaintPixA = new QPixmap(w,h); 490 mPaintPixA = new QPixmap(w,h);
491 } 491 }
492 return mPaintPixA ; 492 return mPaintPixA ;
493} 493}
494 494
495void KOAgendaItem::repaintItem()
496{
497 globalFlagBlockAgendaItemPaint = 0;
498 globalFlagBlockAgenda = 0;
499 //qDebug("AAA ");
500 repaint( false );
501 //qDebug("BBB ");
502}
495void KOAgendaItem::paintEvent ( QPaintEvent *e ) 503void KOAgendaItem::paintEvent ( QPaintEvent *e )
496{ 504{
497 505 qDebug("CCC ");
498 if ( globalFlagBlockAgendaItemPaint ) 506 if ( globalFlagBlockAgendaItemPaint )
499 return; 507 return;
500 if ( globalFlagBlockAgenda > 0 && globalFlagBlockAgenda < 5 ) 508 if ( globalFlagBlockAgenda > 0 && globalFlagBlockAgenda < 5 )
501 return; 509 return;
510 qDebug("DDD ");
502 int yy; 511 int yy;
503 if ( mAllDay ) 512 if ( mAllDay )
504 yy = y(); 513 yy = y();
505 else 514 else
506 yy = mCellYTop * ( height() / cellHeight() ); 515 yy = mCellYTop * ( height() / cellHeight() );
507 int xx = x(); 516 int xx = x();
508 517
509 if ( xPaintCoord != xx || yPaintCoord != yy || 518 if ( xPaintCoord != xx || yPaintCoord != yy ||
510 wPaintCoord != width() || hPaintCoord != height()) { 519 wPaintCoord != width() || hPaintCoord != height()) {
511 xPaintCoord= xx; 520 xPaintCoord= xx;
512 yPaintCoord = yy; 521 yPaintCoord = yy;
513 wPaintCoord = width(); 522 wPaintCoord = width();
514 hPaintCoord = height(); 523 hPaintCoord = height();
515 globalFlagBlockAgendaItemUpdate = 0; 524 globalFlagBlockAgendaItemUpdate = 0;
516 paintMe( mSelected ); 525 paintMe( mSelected );
517 //qDebug("calling paintMe "); 526 //qDebug("calling paintMe ");
518 globalFlagBlockAgendaItemUpdate = 1; 527 globalFlagBlockAgendaItemUpdate = 1;
519 if ( mSelected ) 528 if ( mSelected )
520 return; 529 return;
521 } 530 }
522 int rx, ry, rw, rh; 531 int rx, ry, rw, rh;
523 rx = e->rect().x(); 532 rx = e->rect().x();
524 ry = e->rect().y(); 533 ry = e->rect().y();
525 rw = e->rect().width(); 534 rw = e->rect().width();
526 rh = e->rect().height(); 535 rh = e->rect().height();
527 //qDebug(" paintevent %s %d %d %d %d", mIncidence->summary().latin1(), x(), yy, width(), height()); 536 //qDebug(" paintevent %s %d %d %d %d", mIncidence->summary().latin1(), x(), yy, width(), height());
528 537
529 QPixmap* paintFrom ; 538 QPixmap* paintFrom ;
530 if ( mSelected ) { 539 if ( mSelected ) {
531 paintMe( mSelected ); 540 paintMe( mSelected );
532 return; 541 return;
533 } else { 542 } else {
534 if ( mAllDay ) 543 if ( mAllDay )
535 paintFrom = paintPixAllday(); 544 paintFrom = paintPixAllday();
536 else 545 else
537 paintFrom = paintPix(); 546 paintFrom = paintPix();
538 } 547 }
539 xx += rx; 548 xx += rx;
540 549
541 if ( xx < 0 ) { 550 if ( xx < 0 ) {
542 rw = rw + xx; 551 rw = rw + xx;
543 rx -= xx; 552 rx -= xx;
544 xx = 0; 553 xx = 0;
545 if ( rw <= 1 ) { 554 if ( rw <= 1 ) {
546 //qDebug("KOAgendaItem::Width1 <= 1 (%d). Returning. %s",rw,mDisplayedText.latin1()); 555 //qDebug("KOAgendaItem::Width1 <= 1 (%d). Returning. %s",rw,mDisplayedText.latin1());
547 return; 556 return;
548 } 557 }
549 } 558 }
550 if ( paintFrom->width() < xx+rw ) { 559 if ( paintFrom->width() < xx+rw ) {
551 rw = paintFrom->width() - xx; 560 rw = paintFrom->width() - xx;
552 if ( rw <= 1 ) { 561 if ( rw <= 1 ) {
553 //qDebug("KOAgendaItem::Width2 <= 1 (%d). Returning.%s ",rw,mDisplayedText.latin1() ); 562 //qDebug("KOAgendaItem::Width2 <= 1 (%d). Returning.%s ",rw,mDisplayedText.latin1() );
554 return; 563 return;
555 } 564 }
556 } 565 }
557 //qDebug("%d %d %d %d %d %d %d",rx, ry, paintFrom, xx ,yPaintCoord+ry, rw, rh); 566 //qDebug("%d %d %d %d %d %d %d",rx, ry, paintFrom, xx ,yPaintCoord+ry, rw, rh);
558 bitBlt (this, rx, ry, paintFrom, xx ,yPaintCoord+ry, rw, rh ,CopyROP); 567 bitBlt (this, rx, ry, paintFrom, xx ,yPaintCoord+ry, rw, rh ,CopyROP);
559} 568}
560void KOAgendaItem::computeText() 569void KOAgendaItem::computeText()
561{ 570{
562 mDisplayedText = mIncidence->summary(); 571 mDisplayedText = mIncidence->summary();
563 if ( (mIncidence->typeID() == todoID ) ) { 572 if ( (mIncidence->typeID() == todoID ) ) {
564 if ( static_cast<Todo*>(mIncidence)->hasDueDate() ) { 573 if ( static_cast<Todo*>(mIncidence)->hasDueDate() ) {
565 if ( static_cast<Todo*>(mIncidence)->dtDue().date() < QDate::currentDate() ) 574 if ( static_cast<Todo*>(mIncidence)->dtDue().date() < QDate::currentDate() )
566 mDisplayedText += i18n(" (") +KGlobal::locale()->formatDate((static_cast<Todo*>(mIncidence))->dtDue().date(), true)+")"; 575 mDisplayedText += i18n(" (") +KGlobal::locale()->formatDate((static_cast<Todo*>(mIncidence))->dtDue().date(), true)+")";
567 else if ( !(mIncidence->doesFloat())) 576 else if ( !(mIncidence->doesFloat()))
568 mDisplayedText += i18n(" (") +KGlobal::locale()->formatTime((static_cast<Todo*>(mIncidence))->dtDue().time())+")"; 577 mDisplayedText += i18n(" (") +KGlobal::locale()->formatTime((static_cast<Todo*>(mIncidence))->dtDue().time())+")";
569 } 578 }
570 } else { 579 } else {
571 if ( !(mIncidence->doesFloat()) && KOPrefs::instance()->mShowTimeInAgenda) 580 if ( !(mIncidence->doesFloat()) && KOPrefs::instance()->mShowTimeInAgenda)
572 mDisplayedText += ": " +KGlobal::locale()->formatTime((static_cast<Event*>(mIncidence))->dtStart().time()) + " - " + KGlobal::locale()->formatTime((static_cast<Event*>(mIncidence))->dtEnd().time()) ; 581 mDisplayedText += ": " +KGlobal::locale()->formatTime((static_cast<Event*>(mIncidence))->dtStart().time()) + " - " + KGlobal::locale()->formatTime((static_cast<Event*>(mIncidence))->dtEnd().time()) ;
573 582
574 if ( mAllDay ) { 583 if ( mAllDay ) {
575 if ( mIncidence->dtStart().date().addDays(3) < mIncidence->dtEnd().date() ) { 584 if ( mIncidence->dtStart().date().addDays(3) < mIncidence->dtEnd().date() ) {
576 if ( mIncidence->doesRecur() ) { 585 if ( mIncidence->doesRecur() ) {
577 mDisplayedText += " (" + mIncidence->recurrence()->recurrenceText() + ")"; 586 mDisplayedText += " (" + mIncidence->recurrence()->recurrenceText() + ")";
578 } else { 587 } else {
579 mDisplayedText += ": " +KGlobal::locale()->formatDate((static_cast<Event*>(mIncidence))->dtStart().date(), true) + " - " + KGlobal::locale()->formatDate((static_cast<Event*>(mIncidence))->dtEnd().date(), true) ; 588 mDisplayedText += ": " +KGlobal::locale()->formatDate((static_cast<Event*>(mIncidence))->dtStart().date(), true) + " - " + KGlobal::locale()->formatDate((static_cast<Event*>(mIncidence))->dtEnd().date(), true) ;
580 } 589 }
581 } 590 }
582 } 591 }
583 } 592 }
584 593
585 if ( !mIncidence->location().isEmpty() ) { 594 if ( !mIncidence->location().isEmpty() ) {
586 if ( mAllDay ) 595 if ( mAllDay )
587 mDisplayedText += " ("; 596 mDisplayedText += " (";
588 else 597 else
589 mDisplayedText += "\n("; 598 mDisplayedText += "\n(";
590 mDisplayedText += mIncidence->location() +")"; 599 mDisplayedText += mIncidence->location() +")";
591 } 600 }
592#ifdef DESKTOP_VERSION 601#ifdef DESKTOP_VERSION
593 QString tipText = mIncidence->summary(); 602 QString tipText = mIncidence->summary();
594 if ( !mIncidence->doesFloat() ) { 603 if ( !mIncidence->doesFloat() ) {
595 if ( mIncidence->typeID() == eventID ) { 604 if ( mIncidence->typeID() == eventID ) {
596 if ( (static_cast<Event*>(mIncidence))->isMultiDay() ) { 605 if ( (static_cast<Event*>(mIncidence))->isMultiDay() ) {
597 tipText += "\n"+i18n("From: ")+mIncidence->dtStartStr(); 606 tipText += "\n"+i18n("From: ")+mIncidence->dtStartStr();
598 tipText += "\n"+i18n("To: ")+(static_cast<Event*>(mIncidence))->dtEndStr(); 607 tipText += "\n"+i18n("To: ")+(static_cast<Event*>(mIncidence))->dtEndStr();
599 } 608 }
600 else { 609 else {
601 tipText += "\n"+i18n("Time: ")+mIncidence->dtStartTimeStr(); 610 tipText += "\n"+i18n("Time: ")+mIncidence->dtStartTimeStr();
602 tipText += " - "+(static_cast<Event*>(mIncidence))->dtEndTimeStr(); 611 tipText += " - "+(static_cast<Event*>(mIncidence))->dtEndTimeStr();
603 } 612 }
604 } 613 }
605 else if ( mIncidence->typeID() == todoID ) { 614 else if ( mIncidence->typeID() == todoID ) {
606 if (mIncidence->hasStartDate()) 615 if (mIncidence->hasStartDate())
607 tipText += "\n"+i18n("Start: ")+ (static_cast<Todo*>(mIncidence))->dtStartStr(); 616 tipText += "\n"+i18n("Start: ")+ (static_cast<Todo*>(mIncidence))->dtStartStr();
608 if (((Todo*)mIncidence)->hasDueDate()) 617 if (((Todo*)mIncidence)->hasDueDate())
609 tipText += "\n"+i18n("Due: ")+ (static_cast<Todo*>(mIncidence))->dtDueStr(); 618 tipText += "\n"+i18n("Due: ")+ (static_cast<Todo*>(mIncidence))->dtDueStr();
610 } 619 }
611 } else if ( mIncidence->typeID() == todoID ) { 620 } else if ( mIncidence->typeID() == todoID ) {
612 if (mIncidence->hasStartDate()) 621 if (mIncidence->hasStartDate())
613 tipText += "\n"+i18n("Start: ")+ (static_cast<Todo*>(mIncidence))->dtStartDateStr(); 622 tipText += "\n"+i18n("Start: ")+ (static_cast<Todo*>(mIncidence))->dtStartDateStr();
614 if (((Todo*)mIncidence)->hasDueDate()) 623 if (((Todo*)mIncidence)->hasDueDate())
615 tipText += "\n"+i18n("Due: ")+ (static_cast<Todo*>(mIncidence))->dtDueDateStr(); 624 tipText += "\n"+i18n("Due: ")+ (static_cast<Todo*>(mIncidence))->dtDueDateStr();
616 } 625 }
617 626
618 if (!mIncidence->location().isEmpty()) { 627 if (!mIncidence->location().isEmpty()) {
619 tipText += "\n"+i18n("Location: ")+mIncidence->location(); 628 tipText += "\n"+i18n("Location: ")+mIncidence->location();
620 } 629 }
621 QToolTip::add(this,tipText,toolTipGroup(),""); 630 QToolTip::add(this,tipText,toolTipGroup(),"");
622#endif 631#endif
623} 632}
624void KOAgendaItem::updateItem() 633void KOAgendaItem::updateItem()
625{ 634{
626 computeText(); 635 computeText();
627 636
628 //qDebug("KOAgendaItem:: updateItem() %s %d %d ",incidence()->summary().latin1(), x(), y()); 637 //qDebug("KOAgendaItem:: updateItem() %s %d %d ",incidence()->summary().latin1(), x(), y());
629 paintMe( mSelected ); 638 paintMe( mSelected );
630 repaint( false); 639 repaint( false);
631} 640}
632 641
633void KOAgendaItem::resizeEvent ( QResizeEvent *ev ) 642void KOAgendaItem::resizeEvent ( QResizeEvent *ev )
634{ 643{
635 //qDebug("KOAgendaItem::resizeEvent %s ", mIncidence->summary().latin1()); 644 //qDebug("KOAgendaItem::resizeEvent %s ", mIncidence->summary().latin1());
636 paintMe( mSelected ); 645 paintMe( mSelected );
637 repaint( false ); 646 repaint( false );
638} 647}
639 648
640/* 649/*
641 Return height of item in units of agenda cells 650 Return height of item in units of agenda cells
642*/ 651*/
643int KOAgendaItem::cellHeight() 652int KOAgendaItem::cellHeight()
644{ 653{
645 int ret = mCellYBottom - mCellYTop + 1; 654 int ret = mCellYBottom - mCellYTop + 1;
646 if ( ret <= 0 ) { 655 if ( ret <= 0 ) {
647 ret = 1; 656 ret = 1;
648 mCellYBottom = 0; 657 mCellYBottom = 0;
649 mCellYTop = 0; 658 mCellYTop = 0;
650 } 659 }
651 return ret; 660 return ret;
652} 661}
653 662
654/* 663/*
655 Return height of item in units of agenda cells 664 Return height of item in units of agenda cells
656*/ 665*/
657int KOAgendaItem::cellWidth() 666int KOAgendaItem::cellWidth()
658{ 667{
659 return mCellXWidth - mCellX + 1; 668 return mCellXWidth - mCellX + 1;
660} 669}
661 670
662void KOAgendaItem::setItemDate(QDate qd) 671void KOAgendaItem::setItemDate(QDate qd)
663{ 672{
664 mDate = qd; 673 mDate = qd;
665} 674}
666 675
667void KOAgendaItem::setCellXY(int X, int YTop, int YBottom) 676void KOAgendaItem::setCellXY(int X, int YTop, int YBottom)
668{ 677{
669 mCellX = X; 678 mCellX = X;
670 mCellYTop = YTop; 679 mCellYTop = YTop;
671 mCellYBottom = YBottom; 680 mCellYBottom = YBottom;
672} 681}
673 682
674void KOAgendaItem::setCellXWidth(int xwidth) 683void KOAgendaItem::setCellXWidth(int xwidth)
675{ 684{
676 mCellXWidth = xwidth; 685 mCellXWidth = xwidth;
677} 686}
678 687
679void KOAgendaItem::setCellX(int XLeft, int XRight) 688void KOAgendaItem::setCellX(int XLeft, int XRight)
680{ 689{
681 mCellX = XLeft; 690 mCellX = XLeft;
682 mCellXWidth = XRight; 691 mCellXWidth = XRight;
683} 692}
684 693
685void KOAgendaItem::setCellY(int YTop, int YBottom) 694void KOAgendaItem::setCellY(int YTop, int YBottom)
686{ 695{
687 mCellYTop = YTop; 696 mCellYTop = YTop;
688 mCellYBottom = YBottom; 697 mCellYBottom = YBottom;
689} 698}
690 699
691void KOAgendaItem::setSubCell(int subCell) 700void KOAgendaItem::setSubCell(int subCell)
692{ 701{
693 mSubCell = subCell; 702 mSubCell = subCell;
diff --git a/korganizer/koagendaitem.h b/korganizer/koagendaitem.h
index 3ed68b0..99c564a 100644
--- a/korganizer/koagendaitem.h
+++ b/korganizer/koagendaitem.h
@@ -1,164 +1,165 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19#ifndef KOAGENDAITEM_H 19#ifndef KOAGENDAITEM_H
20#define KOAGENDAITEM_H 20#define KOAGENDAITEM_H
21 21
22#include <qframe.h> 22#include <qframe.h>
23#include <qlabel.h> 23#include <qlabel.h>
24#include <qpixmap.h> 24#include <qpixmap.h>
25#include <qdatetime.h> 25#include <qdatetime.h>
26#include <qpalette.h> 26#include <qpalette.h>
27 27
28#include <libkcal/incidence.h> 28#include <libkcal/incidence.h>
29 29
30class KOAgendaItemWhatsThis; 30class KOAgendaItemWhatsThis;
31class QToolTipGroup; 31class QToolTipGroup;
32class QDragEnterEvent; 32class QDragEnterEvent;
33class QDropEvent; 33class QDropEvent;
34 34
35using namespace KCal; 35using namespace KCal;
36 36
37/* 37/*
38 The KOAgendaItem has to make sure that it receives all mouse events, which are 38 The KOAgendaItem has to make sure that it receives all mouse events, which are
39 to be used for dragging and resizing. That means it has to be installed as 39 to be used for dragging and resizing. That means it has to be installed as
40 eventfiler for its children, if it has children, and it has to pass mouse 40 eventfiler for its children, if it has children, and it has to pass mouse
41 events from the cildren to itself. See eventFilter(). 41 events from the cildren to itself. See eventFilter().
42*/ 42*/
43class KOAgendaItem : public QWidget 43class KOAgendaItem : public QWidget
44{ 44{
45 Q_OBJECT 45 Q_OBJECT
46 public: 46 public:
47 KOAgendaItem(Incidence *incidence, QDate qd, QWidget *parent, bool allday, const char *name=0, 47 KOAgendaItem(Incidence *incidence, QDate qd, QWidget *parent, bool allday, const char *name=0,
48 WFlags f=0 ); 48 WFlags f=0 );
49 ~KOAgendaItem(); 49 ~KOAgendaItem();
50 QString getWhatsThisText(); 50 QString getWhatsThisText();
51 void init ( Incidence *incidence, QDate qd ); 51 void init ( Incidence *incidence, QDate qd );
52 int cellX() { return mCellX; } 52 int cellX() { return mCellX; }
53 int cellXWidth() { return mCellXWidth; } 53 int cellXWidth() { return mCellXWidth; }
54 int cellYTop() { return mCellYTop; } 54 int cellYTop() { return mCellYTop; }
55 int cellYBottom() { return mCellYBottom; } 55 int cellYBottom() { return mCellYBottom; }
56 int cellHeight(); 56 int cellHeight();
57 int cellWidth(); 57 int cellWidth();
58 int subCell() { return mSubCell; } 58 int subCell() { return mSubCell; }
59 int subCells() { return mSubCells; } 59 int subCells() { return mSubCells; }
60 60
61 void setCellXY(int X, int YTop, int YBottom); 61 void setCellXY(int X, int YTop, int YBottom);
62 void setCellY(int YTop, int YBottom); 62 void setCellY(int YTop, int YBottom);
63 void setCellX(int XLeft, int XRight); 63 void setCellX(int XLeft, int XRight);
64 void setCellXWidth(int xwidth); 64 void setCellXWidth(int xwidth);
65 void setSubCell(int subCell); 65 void setSubCell(int subCell);
66 void setSubCells(int subCells); 66 void setSubCells(int subCells);
67 67
68 /** Start movement */ 68 /** Start movement */
69 void startMove(); 69 void startMove();
70 /** Reset to original values */ 70 /** Reset to original values */
71 void resetMove(); 71 void resetMove();
72 72
73 void moveRelative(int dx,int dy); 73 void moveRelative(int dx,int dy);
74 void expandTop(int dy); 74 void expandTop(int dy);
75 void expandBottom(int dy); 75 void expandBottom(int dy);
76 void expandLeft(int dx); 76 void expandLeft(int dx);
77 void expandRight(int dx); 77 void expandRight(int dx);
78 int mLastMoveXPos; 78 int mLastMoveXPos;
79 79
80 void setMultiItem(KOAgendaItem *first,KOAgendaItem *next, 80 void setMultiItem(KOAgendaItem *first,KOAgendaItem *next,
81 KOAgendaItem *last); 81 KOAgendaItem *last);
82 KOAgendaItem *firstMultiItem() { return mFirstMultiItem; } 82 KOAgendaItem *firstMultiItem() { return mFirstMultiItem; }
83 KOAgendaItem *nextMultiItem() { return mNextMultiItem; } 83 KOAgendaItem *nextMultiItem() { return mNextMultiItem; }
84 KOAgendaItem *lastMultiItem() { return mLastMultiItem; } 84 KOAgendaItem *lastMultiItem() { return mLastMultiItem; }
85 85
86 Incidence *incidence() const { return mIncidence; } 86 Incidence *incidence() const { return mIncidence; }
87 QDate itemDate() { return mDate; } 87 QDate itemDate() { return mDate; }
88 88
89 /** Update the date of this item's occurence (not in the event) */ 89 /** Update the date of this item's occurence (not in the event) */
90 void setItemDate(QDate qd); 90 void setItemDate(QDate qd);
91 91
92 void setText ( const QString & text ) { mDisplayedText = text; } 92 void setText ( const QString & text ) { mDisplayedText = text; }
93 QString text () { return mDisplayedText; } 93 QString text () { return mDisplayedText; }
94 94
95 virtual bool eventFilter ( QObject *, QEvent * ); 95 virtual bool eventFilter ( QObject *, QEvent * );
96 96
97 static QToolTipGroup *toolTipGroup(); 97 static QToolTipGroup *toolTipGroup();
98 98
99 QPtrList<KOAgendaItem> conflictItems(); 99 QPtrList<KOAgendaItem> conflictItems();
100 void setConflictItems(QPtrList<KOAgendaItem>); 100 void setConflictItems(QPtrList<KOAgendaItem>);
101 void addConflictItem(KOAgendaItem *ci); 101 void addConflictItem(KOAgendaItem *ci);
102 void paintMe( bool, QPainter* painter = 0 ); 102 void paintMe( bool, QPainter* painter = 0 );
103 void repaintMe(); 103 void repaintMe();
104 static QPixmap * paintPix(); 104 static QPixmap * paintPix();
105 static QPixmap * paintPixAllday(); 105 static QPixmap * paintPixAllday();
106 void updateItem(); 106 void updateItem();
107 void computeText(); 107 void computeText();
108 void recreateIncidence(); 108 void recreateIncidence();
109 bool checkLayout(); 109 bool checkLayout();
110 void initColor (); 110 void initColor ();
111 public slots: 111 public slots:
112 bool updateIcons( QPainter *, bool ); 112 bool updateIcons( QPainter *, bool );
113 void select(bool=true); 113 void select(bool=true);
114 void repaintItem();
114 115
115 protected: 116 protected:
116 void dragEnterEvent(QDragEnterEvent *e); 117 void dragEnterEvent(QDragEnterEvent *e);
117 void dropEvent(QDropEvent *e); 118 void dropEvent(QDropEvent *e);
118 void paintEvent ( QPaintEvent * ); 119 void paintEvent ( QPaintEvent * );
119 void resizeEvent ( QResizeEvent *ev ); 120 void resizeEvent ( QResizeEvent *ev );
120 121
121 private: 122 private:
122 KOAgendaItemWhatsThis* mKOAgendaItemWhatsThis; 123 KOAgendaItemWhatsThis* mKOAgendaItemWhatsThis;
123 bool mAllDay; 124 bool mAllDay;
124 bool mWhiteText; 125 bool mWhiteText;
125 int mCellX; 126 int mCellX;
126 int mCellXWidth; 127 int mCellXWidth;
127 int mCellYTop,mCellYBottom; 128 int mCellYTop,mCellYBottom;
128 int mSubCell; // subcell number of this item 129 int mSubCell; // subcell number of this item
129 int mSubCells; // Total number of subcells in cell of this item 130 int mSubCells; // Total number of subcells in cell of this item
130 int xPaintCoord; 131 int xPaintCoord;
131 int yPaintCoord; 132 int yPaintCoord;
132 int wPaintCoord; 133 int wPaintCoord;
133 int hPaintCoord; 134 int hPaintCoord;
134 // Variables to remember start position 135 // Variables to remember start position
135 int mStartCellX; 136 int mStartCellX;
136 int mStartCellXWidth; 137 int mStartCellXWidth;
137 int mStartCellYTop,mStartCellYBottom; 138 int mStartCellYTop,mStartCellYBottom;
138 int mLastMovePos; 139 int mLastMovePos;
139 140
140 // Multi item pointers 141 // Multi item pointers
141 KOAgendaItem *mFirstMultiItem; 142 KOAgendaItem *mFirstMultiItem;
142 KOAgendaItem *mNextMultiItem; 143 KOAgendaItem *mNextMultiItem;
143 KOAgendaItem *mLastMultiItem; 144 KOAgendaItem *mLastMultiItem;
144 145
145 int mFontPixelSize; 146 int mFontPixelSize;
146 Incidence *mIncidence; // corresponding event or todo 147 Incidence *mIncidence; // corresponding event or todo
147 QDate mDate; //date this events occurs (for recurrence) 148 QDate mDate; //date this events occurs (for recurrence)
148 //void showIcon( QLabel*, int ); 149 //void showIcon( QLabel*, int );
149 //QLabel *mTodoIconLabel; 150 //QLabel *mTodoIconLabel;
150 //QLabel *mItemLabel; 151 //QLabel *mItemLabel;
151 //QWidget *mIconBox; 152 //QWidget *mIconBox;
152 //QLabel *mIconAlarm,*mIconRecur,*mIconReadonly; 153 //QLabel *mIconAlarm,*mIconRecur,*mIconReadonly;
153 //QLabel *mIconReply,*mIconGroup,*mIconOrganizer; 154 //QLabel *mIconReply,*mIconGroup,*mIconOrganizer;
154 //QLabel *mIconMoreInfo; 155 //QLabel *mIconMoreInfo;
155 static QToolTipGroup *mToolTipGroup; 156 static QToolTipGroup *mToolTipGroup;
156 157
157 QColor mBackgroundColor; 158 QColor mBackgroundColor;
158 QColorGroup mColorGroup; 159 QColorGroup mColorGroup;
159 QString mDisplayedText; 160 QString mDisplayedText;
160 bool mSelected; 161 bool mSelected;
161 QPtrList<KOAgendaItem> mConflictItems; 162 QPtrList<KOAgendaItem> mConflictItems;
162}; 163};
163 164
164#endif // KOAGENDAITEM_H 165#endif // KOAGENDAITEM_H