summaryrefslogtreecommitdiff
authoreilers <eilers>2003-08-01 14:22:29 (UTC)
committer eilers <eilers>2003-08-01 14:22:29 (UTC)
commit7d51872c86155fbbf27aeb8e49e7a336d909caac (patch) (side-by-side diff)
tree55ecf3452d6711065e36c6bceab8ec52bd5525d8
parent34991bac7d96b1c17601be6a5607819342571e0c (diff)
downloadopie-7d51872c86155fbbf27aeb8e49e7a336d909caac.zip
opie-7d51872c86155fbbf27aeb8e49e7a336d909caac.tar.gz
opie-7d51872c86155fbbf27aeb8e49e7a336d909caac.tar.bz2
Merging changes from BRANCH_1_0 to HEAD
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/main.cpp3
-rw-r--r--core/pim/todo/mainwindow.cpp136
-rw-r--r--core/pim/todo/mainwindow.h4
-rw-r--r--core/pim/todo/opie-todo.control6
-rw-r--r--core/pim/todo/otaskeditor.cpp14
-rw-r--r--core/pim/todo/otaskeditor.h3
-rw-r--r--core/pim/todo/quickedit.cpp1
-rw-r--r--core/pim/todo/quickeditimpl.cpp7
-rw-r--r--core/pim/todo/smalltodo.cpp1
-rw-r--r--core/pim/todo/tableview.cpp86
-rw-r--r--core/pim/todo/tableview.h18
-rw-r--r--core/pim/todo/taskeditoralarms.cpp5
-rw-r--r--core/pim/todo/taskeditoroverview.cpp6
-rw-r--r--core/pim/todo/taskeditorstatus.cpp5
-rw-r--r--core/pim/todo/templatedialogimpl.cpp1
-rw-r--r--core/pim/todo/textviewshow.cpp18
-rw-r--r--core/pim/todo/todomanager.cpp1
-rw-r--r--core/pim/todo/todoshow.cpp8
-rw-r--r--core/pim/todo/todoshow.h2
-rw-r--r--core/pim/todo/todoview.cpp3
-rw-r--r--core/pim/todo/todoview.h12
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
@@ -18,13 +18,12 @@
**
**********************************************************************/
#include "mainwindow.h"
-#include <qdatetime.h>
#include <qpe/qpeapplication.h>
void myMessages( QtMsgType, const char* ) {
}
@@ -36,13 +35,13 @@ int main( int argc, char **argv )
QTime time;
time.start();
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() ) );
a.showMainWidget(&mw);
return a.exec();
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
@@ -68,12 +68,13 @@ using namespace Todo;
MainWindow::MainWindow( QWidget* parent,
const char* name )
: OPimMainWindow( "Todolist", parent, name, WType_TopLevel | WStyle_ContextHelp )
{
m_syncing = false;
+ m_showing = false;
m_counter = 0;
m_tempManager = new TemplateManager();
m_tempManager->load();
initUI();
initConfig();
@@ -158,20 +159,23 @@ void MainWindow::initActions() {
connect( a, SIGNAL( activated() ), this, SLOT( slotBeam() ) );
a->setWhatsThis( QWidget::tr( "Click here to send the current task to another device." ) );
a->addTo( m_edit );
a->addTo( m_tool );
}
+#if 0
// Options menu
a = new QAction( QWidget::tr("Find"), Resource::loadIconSet( "mag" ),
QString::null, 0, this, 0 );
connect(a, SIGNAL( activated() ), this, SLOT( slotFind() ) );
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 );
m_completedAction->addTo( m_options );
m_completedAction->setOn( showCompleted() );
connect(m_completedAction, SIGNAL( toggled(bool) ), this, SLOT(slotShowCompleted(bool) ) );
@@ -349,12 +353,13 @@ void MainWindow::slotReload() {
m_todoMgr.reload();
currentView()->updateView( );
raiseCurrentView();
}
void MainWindow::closeEvent( QCloseEvent* e ) {
if (m_stack->visibleWidget() == currentShow()->widget() ) {
+ m_showing = false;
raiseCurrentView();
e->ignore();
return;
}
/*
* we should have flushed and now we're still saving
@@ -406,13 +411,13 @@ void MainWindow::populateTemplates() {
m_template->insertItem( (*it) );
}
}
/*
* 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
*/
/*
* first we get the name of the template
* then we will use the TemplateManager
*/
@@ -422,58 +427,76 @@ void MainWindow::slotNewFromTemplate( int id ) {
OTodo event = templateManager()->templateEvent( name );
event = currentEditor()->edit(this,
event );
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();
}
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 );
raiseCurrentView();
}
void MainWindow::slotDelete() {
if (!currentView()->current() )
return;
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;
}
if ( !QPEMessageBox::confirmDelete( this, QWidget::tr( "Todo" ), QWidget::tr("all tasks?") ) )
return;
@@ -483,13 +506,13 @@ void MainWindow::slotDeleteAll() {
raiseCurrentView();
}
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;
}
if ( !QPEMessageBox::confirmDelete( this, QWidget::tr( "Todo" ), QWidget::tr("all completed tasks?") ) )
return;
@@ -563,26 +586,30 @@ void MainWindow::slotBeam() {
void MainWindow::beamDone( Ir* ir) {
delete ir;
::unlink( beamfile );
}
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();
+ }
}
}
void MainWindow::slotFlush() {
m_syncing = FALSE;
m_todoMgr.save();
@@ -631,39 +658,56 @@ int MainWindow::currentCatId() {
return m_todoMgr.catId( m_curCat );
}
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) {
m_overdue = ov;
currentView()->showOverDue( 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;
}
OTodo old_todo = m_todoMgr.event( uid );
OTodo todo = currentEditor()->edit(this, old_todo );
/* if completed */
if ( currentEditor()->accepted() ) {
- qWarning("Replacing now" );
handleAlarms( old_todo, todo );
m_todoMgr.update( todo.uid(), todo );
currentView()->replaceEvent( todo );
/* a Category might have changed */
populateCategories();
}
@@ -715,12 +759,16 @@ void MainWindow::slotComplete( const OTodo& todo ) {
/*
* if the item does recur
* we need to spin it off
* 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 );
/* the spinned off one won't recur anymore */
to.setRecurrence( ORecur() );
@@ -731,12 +779,14 @@ void MainWindow::slotComplete( const OTodo& todo ) {
/*
* if there is a next occurence
* from the duedate of the last recurrance
*/
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 );
/* add the old one cause it has a new UID here cause it was spin off */
m_todoMgr.add( to );
@@ -744,15 +794,36 @@ void MainWindow::slotComplete( const OTodo& todo ) {
/*
* update the due date
* start date
* 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 );
}else
updateTodo( to );
@@ -766,15 +837,16 @@ void MainWindow::reload() {
slotReload();
}
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(),
this );
if ( currentEditor()->accepted() ) {
@@ -801,32 +873,42 @@ bool MainWindow::remove( int uid ) {
/* argh need to get the whole OEvent... to disable alarms -zecke */
handleAlarms( OTodo(), m_todoMgr.event( 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 );
acc.load();
acc.add( todo );
acc.save();
Ir* ir = new Ir(this );
connect(ir, SIGNAL(done(Ir*) ),
this, SLOT(beamDone(Ir*) ) );
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);
m_todoMgr.add(todo );
currentView()->addEvent( todo );
@@ -834,12 +916,13 @@ void MainWindow::add( const OPimRecord& rec) {
// I'm afraid we must call this every time now, otherwise
// spend expensive time comparing all these strings...
// but only call if we changed something -zecke
populateCategories();
}
void MainWindow::slotReturnFromView() {
+ m_showing = false;
raiseCurrentView();
}
namespace {
OPimNotifyManager::Alarms findNonMatching( const OPimNotifyManager::Alarms& oldAls,
const OPimNotifyManager::Alarms& newAls ) {
@@ -929,24 +1012,25 @@ void MainWindow::doAlarm( const QDateTime& dt, int uid ) {
QTextView* view = new QTextView( &dlg );
lay->addWidget( view );
QPushButton* btnOk = new QPushButton( tr("Ok"), &dlg );
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 );
dlg.showMaximized();
bool needToStay = dlg.exec();
if (loud)
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
@@ -115,12 +115,13 @@ private slots:
void initEditor();
void initShow();
void initTemplate();
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();
TodoShow* m_curShow;
TemplateEditor* currentTemplateEditor();
TemplateEditor* m_curTempEd;
@@ -164,12 +165,13 @@ private slots:
void slotComplete( const OTodo& ev );
void slotNewFromTemplate(int id );
void slotNew();
void slotDuplicate();
void slotDelete();
+ void slotDelete(int uid );
void slotDeleteAll();
void slotDeleteCompleted();
void slotEdit();
void slotFind();
@@ -182,12 +184,14 @@ private slots:
void setDocument( const QString& );
void slotBeam();
void beamDone( Ir* );
void slotShowDetails();
+ void slotShowNext();
+ void slotShowPrev();
void slotShowDue( bool );
void slotReturnFromView(); // for TodoShow...
/* reimplementation from opimmainwindow */
protected slots:
void flush();
void reload();
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,10 +1,7 @@
-#include <qdatetime.h>
-#include <qlabel.h>
#include <qlayout.h>
-#include <qmultilineedit.h>
#include <opie/orecurrancewidget.h>
#include "taskeditoroverview.h"
#include "taskeditorstatus.h"
#include "taskeditoralarms.h"
@@ -23,41 +20,40 @@ OTaskEditor::OTaskEditor( const OTodo& to)
}
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() );
m_alarm->save( to );
return to;
}
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 );
layo->addWidget( m_tab );
/*
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
@@ -34,11 +34,10 @@ private:
OTabWidget *m_tab;
TaskEditorOverView *m_overView;
TaskEditorStatus *m_stat;
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,7 +1,6 @@
-#include "mainwindow.h"
#include "quickedit.h"
using namespace Todo;
// not so interesting part base Implementation
QuickEdit::QuickEdit(MainWindow* main )
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
@@ -28,18 +28,23 @@ QuickEditImpl::QuickEditImpl( QWidget* parent, bool visible )
QWhatsThis::add( m_lbl, QWidget::tr( "Click here to set the priority of 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." ) );
m_edit = new QLineEdit( this );
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." ) );
a = new QAction( QWidget::tr( "Cancel" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( slotCancel() ) );
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
@@ -22,13 +22,12 @@
    --        :-=` 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 <qshared.h>
#include "smalltodo.h"
using namespace Todo;
struct SmallTodo::SmallTodoPrivate : public QShared{
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
@@ -24,17 +24,17 @@
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#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>
#include <qpe/resource.h>
#include <opie/orecur.h>
@@ -47,12 +47,33 @@ using namespace Todo;
namespace {
static const int BoxSize = 14;
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" );
config.setGroup( "Options" );
m_completeStrokeWidth = config.readNumEntry( "CompleteStrokeWidth", 8 );
for (int i = 0; i < numCols(); i++ ) {
@@ -140,17 +161,30 @@ void TableView::slotShowMenu() {
delete menu;
}
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() ;
}
/* show overdue */
void TableView::showOverDue( bool ) {
@@ -216,17 +250,17 @@ void TableView::replaceEvent( const OTodo& ev) {
* either this or the old align table
*/
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
hideColumn( 3 );
// Try to intelligently size columns
@@ -256,12 +290,19 @@ void TableView::setShowCategory( const QString& str) {
}
void TableView::clear() {
setNumRows(0);
}
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;
int ui= sorted().uidAt( row );
@@ -277,13 +318,17 @@ void TableView::slotClicked(int row, int col, int,
y <= ( h - BoxSize ) / 2 + BoxSize ) {
TodoView::complete(sorted()[row] );
}
}
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: {
m_menuTimer->stop();
showTodo( ui );
break;
@@ -443,12 +488,13 @@ QWidget* TableView::createEditor(int row, int col, bool )const {
case 0:
default:
return 0l;
}
}
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") ) {
int pri = ((QComboBox*)wid)->currentItem() + 1;
OTodo todo = sorted()[row];
if ( todo.priority() != pri ) {
@@ -539,16 +585,44 @@ void TableView::contentsMouseReleaseEvent( QMouseEvent* 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();
+ }
+ 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
@@ -47,12 +47,14 @@ namespace Todo {
~TableView();
QString type()const;
int current();
QString currentRepresentation();
+ int next();
+ int prev();
void clear();
void showOverDue( bool );
void updateView();
void setTodo( int uid, const OTodo& );
void addEvent( const OTodo& event );
@@ -88,12 +90,28 @@ namespace Todo {
void keyPressEvent( QKeyEvent* );
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 );
+ /**
+ * 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();
void slotClicked(int, int, int,
const QPoint& );
void slotPressed(int, int, int,
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
@@ -31,20 +31,15 @@
#include <opie/otodo.h>
#include <opie/opimnotifymanager.h>
#include <opie/otimepicker.h>
#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 {
public:
AlarmItem( QListView*, const OPimAlarm& );
~AlarmItem();
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
@@ -30,16 +30,14 @@
#include <opie/orecur.h>
#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>
#include <qwhatsthis.h>
TaskEditorOverView::TaskEditorOverView( QWidget* parent, const char* name, WFlags fl )
@@ -65,13 +63,13 @@ TaskEditorOverView::TaskEditorOverView( QWidget* parent, const char* name, WFla
QWidget *container = new QWidget( sv->viewport() );
sv->addChild( container );
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 );
cmbDesc->insertItem( tr( "Complete " ) );
cmbDesc->insertItem( tr( "Work on " ) );
cmbDesc->insertItem( tr( "Buy " ) );
@@ -113,13 +111,13 @@ TaskEditorOverView::TaskEditorOverView( QWidget* parent, const char* name, WFla
ckbRecurrence = new QCheckBox( tr( "Recurring task" ), container );
layout->addMultiCellWidget( ckbRecurrence, 4, 4, 0, 1 );
QWhatsThis::add( ckbRecurrence, tr( "Click here if task happens on a regular basis. If selected, frequency can be set on the Recurrence tab." ) );
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 );
mleNotes->setWordWrap( QMultiLineEdit::WidgetWidth );
layout->addMultiCellWidget( mleNotes, 6, 6, 0, 1 );
QWhatsThis::add( mleNotes, tr( "Enter any additional information about this task here." ) );
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
@@ -30,21 +30,17 @@
#include <opie/otodo.h>
#include <opie/opimmaintainer.h>
#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!!!!
// drw you shouldn't have removed them
TaskEditorStatus::TaskEditorStatus( QWidget* parent, const char* name, WFlags fl )
@@ -300,7 +296,8 @@ void TaskEditorStatus::slotCompChanged(int y, int m, int d)
}
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,7 +1,6 @@
-#include <qlistview.h>
#include <qlineedit.h>
#include "mainwindow.h"
#include "todoeditor.h"
#include "todotemplatemanager.h"
#include "templatedialogimpl.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,7 +1,6 @@
-#include "mainwindow.h"
#include "textviewshow.h"
using namespace Todo;
TextViewShow::TextViewShow( QWidget* parent, MainWindow* win)
: QTextView( parent ), TodoShow(win) {
@@ -17,15 +16,32 @@ void TextViewShow::slotShow( const OTodo& ev ) {
}
QWidget* TextViewShow::widget() {
return this;
}
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:
QTextView::keyPressEvent( event );
break;
}
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
@@ -22,13 +22,12 @@
    --        :-=` 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 <qdatetime.h>
#include <qpe/categoryselect.h>
#include "todomanager.h"
using namespace Todo;
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
@@ -11,6 +11,14 @@ TodoShow::~TodoShow() {
}
void TodoShow::escapeView() {
if (m_win )
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
@@ -47,12 +47,14 @@ namespace Todo {
virtual ~TodoShow();
virtual QString type()const = 0;
virtual void slotShow( const OTodo& ev ) = 0;
virtual QWidget* widget() = 0;
protected:
void escapeView();
+ void showNext();
+ void showPrev();
private:
MainWindow *m_win;
};
};
#endif
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
@@ -61,6 +61,9 @@ void TodoView::remove( int uid ) {
void TodoView::complete( int uid ) {
m_main->slotComplete( 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
@@ -50,12 +50,22 @@ namespace Todo {
virtual QWidget* widget() = 0;
virtual QString type()const = 0;
virtual int current() = 0;
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
*/
virtual void updateView() = 0;
virtual void addEvent( const OTodo& ) = 0;
@@ -108,12 +118,14 @@ namespace Todo {
*/
void showTodo( int uid );
void edit( int uid );
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:
MainWindow *m_main;
OTodoAccess::List m_sort;
bool m_asc : 1;