summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagenda.cpp179
-rw-r--r--korganizer/koagenda.h1
2 files changed, 86 insertions, 94 deletions
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp
index ec81d44..e8b7c94 100644
--- a/korganizer/koagenda.cpp
+++ b/korganizer/koagenda.cpp
@@ -382,207 +382,198 @@ bool KOAgenda::eventFilter ( QObject *object, QEvent *event )
382 return QScrollView::eventFilter(object,event); 382 return QScrollView::eventFilter(object,event);
383 } 383 }
384} 384}
385 385
386 386
387bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me) 387bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me)
388{ 388{
389 //qDebug("KOAgenda::eventFilter_mous "); 389 //qDebug("KOAgenda::eventFilter_mous ");
390 QPoint viewportPos; 390 QPoint viewportPos;
391 if (object != viewport()) { 391 if (object != viewport()) {
392 viewportPos = ((QWidget *)object)->mapToParent(me->pos()); 392 viewportPos = ((QWidget *)object)->mapToParent(me->pos());
393 } else { 393 } else {
394 viewportPos = me->pos(); 394 viewportPos = me->pos();
395 } 395 }
396 static int startX = 0; 396 static int startX = 0;
397 static int startY = 0; 397 static int startY = 0;
398 static bool block = true; 398 static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 );
399 static bool blockMoving = true;
400 static bool leftMouseDown = false;
401 static bool rightMouseDown = false;
399 switch (me->type()) { 402 switch (me->type()) {
400 case QEvent::MouseButtonPress: 403 case QEvent::MouseButtonPress:
401 //qDebug("QEvent::MouseButtonPress: "); 404 if (me->button() == LeftButton)
402 // kdDebug() << "koagenda: filtered button press" << endl; 405 leftMouseDown = true;
406 else if (me->button() == RightButton)
407 rightMouseDown = true;
408 blockMoving = true;
409 startX = viewportPos.x();
410 startY = viewportPos.y();
403 if (object != viewport()) { 411 if (object != viewport()) {
404 if (me->button() == RightButton) { 412 if (me->button() == RightButton) {
405 mClickedItem = (KOAgendaItem *)object; 413 mClickedItem = (KOAgendaItem *)object;
406 if (mClickedItem) { 414 if (mClickedItem) {
407 selectItem(mClickedItem); 415 selectItem(mClickedItem);
408 // emit showIncidencePopupSignal(mClickedItem->incidence());
409 } 416 }
410 //mItemPopup->popup(QCursor::pos()); 417 } else if (me->button() == LeftButton) {
411 } else {
412 mActionItem = (KOAgendaItem *)object; 418 mActionItem = (KOAgendaItem *)object;
413 if (mActionItem) { 419 if (mActionItem) {
414 if ( mSelectionHeight > 0 ) { 420 if ( mSelectionHeight > 0 ) {
415 int selectionCellX = mSelectionCellX * mGridSpacingX; 421 int selectionCellX = mSelectionCellX * mGridSpacingX;
416 int selectionYTop = mSelectionYTop; 422 int selectionYTop = mSelectionYTop;
417 int gridSpacingX = mGridSpacingX; 423 int gridSpacingX = mGridSpacingX;
418 int selectionHeight = mSelectionHeight; 424 int selectionHeight = mSelectionHeight;
419 clearSelection(); 425 clearSelection();
420 repaintContents( selectionCellX, selectionYTop, 426 repaintContents( selectionCellX, selectionYTop,
421 gridSpacingX, selectionHeight,false ); 427 gridSpacingX, selectionHeight,false );
422 } 428 }
423 selectItem(mActionItem); 429 selectItem(mActionItem);
424 Incidence *incidence = mActionItem->incidence(); 430 Incidence *incidence = mActionItem->incidence();
425 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) { 431 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) {
426 mActionItem = 0; 432 mActionItem = 0;
427 } else { 433 } else {
428 startItemAction(viewportPos); 434 startItemAction(viewportPos);
429 startX = viewportPos.x();
430 startY = viewportPos.y();
431 block = true;
432 } 435 }
433 } 436 }
434 } 437 }
435 } else { 438 } else { // ---------- viewport()
436 selectItem(0); 439 selectItem(0);
437 mActionItem = 0; 440 mActionItem = 0;
438 if (me->button() == RightButton ) { 441 if (me->button() == LeftButton ) {
439 blockNewEvent = true;
440 block = false;
441 } else {
442 blockNewEvent = false;
443 setCursor(arrowCursor); 442 setCursor(arrowCursor);
444 startSelectAction(viewportPos); 443 startSelectAction(viewportPos);
445 } 444 }
446 } 445 }
447 break; 446 break;
448 447
449 case QEvent::MouseButtonRelease: 448 case QEvent::MouseButtonRelease:
450 //qDebug("QEvent::MouseButtonRelease: %d",blockNewEvent ); 449 if (object != viewport()) {
451 if (me->button() == RightButton && blockNewEvent && !block) { 450 if (me->button() == RightButton) {
452 int x,y; 451 if ( blockMoving ) {
453 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 452 mClickedItem = (KOAgendaItem *)object;
454 int gx,gy; 453 if (mActionItem ) {
455 contentsToGrid(x,y,gx,gy); 454 endItemAction();
456 if ( object == viewport() ) { 455 }
457 if ( mCurrentCellY < mStartCellY +1 ) { 456 leftMouseDown = false; // no more leftMouse computation
458 //qDebug("mCurrentCellY %d mStartCellY %d ", mCurrentCellY,mStartCellY); 457 if (mClickedItem) {
458 selectItem(mClickedItem);
459 emit showIncidencePopupSignal(mClickedItem->incidence());
460 }
461 }
462 } else if (me->button() == LeftButton && leftMouseDown) {
463 if (mActionItem) {
464 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos));
465 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 );
466 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) {
467 mScrollUpTimer.stop();
468 mScrollDownTimer.stop();
469 mActionItem->resetMove();
470 placeSubCells( mActionItem );
471 // emit startDragSignal( mActionItem->incidence() );
472 setCursor( arrowCursor );
473 mActionItem = 0;
474 mActionType = NOP;
475 mItemMoved = 0;
476 return true;
477 }
478 endItemAction();
479 }
480 }
481
482 } else { // ---------- viewport()
483 if (me->button() == RightButton) { //right click
484 if ( blockMoving ) { // we did mot moved the mouse much - popup menu
485 if ( leftMouseDown ) { // we have a simulated right click - clear left mouse action
486 endSelectAction( false ); // do not emit new event signal
487 leftMouseDown = false; // no more leftMouse computation
488 }
489 int x,y;
490 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
491 int gx,gy;
492 contentsToGrid(x,y,gx,gy);
459 mCurrentCellX = gx; 493 mCurrentCellX = gx;
460 mCurrentCellY = gy; 494 mCurrentCellY = gy;
461 mStartCellX = gx; 495 mStartCellX = gx;
462 mStartCellY = gy; 496 mStartCellY = gy;
463 mNewItemPopup->popup( viewport()->mapToGlobal( me->pos() ) ); 497 mNewItemPopup->popup( viewport()->mapToGlobal( me->pos() ) );
464 break;
465 } else {
466 blockNewEvent = false;
467 } 498 }
468 } else {
469 mClickedItem = (KOAgendaItem *)object;
470 if (mActionItem ) {
471 endItemAction();
472 }
473 if (mClickedItem) {
474 selectItem(mClickedItem);
475 emit showIncidencePopupSignal(mClickedItem->incidence());
476 }
477 }
478 } else if (me->button() == RightButton && block ) {
479 if (object != viewport()) {
480 mClickedItem = (KOAgendaItem *)object;
481 if (mActionItem ) {
482 endItemAction();
483 }
484 if (mClickedItem) {
485 selectItem(mClickedItem);
486 emit showIncidencePopupSignal(mClickedItem->incidence());
487 }
488 }
489 break;
490 }
491 block = true;
492 if (mActionItem) {
493 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos));
494 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 );
495 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) {
496 mScrollUpTimer.stop();
497 mScrollDownTimer.stop();
498 mActionItem->resetMove();
499 placeSubCells( mActionItem );
500 // emit startDragSignal( mActionItem->incidence() );
501 setCursor( arrowCursor );
502 mActionItem = 0;
503 mActionType = NOP;
504 mItemMoved = 0;
505 return true;
506 } 499 }
507 endItemAction(); 500 else if (me->button() == LeftButton && leftMouseDown ) { //left click
508 } else if ( mActionType == SELECT ) { 501 endSelectAction( true ); // emit new event signal
509 if (me->button() == RightButton ) {
510 } else {
511 endSelectAction( !blockNewEvent );
512 } 502 }
513 } 503 }
504 if (me->button() == LeftButton)
505 leftMouseDown = false;
506 else if (me->button() == RightButton)
507 rightMouseDown = false;
514 break; 508 break;
515 509
516 case QEvent::MouseMove: 510 case QEvent::MouseMove:
511 if ( !rightMouseDown && !leftMouseDown )
512 return true;
513 if ( blockMoving ) {
514 int dX, dY;
515 dX = startX - viewportPos.x();
516 if ( dX < 0 )
517 dX = -dX;
518 dY = viewportPos.y() - startY;
519 if ( dY < 0 )
520 dY = -dY;
521 //qDebug("%d %d %d ", dX, dY , blockmoveDist );
522 if ( dX > blockmoveDist || dY > blockmoveDist ) {
523 blockMoving = false;
524 }
525 }
517 if (object != viewport()) { 526 if (object != viewport()) {
518 KOAgendaItem *moveItem = (KOAgendaItem *)object; 527 KOAgendaItem *moveItem = (KOAgendaItem *)object;
519 //qDebug("moveItem %d ",moveItem ); 528 if (!moveItem->incidence()->isReadOnly() ) {
520 if (!moveItem->incidence()->isReadOnly() /*&&
521 !moveItem->incidence()->recurrence()->doesRecur()*/ )
522 if (!mActionItem) 529 if (!mActionItem)
523 setNoActionCursor(moveItem,viewportPos); 530 setNoActionCursor(moveItem,viewportPos);
524 else { 531 else {
525 if ( block ) { 532 if ( !blockMoving )
526 int dX, dY;
527 dX = startX - viewportPos.x();
528 if ( dX < 0 )
529 dX = -dX;
530 dY = viewportPos.y() - startY;
531 if ( dY < 0 )
532 dY = -dY;
533 int diff = 30;
534 if ( QApplication::desktop()->width() < 480 )
535 diff = 15;
536 // qDebug(" %d %d ",dX, dY );
537 if ( dX > diff || dY > diff ) {
538 block = false;
539 }
540 }
541 if ( !block )
542 performItemAction(viewportPos); 533 performItemAction(viewportPos);
543 } 534 }
544 } else { 535 }
536 } else { // ---------- viewport()
545 if ( mActionType == SELECT ) { 537 if ( mActionType == SELECT ) {
546 performSelectAction( viewportPos ); 538 performSelectAction( viewportPos );
547 } 539 }
548 } 540 }
549 break; 541 break;
550 542
551 case QEvent::MouseButtonDblClick: 543 case QEvent::MouseButtonDblClick:
552 if (object == viewport()) { 544 if (object == viewport()) {
553 selectItem(0); 545 selectItem(0);
554 int x,y; 546 int x,y;
555 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 547 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
556 int gx,gy; 548 int gx,gy;
557 contentsToGrid(x,y,gx,gy); 549 contentsToGrid(x,y,gx,gy);
558 emit newEventSignal(gx,gy); 550 emit newEventSignal(gx,gy);
559 } else { 551 } else {
560 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object; 552 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object;
561 selectItem(doubleClickedItem); 553 selectItem(doubleClickedItem);
562 if ( KOPrefs::instance()->mEditOnDoubleClick ) 554 if ( KOPrefs::instance()->mEditOnDoubleClick )
563 emit editIncidenceSignal(doubleClickedItem->incidence()); 555 emit editIncidenceSignal(doubleClickedItem->incidence());
564 else 556 else
565 emit showIncidenceSignal(doubleClickedItem->incidence()); 557 emit showIncidenceSignal(doubleClickedItem->incidence());
566 } 558 }
567 break; 559 break;
568 560
569 default: 561 default:
570 break; 562 break;
571 } 563 }
572
573 return true; 564 return true;
574} 565}
575 566
576void KOAgenda::newItem( int item ) 567void KOAgenda::newItem( int item )
577{ 568{
578 if ( item == 1 ) { //new event 569 if ( item == 1 ) { //new event
579 newEventSignal(mStartCellX ,mStartCellY ); 570 newEventSignal(mStartCellX ,mStartCellY );
580 } else 571 } else
581 if ( item == 2 ) { //new event 572 if ( item == 2 ) { //new event
582 newTodoSignal(mStartCellX ,mStartCellY ); 573 newTodoSignal(mStartCellX ,mStartCellY );
583 } else 574 } else
584 { 575 {
585 QDate day = mSelectedDates[mStartCellX]; 576 QDate day = mSelectedDates[mStartCellX];
586 emit showDateView( item, day ); 577 emit showDateView( item, day );
587 // 3Day view 578 // 3Day view
588 // 4Week view 579 // 4Week view
@@ -673,34 +664,36 @@ void KOAgenda::performSelectAction(QPoint viewportPos)
673 mGridSpacingX, mSelectionYTop, 664 mGridSpacingX, mSelectionYTop,
674 mGridSpacingX, selectionHeight,false ); 665 mGridSpacingX, selectionHeight,false );
675 666
676 mCurrentCellY = gy; 667 mCurrentCellY = gy;
677 } else { 668 } else {
678 } 669 }
679 } 670 }
680} 671}
681 672
682void KOAgenda::endSelectAction( bool emitNewEvent ) 673void KOAgenda::endSelectAction( bool emitNewEvent )
683{ 674{
684 mActionType = NOP; 675 mActionType = NOP;
685 mScrollUpTimer.stop(); 676 mScrollUpTimer.stop();
686 mScrollDownTimer.stop(); 677 mScrollDownTimer.stop();
687 678
688 emit newTimeSpanSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); 679 emit newTimeSpanSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY);
689 if ( emitNewEvent && mStartCellY < mCurrentCellY ) 680 if ( emitNewEvent && mStartCellY < mCurrentCellY ) {
681 qDebug("ew event signal ");
690 emit newEventSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); 682 emit newEventSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY);
683 }
691} 684}
692 685
693void KOAgenda::startItemAction(QPoint viewportPos) 686void KOAgenda::startItemAction(QPoint viewportPos)
694{ 687{
695 int x,y; 688 int x,y;
696 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 689 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
697 int gx,gy; 690 int gx,gy;
698 contentsToGrid(x,y,gx,gy); 691 contentsToGrid(x,y,gx,gy);
699 692
700 mStartCellX = gx; 693 mStartCellX = gx;
701 mStartCellY = gy; 694 mStartCellY = gy;
702 mCurrentCellX = gx; 695 mCurrentCellX = gx;
703 mCurrentCellY = gy; 696 mCurrentCellY = gy;
704 697
705 if (mAllDayMode) { 698 if (mAllDayMode) {
706 int gridDistanceX = (x - gx * mGridSpacingX); 699 int gridDistanceX = (x - gx * mGridSpacingX);
diff --git a/korganizer/koagenda.h b/korganizer/koagenda.h
index 2069b22..f3f1772 100644
--- a/korganizer/koagenda.h
+++ b/korganizer/koagenda.h
@@ -197,33 +197,32 @@ class KOAgenda : public QScrollView
197 /** Set cursor, when no item action is in progress */ 197 /** Set cursor, when no item action is in progress */
198 void setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos); 198 void setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos);
199 199
200 /** Place agenda item in agenda and adjust other cells if necessary */ 200 /** Place agenda item in agenda and adjust other cells if necessary */
201 void placeSubCells(KOAgendaItem *placeItem); 201 void placeSubCells(KOAgendaItem *placeItem);
202 202
203 /** Process the keyevent, including the ignored keyevents of eventwidgets. 203 /** Process the keyevent, including the ignored keyevents of eventwidgets.
204 * Implements pgup/pgdn and cursor key navigation in the view. 204 * Implements pgup/pgdn and cursor key navigation in the view.
205 */ 205 */
206 void keyPressEvent( QKeyEvent * ); 206 void keyPressEvent( QKeyEvent * );
207 207
208 void calculateWorkingHours(); 208 void calculateWorkingHours();
209 209
210 virtual void contentsMousePressEvent ( QMouseEvent * ); 210 virtual void contentsMousePressEvent ( QMouseEvent * );
211 211
212 private: 212 private:
213 bool blockNewEvent;
214 void init(); 213 void init();
215 void marcus_bains(); 214 void marcus_bains();
216 bool mAllDayMode; 215 bool mAllDayMode;
217 bool blockResize; 216 bool blockResize;
218 QTimer mResizeTimer; 217 QTimer mResizeTimer;
219 double mContentPosition; 218 double mContentPosition;
220 219
221 // Width and height of agenda cells 220 // Width and height of agenda cells
222 int mGridSpacingX; 221 int mGridSpacingX;
223 int mGridSpacingY; 222 int mGridSpacingY;
224 223
225 // size of border, where mouse action will resize the KOAgendaItem 224 // size of border, where mouse action will resize the KOAgendaItem
226 int mResizeBorderWidth; 225 int mResizeBorderWidth;
227 226
228 // size of border, where mouse mve will cause a scroll of the agenda 227 // size of border, where mouse mve will cause a scroll of the agenda
229 int mScrollBorderWidth; 228 int mScrollBorderWidth;