summaryrefslogtreecommitdiffabout
path: root/korganizer/koagenda.cpp
Side-by-side diff
Diffstat (limited to 'korganizer/koagenda.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagenda.cpp195
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 )
{