-rw-r--r-- | core/pim/todo/tableview.cpp | 97 |
1 files changed, 69 insertions, 28 deletions
diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp index 5594b13..5d82eb2 100644 --- a/core/pim/todo/tableview.cpp +++ b/core/pim/todo/tableview.cpp @@ -68,84 +68,85 @@ TableView::TableView( MainWindow* window, QWidget* wid ) horizontalHeader()->setLabel(3, tr("Deadline") ); if ( todoWindow()->showDeadline() ) showColumn( 3); else hideColumn(3 ); connect((QTable*)this, SIGNAL( clicked( int, int, int, const QPoint& ) ), this, SLOT( slotClicked(int, int, int, const QPoint& ) ) ); connect((QTable*)this, SIGNAL( pressed( int, int, int, const QPoint& ) ), this, SLOT( slotPressed(int, int, int, const QPoint& ) ) ); connect((QTable*)this, SIGNAL(valueChanged(int, int) ), this, SLOT( slotValueChanged(int, int) ) ); connect((QTable*)this, SIGNAL(currentChanged(int, int) ), this, SLOT( slotCurrentChanged(int, int) ) ); m_menuTimer = new QTimer( this ); connect( m_menuTimer, SIGNAL(timeout()), this, SLOT(slotShowMenu()) ); m_enablePaint = true; setUpdatesEnabled( true ); viewport()->setUpdatesEnabled( true ); viewport()->update(); + setSortOrder( 0 ); + setAscending( TRUE ); + m_first = true; } /* a new day has started * update the day */ void TableView::newDay() { clear(); updateView(); } TableView::~TableView() { } void TableView::slotShowMenu() { QPopupMenu *menu = todoWindow()->contextMenu( current() ); menu->exec(QCursor::pos() ); delete menu; } QString TableView::type() const { return QString::fromLatin1( tr("Table View") ); } int TableView::current() { - int cur = 0; - // FIXME - return cur; + int uid = sorted().uidAt(currentRow() ); + qWarning("uid %d", uid ); + return uid; } QString TableView::currentRepresentation() { return text( currentRow(), 2); } /* show overdue */ void TableView::showOverDue( bool ) { clear(); updateView(); } void TableView::updateView( ) { - setSortOrder( 0 ); - setAscending( true ); 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() ); 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 ); @@ -166,126 +167,131 @@ void TableView::addEvent( const OTodo&) { * 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 */ void TableView::removeEvent( int ) { updateView(); } void TableView::setShowCompleted( bool b) { qWarning("Show Completed %d" + b ); updateView(); } void TableView::setShowDeadline( bool b) { qWarning("Show DeadLine %d" + b ); if (b) showColumn(3 ); else hideColumn(3 ); } -void TableView::setShowCategory( const QString& ) { +void TableView::setShowCategory( const QString& str) { qWarning("setShowCategory"); - updateView(); + if ( str != m_oleCat || m_first ) + updateView(); + + m_oleCat = str; + m_first = false; + } void TableView::clear() { setNumRows(0); } void TableView::slotClicked(int row, int col, int, const QPoint& point) { if ( !cellGeometry(row, col ).contains(point ) ) return; - int ui=0; // FIXME = uid(row); + + int ui= sorted().uidAt( row ); switch( col ) { - case 0: { - // FIXME - CheckItem* item = 0l; - /* - * let's see if we centered clicked - */ - if ( item ) { - int x = point.x() -columnPos( col ); - int y = point.y() -rowPos( row ); - int w = columnWidth( col ); - int h = rowHeight( row ); - if ( x >= ( w - OCheckItem::BoxSize ) / 2 && - x <= ( w - OCheckItem::BoxSize ) / 2 + OCheckItem::BoxSize && - y >= ( h - OCheckItem::BoxSize ) / 2 && - y <= ( h - OCheckItem::BoxSize ) / 2 + OCheckItem::BoxSize ) - item->toggle(); - } + case 0:{ + int x = point.x() -columnPos( col ); + int y = point.y() -rowPos( row ); + int w = columnWidth( col ); + int h = rowHeight( row ); + if ( x >= ( w - BoxSize ) / 2 && + x <= ( w - BoxSize ) / 2 + BoxSize && + y >= ( h - BoxSize ) / 2 && + y <= ( h - BoxSize ) / 2 + BoxSize ) { + OTodo todo = sorted()[row]; + todo.setCompleted( !todo.isCompleted() ); + TodoView::update( todo.uid(), todo ); + updateView(); + } } 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) { /* 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 row, bool asc, bool ) { - QTable::sortColumn( row, asc, TRUE ); - +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 ); @@ -336,24 +342,59 @@ void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool break; case 2: // description field { QString text = task.summary().isEmpty() ? task.description() : task.summary(); p->drawText(2,2 + fm.ascent(), text); } break; case 3: { QString text; if (task.hasDueDate()) { text = "HAS"; } else { text = tr("None"); } p->drawText(2,2 + fm.ascent(), text); } break; } p->restore(); } +QWidget* TableView::createEditor(int row, int col, bool )const { + switch( col ) { + case 1: { + /* the priority stuff */ + QComboBox* combo = new QComboBox( viewport() ); + combo->insertItem( "1" ); + combo->insertItem( "2" ); + combo->insertItem( "3" ); + combo->insertItem( "4" ); + combo->insertItem( "5" ); + combo->setCurrentItem( sorted()[row].priority()-1 ); + return combo; + } + case 0: + default: + return 0l; + } +} +void TableView::setCellContentFromEditor(int row, int col ) { + if ( col == 1 ) { + QWidget* wid = cellWidget(row, 1 ); + if ( wid->inherits("QComboBox") ) { + int pri = ((QComboBox*)wid)->currentItem() + 1; + OTodo todo = sorted()[row]; + if ( todo.priority() != pri ) { + todo.setPriority( pri ); + TodoView::update( todo.uid(), todo ); + updateView(); + } + } + } +} +void TableView::slotPriority() { + setCellContentFromEditor( currentRow(), currentColumn() ); +} |