-rw-r--r-- | core/pim/todo/main.cpp | 3 | ||||
-rw-r--r-- | core/pim/todo/mainwindow.cpp | 136 | ||||
-rw-r--r-- | core/pim/todo/mainwindow.h | 4 | ||||
-rw-r--r-- | core/pim/todo/opie-todo.control | 6 | ||||
-rw-r--r-- | core/pim/todo/otaskeditor.cpp | 14 | ||||
-rw-r--r-- | core/pim/todo/otaskeditor.h | 3 | ||||
-rw-r--r-- | core/pim/todo/quickedit.cpp | 1 | ||||
-rw-r--r-- | core/pim/todo/quickeditimpl.cpp | 7 | ||||
-rw-r--r-- | core/pim/todo/smalltodo.cpp | 1 | ||||
-rw-r--r-- | core/pim/todo/tableview.cpp | 86 | ||||
-rw-r--r-- | core/pim/todo/tableview.h | 18 | ||||
-rw-r--r-- | core/pim/todo/taskeditoralarms.cpp | 5 | ||||
-rw-r--r-- | core/pim/todo/taskeditoroverview.cpp | 6 | ||||
-rw-r--r-- | core/pim/todo/taskeditorstatus.cpp | 5 | ||||
-rw-r--r-- | core/pim/todo/templatedialogimpl.cpp | 1 | ||||
-rw-r--r-- | core/pim/todo/textviewshow.cpp | 18 | ||||
-rw-r--r-- | core/pim/todo/todomanager.cpp | 1 | ||||
-rw-r--r-- | core/pim/todo/todoshow.cpp | 8 | ||||
-rw-r--r-- | core/pim/todo/todoshow.h | 2 | ||||
-rw-r--r-- | core/pim/todo/todoview.cpp | 3 | ||||
-rw-r--r-- | core/pim/todo/todoview.h | 12 |
21 files changed, 273 insertions, 67 deletions
diff --git a/core/pim/todo/main.cpp b/core/pim/todo/main.cpp index 58ed45c..7763169 100644 --- a/core/pim/todo/main.cpp +++ b/core/pim/todo/main.cpp @@ -21,7 +21,6 @@ #include "mainwindow.h" -#include <qdatetime.h> #include <qpe/qpeapplication.h> @@ -39,7 +38,7 @@ int main( int argc, char **argv ) Todo::MainWindow mw; int t = time.elapsed(); qWarning("QTime %d", t/1000 ); - mw.setCaption("Opie Todolist"); + mw.setCaption( QObject::tr("Opie Todolist")); QObject::connect( &a, SIGNAL( flush() ), &mw, SLOT( slotFlush() ) ); QObject::connect( &a, SIGNAL( reload() ), &mw, SLOT( slotReload() ) ); diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp index 5119ae0..6725951 100644 --- a/core/pim/todo/mainwindow.cpp +++ b/core/pim/todo/mainwindow.cpp @@ -71,6 +71,7 @@ MainWindow::MainWindow( QWidget* parent, : OPimMainWindow( "Todolist", parent, name, WType_TopLevel | WStyle_ContextHelp ) { m_syncing = false; + m_showing = false; m_counter = 0; m_tempManager = new TemplateManager(); m_tempManager->load(); @@ -161,6 +162,7 @@ void MainWindow::initActions() { a->addTo( m_tool ); } +#if 0 // Options menu a = new QAction( QWidget::tr("Find"), Resource::loadIconSet( "mag" ), QString::null, 0, this, 0 ); @@ -168,7 +170,9 @@ void MainWindow::initActions() { a->addTo( m_options ); m_findAction = a; + m_options->insertSeparator(); +#endif m_completedAction = new QAction( QString::null, QWidget::tr("Show completed tasks"), 0, this, 0, TRUE ); @@ -352,6 +356,7 @@ void MainWindow::slotReload() { } void MainWindow::closeEvent( QCloseEvent* e ) { if (m_stack->visibleWidget() == currentShow()->widget() ) { + m_showing = false; raiseCurrentView(); e->ignore(); return; @@ -409,7 +414,7 @@ void MainWindow::populateTemplates() { /* * slotNewFromTemplate * We use the edit widget to do - * the config but we setUid(-1) + * the config but we setUid(1) * to get a new uid */ /* @@ -425,12 +430,14 @@ void MainWindow::slotNewFromTemplate( int id ) { if ( currentEditor()->accepted() ) { /* assign new todo */ - event.setUid( -1 ); - currentView()->addEvent( event ); + event.setUid( 1 ); + handleAlarms( OTodo(), event ); m_todoMgr.add( event ); + currentView()->addEvent( event ); populateCategories(); } + raiseCurrentView(); } void MainWindow::slotNew() { create(); @@ -438,12 +445,12 @@ void MainWindow::slotNew() { void MainWindow::slotDuplicate() { if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), - QWidget::tr("Can not edit data, currently syncing")); + QWidget::tr("Data can not be edited, currently syncing")); return; } OTodo ev = m_todoMgr.event( currentView()->current() ); /* let's generate a new uid */ - ev.setUid(-1); + ev.setUid(1); m_todoMgr.add( ev ); currentView()->addEvent( ev ); @@ -455,22 +462,38 @@ void MainWindow::slotDelete() { if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), - QWidget::tr("Can not edit data, currently syncing")); + QWidget::tr("Data can not be edited, currently syncing")); return; } QString strName = currentView()->currentRepresentation(); if (!QPEMessageBox::confirmDelete(this, QWidget::tr("Todo"), strName ) ) return; - handleAlarms( OTodo(), m_todoMgr.event( currentView()->current() ) ); + handleAlarms( m_todoMgr.event( currentView()->current() ), OTodo() ); m_todoMgr.remove( currentView()->current() ); currentView()->removeEvent( currentView()->current() ); raiseCurrentView(); } +void MainWindow::slotDelete(int uid ) { + if( uid == 0 ) return; + if(m_syncing) { + QMessageBox::warning(this, QWidget::tr("Todo"), + QWidget::tr("Data can not be edited, currently syncing")); + return; + } + OTodo to = m_todoMgr.event(uid); + if (!QPEMessageBox::confirmDelete(this, QWidget::tr("Todo"), to.toShortText() ) ) + return; + + handleAlarms(to, OTodo() ); + m_todoMgr.remove( to.uid() ); + currentView()->removeEvent( to.uid() ); + raiseCurrentView(); +} void MainWindow::slotDeleteAll() { if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), - QWidget::tr("Can not edit data, currently syncing")); + QWidget::tr("Data can not be edited, currently syncing")); return; } @@ -486,7 +509,7 @@ void MainWindow::slotDeleteAll() { void MainWindow::slotDeleteCompleted() { if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), - QWidget::tr("Can not edit data, currently syncing")); + QWidget::tr("Data can not be edited, currently syncing")); return; } @@ -566,20 +589,24 @@ void MainWindow::beamDone( Ir* ir) { } void MainWindow::receiveFile( const QString& filename ) { OTodoAccessVCal* cal = new OTodoAccessVCal(filename ); + OTodoAccess acc( cal ); acc.load(); OTodoAccess::List list = acc.allRecords(); - QString message = QWidget::tr("<P>%1 new tasks arrived.<p>Would you like to add them to your Todolist?").arg(list.count() ); + if (list.count()){ - if ( QMessageBox::information(this, QWidget::tr("New Tasks"), - message, QMessageBox::Ok, - QMessageBox::Cancel ) == QMessageBox::Ok ) { - OTodoAccess::List::Iterator it; - for ( it = list.begin(); it != list.end(); ++it ) - m_todoMgr.add( (*it) ); + QString message = QWidget::tr("<P>%1 new tasks arrived.<p>Would you like to add them to your Todolist?").arg(list.count() ); - currentView()->updateView(); + if ( QMessageBox::information(this, QWidget::tr("New Tasks"), + message, QMessageBox::Ok, + QMessageBox::Cancel ) == QMessageBox::Ok ) { + OTodoAccess::List::Iterator it; + for ( it = list.begin(); it != list.end(); ++it ) + m_todoMgr.add( (*it) ); + + currentView()->updateView(); + } } } @@ -634,6 +661,13 @@ ViewBase* MainWindow::currentView() { return m_curView; } void MainWindow::raiseCurrentView() { + // due QPE/Application/todolist show(int) + // we might not have the populateCategories slot called once + // we would show the otodo but then imediately switch to the currentView + // if we're initially showing we shouldn't raise the table + // in returnFromView we fix up m_showing + if (m_showing ) return; + m_stack->raiseWidget( m_curView->widget() ); } void MainWindow::slotShowDue(bool ov) { @@ -642,15 +676,26 @@ void MainWindow::slotShowDue(bool ov) { raiseCurrentView(); } void MainWindow::slotShow( int uid ) { + if ( uid == 0 ) return; qWarning("slotShow"); currentShow()->slotShow( event( uid ) ); m_stack->raiseWidget( currentShow()->widget() ); } +void MainWindow::slotShowNext() { + int l = currentView()->next(); + if (l!=0) + slotShow(l); +} +void MainWindow::slotShowPrev() { + int l = currentView()->prev(); + if (l!=0) + slotShow(l); +} void MainWindow::slotEdit( int uid ) { - if (uid == 1 ) return; + if (uid == 0 ) return; if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), - QWidget::tr("Can not edit data, currently syncing")); + QWidget::tr("Data can't be edited, currently syncing")); return; } @@ -660,7 +705,6 @@ void MainWindow::slotEdit( int uid ) { /* if completed */ if ( currentEditor()->accepted() ) { - qWarning("Replacing now" ); handleAlarms( old_todo, todo ); m_todoMgr.update( todo.uid(), todo ); currentView()->replaceEvent( todo ); @@ -718,6 +762,10 @@ void MainWindow::slotComplete( const OTodo& todo ) { * and update the items duedate to the next * possible recurrance of this item... * the spinned off one will loose the + * recurrence. + * We calculate the difference between the old due date and the + * new one and add this diff to start, completed and alarm dates + * -zecke */ if ( to.hasRecurrence() && to.isCompleted() ) { OTodo to2( to ); @@ -734,6 +782,8 @@ void MainWindow::slotComplete( const OTodo& todo ) { */ QDate date; if ( to2.recurrence().nextOcurrence( to2.dueDate().addDays(1), date ) ) { + int dayDiff = to.dueDate().daysTo( date ); + qWarning("day diff is %d", dayDiff ); QDate inval; /* generate a new uid for the old record */ to.setUid( 1 ); @@ -747,9 +797,30 @@ void MainWindow::slotComplete( const OTodo& todo ) { * and complete date */ to2.setDueDate( date ); - to2.setStartDate( inval ); + rec.setStart( date ); + to2.setRecurrence( rec ); // could be Monday, TuesDay, Thursday every week + + /* move start date */ + if (to2.hasStartDate() ) + to2.setStartDate( to2.startDate().addDays( dayDiff ) ); + + /* now the alarms */ + if (to2.hasNotifiers() ) { + OPimNotifyManager::Alarms _als = to2.notifiers().alarms(); + OPimNotifyManager::Alarms als; + + /* for every alarm move the day */ + for ( OPimNotifyManager::Alarms::Iterator it = _als.begin(); it != _als.end(); ++it ) { + OPimAlarm al = (*it); + al.setDateTime( al.dateTime().addDays( dayDiff ) ); + als.append( al ); + } + to2.notifiers().setAlarms( als ); + handleAlarms( OTodo(), todo ); + } to2.setCompletedDate( inval ); to2.setCompleted( false ); + updateTodo( to2 ); }else updateTodo( to ); @@ -769,9 +840,10 @@ int MainWindow::create() { int uid = 0; if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), - QWidget::tr("Can not edit data, currently syncing")); + QWidget::tr("Data can not be edited, currently syncing")); return uid; } + m_todoMgr.load(); OTodo todo = currentEditor()->newTodo( currentCatId(), @@ -804,7 +876,11 @@ bool MainWindow::remove( int uid ) { return m_todoMgr.remove( uid ); } void MainWindow::beam( int uid) { + if( uid == 0 ) return; + ::unlink( beamfile ); + m_todoMgr.load(); + OTodo todo = event( uid ); OTodoAccessVCal* cal = new OTodoAccessVCal(QString::fromLatin1(beamfile) ); OTodoAccess acc( cal ); @@ -817,13 +893,19 @@ void MainWindow::beam( int uid) { ir->send(beamfile, todo.summary(), "text/x-vCalendar" ); } void MainWindow::show( int uid ) { + m_todoMgr.load(); // might not be loaded yet + m_showing = true; slotShow( uid ); + raise(); + QPEApplication::setKeepRunning(); } void MainWindow::edit( int uid ) { + m_todoMgr.load(); slotEdit( uid ); } void MainWindow::add( const OPimRecord& rec) { if ( rec.rtti() != OTodo::rtti() ) return; + m_todoMgr.load(); // might not be loaded const OTodo& todo = static_cast<const OTodo&>(rec); @@ -837,6 +919,7 @@ void MainWindow::add( const OPimRecord& rec) { populateCategories(); } void MainWindow::slotReturnFromView() { + m_showing = false; raiseCurrentView(); } @@ -932,7 +1015,7 @@ void MainWindow::doAlarm( const QDateTime& dt, int uid ) { connect( btnOk, SIGNAL(clicked() ), &dlg, SLOT(accept() ) ); lay->addWidget( btnOk ); - QString text = tr("<h1>Alarm at %0</h1><br>").arg( TimeString::dateString( dt ) ); + QString text = tr("<h1>Alarm at %1</h1><br>").arg( TimeString::dateString( dt ) ); text += todo.toRichText(); view->setText( text ); @@ -943,10 +1026,11 @@ void MainWindow::doAlarm( const QDateTime& dt, int uid ) { killAlarm(); if (needToStay) { - showMaximized(); - raise(); +// showMaximized(); +// raise(); QPEApplication::setKeepRunning(); - setActiveWindow(); +// setActiveWindow(); } } + diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h index 02e2449..b04a958 100644 --- a/core/pim/todo/mainwindow.h +++ b/core/pim/todo/mainwindow.h @@ -118,6 +118,7 @@ private slots: void raiseCurrentView(); ViewBase* currentView(); ViewBase* m_curView; + bool m_showing : 1; // used to see if we show a todo in the cases we shouldn't change the table QuickEditBase* m_curQuick; Editor* m_curEdit; TodoShow* currentShow(); @@ -167,6 +168,7 @@ private slots: void slotDuplicate(); void slotDelete(); + void slotDelete(int uid ); void slotDeleteAll(); void slotDeleteCompleted(); @@ -185,6 +187,8 @@ private slots: void slotBeam(); void beamDone( Ir* ); void slotShowDetails(); + void slotShowNext(); + void slotShowPrev(); void slotShowDue( bool ); void slotReturnFromView(); // for TodoShow... /* reimplementation from opimmainwindow */ diff --git a/core/pim/todo/opie-todo.control b/core/pim/todo/opie-todo.control index b579306..17a65a8 100644 --- a/core/pim/todo/opie-todo.control +++ b/core/pim/todo/opie-todo.control @@ -1,10 +1,10 @@ Package: opie-todo -Files: bin/todolist apps/1Pim/todo.desktop pics/todo +Files: bin/todolist apps/1Pim/todo.desktop Priority: optional Section: opie/applications Maintainer: Holger 'zecke' Freyther <zecke@handhelds.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION -Depends: task-opie-minimal, libopie1 +Depends: task-opie-minimal, libopie1, opie-pics Description: TODO-list manager A Todo-list manager for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/core/pim/todo/otaskeditor.cpp b/core/pim/todo/otaskeditor.cpp index 84f854f..1ed20b4 100644 --- a/core/pim/todo/otaskeditor.cpp +++ b/core/pim/todo/otaskeditor.cpp @@ -1,7 +1,4 @@ -#include <qdatetime.h> -#include <qlabel.h> #include <qlayout.h> -#include <qmultilineedit.h> #include <opie/orecurrancewidget.h> @@ -26,19 +23,17 @@ OTaskEditor::~OTaskEditor() { } void OTaskEditor::init( int cur ) { OTodo to; + to.setUid( 1 ); // generate a new uid if ( cur != 0 ) to.setCategories( cur ); load(to); - m_uid = 1; // generate a new one } void OTaskEditor::init( const OTodo& to ) { load( to ); - m_uid = to.uid(); } OTodo OTaskEditor::todo()const{ qWarning("saving!"); - OTodo to; - to.setUid(m_uid ); + OTodo to ( m_todo ); m_overView->save( to ); m_stat->save( to ); to.setRecurrence( m_rec->recurrence() ); @@ -50,11 +45,12 @@ void OTaskEditor::load(const OTodo& to) { m_overView->load( to ); m_stat->load( to ); m_rec->setRecurrence( to.recurrence(), to.hasDueDate() ? to.dueDate() : QDate::currentDate() ); - m_alarm->setEnabled( !to.hasRecurrence() ); m_alarm->load( to ); + + m_todo = to; } void OTaskEditor::init() { - setCaption("Task Editor"); + setCaption(tr("Task Editor") ); QVBoxLayout* layo = new QVBoxLayout( this ); m_tab = new OTabWidget( this ); diff --git a/core/pim/todo/otaskeditor.h b/core/pim/todo/otaskeditor.h index 795f333..2daae52 100644 --- a/core/pim/todo/otaskeditor.h +++ b/core/pim/todo/otaskeditor.h @@ -37,8 +37,7 @@ private: TaskEditorAlarms *m_alarm; TaskEditorAlarms *m_remind; ORecurranceWidget *m_rec; - int m_uid; - + OTodo m_todo; }; #endif diff --git a/core/pim/todo/quickedit.cpp b/core/pim/todo/quickedit.cpp index edcd48a..16fc53a 100644 --- a/core/pim/todo/quickedit.cpp +++ b/core/pim/todo/quickedit.cpp @@ -1,4 +1,3 @@ -#include "mainwindow.h" #include "quickedit.h" using namespace Todo; diff --git a/core/pim/todo/quickeditimpl.cpp b/core/pim/todo/quickeditimpl.cpp index f4c7c47..70e0582 100644 --- a/core/pim/todo/quickeditimpl.cpp +++ b/core/pim/todo/quickeditimpl.cpp @@ -31,12 +31,17 @@ QuickEditImpl::QuickEditImpl( QWidget* parent, bool visible ) setStretchableWidget( m_edit ); QWhatsThis::add( m_edit, QWidget::tr( "Enter description of new task here.\n\nThis area is called the quick task bar.\n\nIt allows you to quickly add a new task to your list. This area can be shown or hidden by selecting Options->'Show quick task bar' from the menu above." ) ); + /* + * it's not implemented and won't be implemented for 1.0 + */ +#if 0 QAction *a = new QAction( QWidget::tr( "More" ), Resource::loadPixmap( "todo/more" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( slotMore() ) ); a->addTo( this ); a->setWhatsThis( QWidget::tr( "Click here to enter additional information for new task.\n\nThis area is called the quick task bar.\n\nIt allows you to quickly add a new task to your list. This area can be shown or hidden by selecting Options->'Show quick task bar' from the menu above." ) ); +#endif - a = new QAction( QWidget::tr( "Enter" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); + QAction *a = new QAction( QWidget::tr( "Enter" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( slotEnter() ) ); a->addTo( this ); a->setWhatsThis( QWidget::tr( "Click here to add new task.\n\nThis area is called the quick task bar.\n\nIt allows you to quickly add a new task to your list. This area can be shown or hidden by selecting Options->'Show quick task bar' from the menu above." ) ); diff --git a/core/pim/todo/smalltodo.cpp b/core/pim/todo/smalltodo.cpp index 412fe9e..504256d 100644 --- a/core/pim/todo/smalltodo.cpp +++ b/core/pim/todo/smalltodo.cpp @@ -25,7 +25,6 @@ Boston, MA 02111-1307, USA. */ -#include <qshared.h> #include "smalltodo.h" diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp index d9cda09..2e252d5 100644 --- a/core/pim/todo/tableview.cpp +++ b/core/pim/todo/tableview.cpp @@ -27,11 +27,11 @@ */ #include <stdlib.h> #include <cmath> +#include <cctype> #include <qcombobox.h> #include <qlineedit.h> #include <qtimer.h> -#include <qpoint.h> #include <qpopupmenu.h> #include <qpe/config.h> @@ -50,6 +50,27 @@ namespace { static const int RowHeight = 20; } +TableView::EditorWidget::EditorWidget() : m_wid(0l), m_row(-1), m_col(-1) { +} +void TableView::EditorWidget::setCellWidget(QWidget* wid, int row, int col ) { + m_wid = wid; + m_row = row; + m_col = col; +} +void TableView::EditorWidget::releaseCellWidget() { + m_wid = 0; + m_row = m_col = -1; +} +QWidget* TableView::EditorWidget::cellWidget()const { + return m_wid; +} +int TableView::EditorWidget::cellRow()const { + return m_row; +} +int TableView::EditorWidget::cellCol()const { + return m_col; +} + void TableView::initConfig() { Config config( "todo" ); @@ -143,11 +164,24 @@ QString TableView::type() const { return QString::fromLatin1( tr("Table View") ); } int TableView::current() { - if (numRows() == 0 ) return 1; + if (numRows() == 0 ) return 0; int uid = sorted().uidAt(currentRow() ); return uid; } +int TableView::next() { + if ( numRows() == 0 ) return 0; + if ( currentRow() + 1 >= numRows() ) return 0; + setCurrentCell( currentRow() +1, currentColumn() ); + return sorted().uidAt( currentRow() ); +} +int TableView::prev() { + if ( numRows() == 0 ) return 0; + if ( currentRow() - 1 < 0 ) return 0; + setCurrentCell( currentRow() -1, currentColumn() ); + return sorted().uidAt( currentRow() ); + +} QString TableView::currentRepresentation() { OTodo to = sorted()[currentRow()]; return to.summary().isEmpty() ? to.description().left(20) : to.summary() ; @@ -219,11 +253,11 @@ void TableView::removeEvent( int ) { updateView(); } void TableView::setShowCompleted( bool b) { - qWarning("Show Completed %d" + b ); + qWarning("Show Completed %d" , b ); updateView(); } void TableView::setShowDeadline( bool b ) { - qWarning( "Show DeadLine %d" + b ); + qWarning( "Show DeadLine %d" , b ); if ( b ) showColumn( 3 ); else @@ -259,6 +293,13 @@ void TableView::clear() { } void TableView::slotClicked(int row, int col, int, const QPoint& point) { + if ( m_editorWidget.cellWidget() ) { + //setCellContentFromEditor(m_editorWidget.cellRow(), m_editorWidget.cellCol() ); + endEdit(m_editorWidget.cellRow(), m_editorWidget.cellCol(), + true, true ); + m_editorWidget.releaseCellWidget(); + } + if ( !cellGeometry(row, col ).contains(point ) ) return; @@ -280,7 +321,11 @@ void TableView::slotClicked(int row, int col, int, } break; - case 1: + // Priority emit a double click... + case 1:{ + QWidget* wid = beginEdit( row, col, FALSE ); + m_editorWidget.setCellWidget( wid, row, col ); + } break; case 2: { @@ -446,6 +491,7 @@ QWidget* TableView::createEditor(int row, int col, bool )const { } } void TableView::setCellContentFromEditor(int row, int col ) { + qWarning("set cell content from editor"); if ( col == 1 ) { QWidget* wid = cellWidget(row, 1 ); if ( wid->inherits("QComboBox") ) { @@ -542,13 +588,41 @@ void TableView::contentsMouseMoveEvent( QMouseEvent* e ) { 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(); + } + int row = currentRow(); + int col = currentColumn(); + + char key = ::toupper( event->ascii() ); + /* let QTable also handle the d later */ + if ( key == 'D' ) + removeQuery( sorted().uidAt( row ) ); + + switch( event->key() ) { case Qt::Key_F33: case Qt::Key_Enter: case Qt::Key_Return: - showTodo( sorted().uidAt( currentRow() ) ); + 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) ); + } + break; default: QTable::keyPressEvent( event ); } } + diff --git a/core/pim/todo/tableview.h b/core/pim/todo/tableview.h index 689c496..528ddc9 100644 --- a/core/pim/todo/tableview.h +++ b/core/pim/todo/tableview.h @@ -50,6 +50,8 @@ namespace Todo { QString type()const; int current(); QString currentRepresentation(); + int next(); + int prev(); void clear(); void showOverDue( bool ); @@ -91,6 +93,22 @@ namespace Todo { void timerEvent( QTimerEvent* e ); QWidget* createEditor(int row, int col, bool initFromCell )const; void setCellContentFromEditor( int row, int col ); + /** + * for inline editing on single click and to work around some + * bug in qt2.3.5 + */ + struct EditorWidget { + EditorWidget(); + void setCellWidget(QWidget*, int row, int col ); + void releaseCellWidget(); + QWidget* cellWidget()const; + int cellRow()const; + int cellCol()const; + private: + QWidget* m_wid; + int m_row, m_col; + }; + EditorWidget m_editorWidget; private slots: void slotShowMenu(); diff --git a/core/pim/todo/taskeditoralarms.cpp b/core/pim/todo/taskeditoralarms.cpp index bff3338..bcc40fe 100644 --- a/core/pim/todo/taskeditoralarms.cpp +++ b/core/pim/todo/taskeditoralarms.cpp @@ -34,14 +34,9 @@ #include <qpe/datebookmonth.h> #include <qpe/resource.h> -#include <qpe/timestring.h> -#include <qdatetime.h> #include <qlistview.h> -#include <qpushbutton.h> -#include <qpopupmenu.h> #include <qlayout.h> -#include <qwhatsthis.h> class AlarmItem : public QListViewItem { diff --git a/core/pim/todo/taskeditoroverview.cpp b/core/pim/todo/taskeditoroverview.cpp index 9a8abea..415dcf2 100644 --- a/core/pim/todo/taskeditoroverview.cpp +++ b/core/pim/todo/taskeditoroverview.cpp @@ -33,10 +33,8 @@ #include <qpe/categoryselect.h> #include <qpe/datebookmonth.h> #include <qpe/resource.h> -#include <qpe/timestring.h> #include <qcheckbox.h> -#include <qcombobox.h> #include <qlabel.h> #include <qlayout.h> #include <qmultilineedit.h> @@ -68,7 +66,7 @@ TaskEditorOverView::TaskEditorOverView( QWidget* parent, const char* name, WFla QGridLayout *layout = new QGridLayout( container, 7, 2, 4, 4 ); // Description - QLabel *label = new QLabel( tr( "Description:" ), container ); + QLabel *label = new QLabel( tr( "Summary:" ), container ); layout->addWidget( label, 0, 0 ); QWhatsThis::add( label, tr( "Enter brief description of the task here." ) ); cmbDesc = new QComboBox( TRUE, container ); @@ -116,7 +114,7 @@ TaskEditorOverView::TaskEditorOverView( QWidget* parent, const char* name, WFla connect( ckbRecurrence, SIGNAL(clicked() ), this, SLOT( slotRecClicked() ) ); // Notes - label = new QLabel( tr( "Notes:" ), container ); + label = new QLabel( tr( "Description:" ), container ); layout->addWidget( label, 5, 0 ); QWhatsThis::add( label, tr( "Enter any additional information about this task here." ) ); mleNotes = new QMultiLineEdit( container ); diff --git a/core/pim/todo/taskeditorstatus.cpp b/core/pim/todo/taskeditorstatus.cpp index 0ab4223..98e3cea 100644 --- a/core/pim/todo/taskeditorstatus.cpp +++ b/core/pim/todo/taskeditorstatus.cpp @@ -33,15 +33,11 @@ #include <opie/opimstate.h> #include <qpe/datebookmonth.h> -#include <qpe/resource.h> -#include <qpe/timestring.h> #include <qcheckbox.h> #include <qcombobox.h> #include <qlabel.h> #include <qlayout.h> -#include <qscrollview.h> -#include <qtoolbutton.h> #include <qwhatsthis.h> // FIXME add the hack slots instead of setPopup!!!! @@ -303,4 +299,5 @@ void TaskEditorStatus::slotDueChanged(int y, int m, int d) { m_due.setYMD( y, m, d ); btnDue->setText( TimeString::longDateString( m_due ) ); + emit dueDateChanged( m_due ); } diff --git a/core/pim/todo/templatedialogimpl.cpp b/core/pim/todo/templatedialogimpl.cpp index fed92f0..c2306ac 100644 --- a/core/pim/todo/templatedialogimpl.cpp +++ b/core/pim/todo/templatedialogimpl.cpp @@ -1,4 +1,3 @@ -#include <qlistview.h> #include <qlineedit.h> #include "mainwindow.h" diff --git a/core/pim/todo/textviewshow.cpp b/core/pim/todo/textviewshow.cpp index fe8a9c8..35ea74b 100644 --- a/core/pim/todo/textviewshow.cpp +++ b/core/pim/todo/textviewshow.cpp @@ -1,4 +1,3 @@ -#include "mainwindow.h" #include "textviewshow.h" using namespace Todo; @@ -20,9 +19,26 @@ QWidget* TextViewShow::widget() { } void TextViewShow::keyPressEvent( QKeyEvent* event ) { switch( event->key() ) { + case Qt::Key_Up: + if ( ( visibleHeight() < contentsHeight() ) && + ( verticalScrollBar()->value() > verticalScrollBar()->minValue() ) ) + scrollBy( 0, -(visibleHeight()-20) ); + else + showPrev(); + break; + case Qt::Key_Down: + if ( ( visibleHeight() < contentsHeight() ) && + ( verticalScrollBar()->value() < verticalScrollBar()->maxValue() ) ) + scrollBy( 0, visibleHeight()-20 ); + else + showNext(); + break; + case Qt::Key_Left: + case Qt::Key_Right: case Qt::Key_F33: case Qt::Key_Enter: case Qt::Key_Return: + case Qt::Key_Space: escapeView(); break; default: diff --git a/core/pim/todo/todomanager.cpp b/core/pim/todo/todomanager.cpp index df2e711..501cca7 100644 --- a/core/pim/todo/todomanager.cpp +++ b/core/pim/todo/todomanager.cpp @@ -25,7 +25,6 @@ Boston, MA 02111-1307, USA. */ -#include <qdatetime.h> #include <qpe/categoryselect.h> #include "todomanager.h" diff --git a/core/pim/todo/todoshow.cpp b/core/pim/todo/todoshow.cpp index 4dbc9aa..5962028 100644 --- a/core/pim/todo/todoshow.cpp +++ b/core/pim/todo/todoshow.cpp @@ -14,3 +14,11 @@ void TodoShow::escapeView() { m_win->slotReturnFromView(); } +void TodoShow::showNext() { + if (m_win) + m_win->slotShowNext(); +} +void TodoShow::showPrev() { + if (m_win) + m_win->slotShowPrev(); +} diff --git a/core/pim/todo/todoshow.h b/core/pim/todo/todoshow.h index 7267b13..2babe93 100644 --- a/core/pim/todo/todoshow.h +++ b/core/pim/todo/todoshow.h @@ -50,6 +50,8 @@ namespace Todo { virtual QWidget* widget() = 0; protected: void escapeView(); + void showNext(); + void showPrev(); private: MainWindow *m_win; }; diff --git a/core/pim/todo/todoview.cpp b/core/pim/todo/todoview.cpp index 3e808e7..31047cf 100644 --- a/core/pim/todo/todoview.cpp +++ b/core/pim/todo/todoview.cpp @@ -64,3 +64,6 @@ void TodoView::complete( int uid ) { void TodoView::complete( const OTodo& ev ) { m_main->slotComplete( ev ); } +void TodoView::removeQuery( int uid ) { + m_main->slotDelete( uid ); +} diff --git a/core/pim/todo/todoview.h b/core/pim/todo/todoview.h index e73e808..e5ed66f 100644 --- a/core/pim/todo/todoview.h +++ b/core/pim/todo/todoview.h @@ -53,6 +53,16 @@ namespace Todo { virtual QString currentRepresentation() = 0; virtual void showOverDue( bool ) = 0; + /** + * the next record in the view or 0 if none is there + */ + virtual int next() = 0; + + /** + * the previous record or 0 if none is there.. + */ + virtual int prev() = 0; + /* * update the view */ @@ -111,6 +121,8 @@ namespace Todo { void update(int uid, const SmallTodo& to ); void update(int uid, const OTodo& ev); void remove( int uid ); + /* will ask the user if the item should be deleted */ + void removeQuery(int uid ); void complete( int uid ); void complete( const OTodo& ev ); private: |