summaryrefslogtreecommitdiff
authorzecke <zecke>2004-02-08 16:18:37 (UTC)
committer zecke <zecke>2004-02-08 16:18:37 (UTC)
commitd8129e2deeffcb5256c5c9d22fbd1fa743e8b6fe (patch) (side-by-side diff)
tree5f57bc4073015cb39ec1ddae12825ae9c3b8c02e
parent6506eeeeaa8d52ae0895630de00e38bc2b8ff10c (diff)
downloadopie-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
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/pim/todo/tableview.cpp15
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 );
}
}