author | zecke <zecke> | 2004-02-08 16:18:37 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-02-08 16:18:37 (UTC) |
commit | d8129e2deeffcb5256c5c9d22fbd1fa743e8b6fe (patch) (side-by-side diff) | |
tree | 5f57bc4073015cb39ec1ddae12825ae9c3b8c02e | |
parent | 6506eeeeaa8d52ae0895630de00e38bc2b8ff10c (diff) | |
download | opie-d8129e2deeffcb5256c5c9d22fbd1fa743e8b6fe.zip opie-d8129e2deeffcb5256c5c9d22fbd1fa743e8b6fe.tar.gz opie-d8129e2deeffcb5256c5c9d22fbd1fa743e8b6fe.tar.bz2 |
Fix two problems:
1.) accept the key event so it does not reoccur and reoccur
2.) do not crash if asked to delete and there is nothing to delete
-rw-r--r-- | core/pim/todo/tableview.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp index 3daf370..d980a24 100644 --- a/core/pim/todo/tableview.cpp +++ b/core/pim/todo/tableview.cpp @@ -503,127 +503,136 @@ void TableView::setCellContentFromEditor(int row, int col ) { TodoView::update( todo.uid(), todo ); updateView(); } } }else if ( col == 2) { QWidget* wid = cellWidget(row, 2); if ( wid->inherits("QLineEdit") ) { QString text = ((QLineEdit*)wid)->text(); OTodo todo = sorted()[row]; if ( todo.summary() != text ) { todo.setSummary( text ); TodoView::update( todo.uid(), todo ); updateView(); } } } } void TableView::slotPriority() { setCellContentFromEditor( currentRow(), currentColumn() ); } /* * We'll use the TimerEvent to read ahead or to keep the cahce always * filled enough. * We will try to read ahead 4 items in both ways * up and down. On odd or even we will currentRow()+-4 or +-9 * */ void TableView::timerEvent( QTimerEvent* ) { // qWarning("sorted %d", sorted().count() ); if (sorted().count() == 0 ) return; int row = currentRow(); if ( m_row ) { int ro = row-4; if (ro < 0 ) ro = 0; sorted()[ro]; ro = row+4; sorted()[ro]; } else { int ro = row + 8; sorted()[ro]; ro = row-8; if (ro < 0 ) ro = 0; sorted()[ro]; } m_row = !m_row; } // We want a strike through completed ;) // durchstreichen to complete /* * MouseTracking is off this mean we only receive * these events if the mouse button is pressed * We've the previous point saved * We check if the previous and current Point are * in the same row. * Then we check if they're some pixel horizontal away * if the distance between the two points is greater than * 8 we mark the underlying todo as completed and do a repaint * * BUG: When clicking on the Due column and it's scrollable * the todo is marked as completed... * REASON: QTable is doing auto scrolling which leads to a move * in the x coordinate and this way it's able to pass the * m_completeStrokeWidth criteria * WORKAROUND: strike through needs to strike through the same * row and two columns! */ void TableView::contentsMouseReleaseEvent( QMouseEvent* e) { int row = rowAt(m_prevP.y()); int colOld = columnAt(m_prevP.x() ); int colNew = columnAt(e->x() ); qWarning("colNew: %d colOld: %d", colNew, colOld ); if ( row == rowAt( e->y() ) && row != -1 && colOld != colNew ) { TodoView::complete( sorted()[row] ); return; } QTable::contentsMouseReleaseEvent( e ); } void TableView::contentsMouseMoveEvent( QMouseEvent* e ) { m_menuTimer->stop(); QTable::contentsMouseMoveEvent( e ); } void TableView::keyPressEvent( QKeyEvent* event) { if ( m_editorWidget.cellWidget() ) { // setCellContentFromEditor(m_editorWidget.cellRow(), m_editorWidget.cellCol() ); endEdit(m_editorWidget.cellRow(), m_editorWidget.cellCol(), true, true ); m_editorWidget.releaseCellWidget(); setFocus(); } + + if ( sorted().count() < 1 ) { + QTable::keyPressEvent( event ); + return; + } + int row = currentRow(); int col = currentColumn(); char key = ::toupper( event->ascii() ); - /* let QTable also handle the d later */ - if ( key == 'D' ) + /* let QTable also handle the d letter */ + if ( key == 'D' ) { + event->accept(); removeQuery( sorted().uidAt( row ) ); + return; + } switch( event->key() ) { case Qt::Key_F33: case Qt::Key_Enter: case Qt::Key_Return: case Qt::Key_Space: if ( col == 0 ) { TodoView::complete(sorted()[row]); }else if ( col == 1 ) { QWidget* wid = beginEdit(row, col, FALSE ); m_editorWidget.setCellWidget( wid, row, col ); }else if ( col == 2 ) { showTodo( sorted().uidAt( currentRow() ) ); }else if ( col == 3 ) { TodoView::edit( sorted().uidAt(row) ); } - + event->accept(); break; default: QTable::keyPressEvent( event ); } } |