author | zecke <zecke> | 2002-10-20 12:10:31 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-10-20 12:10:31 (UTC) |
commit | 7948b5910a098d05f4cc7d0fb14b0f216bf41358 (patch) (side-by-side diff) | |
tree | c7765042be7eb4373ea90145f1e218fee0cd1c3a | |
parent | 940ba90ed4375f79b6a4934d290abf83980b77ad (diff) | |
download | opie-7948b5910a098d05f4cc7d0fb14b0f216bf41358.zip opie-7948b5910a098d05f4cc7d0fb14b0f216bf41358.tar.gz opie-7948b5910a098d05f4cc7d0fb14b0f216bf41358.tar.bz2 |
Strike through a row to complete the Record ;)^
-rw-r--r-- | core/pim/todo/tableview.cpp | 39 | ||||
-rw-r--r-- | core/pim/todo/tableview.h | 3 |
2 files changed, 36 insertions, 6 deletions
diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp index 34b8b3c..c4165db 100644 --- a/core/pim/todo/tableview.cpp +++ b/core/pim/todo/tableview.cpp @@ -4,48 +4,49 @@ .>+-= _;:, .> :=|. This program is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, ._= =} : or (at your option) any later version. .%`+i> _;_. .i_,=:_. -<s. This program is distributed in the hope that + . -:. = it will be useful, but WITHOUT ANY WARRANTY; : .. .:, . . . without even the implied warranty of =_ + =;=|` MERCHANTABILITY or FITNESS FOR A _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU ..}^=.= = ; Library General Public License for more ++= -. .` .: details. : = ...= . :.=- -. .:....=;==+<; You should have received a copy of the GNU -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <stdlib.h> #include <qtimer.h> #include <qpoint.h> #include <qpopupmenu.h> #include "mainwindow.h" //#include "tableitems.h" #include "tableview.h" using namespace Todo; namespace { static const int BoxSize = 14; static const int RowHeight = 20; } TableView::TableView( MainWindow* window, QWidget* wid ) : QTable( wid ), TodoView( window ) { setUpdatesEnabled( false ); viewport()->setUpdatesEnabled( false ); m_enablePaint = false; setNumRows(0); setNumCols(4); @@ -126,62 +127,59 @@ void TableView::showOverDue( bool ) { } void TableView::updateView( ) { qWarning("update view"); m_row = false; static int id; id = startTimer(2000 ); /* FIXME we want one page to be read! * * Calculate that screensize */ todoWindow()->setReadAhead( 4 ); sort(); OTodoAccess::List::Iterator it, end; it = sorted().begin(); end = sorted().end(); qWarning("setTodos"); QTime time; time.start(); m_enablePaint = false; setUpdatesEnabled( false ); viewport()->setUpdatesEnabled( false ); - QTime t; - t.start(); setNumRows( it.count() ); if ( it.count() == 0 ) killTimer(id); + int elc = time.elapsed(); - qWarning("Adding took %d", elc/1000 ); setUpdatesEnabled( true ); viewport()->setUpdatesEnabled( true ); viewport()->update(); m_enablePaint = true; int el = time.elapsed(); - qWarning("adding took %d", el/1000 ); } void TableView::setTodo( int, const OTodo&) { sort(); /* repaint */ repaint(); } void TableView::addEvent( const OTodo&) { /* fix problems of not showing the 'Haken' */ updateView(); } /* * find the event * and then replace the complete row */ void TableView::replaceEvent( const OTodo& ev) { addEvent( ev ); } /* * re aligning table can be slow too * FIXME: look what performs better * either this or the old align table */ @@ -236,76 +234,76 @@ void TableView::slotClicked(int row, int col, int, } } break; case 1: break; case 2: { m_menuTimer->stop(); showTodo( ui ); break; } case 3: { m_menuTimer->stop(); TodoView::edit( ui ); break; } } } void TableView::slotPressed(int row, int col, int, const QPoint& point) { + m_prevP = point; /* TextColumn column */ if ( col == 2 && cellGeometry( row, col ).contains( point ) ) m_menuTimer->start( 750, TRUE ); } void TableView::slotValueChanged( int, int ) { qWarning("Value Changed"); } void TableView::slotCurrentChanged(int, int ) { m_menuTimer->stop(); } QWidget* TableView::widget() { return this; } /* * We need to overwrite sortColumn * because we want to sort whole row * based * We event want to set the setOrder * to a sort() and update() */ void TableView::sortColumn( int col, bool asc, bool ) { qWarning("bool %d", asc ); setSortOrder( col ); setAscending( asc ); updateView(); } void TableView::viewportPaintEvent( QPaintEvent* e) { - qWarning("Paint event" ); if (m_enablePaint ) QTable::viewportPaintEvent( e ); } /* * This segment is copyrighted by TT * it was taken from their todolist * application this code is GPL */ void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool ) { const QColorGroup &cg = colorGroup(); p->save(); OTodo task = sorted()[row]; p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) ); QPen op = p->pen(); p->setPen(cg.mid()); p->drawLine( 0, cr.height() - 1, cr.width() - 1, cr.height() - 1 ); p->drawLine( cr.width() - 1, 0, cr.width() - 1, cr.height() - 1 ); p->setPen(op); QFont f = p->font(); @@ -414,43 +412,72 @@ void TableView::setCellContentFromEditor(int row, int col ) { OTodo todo = sorted()[row]; if ( todo.priority() != pri ) { todo.setPriority( pri ); 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* ev ) { if (sorted().count() == 0 ) return; int row = currentRow(); - qWarning("TimerEvent %d", row); 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 + */ +void TableView::contentsMouseReleaseEvent( QMouseEvent* e) { + int row = rowAt(m_prevP.y()); + if ( row == rowAt( e->y() ) ) { + if ( abs( m_prevP.x() - e->x() ) >= 8 ) { + OTodo todo = sorted()[row]; + todo.setCompleted( !todo.isCompleted() ); + TodoView::update( todo.uid(), todo ); + updateView(); + return; + } + } + QTable::contentsMouseReleaseEvent( e ); +} +void TableView::contentsMouseMoveEvent( QMouseEvent* e ) { + m_menuTimer->stop(); + QTable::contentsMouseMoveEvent( e ); +} diff --git a/core/pim/todo/tableview.h b/core/pim/todo/tableview.h index fe65ca9..0c3e865 100644 --- a/core/pim/todo/tableview.h +++ b/core/pim/todo/tableview.h @@ -61,43 +61,46 @@ namespace Todo { void setShowCompleted( bool ); void setShowDeadline( bool ); void setShowCategory(const QString& =QString::null ); void newDay(); QWidget* widget(); void sortColumn(int, bool, bool ); /* * we do our drawing ourselves * because we don't want to have * 40.000 QTableItems for 10.000 * OTodos where we only show 10 at a time! */ void paintCell(QPainter* p, int row, int col, const QRect&, bool ); private: /* reimplented for internal reasons */ void viewportPaintEvent( QPaintEvent* ); QTimer *m_menuTimer; bool m_enablePaint:1; QString m_oleCat; bool m_first : 1; protected: + void contentsMouseReleaseEvent( QMouseEvent* ); + void contentsMouseMoveEvent( QMouseEvent* ); void timerEvent( QTimerEvent* e ); QWidget* createEditor(int row, int col, bool initFromCell )const; void setCellContentFromEditor( int row, int col ); private slots: void slotShowMenu(); void slotClicked(int, int, int, const QPoint& ); void slotPressed(int, int, int, const QPoint& ); void slotValueChanged(int, int); void slotCurrentChanged(int, int ); void slotPriority(); private: bool m_row : 1; + QPoint m_prevP; }; }; #endif |