summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/main.cpp4
-rw-r--r--core/pim/todo/mainwindow.cpp19
-rw-r--r--core/pim/todo/opie-todo.control2
-rw-r--r--core/pim/todo/otaskeditor.cpp4
-rw-r--r--core/pim/todo/tableview.cpp34
-rw-r--r--core/pim/todo/templatedialog.cpp10
-rw-r--r--core/pim/todo/todoeditor.cpp5
-rw-r--r--core/pim/todo/todomanager.cpp7
-rw-r--r--core/pim/todo/todotemplatemanager.cpp7
-rw-r--r--core/pim/todo/todoview.cpp6
10 files changed, 56 insertions, 42 deletions
diff --git a/core/pim/todo/main.cpp b/core/pim/todo/main.cpp
index 7763169..d070ff8 100644
--- a/core/pim/todo/main.cpp
+++ b/core/pim/todo/main.cpp
@@ -1,48 +1,48 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "mainwindow.h"
-
+#include <opie2/odebug.h>
#include <qpe/qpeapplication.h>
void myMessages( QtMsgType, const char* ) {
}
int main( int argc, char **argv )
{
qInstallMsgHandler( myMessages );
QPEApplication a( argc, argv );
QTime time;
time.start();
Todo::MainWindow mw;
int t = time.elapsed();
- qWarning("QTime %d", t/1000 );
+ Opie::Core::owarn << "QTime " << t/1000 << oendl;
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 f0642c4..d552928 100644
--- a/core/pim/todo/mainwindow.cpp
+++ b/core/pim/todo/mainwindow.cpp
@@ -1,62 +1,63 @@
/*
               =. This file is part of the OPIE Project
             .=l. Copyright (c) 2002 <>
           .>+-=
 _;:,     .>    :=|. 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
  -_. . .   )=.  = 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 <unistd.h>
+#include <opie2/odebug.h>
#include <opie2/opimrecurrence.h>
#include <opie2/opimnotifymanager.h>
#include <opie2/otodoaccessvcal.h>
#include <opie2/oapplicationfactory.h>
#include <qpe/applnk.h>
#include <qpe/config.h>
#include <qpe/ir.h>
#include <qpe/resource.h>
#include <qpe/qpemessagebox.h>
#include <qpe/alarmserver.h>
#include <qpe/qpeapplication.h>
#include <qmenubar.h>
#include <qmessagebox.h>
#include <qpushbutton.h>
#include <qaction.h>
#include <qtimer.h>
#include <qlayout.h>
#include <qwhatsthis.h>
#include "quickeditimpl.h"
#include "todotemplatemanager.h"
#include "templateeditor.h"
#include "tableview.h"
#include "textviewshow.h"
#include "todoeditor.h"
#include "mainwindow.h"
using namespace Opie::Core;
OPIE_EXPORT_APP( OApplicationFactory<Todo::MainWindow> )
@@ -266,143 +267,143 @@ void MainWindow::initEditor() {
}
void MainWindow::initShow() {
m_curShow = new TextViewShow(this, this);
m_stack->addWidget( m_curShow->widget() , m_counter++ );
}
MainWindow::~MainWindow() {
delete templateManager();
}
void MainWindow::connectBase( ViewBase* ) {
// once templates and signals mix we'll use it again
}
QPopupMenu* MainWindow::contextMenu( int , bool recur ) {
QPopupMenu* menu = new QPopupMenu();
m_editAction->addTo( menu );
m_deleteAction->addTo( menu );
m_duplicateAction->addTo( menu );
menu->insertSeparator();
/*
* if this event recurs we allow
* to detach it.
* remove all
*/
if ( recur ) {
; // FIXME
}
return menu;
}
QPopupMenu* MainWindow::options() {
- qWarning("Options");
+ Opie::Core::owarn << "Options" << oendl;
return m_options;
}
QPopupMenu* MainWindow::edit() {
return m_edit;
}
QToolBar* MainWindow::toolbar() {
return m_tool;
}
OPimTodoAccess::List MainWindow::list()const {
return m_todoMgr.list();
}
OPimTodoAccess::List MainWindow::sorted( bool asc, int sortOrder ) {
int cat = 0;
if ( m_curCat != QWidget::tr("All Categories") )
cat = currentCatId();
if ( m_curCat == QWidget::tr("Unfiled") )
cat = -1;
- qWarning(" Category %d %s", cat, m_curCat.latin1() );
+ Opie::Core::owarn << " Category " << cat << " " << m_curCat << oendl;
int filter = 1;
if (!m_completed )
filter |= 4;
if (m_overdue)
filter |= 2;
return m_todoMgr.sorted( asc, sortOrder, filter, cat );
}
OPimTodoAccess::List MainWindow::sorted( bool asc, int sortOrder, int addFilter) {
int cat = 0;
if ( m_curCat != QWidget::tr("All Categories") )
cat = currentCatId();
if ( m_curCat == QWidget::tr("Unfiled") )
cat = -1;
return m_todoMgr.sorted(asc, sortOrder, addFilter, cat );
}
OPimTodo MainWindow::event( int uid ) {
return m_todoMgr.event( uid );
}
bool MainWindow::isSyncing()const {
return m_syncing;
}
TemplateManager* MainWindow::templateManager() {
return m_tempManager;
}
Editor* MainWindow::currentEditor() {
return m_curEdit;
}
TodoShow* MainWindow::currentShow() {
return m_curShow;
}
void MainWindow::slotReload() {
m_syncing = FALSE;
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
* so there is no need to flush
*/
if (m_syncing ) {
e->accept();
return;
}
bool quit = false;
if ( m_todoMgr.saveAll() ){
- qWarning("saved");
+ Opie::Core::owarn << "saved" << oendl;
quit = true;
}else {
if ( QMessageBox::critical( this, QWidget::tr("Out of space"),
QWidget::tr("Todo was unable\n"
"to save your changes.\n"
"Free up some space\n"
"and try again.\n"
"\nQuit Anyway?"),
QMessageBox::Yes|QMessageBox::Escape,
QMessageBox::No|QMessageBox::Default)
!= QMessageBox::No ) {
e->accept();
quit = true;
}else
e->ignore();
}
if (quit ) {
Config config( "todo" );
config.setGroup( "View" );
config.writeEntry( "ShowComplete", showCompleted() );
config.writeEntry( "Category", currentCategory() );
config.writeEntry( "ShowDeadLine", showDeadline());
config.writeEntry( "ShowOverDue", showOverDue() );
config.writeEntry( "ShowQuickTask", showQuickTask() );
/* save templates */
templateManager()->save();
e->accept();
QTimer::singleShot(0, qApp, SLOT(closeAllWindows()) );
}
}
@@ -507,65 +508,65 @@ void MainWindow::slotDeleteAll() {
m_todoMgr.removeAll();
currentView()->clear();
raiseCurrentView();
}
void MainWindow::slotDeleteCompleted() {
if(m_syncing) {
QMessageBox::warning(this, QWidget::tr("Todo"),
QWidget::tr("Data can not be edited, currently syncing"));
return;
}
if ( !QPEMessageBox::confirmDelete( this, QWidget::tr( "Todo" ), QWidget::tr("all completed tasks?") ) )
return;
m_todoMgr.removeCompleted();
currentView()->updateView( );
}
void MainWindow::slotFind() {
}
void MainWindow::slotEdit() {
slotEdit( currentView()->current() );
}
/*
* set the category
*/
void MainWindow::setCategory( int c) {
if ( c <= 0 ) return;
- qWarning("Iterating over cats %d", c );
+ Opie::Core::owarn << "Iterating over cats " << c << oendl;
for ( unsigned int i = 1; i < m_catMenu->count(); i++ )
m_catMenu->setItemChecked(i, c == (int)i );
if (c == 1 ) {
m_curCat = QString::null;
setCaption( QWidget::tr("Todo") + " - " + QWidget::tr("All Categories" ) );
}else if ( c == (int)m_catMenu->count() - 1 ) {
m_curCat = QWidget::tr("Unfiled");
setCaption( QWidget::tr("Todo") + " - " + QWidget::tr("Unfiled") );
}else {
m_curCat = m_todoMgr.categories()[c-2];
setCaption( QWidget::tr("Todo") + " - " + m_curCat );
}
m_catMenu->setItemChecked( c, true );
currentView()->setShowCategory( m_curCat );
raiseCurrentView();
}
void MainWindow::slotShowDeadLine( bool dead) {
m_deadline = dead;
currentView()->setShowDeadline( dead );
}
void MainWindow::slotShowCompleted( bool show) {
m_completed = show;
currentView()->setShowCompleted( m_completed );
}
void MainWindow::slotShowQuickTask( bool show ) {
m_quicktask = show;
if ( m_quicktask )
m_curQuick->widget()->show();
else
@@ -651,171 +652,171 @@ bool MainWindow::showCompleted()const {
bool MainWindow::showDeadline()const {
return m_deadline;
}
bool MainWindow::showQuickTask()const {
return m_quicktask;
}
QString MainWindow::currentCategory()const {
return m_curCat;
}
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");
+ Opie::Core::owarn << "slotShow" << oendl;
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 == 0 ) return;
if(m_syncing) {
QMessageBox::warning(this, QWidget::tr("Todo"),
QWidget::tr("Data can't be edited, currently syncing"));
return;
}
OPimTodo old_todo = m_todoMgr.event( uid );
OPimTodo todo = currentEditor()->edit(this, old_todo );
/* if completed */
if ( currentEditor()->accepted() ) {
handleAlarms( old_todo, todo );
m_todoMgr.update( todo.uid(), todo );
currentView()->replaceEvent( todo );
/* a Category might have changed */
populateCategories();
}
raiseCurrentView();
}
/*
void MainWindow::slotUpdate1( int uid, const SmallTodo& ev) {
m_todoMgr.update( uid, ev );
}
*/
void MainWindow::updateTodo( const OPimTodo& ev) {
m_todoMgr.update( ev.uid() , ev );
}
/* The view changed it's configuration
* update the view menu
*/
void MainWindow::slotUpdate3( QWidget* ) {
}
void MainWindow::updateList() {
m_todoMgr.updateList();
}
void MainWindow::setReadAhead( uint count ) {
if (m_todoMgr.todoDB() )
m_todoMgr.todoDB()->setReadAhead( count );
}
void MainWindow::slotQuickEntered() {
- qWarning("entered");
+ Opie::Core::owarn << "entered" << oendl;
OPimTodo todo = quickEditor()->todo();
if (todo.isEmpty() )
return;
m_todoMgr.add( todo );
currentView()->addEvent( todo );
raiseCurrentView();
}
QuickEditBase* MainWindow::quickEditor() {
return m_curQuick;
}
void MainWindow::slotComplete( int uid ) {
slotComplete( event(uid) );
}
void MainWindow::slotComplete( const OPimTodo& todo ) {
OPimTodo to = todo;
to.setCompleted( !to.isCompleted() );
to.setCompletedDate( QDate::currentDate() );
/*
* 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() ) {
OPimTodo to2( to );
/* the spinned off one won't recur anymore */
to.setRecurrence( OPimRecurrence() );
OPimRecurrence rec = to2.recurrence();
rec.setStart( to.dueDate() );
to2.setRecurrence( rec );
/*
* 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 );
+ Opie::Core::owarn << "day diff is " << dayDiff << oendl;
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 );
/*
* update the due date
* start date
* and complete date
*/
to2.setDueDate( date );
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 );
@@ -920,73 +921,73 @@ void MainWindow::add( const OPimRecord& rec) {
// 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 ) {
OPimNotifyManager::Alarms nonMatching;
OPimNotifyManager::Alarms::ConstIterator oldIt = oldAls.begin();
OPimNotifyManager::Alarms::ConstIterator newIt;
for ( ; oldIt != oldAls.end(); ++oldIt ) {
bool found = false;
QDateTime oldDt = (*oldIt).dateTime();
for (newIt= newAls.begin(); newIt != newAls.end(); ++newIt ) {
if ( oldDt == (*newIt).dateTime() ) {
found = true;
break;
}
}
if (!found)
nonMatching.append( (*oldIt) );
}
return nonMatching;
}
void addAlarms( const OPimNotifyManager::Alarms& als, int uid ) {
OPimNotifyManager::Alarms::ConstIterator it;
for ( it = als.begin(); it != als.end(); ++it ) {
- qWarning("Adding alarm for %s", (*it).dateTime().toString().latin1() );
+ Opie::Core::owarn << "Adding alarm for " << (*it).dateTime().toString() << oendl;
AlarmServer::addAlarm( (*it).dateTime(), "QPE/Application/todolist", "alarm(QDateTime,int)", uid );
}
}
void removeAlarms( const OPimNotifyManager::Alarms& als, int uid ) {
OPimNotifyManager::Alarms::ConstIterator it;
for ( it = als.begin(); it != als.end(); ++it ) {
- qWarning("Removinf alarm for %s", (*it).dateTime().toString().latin1() );
+ Opie::Core::owarn << "Removinf alarm for " << (*it).dateTime().toString() << oendl;
AlarmServer::deleteAlarm( (*it).dateTime(), "QPE/Application/todolist", "alarm(QDateTime,int)", uid );
}
}
}
void MainWindow::handleAlarms( const OPimTodo& oldTodo, const OPimTodo& newTodo) {
/*
* if oldTodo is not empty and has notifiers we need to find the deleted ones
*/
if(!oldTodo.isEmpty() && oldTodo.hasNotifiers() ) {
OPimNotifyManager::Alarms removed;
OPimNotifyManager::Alarms oldAls = oldTodo.notifiers().alarms();
if (!newTodo.hasNotifiers() )
removed = oldAls;
else
removed = findNonMatching( oldAls, newTodo.notifiers().alarms() );
removeAlarms( removed, oldTodo.uid() );
}
if ( newTodo.hasNotifiers() ) {
OPimNotifyManager::Alarms added;
if ( oldTodo.isEmpty() || !oldTodo.hasNotifiers() )
added = newTodo.notifiers().alarms();
else
added = findNonMatching( newTodo.notifiers().alarms(), oldTodo.notifiers().alarms() );
addAlarms( added, newTodo.uid() );
}
}
/* we might have not loaded the db */
void MainWindow::doAlarm( const QDateTime& dt, int uid ) {
m_todoMgr.load();
diff --git a/core/pim/todo/opie-todo.control b/core/pim/todo/opie-todo.control
index 47c2b67..3a65c04 100644
--- a/core/pim/todo/opie-todo.control
+++ b/core/pim/todo/opie-todo.control
@@ -1,10 +1,10 @@
Package: opie-todo
Files: plugins/application/libtodolist.so* bin/todolist apps/1Pim/todo.desktop
Priority: optional
Section: opie/pim
Maintainer: Holger 'zecke' Freyther <zecke@handhelds.org>
Architecture: arm
-Depends: task-opie-minimal, libopiecore2, libopieui2, libopiepim2, opie-pics, libopiedb2
+Depends: task-opie-minimal, libopiecore2, libopieui2, libopiepim2, 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 a8349c1..55a3dd5 100644
--- a/core/pim/todo/otaskeditor.cpp
+++ b/core/pim/todo/otaskeditor.cpp
@@ -1,68 +1,70 @@
#include <qlayout.h>
+#include <opie2/odebug.h>
+
#include "taskeditoroverview.h"
#include "taskeditorstatus.h"
#include "taskeditoralarms.h"
#include "otaskeditor.h"
using namespace Opie::Ui;
using namespace Opie;
OTaskEditor::OTaskEditor(int cur)
: QDialog( 0, 0, TRUE, WStyle_ContextHelp ) {
init();
init( cur );
}
OTaskEditor::OTaskEditor( const OPimTodo& to)
: QDialog( 0, 0, TRUE, WStyle_ContextHelp ) {
init();
init( to );
}
OTaskEditor::~OTaskEditor() {
}
void OTaskEditor::init( int cur ) {
OPimTodo to;
to.setUid( 1 ); // generate a new uid
if ( cur != 0 )
to.setCategories( cur );
load(to);
}
void OTaskEditor::init( const OPimTodo& to ) {
load( to );
}
OPimTodo OTaskEditor::todo()const{
- qWarning("saving!");
+ Opie::Core::owarn << "saving!" << oendl;
OPimTodo 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 OPimTodo& to) {
m_overView->load( to );
m_stat->load( to );
m_rec->setRecurrence( to.recurrence(), to.hasDueDate() ? to.dueDate() : QDate::currentDate() );
m_alarm->load( to );
m_todo = to;
}
void OTaskEditor::init() {
setCaption(tr("Task Editor") );
QVBoxLayout* layo = new QVBoxLayout( this );
m_tab = new OTabWidget( this );
layo->addWidget( m_tab );
/*
* Add the Widgets
*/
m_overView = new TaskEditorOverView( m_tab );
m_tab->addTab( m_overView, "todo/info", tr("Information") );
m_stat = new TaskEditorStatus( m_tab );
m_tab->addTab( m_stat, "todo/TodoList", tr("Status") );
diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp
index 0d298f4..0b1c579 100644
--- a/core/pim/todo/tableview.cpp
+++ b/core/pim/todo/tableview.cpp
@@ -1,72 +1,73 @@
/*
               =. This file is part of the OPIE Project
             .=l. Copyright (c) 2002 <zecke>
           .>+-=
 _;:,     .>    :=|. 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 <cmath>
#include <cctype>
-#include <qcombobox.h>
-#include <qlineedit.h>
-#include <qtimer.h>
-#include <qpopupmenu.h>
+#include <opie2/odebug.h>
+#include <opie2/opimrecurrence.h>
#include <qpe/config.h>
#include <qpe/resource.h>
-#include <opie2/opimrecurrence.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qtimer.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::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;
}
@@ -165,240 +166,241 @@ QString TableView::type() const {
return QString::fromLatin1( tr("Table View") );
}
int TableView::current() {
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() {
OPimTodo to = sorted()[currentRow()];
return to.summary().isEmpty() ? to.description().left(20) : to.summary() ;
}
/* show overdue */
void TableView::showOverDue( bool ) {
clear();
updateView();
}
void TableView::updateView( ) {
- qWarning("update view");
+ Opie::Core::owarn << "update view" << oendl;
m_row = false;
static int id;
id = startTimer(4000 );
/* FIXME we want one page to be read!
*
* Calculate that screensize
*/
todoWindow()->setReadAhead( 4 );
sort();
OPimTodoAccess::List::Iterator it, end;
it = sorted().begin();
end = sorted().end();
- qWarning("setTodos");
+ Opie::Core::owarn << "setTodos" << oendl;
QTime time;
time.start();
m_enablePaint = false;
setUpdatesEnabled( false );
viewport()->setUpdatesEnabled( false );
setNumRows( it.count() );
if ( it.count() == 0 )
killTimer(id);
// int elc = time.elapsed();
setUpdatesEnabled( true );
viewport()->setUpdatesEnabled( true );
viewport()->update();
m_enablePaint = true;
// int el = time.elapsed();
}
void TableView::setTodo( int, const OPimTodo&) {
sort();
/* repaint */
repaint();
}
void TableView::addEvent( const OPimTodo&) {
/* fix problems of not showing the 'Haken' */
updateView();
}
/*
* find the event
* and then replace the complete row
*/
void TableView::replaceEvent( const OPimTodo& 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 );
+ Opie::Core::owarn << "Show Completed " << b << oendl;
updateView();
}
void TableView::setShowDeadline( bool b ) {
- qWarning( "Show DeadLine %d" , b );
+ Opie::Core::owarn << "Show Deadline " << b << oendl;
if ( b )
showColumn( 3 );
else
hideColumn( 3 );
// Try to intelligently size columns
// TODO - would use width() below, but doesn't have valid value at time of c'tor
int col2width = 238;
int width = m_pic_completed.width();
setColumnWidth( 0, width );
col2width -= width;
width = fontMetrics().boundingRect( horizontalHeader()->label( 1 ) ).width() + 8;
setColumnWidth( 1, width );
col2width -= width;
if ( b ) {
width = fontMetrics().boundingRect( horizontalHeader()->label( 3 ) ).width() + 8;
setColumnWidth( 3, width );
col2width -= width;
}
setColumnWidth( 2, col2width );
}
void TableView::setShowCategory( const QString& str) {
- qWarning("setShowCategory");
+ Opie::Core::owarn << "setShowCategory" << oendl;
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 ( 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 );
switch( col ) {
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 ) {
TodoView::complete(sorted()[row] );
}
}
break;
// 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;
}
case 3: {
m_menuTimer->stop();
TodoView::edit( ui );
break;
}
}
}
void TableView::slotPressed(int row, int col, int,
const QPoint& point) {
- qWarning("pressed row %d col %d x:%d+y:%d", row,col,point.x(),point.y() );
+ Opie::Core::owarn << "pressed row " << row << " col " << col << " x:" << point.x()
+ << "+y:" << point.y() << oendl;
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");
+ Opie::Core::owarn << "Value Changed" << oendl;
}
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 );
+ Opie::Core::owarn << "bool " << asc << oendl;
setSortOrder( col );
setAscending( asc );
updateView();
}
void TableView::viewportPaintEvent( QPaintEvent* e) {
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();
OPimTodo task = sorted()[row];
// TODO - give user option for grid or bars?
// Paint alternating background bars
if ( (row % 2 ) == 0 ) {
p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) );
p->setPen( QPen( cg.text() ) );
}
else {
p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Background ) );
p->setPen( QPen( cg.buttonText() ) );
}
@@ -463,149 +465,149 @@ void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool
} 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() );
for ( int i = 0; i < 5; i++ ) {
combo->insertItem( m_pic_priority[ i ] );
}
combo->setCurrentItem( sorted()[row].priority()-1 );
return combo;
}
/* summary */
case 2:{
QLineEdit* edit = new QLineEdit( viewport() );
edit->setText( sorted()[row].summary() );
return edit;
}
case 0:
default:
return 0l;
}
}
void TableView::setCellContentFromEditor(int row, int col ) {
- qWarning("set cell content from editor");
+ Opie::Core::owarn << "set cell content from editor" << oendl;
if ( col == 1 ) {
QWidget* wid = cellWidget(row, 1 );
if ( wid->inherits("QComboBox") ) {
int pri = ((QComboBox*)wid)->currentItem() + 1;
OPimTodo todo = sorted()[row];
if ( todo.priority() != pri ) {
todo.setPriority( pri );
TodoView::update( todo.uid(), todo );
updateView();
}
}
}else if ( col == 2) {
QWidget* wid = cellWidget(row, 2);
if ( wid->inherits("QLineEdit") ) {
QString text = ((QLineEdit*)wid)->text();
OPimTodo todo = sorted()[row];
if ( todo.summary() != text ) {
todo.setSummary( text );
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* ) {
-// qWarning("sorted %d", sorted().count() );
+// Opie::Core::owarn << "sorted " << sorted().count() << oendl;
if (sorted().count() == 0 )
return;
int row = currentRow();
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
*
* BUG: When clicking on the Due column and it's scrollable
* the todo is marked as completed...
* REASON: QTable is doing auto scrolling which leads to a move
* in the x coordinate and this way it's able to pass the
* m_completeStrokeWidth criteria
* WORKAROUND: strike through needs to strike through the same
* row and two columns!
*/
void TableView::contentsMouseReleaseEvent( QMouseEvent* e) {
int row = rowAt(m_prevP.y());
int colOld = columnAt(m_prevP.x() );
int colNew = columnAt(e->x() );
- qWarning("colNew: %d colOld: %d", colNew, colOld );
+ Opie::Core::owarn << "colNew: " << colNew << " colOld: " << colOld << oendl;
if ( row == rowAt( e->y() ) && row != -1 &&
colOld != colNew ) {
TodoView::complete( sorted()[row] );
return;
}
QTable::contentsMouseReleaseEvent( 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();
}
if ( sorted().count() < 1 ) {
QTable::keyPressEvent( event );
return;
}
int row = currentRow();
int col = currentColumn();
char key = ::toupper( event->ascii() );
/* let QTable also handle the d letter */
if ( key == 'D' ) {
event->accept();
diff --git a/core/pim/todo/templatedialog.cpp b/core/pim/todo/templatedialog.cpp
index 8dfbd0b..32327a6 100644
--- a/core/pim/todo/templatedialog.cpp
+++ b/core/pim/todo/templatedialog.cpp
@@ -1,62 +1,64 @@
+#include <opie2/odebug.h>
+
#include <qpushbutton.h>
#include <qhbox.h>
#include <qlayout.h>
#include <qlistview.h>
#include <qlineedit.h>
#include "templatedialog.h"
using namespace Todo;
/* TRANSLATOR Todo::TemplateDialog */
TemplateDialog::TemplateDialog( QWidget* widget )
: QDialog( widget, "TemplateDialog", TRUE )
{
setCaption( QWidget::tr("Template Editor") );
m_main = new QVBoxLayout(this );
m_list = new QListView( this );
m_main->addWidget( m_list, 100 );
m_lne = new QLineEdit( this );
m_main->addWidget( m_lne );
m_btnBar = new QHBox( this );
m_add = new QPushButton( QWidget::tr("Add"), m_btnBar );
m_edit = new QPushButton( QWidget::tr("Edit"), m_btnBar );
m_rem = new QPushButton( QWidget::tr("Remove"), m_btnBar );
m_main->addWidget( m_btnBar );
connect(m_add, SIGNAL(clicked() ),
this, SLOT(slotAdd() ) );
connect(m_edit, SIGNAL(clicked() ),
this, SLOT(slotEdit() ) );
connect(m_rem, SIGNAL(clicked() ),
this, SLOT(slotRemove() ) );
connect(m_lne, SIGNAL(returnPressed() ),
this, SLOT(slotReturn() ) );
}
TemplateDialog::~TemplateDialog() {
// Qt does delete our widgets
}
QListView* TemplateDialog::listView() {
return m_list;
}
QLineEdit* TemplateDialog::edit() {
return m_lne;
}
void TemplateDialog::slotAdd() {
- qWarning("Not Implemented here");
+ Opie::Core::owarn << "Not Implemented here" << oendl;
}
void TemplateDialog::slotRemove() {
- qWarning("Not Implemented here");
+ Opie::Core::owarn << "Not Implemented here" << oendl;
}
void TemplateDialog::slotEdit() {
- qWarning("Not Implemented here");
+ Opie::Core::owarn << "Not Implemented here" << oendl;
}
void TemplateDialog::slotReturn() {
- qWarning("Not Implemented here");
+ Opie::Core::owarn << "Not Implemented here" << oendl;
}
diff --git a/core/pim/todo/todoeditor.cpp b/core/pim/todo/todoeditor.cpp
index 4b5ecb1..7857d52 100644
--- a/core/pim/todo/todoeditor.cpp
+++ b/core/pim/todo/todoeditor.cpp
@@ -1,63 +1,64 @@
+#include <opie2/odebug.h>
#include <qpe/qpeapplication.h>
#include "otaskeditor.h"
#include "todoeditor.h"
using namespace Opie;
using namespace Todo;
Editor::Editor() {
m_accepted = false;
m_self = 0l;
}
Editor::~Editor() {
delete m_self;
m_self = 0;
}
OPimTodo Editor::newTodo( int cur,
QWidget*) {
OTaskEditor *e = self();
e->setCaption( QObject::tr("Enter Task") );
e->init( cur );
int ret = QPEApplication::execDialog( e );
if ( QDialog::Accepted == ret ) {
m_accepted = true;
}else
m_accepted = false;
OPimTodo ev = e->todo();
- qWarning("Todo uid");
- qWarning("Todo %s %d %d", ev.summary().latin1(), ev.progress(), ev.isCompleted() );
+ Opie::Core::owarn << "Todo uid" << oendl;
+ Opie::Core::owarn << "Todo " << ev.summary() << " " << ev.progress() << " " << ev.isCompleted() << oendl;
ev.setUid(1);
return ev;
}
OPimTodo Editor::edit( QWidget *,
const OPimTodo& todo ) {
OTaskEditor *e = self();
e->init( todo );
e->setCaption( QObject::tr( "Edit Task" ) );
int ret = QPEApplication::execDialog( e );
OPimTodo ev = e->todo();
if ( ret == QDialog::Accepted )
m_accepted = true;
else
m_accepted = false;
return ev;
}
bool Editor::accepted()const {
return m_accepted;
}
OTaskEditor* Editor::self() {
if (!m_self )
m_self = new OTaskEditor(0);
return m_self;
}
diff --git a/core/pim/todo/todomanager.cpp b/core/pim/todo/todomanager.cpp
index 21e1d0c..7826747 100644
--- a/core/pim/todo/todomanager.cpp
+++ b/core/pim/todo/todomanager.cpp
@@ -1,81 +1,84 @@
/*
               =. This file is part of the OPIE Project
             .=l. Copyright (c) 2002 <>
           .>+-=
 _;:,     .>    :=|. 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 <opie2/odebug.h>
+
#include <qpe/categoryselect.h>
#include "todomanager.h"
using namespace Todo;
TodoManager::TodoManager( QObject *obj )
: QObject( obj ) {
m_db = 0l;
QTime time;
time.start();
int el = time.elapsed();
- qWarning("QTimer for loading %d", el/1000 );
+ Opie::Core::owarn << "QTimer for loading " << el/1000 << oendl;
}
TodoManager::~TodoManager() {
delete m_db;
}
OPimTodo TodoManager::event(int uid ) {
return m_db->find( uid );
}
void TodoManager::updateList() {
- qWarning("update list");
+ Opie::Core::owarn << "update lists" << oendl;
m_list = m_db->allRecords();
}
OPimTodoAccess::List TodoManager::list() const{
return m_list;
}
OPimTodoAccess::List TodoManager::sorted( bool asc, int so, int f, int cat ) {
return m_db->sorted( asc, so, f, cat );
}
OPimTodoAccess::List::Iterator TodoManager::overDue() {
int filter = 2 | 1;
m_list = m_db->sorted(m_asc, m_sortOrder, filter, m_ca );
m_it = m_list.begin();
return m_it;
}
OPimTodoAccess::List::Iterator TodoManager::fromTo( const QDate& start,
const QDate& end ) {
m_list = m_db->effectiveToDos( start, end );
m_it = m_list.begin();
return m_it;
}
OPimTodoAccess::List::Iterator TodoManager::query( const OPimTodo& ev, int query ) {
m_list = m_db->queryByExample( ev, query );
m_it = m_list.begin();
return m_it;
}
OPimTodoAccess* TodoManager::todoDB() {
return m_db;
}
void TodoManager::add( const OPimTodo& ev ) {
m_db->add( ev );
}
void TodoManager::update( int, const SmallTodo& ) {
diff --git a/core/pim/todo/todotemplatemanager.cpp b/core/pim/todo/todotemplatemanager.cpp
index eeac51b..0b20d5a 100644
--- a/core/pim/todo/todotemplatemanager.cpp
+++ b/core/pim/todo/todotemplatemanager.cpp
@@ -1,81 +1,82 @@
+#include <opie2/odebug.h>
#include <opie2/otodoaccess.h>
#include <opie2/otodoaccessxml.h>
#include <qpe/config.h>
#include <qpe/global.h>
#include "todotemplatemanager.h"
using namespace Todo;
TemplateManager::TemplateManager() {
m_path = Global::applicationFileName("todolist", "templates.xml");
}
TemplateManager::~TemplateManager() {
save();
}
void TemplateManager::load() {
Config conf("todolist_templates");
OPimTodoAccessXML *xml = new OPimTodoAccessXML( QString::fromLatin1("template"),
m_path );
OPimTodoAccess todoDB(xml );
todoDB.load();
OPimTodoAccess::List::Iterator it;
OPimTodoAccess::List list = todoDB.allRecords();
for ( it = list.begin(); it != list.end(); ++it ) {
OPimTodo ev = (*it);
conf.setGroup( QString::number( ev.uid() ) );
QString str = conf.readEntry("Name", QString::null );
if (str.isEmpty() )
continue;
m_templates.insert( str, ev );
}
}
void TemplateManager::save() {
- qWarning("Saving!!!!");
+ Opie::Core::owarn << "Saving!!!!" << oendl;
Config conf("todolist_templates");
OPimTodoAccessXML *res = new OPimTodoAccessXML( "template",
m_path );
OPimTodoAccess db(res);
db.load();
db.clear();
QMap<QString, OPimTodo>::Iterator it;
for ( it = m_templates.begin(); it != m_templates.end(); ++it ) {
OPimTodo ev = it.data();
conf.setGroup( QString::number( ev.uid() ) );
- qWarning("Name" + it.key() );
+ Opie::Core::owarn << "Name " << it.key() << oendl;
conf.writeEntry("Name", it.key() );
db.add( ev );
}
db.save();
}
void TemplateManager::addEvent( const QString& str,
const OPimTodo& ev) {
- qWarning("AddEvent"+ str );
+ Opie::Core::owarn << "AddEvent " << str << oendl;
OPimTodo todo = ev;
if( ev.uid() == 0 )
todo.setUid(1); // generate a new uid
m_templates.replace( str, todo );
}
void TemplateManager::removeEvent( const QString& str ) {
m_templates.remove( str );
}
QStringList TemplateManager::templates() const {
QStringList list;
QMap<QString, OPimTodo>::ConstIterator it;
for (it = m_templates.begin(); it != m_templates.end(); ++it ) {
list << it.key();
}
return list;
}
OPimTodo TemplateManager::templateEvent( const QString& templateName ) {
return m_templates[templateName];
}
diff --git a/core/pim/todo/todoview.cpp b/core/pim/todo/todoview.cpp
index d99cf77..03e1060 100644
--- a/core/pim/todo/todoview.cpp
+++ b/core/pim/todo/todoview.cpp
@@ -1,69 +1,71 @@
#include "mainwindow.h"
+#include <opie2/odebug.h>
+
#include "todoview.h"
using namespace Todo;
TodoView::TodoView( MainWindow* win )
: m_main( win )
{
m_asc = false;
m_sortOrder = -1;
}
TodoView::~TodoView() {
};
MainWindow* TodoView::todoWindow() {
return m_main;
}
OPimTodo TodoView::event(int uid ) {
return m_main->event( uid );
}
OPimTodoAccess::List TodoView::list(){
todoWindow()->updateList();
return todoWindow()->list();
}
OPimTodoAccess::List TodoView::sorted()const{
return m_sort;
}
void TodoView::sort() {
m_sort = todoWindow()->sorted(m_asc,m_sortOrder );
- qWarning("m_sort.count() = %d", m_sort.count() );
+ Opie::Core::owarn << "m_sort.count() = " << m_sort.count() << oendl;
}
void TodoView::sort(int sort) {
m_sort = todoWindow()->sorted(m_asc, m_sortOrder, sort );
}
void TodoView::setSortOrder( int order ) {
m_sortOrder = order;
}
void TodoView::setAscending( bool b ) {
- qWarning("setAscending %d", b );
+ Opie::Core::owarn << "setAscending " << b << oendl;
m_asc = b;
}
void TodoView::update(int, const SmallTodo& ) {
//m_main->slotUpate1( uid, to );
}
void TodoView::update(int , const OPimTodo& ev ) {
m_main->updateTodo( ev );
}
void TodoView::showTodo( int uid ) {
m_main->slotShow( uid );
}
void TodoView::edit( int uid ) {
m_main->slotEdit( uid );
}
void TodoView::remove( int uid ) {
m_main->m_todoMgr.remove( uid );
}
void TodoView::complete( int uid ) {
m_main->slotComplete( uid );
}
void TodoView::complete( const OPimTodo& ev ) {
m_main->slotComplete( ev );
}
void TodoView::removeQuery( int uid ) {
m_main->slotDelete( uid );
}