-rw-r--r-- | korganizer/koagenda.cpp | 195 |
1 files changed, 190 insertions, 5 deletions
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp index 66ad4ec..14f52b8 100644 --- a/korganizer/koagenda.cpp +++ b/korganizer/koagenda.cpp @@ -69,9 +69,8 @@ MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name) setBackgroundColor(Qt::red); minutes = new QTimer(this); connect(minutes, SIGNAL(timeout()), this, SLOT(updateLoc())); minutes->start(0, true); - mTimeBox = new QLabel(this); mTimeBox->setAlignment(Qt::AlignRight | Qt::AlignBottom); QPalette pal = mTimeBox->palette(); pal.setColor(QColorGroup::Foreground, Qt::red); @@ -174,9 +173,9 @@ KOAgenda::KOAgenda(int columns,int rows,int rowSize,QWidget *parent, mRows = rows; mGridSpacingY = rowSize; mAllDayMode = false; #ifndef DESKTOP_VERSION - QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); + //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); #endif mHolidayMask = 0; init(); } @@ -194,9 +193,9 @@ KOAgenda::KOAgenda(int columns,QWidget *parent,const char *name,WFlags f) : //qDebug("aaaaaaaaaaaaaaaaaaldays %d ", KOPrefs::instance()->mAllDaySize); mGridSpacingY = KOPrefs::instance()->mAllDaySize; mAllDayMode = true; #ifndef DESKTOP_VERSION - QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); + //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); #endif mHolidayMask = 0; init(); } @@ -221,8 +220,11 @@ QDate KOAgenda::selectedIncidenceDate() const void KOAgenda::init() { + mPopupTimer = new QTimer(this); + connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu())); + mNewItemPopup = new QPopupMenu( this ); connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) ); QString pathString = ""; if ( !KOPrefs::instance()->mToolBarMiniIcons ) { @@ -310,9 +312,11 @@ void KOAgenda::init() mMarcusBains = 0; else { mMarcusBains = new MarcusBains(this); addChild(mMarcusBains); - } + } + mPopupKind = 0; + mPopupItem = 0; } void KOAgenda::clear() { @@ -381,12 +385,192 @@ bool KOAgenda::eventFilter ( QObject *object, QEvent *event ) default: return QScrollView::eventFilter(object,event); } } - +void KOAgenda::popupMenu() +{ + mPopupTimer->stop(); + if ( mPopupKind == 1 ) { + if (mActionItem ) { + endItemAction(); + } + mLeftMouseDown = false; // no more leftMouse computation + if (mPopupItem) { + selectItem(mPopupItem); + emit showIncidencePopupSignal(mPopupItem->incidence()); + + } + } else if ( mPopupKind == 2 ) { + if ( mLeftMouseDown ) { // we have a simulated right click - clear left mouse action + endSelectAction( false ); // do not emit new event signal + mLeftMouseDown = false; // no more leftMouse computation + } + mNewItemPopup->popup( mPopupPos); + } + mLeftMouseDown = false; + mPopupItem = 0; + mPopupKind = 0; +} bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me) { + //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; + switch (me->type()) { + case QEvent::MouseButtonPress: + if (me->button() == LeftButton) { + mPopupTimer->start( 600 ); + mLeftMouseDown = true; + } + blockMoving = true; + startX = viewportPos.x(); + startY = viewportPos.y(); + 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 ); + } + selectItem(mActionItem); + Incidence *incidence = mActionItem->incidence(); + if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) { + mActionItem = 0; + } else { + startItemAction(viewportPos); + } + } + } + } else { // ---------- viewport() + mPopupItem = 0; + mPopupKind = 2; + selectItem(0); + mActionItem = 0; + mPopupPos = viewport()->mapToGlobal( me->pos() ); + if (me->button() == RightButton) { + popupMenu(); + } else if (me->button() == LeftButton) { + setCursor(arrowCursor); + startSelectAction(viewportPos); + } + } + break; + + case QEvent::MouseButtonRelease: + if (me->button() == LeftButton ) { + mPopupTimer->stop(); + } + if (object != viewport()) { + if (me->button() == LeftButton && mLeftMouseDown) { + 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; + mLeftMouseDown = false; + return true; + } + endItemAction(); + } + } + + } else { // ---------- viewport() + if (me->button() == LeftButton && mLeftMouseDown ) { //left click + endSelectAction( true ); // emit new event signal + } + } + if (me->button() == LeftButton) + mLeftMouseDown = false; + + break; + + case QEvent::MouseMove: + if ( !mLeftMouseDown ) + 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 ( ! blockMoving ) + mPopupTimer->stop(); + if (object != viewport()) { + KOAgendaItem *moveItem = (KOAgendaItem *)object; + if (!moveItem->incidence()->isReadOnly() ) { + if (!mActionItem) + setNoActionCursor(moveItem,viewportPos); + else { + if ( !blockMoving ) + performItemAction(viewportPos); + } + } + } else { // ---------- viewport() + mPopupPos = viewport()->mapToGlobal( me->pos() ); + if ( mActionType == SELECT ) { + performSelectAction( viewportPos ); + } + } + break; + + case QEvent::MouseButtonDblClick: + mPopupTimer->stop(); + 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; +#if 0 //qDebug("KOAgenda::eventFilter_mous "); QPoint viewportPos; if (object != viewport()) { viewportPos = ((QWidget *)object)->mapToParent(me->pos()); @@ -558,8 +742,9 @@ bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me) default: break; } return true; +#endif } void KOAgenda::newItem( int item ) { |