summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt4
-rw-r--r--korganizer/koagenda.cpp264
-rw-r--r--korganizer/koagenda.h2
-rw-r--r--korganizer/koagendaview.cpp22
4 files changed, 46 insertions, 246 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 44bf20b..03895fd 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,16 +1,20 @@
Info about the changes in new versions of KDE-Pim/Pi
********** VERSION 2.0.28 ************
+KO/Pi:
+Fixed two problems in KO/Pi timetracking.
+Added context menu to month view for creating new events/todos.
+Fixed some other small bugs.
********** VERSION 2.0.27 ************
More bugfixes.
Added possibility to clone in KO/Pi a todo with all its subtodos.
Added config option for alternate background in list views.
Added a timetracker funtionality in KO/Pi for todos in the todo view.
If a todo is set to started and then to stopped it is saving information about the runtime in
<yourhome>/kdepim/apps/timetrackerdir.
To read, display, print this information an external program is needed which will be developed.
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp
index 114ed75..355f4bb 100644
--- a/korganizer/koagenda.cpp
+++ b/korganizer/koagenda.cpp
@@ -465,33 +465,26 @@ bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me)
blockMoving = true;
startX = viewportPos.x();
startY = viewportPos.y();
mPopupPos = me->globalPos();
if (object != viewport()) {
mPopupItem = (KOAgendaItem *)object;
mPopupKind = 1;
if (me->button() == RightButton) {
popupMenu();
} else if (me->button() == LeftButton) {
mActionItem = (KOAgendaItem *)object;
if (mActionItem) {
- if ( mSelectionHeight > 0 ) {
- int selectionCellX = mSelectionCellX * mGridSpacingX;
- int selectionYTop = mSelectionYTop;
- int gridSpacingX = mGridSpacingX;
- int selectionHeight = mSelectionHeight;
- clearSelection();
- repaintContents( selectionCellX, selectionYTop,
- gridSpacingX, selectionHeight,false );
- }
+ emit signalClearSelection();
+ slotClearSelection();
selectItem(mActionItem);
Incidence *incidence = mActionItem->incidence();
if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) {
mActionItem = 0;
} else {
startItemAction(viewportPos);
}
}
}
} else { // ---------- viewport()
mPopupItem = 0;
mPopupKind = 2;
@@ -601,250 +594,81 @@ bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me)
selectItem(doubleClickedItem);
if ( KOPrefs::instance()->mEditOnDoubleClick )
emit editIncidenceSignal(doubleClickedItem->incidence());
else
emit showIncidenceSignal(doubleClickedItem->incidence());
}
break;
default:
break;
}
return true;
-#if 0
- //qDebug("KOAgenda::eventFilter_mous ");
- QPoint viewportPos;
- if (object != viewport()) {
- viewportPos = ((QWidget *)object)->mapToParent(me->pos());
- } else {
- viewportPos = me->pos();
- }
- static int startX = 0;
- static int startY = 0;
- static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 );
- static bool blockMoving = true;
- static bool leftMouseDown = false;
- bool rightButtonPressed = false;
- switch (me->type()) {
- case QEvent::MouseButtonPress:
- if (me->button() == LeftButton) {
- leftMouseDown = true;
- }
- else if (me->button() == RightButton) {
- leftMouseDown = false;
- }
- blockMoving = true;
- startX = viewportPos.x();
- startY = viewportPos.y();
- if (object != viewport()) { // item clicked **************
- if (me->button() == RightButton) {
- leftMouseDown = false;
- mClickedItem = (KOAgendaItem *)object;
- if (mActionItem ) {
- endItemAction();
- }
- if (mClickedItem) {
- selectItem(mClickedItem);
- emit showIncidencePopupSignal(mClickedItem->incidence());
- }
- return true;
- } else if (me->button() == LeftButton) {
- mActionItem = (KOAgendaItem *)object;
- if (mActionItem) {
- if ( mSelectionHeight > 0 ) {
- int selectionCellX = mSelectionCellX * mGridSpacingX;
- int selectionYTop = mSelectionYTop;
- int gridSpacingX = mGridSpacingX;
- int selectionHeight = mSelectionHeight;
- clearSelection();
- repaintContents( selectionCellX, selectionYTop,
- gridSpacingX, selectionHeight,false );
- }
- selectItem(mActionItem);
- Incidence *incidence = mActionItem->incidence();
- if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) {
- mActionItem = 0;
- } else {
- startItemAction(viewportPos);
- }
- }
- }
- } else { // ---------- viewport()
- selectItem(0);
- mActionItem = 0;
- if (me->button() == LeftButton ) {
- setCursor(arrowCursor);
- startSelectAction(viewportPos);
- } else if (me->button() == RightButton ) {
- setCursor(arrowCursor);
- if ( leftMouseDown ) { // we have a simulated right click - clear left mouse action
- endSelectAction( false ); // do not emit new event signal
- leftMouseDown = false; // no more leftMouse computation
- }
- int x,y;
- viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
- int gx,gy;
- contentsToGrid(x,y,gx,gy);
- mCurrentCellX = gx;
- mCurrentCellY = gy;
- mStartCellX = gx;
- mStartCellY = gy;
- mNewItemPopup->popup( viewport()->mapToGlobal( me->pos() ) );
- }
- }
- break;
-
- case QEvent::MouseButtonRelease:
-
- if (object != viewport()) {
- if (me->button() == LeftButton && leftMouseDown) {
- if (mActionItem) {
- QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos));
- //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 );
- if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) {
- mScrollUpTimer.stop();
- mScrollDownTimer.stop();
- mActionItem->resetMove();
- placeSubCells( mActionItem );
- // emit startDragSignal( mActionItem->incidence() );
- setCursor( arrowCursor );
- mActionItem = 0;
- mActionType = NOP;
- mItemMoved = 0;
- leftMouseDown = false;
- return true;
- }
- endItemAction();
- }
- }
-
- } else { // ---------- viewport()
- if (me->button() == LeftButton && leftMouseDown ) { //left click
- endSelectAction( true ); // emit new event signal
- }
- }
- if (me->button() == LeftButton)
- leftMouseDown = false;
-
- break;
- case QEvent::MouseMove:
- if ( !leftMouseDown )
- return true;
- if ( blockMoving ) {
- int dX, dY;
- dX = startX - viewportPos.x();
- if ( dX < 0 )
- dX = -dX;
- dY = viewportPos.y() - startY;
- if ( dY < 0 )
- dY = -dY;
- //qDebug("%d %d %d ", dX, dY , blockmoveDist );
- if ( dX > blockmoveDist || dY > blockmoveDist ) {
- blockMoving = false;
- }
- }
- if (object != viewport()) {
- KOAgendaItem *moveItem = (KOAgendaItem *)object;
- if (!moveItem->incidence()->isReadOnly() ) {
- if (!mActionItem)
- setNoActionCursor(moveItem,viewportPos);
- else {
- if ( !blockMoving )
- performItemAction(viewportPos);
- }
- }
- } else { // ---------- viewport()
- if ( mActionType == SELECT ) {
- performSelectAction( viewportPos );
- }
- }
- break;
-
- case QEvent::MouseButtonDblClick:
- blockMoving = false;
- leftMouseDown = false;
- if (object == viewport()) {
- selectItem(0);
- int x,y;
- viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
- int gx,gy;
- contentsToGrid(x,y,gx,gy);
- emit newEventSignal(gx,gy);
- } else {
- KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object;
- selectItem(doubleClickedItem);
- if ( KOPrefs::instance()->mEditOnDoubleClick )
- emit editIncidenceSignal(doubleClickedItem->incidence());
- else
- emit showIncidenceSignal(doubleClickedItem->incidence());
- }
- break;
-
- default:
- break;
- }
- return true;
-#endif
}
void KOAgenda::newItem( int item )
{
if ( item == 1 ) { //new event
newEventSignal(mStartCellX ,mStartCellY );
} else
if ( item == 2 ) { //new event
newTodoSignal(mStartCellX ,mStartCellY );
} else
{
emit showDateView( item, mStartCellX );
// 3Day view
// 4Week view
// 5Month view
// 6Journal view
}
}
+void KOAgenda::slotClearSelection()
+{
+ if (mSelectionHeight) {
+ int selectionX = mSelectionCellX * mGridSpacingX;
+ int top = mSelectionYTop - 2 *mGridSpacingY;
+ int hei = mSelectionHeight + 4 *mGridSpacingY;
+ clearSelection();
+ repaintContents( selectionX, top,
+ mGridSpacingX, hei ,false );
+ }
+
+}
void KOAgenda::startSelectAction(QPoint viewportPos)
{
- //emit newStartSelectSignal();
+
+ emit signalClearSelection();
+ slotClearSelection();
- mActionType = SELECT;
+ mActionType = SELECT;
- int x,y;
- viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
- int gx,gy;
- contentsToGrid(x,y,gx,gy);
+ int x,y;
+ viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
+ int gx,gy;
+ contentsToGrid(x,y,gx,gy);
- mStartCellX = gx;
- mStartCellY = gy;
- mCurrentCellX = gx;
- mCurrentCellY = gy;
-
- // Store coordinates of old selection
- int selectionX = mSelectionCellX * mGridSpacingX;
- int selectionYTop = mSelectionYTop;
- int selectionHeight = mSelectionHeight;
+ mStartCellX = gx;
+ mStartCellY = gy;
+ mCurrentCellX = gx;
+ mCurrentCellY = gy;
- // Store new selection
- mSelectionCellX = gx;
- mSelectionYTop = gy * mGridSpacingY;
- mSelectionHeight = mGridSpacingY;
+ // Store new selection
+ mSelectionCellX = gx;
+ mSelectionYTop = gy * mGridSpacingY;
+ mSelectionHeight = mGridSpacingY;
- // Clear old selection
- repaintContents( selectionX, selectionYTop,
- mGridSpacingX, selectionHeight,false );
-
- // Paint new selection
- // repaintContents( mSelectionCellX * mGridSpacingX, mSelectionYTop,
- // mGridSpacingX, mSelectionHeight );
+ // Paint new selection
+ repaintContents( mSelectionCellX * mGridSpacingX+1, mSelectionYTop,
+ mGridSpacingX-1, mSelectionHeight );
}
void KOAgenda::performSelectAction(QPoint viewportPos)
{
int x,y;
viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
int gx,gy;
contentsToGrid(x,y,gx,gy);
QPoint clipperPos = clipper()->
mapFromGlobal(viewport()->mapToGlobal(viewportPos));
@@ -853,36 +677,29 @@ void KOAgenda::performSelectAction(QPoint viewportPos)
mScrollUpTimer.start(mScrollDelay);
} else if (visibleHeight() - clipperPos.y() <
mScrollBorderWidth) {
mScrollDownTimer.start(mScrollDelay);
} else {
mScrollUpTimer.stop();
mScrollDownTimer.stop();
}
if ( gy > mCurrentCellY ) {
mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop;
-#if 0
- // FIXME: Repaint only the newly selected region
- repaintContents( mSelectionCellX * mGridSpacingX,
- mCurrentCellY + mGridSpacingY,
- mGridSpacingX,
- mSelectionHeight - ( gy - mCurrentCellY - 1 ) * mGridSpacingY );
-#else
+
repaintContents( (KOGlobals::self()->reverseLayout() ?
mColumns - 1 - mSelectionCellX : mSelectionCellX) *
mGridSpacingX, mSelectionYTop,
mGridSpacingX, mSelectionHeight , false);
-#endif
mCurrentCellY = gy;
} else if ( gy < mCurrentCellY ) {
if ( gy >= mStartCellY ) {
int selectionHeight = mSelectionHeight;
mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop;
repaintContents( (KOGlobals::self()->reverseLayout() ?
mColumns - 1 - mSelectionCellX : mSelectionCellX) *
mGridSpacingX, mSelectionYTop,
mGridSpacingX, selectionHeight,false );
@@ -891,25 +708,24 @@ void KOAgenda::performSelectAction(QPoint viewportPos)
}
}
}
void KOAgenda::endSelectAction( bool emitNewEvent )
{
mActionType = NOP;
mScrollUpTimer.stop();
mScrollDownTimer.stop();
emit newTimeSpanSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY);
if ( emitNewEvent && mStartCellY < mCurrentCellY ) {
- qDebug("ew event signal ");
emit newEventSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY);
}
}
void KOAgenda::startItemAction(QPoint viewportPos)
{
int x,y;
viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
int gx,gy;
contentsToGrid(x,y,gx,gy);
mStartCellX = gx;
@@ -1091,35 +907,25 @@ void KOAgenda::endItemAction()
KOAgendaItem *modifiedItem = placeItem;
//emit itemModified( placeItem, mActionType /*KOGlobals::EVENTEDITED */);
QPtrList<KOAgendaItem> oldconflictItems ;//= placeItem->conflictItems();
KOAgendaItem *item;
if ( placeItem->incidence()->type() == "Todo" ) {
mSelectedItem = 0;
//qDebug("todo %d %d %d ", mCurrentCellX, modifiedItem->cellX() ,modifiedItem->cellXWidth());
modifiedItem->mLastMoveXPos = mCurrentCellX;
emit itemModified( modifiedItem, mActionType );
}
else {
-#if 0
- for ( item=oldconflictItems.first(); item != 0;
- item=oldconflictItems.next() ) {
- placeSubCells(item);
- }
- while ( placeItem ) {
- //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1());
- placeSubCells( placeItem );
- placeItem = placeItem->nextMultiItem();
- }
-#endif
+
globalFlagBlockAgendaItemPaint = 1;
for ( item=oldconflictItems.first(); item != 0;
item=oldconflictItems.next() ) {
placeSubCells(item);
}
while ( placeItem ) {
//qDebug("placeItem %s ", placeItem->incidence()->summary().latin1());
oldconflictItems = placeItem->conflictItems();
for ( item=oldconflictItems.first(); item != 0;
item=oldconflictItems.next() ) {
placeSubCells(item);
diff --git a/korganizer/koagenda.h b/korganizer/koagenda.h
index 4f1fdb9..fb9983e 100644
--- a/korganizer/koagenda.h
+++ b/korganizer/koagenda.h
@@ -118,43 +118,45 @@ class KOAgenda : public QScrollView
void setHolidayMask(QMemArray<bool> *);
void setDateList(const DateList &selectedDates);
DateList dateList() const;
void drawContentsToPainter( QPainter* paint = 0, bool backgroundOnly = false);
void finishUpdate();
void printSelection();
void storePosition();
void restorePosition();
void setPopup( KOEventPopupMenu * p ) { mAllAgendaPopup = p; }
public slots:
+ void slotClearSelection();
void popupMenu();
void newItem( int );
void moveChild( QWidget *, int, int );
void scrollUp();
void scrollDown();
void updateTodo( Todo * t, int , bool );
void popupAlarm();
void checkScrollBoundaries(int);
/** Deselect selected items. This function does not emit any signals. */
void deselectItem();
/** Select item. If the argument is 0, the currently selected item gets
deselected. This function emits the itemSelected(bool) signal to inform
about selection/deseelction of events. */
void selectItem(KOAgendaItem *);
void finishResize();
signals:
+ void signalClearSelection();
void showDateView( int, int);
void newEventSignal();
void newEventSignal(int gx,int gy);
void newTodoSignal(int gx,int gy);
void newEventSignal(int gxStart, int gyStart, int gxEnd, int gyEnd);
void newTimeSpanSignal(int gxStart, int gyStart, int gxEnd, int gyEnd);
void newStartSelectSignal();
void showIncidenceSignal(Incidence *);
void editIncidenceSignal(Incidence *);
void deleteIncidenceSignal(Incidence *);
void showIncidencePopupSignal(Incidence *);
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp
index 17f791d..b43c40e 100644
--- a/korganizer/koagendaview.cpp
+++ b/korganizer/koagendaview.cpp
@@ -425,25 +425,24 @@ KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) :
QLabel *dummyAllDayRight = new QLabel (mAllDayFrame);
// Create event context menu for all day agenda
//mAllDayAgendaPopup = eventPopup();
// Create agenda frame
QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3);
// QHBox *agendaFrame = new QHBox(splitterAgenda);
// create event indicator bars
mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame);
#ifndef DESKTOP_VERSION
- // FIX
mEventIndicatorTop->setPaintWidget( mSplitterAgenda );
#endif
mDayLabelsFrame = new QHBox(agendaFrame);
//topLayout->addWidget(mDayLabelsFrame);
mDayLabels = new QFrame (mDayLabelsFrame);
mLayoutDayLabels = new QHBoxLayout(mDayLabels);
agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2);
agendaLayout->addWidget(mEventIndicatorTop,1,1);
mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom,
agendaFrame);
agendaLayout->addWidget(mEventIndicatorBottom,3,1);
@@ -558,24 +557,26 @@ KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) :
SIGNAL( incidenceSelected( Incidence * ) ) );
connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
SIGNAL( incidenceSelected( Incidence * ) ) );
connect( mAgenda, SIGNAL( resizedSignal() ),
SLOT( updateConfig( ) ) );
connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ),
SLOT( addToCalSlot(Incidence *, Incidence * ) ) );
connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ),
SLOT( addToCalSlot(Incidence * , Incidence *) ) );
// connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
//connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
+ connect( mAllDayAgenda, SIGNAL( signalClearSelection() ),mAgenda, SLOT( slotClearSelection()) );
+ connect( mAgenda, SIGNAL( signalClearSelection() ),mAllDayAgenda, SLOT( slotClearSelection()) );
}
void KOAgendaView::toggleAllDay()
{
if ( mSplitterAgenda->firstHandle() )
mSplitterAgenda->firstHandle()->toggle();
}
void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld )
{
calendar()->addIncidence( inc );
@@ -716,30 +717,26 @@ void KOAgendaView::createDayLabels()
// QFont lFont = dlf;
bool appendLabels = false;
KOAgendaButton *dayLabel;
dayLabel = mDayLabelsList.first();
if ( !dayLabel ) {
appendLabels = true;
dayLabel = getNewDaylabel();
}
dayLabel->setFixedWidth( mTimeLabels->width()+mAgenda->frameWidth() );
dayLabel->setFont( dlf );
dayLabel->setNum( -1 );
//dayLabel->setAlignment(QLabel::AlignHCenter);
-#if 0
- if ( QApplication::desktop()->width() <= 320 )
- dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ).left(2) );
- else
-#endif
- dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) );
+
+ dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) );
dayLabel->show();
DateList::ConstIterator dit;
bool oneday = (mSelectedDates.first() == mSelectedDates.last() );
int counter = -1;
for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
++counter;
QDate date = *dit;
// QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels);
if ( ! appendLabels ) {
dayLabel = mDayLabelsList.next();
if ( !dayLabel )
appendLabels = true;
@@ -1170,34 +1167,25 @@ void KOAgendaView::fillAgenda()
qDebug("days %d %s",endX , currentDate.toString().latin1());
QDate dateit = currentDate.addDays( -endX );
if ( event->recursOn( dateit ) ) {
qDebug("found %d %d %d %s", endX,curCol, curCol-endX ,dateit.toString().latin1() );
if ( curCol-endX < 0 ) {
mAllDayAgenda->insertAllDayItem(event,currentDate,0,curCol);
}
}
}
} else {
mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol);
}
-#if 0
- if (beginX <= 0 && curCol == 0) {
- mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
- } else if (beginX == curCol) {
- mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
- } else {
- qDebug("skipped %d %d %d ",beginX , endX, curCol);
- }
-#endif
- //mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol);
+
} else {
if (beginX <= 0 && curCol == 0) {
mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
} else if (beginX == curCol) {
mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
}
}
} else if (event->isMultiDay()) {
if ( event->doesRecur () ) {
QDate dateit = currentDate;
int count = 0;
int max = event->dtStart().daysTo( event->dtEnd() ) +2;