summaryrefslogtreecommitdiff
path: root/core/pim/todo/mainwindow.cpp
Side-by-side diff
Diffstat (limited to 'core/pim/todo/mainwindow.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/mainwindow.cpp136
1 files changed, 110 insertions, 26 deletions
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();
}
}
+