33 files changed, 232 insertions, 219 deletions
diff --git a/core/pim/todo/config.in b/core/pim/todo/config.in index 0b6af4c..45c4558 100644 --- a/core/pim/todo/config.in +++ b/core/pim/todo/config.in @@ -1,4 +1,4 @@ config TODO boolean "opie-todo (a Todo-list manager)" default "y" - depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE + depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBOPIE2UI && LIBOPIE2PIM diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp index fc189bd..0613f2c 100644 --- a/core/pim/todo/mainwindow.cpp +++ b/core/pim/todo/mainwindow.cpp @@ -1,1044 +1,1042 @@ /* =. 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/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/timestring.h> +#include <qpe/qpeapplication.h> + #include <qmenubar.h> #include <qmessagebox.h> #include <qtoolbar.h> #include <qpopupmenu.h> #include <qpushbutton.h> #include <qwidgetstack.h> #include <qaction.h> #include <qtimer.h> #include <qvbox.h> #include <qlayout.h> #include <qlineedit.h> #include <qwhatsthis.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/timestring.h> -#include <qpe/qpeapplication.h> - -#include <opie/orecur.h> -#include <opie/opimnotifymanager.h> -#include <opie/otodoaccessvcal.h> -#include <opie/owidgetstack.h> - -#include <opie/oapplicationfactory.h> - #include "quickeditimpl.h" #include "todotemplatemanager.h" #include "templateeditor.h" #include "tableview.h" #include "textviewshow.h" #include "todoeditor.h" #include "mainwindow.h" OPIE_EXPORT_APP( OApplicationFactory<Todo::MainWindow> ) using namespace Todo; MainWindow::MainWindow( QWidget* parent, const char* name, WFlags ) : OPimMainWindow( "Todolist", parent, name, WType_TopLevel | WStyle_ContextHelp ) { if (!name) setName("todo window"); m_syncing = false; m_showing = false; m_counter = 0; m_tempManager = new TemplateManager(); m_tempManager->load(); initUI(); initConfig(); initViews(); initActions(); initEditor(); initShow(); initTemplate(); populateTemplates(); raiseCurrentView(); QTimer::singleShot(0, this, SLOT(populateCategories() ) ); } void MainWindow::initTemplate() { m_curTempEd = new TemplateEditor( this, templateManager() ); } void MainWindow::initActions() { // Data menu m_edit->insertItem(QWidget::tr("New from template"), m_template, -1, 0 ); QAction* a = new QAction( QWidget::tr("New Task" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); connect(a, SIGNAL( activated() ), this, SLOT( slotNew() ) ); a->setWhatsThis( QWidget::tr( "Click here to create a new task." ) ); a->addTo(m_tool ); a->addTo(m_edit ); a = new QAction( QWidget::tr("Edit Task"), Resource::loadIconSet( "edit" ), QString::null, 0, this, 0 ); connect(a, SIGNAL(activated() ), this, SLOT( slotEdit() ) ); a->setWhatsThis( QWidget::tr( "Click here to modify the current task." ) ); a->addTo( m_tool ); a->addTo( m_edit ); m_editAction = a; a = new QAction( QString::null, QWidget::tr("View Task"), 0, this, 0 ); connect(a, SIGNAL( activated() ), this, SLOT( slotShowDetails() ) ); a->addTo( m_edit ); m_edit->insertSeparator(); a = new QAction( QWidget::tr("Delete..."), Resource::loadIconSet( "trash" ), QString::null, 0, this, 0 ); connect(a, SIGNAL(activated() ), this, SLOT(slotDelete() ) ); a->setWhatsThis( QWidget::tr( "Click here to remove the current task." ) ); a->addTo( m_tool ); a->addTo( m_edit ); m_deleteAction = a; a = new QAction( QString::null, QWidget::tr("Delete all..."), 0, this, 0 ); connect(a, SIGNAL( activated() ), this, SLOT( slotDeleteAll() ) ); a->addTo(m_edit ); m_deleteAllAction = a; a = new QAction( QString::null, QWidget::tr("Delete completed"), 0, this, 0 ); connect(a, SIGNAL( activated() ), this, SLOT( slotDeleteCompleted() ) ); a->addTo(m_edit ); a->setEnabled( TRUE ); m_deleteCompleteAction = a; m_edit->insertSeparator(); a = new QAction( QString::null, QWidget::tr("Duplicate"), 0, this, 0 ); connect(a, SIGNAL( activated() ), this, SLOT( slotDuplicate() ) ); a->addTo(m_edit ); m_duplicateAction = a; m_edit->insertSeparator(); if ( Ir::supported() ) { a = new QAction( QWidget::tr( "Beam" ), Resource::loadPixmap( "beam" ), QString::null, 0, this, 0 ); 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) ) ); a = new QAction( QString::null, QWidget::tr("Show only over-due tasks"), 0, this, 0, TRUE ); a->addTo( m_options ); a->setOn( showOverDue() ); connect(a, SIGNAL(toggled(bool)), this, SLOT(slotShowDue(bool) ) ); m_showDeadLineAction = new QAction( QString::null, QWidget::tr("Show task deadlines"), 0, this, 0, TRUE ); m_showDeadLineAction->addTo( m_options ); m_showDeadLineAction->setOn( showDeadline() ); connect(m_showDeadLineAction, SIGNAL(toggled(bool) ), this, SLOT( slotShowDeadLine( bool ) ) ); m_showQuickTaskAction = new QAction( QString::null, QWidget::tr("Show quick task bar"), 0, this, 0, TRUE ); m_showQuickTaskAction->addTo( m_options ); m_showQuickTaskAction->setOn( showQuickTask() ); connect(m_showQuickTaskAction, SIGNAL( toggled(bool) ), this, SLOT(slotShowQuickTask(bool) ) ); m_options->insertSeparator(); m_bar->insertItem( QWidget::tr("Data") ,m_edit ); m_bar->insertItem( QWidget::tr("Category"), m_catMenu ); m_bar->insertItem( QWidget::tr("Options"), m_options ); m_curQuick = new QuickEditImpl( this, m_quicktask ); addToolBar( (QToolBar *)m_curQuick->widget(), QWidget::tr( "QuickEdit" ), QMainWindow::Top, TRUE ); m_curQuick->signal()->connect( this, SLOT(slotQuickEntered() ) ); } /* m_curCat from Config */ void MainWindow::initConfig() { Config config( "todo" ); config.setGroup( "View" ); m_completed = config.readBoolEntry( "ShowComplete", TRUE ); m_curCat = config.readEntry( "Category", QString::null ); m_deadline = config.readBoolEntry( "ShowDeadLine", TRUE); m_overdue = config.readBoolEntry("ShowOverDue", FALSE ); m_quicktask = config.readBoolEntry("ShowQuickTask", TRUE); } void MainWindow::initUI() { m_stack = new OWidgetStack(this, "main stack"); setCentralWidget( m_stack ); setToolBarsMovable( FALSE ); QToolBar *menubarholder = new QToolBar( this ); menubarholder->setHorizontalStretchable( TRUE ); m_bar = new QMenuBar( menubarholder ); m_tool = new QToolBar( this ); /** QPopupMenu */ m_edit = new QPopupMenu( this ); m_options = new QPopupMenu( this ); m_catMenu = new QPopupMenu( this ); m_template = new QPopupMenu( this ); m_catMenu->setCheckable( TRUE ); m_template->setCheckable( TRUE ); connect(m_catMenu, SIGNAL(activated(int) ), this, SLOT(setCategory(int) ) ); connect(m_template, SIGNAL(activated(int) ), this, SLOT(slotNewFromTemplate(int) ) ); } void MainWindow::initViews() { TableView* tableView = new TableView( this, m_stack ); QWhatsThis::add( tableView, QWidget::tr( "This is a listing of all current tasks.\n\nThe list displays the following information:\n1. Completed - A green checkmark indicates task is completed. Click here to complete a task.\n2. Priority - a graphical representation of task priority. Double-click here to modify.\n3. Description - description of task. Click here to select the task.\n4. Deadline - shows when task is due. This column can be shown or hidden by selecting Options->'Show task deadlines' from the menu above." ) ); m_stack->addWidget( tableView, m_counter++ ); m_views.append( tableView ); m_curView = tableView; connectBase( tableView ); /* add QString type + QString configname to * the View menu * and subdirs for multiple views */ } void MainWindow::initEditor() { m_curEdit = new Editor(); } 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"); return m_options; } QPopupMenu* MainWindow::edit() { return m_edit; } QToolBar* MainWindow::toolbar() { return m_tool; } -OTodoAccess::List MainWindow::list()const { +OPimTodoAccess::List MainWindow::list()const { return m_todoMgr.list(); } -OTodoAccess::List MainWindow::sorted( bool asc, int sortOrder ) { +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() ); int filter = 1; if (!m_completed ) filter |= 4; if (m_overdue) filter |= 2; return m_todoMgr.sorted( asc, sortOrder, filter, cat ); } -OTodoAccess::List MainWindow::sorted( bool asc, int sortOrder, int addFilter) { +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 ); } -OTodo MainWindow::event( int uid ) { +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"); 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()) ); } } void MainWindow::populateTemplates() { m_template->clear(); QStringList list = templateManager()->templates(); QStringList::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) { m_template->insertItem( (*it) ); } } /* * slotNewFromTemplate * We use the edit widget to do * 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 */ void MainWindow::slotNewFromTemplate( int id ) { QString name = m_template->text( id ); - OTodo event = templateManager()->templateEvent( name ); + OPimTodo event = templateManager()->templateEvent( name ); event = currentEditor()->edit(this, event ); if ( currentEditor()->accepted() ) { /* assign new todo */ event.setUid( 1 ); - handleAlarms( OTodo(), event ); + handleAlarms( OPimTodo(), 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("Data can not be edited, currently syncing")); return; } - OTodo ev = m_todoMgr.event( currentView()->current() ); + OPimTodo ev = m_todoMgr.event( currentView()->current() ); /* let's generate a new uid */ 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("Data can not be edited, currently syncing")); return; } QString strName = currentView()->currentRepresentation(); if (!QPEMessageBox::confirmDelete(this, QWidget::tr("Todo"), strName ) ) return; - handleAlarms( m_todoMgr.event( currentView()->current() ), OTodo() ); + handleAlarms( m_todoMgr.event( currentView()->current() ), OPimTodo() ); 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); + OPimTodo to = m_todoMgr.event(uid); if (!QPEMessageBox::confirmDelete(this, QWidget::tr("Todo"), to.toShortText() ) ) return; - handleAlarms(to, OTodo() ); + handleAlarms(to, OPimTodo() ); m_todoMgr.remove( to.uid() ); currentView()->removeEvent( to.uid() ); raiseCurrentView(); } void MainWindow::slotDeleteAll() { 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 tasks?") ) ) return; 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 ); 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 m_curQuick->widget()->hide(); } bool MainWindow::showOverDue()const { return m_overdue; } void MainWindow::setDocument( const QString& fi) { DocLnk doc(fi); if (doc.isValid() ) receiveFile(doc.file() ); else receiveFile(fi ); } static const char *beamfile = "/tmp/opie-todo.vcs"; void MainWindow::slotBeam() { beam( currentView()->current() ); } void MainWindow::beamDone( Ir* ir) { delete ir; ::unlink( beamfile ); } void MainWindow::receiveFile( const QString& filename ) { - OTodoAccessVCal* cal = new OTodoAccessVCal(filename ); + OPimTodoAccessVCal* cal = new OPimTodoAccessVCal(filename ); - OTodoAccess acc( cal ); + OPimTodoAccess acc( cal ); acc.load(); - OTodoAccess::List list = acc.allRecords(); + OPimTodoAccess::List list = acc.allRecords(); if (list.count()){ QString message = QWidget::tr("<P>%1 new tasks arrived.<p>Would you like to add them to your Todolist?").arg(list.count() ); if ( QMessageBox::information(this, QWidget::tr("New Tasks"), message, QMessageBox::Ok, QMessageBox::Cancel ) == QMessageBox::Ok ) { - OTodoAccess::List::Iterator it; + OPimTodoAccess::List::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) m_todoMgr.add( (*it) ); currentView()->updateView(); } } } void MainWindow::slotFlush() { m_syncing = TRUE; m_todoMgr.save(); } void MainWindow::slotShowDetails() { slotShow( currentView()->current() ); } /* * populate the Categories * Menu */ void MainWindow::populateCategories() { m_todoMgr.load(); m_catMenu->clear(); int id, rememberId; id = 1; rememberId = 1; m_catMenu->insertItem( QWidget::tr( "All Categories" ), id++ ); m_catMenu->insertSeparator(); QStringList categories = m_todoMgr.categories(); categories.append( QWidget::tr( "Unfiled" ) ); for ( QStringList::Iterator it = categories.begin(); it != categories.end(); ++it ) { m_catMenu->insertItem( *it, id ); if ( *it == currentCategory() ) rememberId = id; ++id; } setCategory( rememberId ); } bool MainWindow::showCompleted()const { return m_completed; } 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"); 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; } - OTodo old_todo = m_todoMgr.event( uid ); + OPimTodo old_todo = m_todoMgr.event( uid ); - OTodo todo = currentEditor()->edit(this, old_todo ); + 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 OTodo& 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"); - OTodo todo = quickEditor()->todo(); + 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 OTodo& todo ) { - OTodo to = todo; +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() ) { - OTodo to2( to ); + OPimTodo to2( to ); /* the spinned off one won't recur anymore */ - to.setRecurrence( ORecur() ); + to.setRecurrence( OPimRecurrence() ); - ORecur rec = to2.recurrence(); + 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 ); 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 ); - handleAlarms( OTodo(), todo ); + handleAlarms( OPimTodo(), todo ); } to2.setCompletedDate( inval ); to2.setCompleted( false ); updateTodo( to2 ); }else updateTodo( to ); }else updateTodo( to ); currentView()->updateView(); raiseCurrentView(); } void MainWindow::flush() { slotFlush(); } void MainWindow::reload() { slotReload(); } int MainWindow::create() { int uid = 0; if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), QWidget::tr("Data can not be edited, currently syncing")); return uid; } m_todoMgr.load(); - OTodo todo = currentEditor()->newTodo( currentCatId(), + OPimTodo todo = currentEditor()->newTodo( currentCatId(), this ); if ( currentEditor()->accepted() ) { //todo.assignUid(); uid = todo.uid(); - handleAlarms( OTodo(), todo ); + handleAlarms( OPimTodo(), todo ); m_todoMgr.add( todo ); currentView()->addEvent( todo ); // 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(); } raiseCurrentView( ); return uid; } /* delete it silently... */ bool MainWindow::remove( int uid ) { if (m_syncing) return false; /* argh need to get the whole OEvent... to disable alarms -zecke */ - handleAlarms( OTodo(), m_todoMgr.event( uid ) ); + handleAlarms( OPimTodo(), 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 ); + OPimTodo todo = event( uid ); + OPimTodoAccessVCal* cal = new OPimTodoAccessVCal(QString::fromLatin1(beamfile) ); + OPimTodoAccess 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; + if ( rec.rtti() != OPimTodo::rtti() ) return; m_todoMgr.load(); // might not be loaded - const OTodo& todo = static_cast<const OTodo&>(rec); + const OPimTodo& todo = static_cast<const OPimTodo&>(rec); m_todoMgr.add(todo ); currentView()->addEvent( todo ); // 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 ) { 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() ); 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() ); AlarmServer::deleteAlarm( (*it).dateTime(), "QPE/Application/todolist", "alarm(QDateTime,int)", uid ); } } } -void MainWindow::handleAlarms( const OTodo& oldTodo, const OTodo& newTodo) { +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(); - OTodo todo = m_todoMgr.event( uid ); + OPimTodo todo = m_todoMgr.event( uid ); if (!todo.hasNotifiers() ) return; /* * let's find the right alarm and find out if silent * then show a richtext widget */ bool loud = false; OPimNotifyManager::Alarms als = todo.notifiers().alarms(); OPimNotifyManager::Alarms::Iterator it; for ( it = als.begin(); it != als.end(); ++it ) { if ( (*it).dateTime() == dt ) { loud = ( (*it).sound() == OPimAlarm::Loud ); break; } } if (loud) startAlarm(); QDialog dlg(this, 0, TRUE ); QVBoxLayout* lay = new QVBoxLayout( &dlg ); 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 %1</h1><br>").arg( TimeString::dateString( dt ) ); text += todo.toRichText(); view->setText( text ); bool needToStay = QPEApplication::execDialog( &dlg ); if (loud) killAlarm(); if (needToStay) { // showMaximized(); // raise(); QPEApplication::setKeepRunning(); // setActiveWindow(); } } diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h index fd0e1bd..6a7296b 100644 --- a/core/pim/todo/mainwindow.h +++ b/core/pim/todo/mainwindow.h @@ -1,211 +1,213 @@ /* =. This file is part of the OPIE Project .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> .>+-= _;:, .> :=|. 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. */ #ifndef TODO_MAIN_WINDOW_H #define TODO_MAIN_WINDOW_H #include <qlist.h> -#include <opie/otodoaccess.h> -#include <opie/otodo.h> -#include <opie/opimmainwindow.h> +#include <opie2/otodoaccess.h> +#include <opie2/opimtodo.h> +#include <opie2/opimmainwindow.h> +#include <opie2/owidgetstack.h> #include "smalltodo.h" #include "todoview.h" #include "quickedit.h" #include "todomanager.h" class QPopupMenu; class QMenuBar; class QToolBar; class QAction; -class OWidgetStack; class Ir; class QVBox; class QLineEdit; +using namespace Opie; + namespace Todo { typedef TodoView View; class TemplateManager; class Editor; class TodoShow; class TemplateEditor; struct QuickEditBase; class MainWindow : public OPimMainWindow { Q_OBJECT friend class TodoView; // avoid QObject here.... friend class TodoShow; // avoid QObject public: /* OApplicationFactory application Name */ static QString appName() { return QString::fromLatin1("todolist"); } MainWindow( QWidget *parent = 0, const char* name = 0, WFlags fl = 0 ); ~MainWindow(); - /** return a context menu for an OTodo */ + /** return a context menu for an OPimTodo */ QPopupMenu* contextMenu(int uid, bool doesRecur = FALSE ); QPopupMenu* options(); QPopupMenu* edit(); QToolBar* toolbar(); void updateList(); - OTodoAccess::List list()const; - OTodoAccess::List sorted( bool asc, int sortOrder ); - OTodoAccess::List sorted( bool asc, int sortOrder, int addFilter ); + OPimTodoAccess::List list()const; + OPimTodoAccess::List sorted( bool asc, int sortOrder ); + OPimTodoAccess::List sorted( bool asc, int sortOrder, int addFilter ); - OTodo event(int uid ); + OPimTodo event(int uid ); bool isSyncing()const; bool showCompleted()const; bool showDeadline()const; bool showOverDue()const; bool showQuickTask()const; QString currentCategory()const; int currentCatId(); TemplateManager* templateManager(); QuickEditBase* quickEditor(); - void updateTodo( const OTodo& ); + void updateTodo( const OPimTodo& ); void populateTemplates(); Editor* currentEditor(); void setReadAhead(uint count ); private slots: void slotQuickEntered(); void populateCategories(); void slotReload(); void slotFlush(); protected: void closeEvent( QCloseEvent* e ); private: /* handle setting and removing alarms */ - void handleAlarms( const OTodo& oldTodo, const OTodo& newTodo ); + void handleAlarms( const OPimTodo& oldTodo, const OPimTodo& newTodo ); void receiveFile( const QString& filename ); void connectBase( ViewBase* ); void initUI(); void initActions(); void initConfig(); void initViews(); 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; QMenuBar* m_bar; QToolBar* m_tool; QAction* m_editAction, *m_deleteAction, *m_findAction, *m_completedAction, *m_showDeadLineAction, *m_deleteAllAction, *m_deleteCompleteAction, *m_duplicateAction, *m_showOverDueAction, *m_showQuickTaskAction, *m_effectiveAction; OWidgetStack *m_stack; QPopupMenu* m_catMenu, *m_edit, *m_options, *m_template; bool m_syncing:1; bool m_deadline:1; bool m_completed:1; bool m_overdue:1; bool m_quicktask:1; TodoManager m_todoMgr; QString m_curCat; QList<ViewBase> m_views; uint m_counter; TemplateManager* m_tempManager; private slots: void slotShow(int); void slotEdit(int); void slotUpdate3( QWidget* ); void slotComplete( int uid ); - void slotComplete( const OTodo& ev ); + void slotComplete( const OPimTodo& ev ); void slotNewFromTemplate(int id ); void slotNew(); void slotDuplicate(); void slotDelete(); void slotDelete(int uid ); void slotDeleteAll(); void slotDeleteCompleted(); void slotEdit(); void slotFind(); void setCategory( int ); void slotShowDeadLine( bool ); void slotShowCompleted( bool ); void slotShowQuickTask( bool ); 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(); int create(); bool remove( int uid ); void beam(int uid); void show( int uid ); void edit( int uid ); void add( const OPimRecord& ); void doAlarm( const QDateTime& dt, int uid ); }; } #endif diff --git a/core/pim/todo/opie-todo.control b/core/pim/todo/opie-todo.control index 8ad50b2..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, libopie1, opie-pics +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 1ed20b4..ab1ce94 100644 --- a/core/pim/todo/otaskeditor.cpp +++ b/core/pim/todo/otaskeditor.cpp @@ -1,92 +1,90 @@ #include <qlayout.h> -#include <opie/orecurrancewidget.h> - #include "taskeditoroverview.h" #include "taskeditorstatus.h" #include "taskeditoralarms.h" #include "otaskeditor.h" OTaskEditor::OTaskEditor(int cur) : QDialog( 0, 0, TRUE, WStyle_ContextHelp ) { init(); init( cur ); } -OTaskEditor::OTaskEditor( const OTodo& to) +OTaskEditor::OTaskEditor( const OPimTodo& to) : QDialog( 0, 0, TRUE, WStyle_ContextHelp ) { init(); init( to ); } OTaskEditor::~OTaskEditor() { } void OTaskEditor::init( int cur ) { - OTodo to; + OPimTodo to; to.setUid( 1 ); // generate a new uid if ( cur != 0 ) to.setCategories( cur ); load(to); } -void OTaskEditor::init( const OTodo& to ) { +void OTaskEditor::init( const OPimTodo& to ) { load( to ); } -OTodo OTaskEditor::todo()const{ +OPimTodo OTaskEditor::todo()const{ qWarning("saving!"); - OTodo to ( m_todo ); + 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 OTodo& 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") ); m_alarm = new TaskEditorAlarms( m_tab ); m_tab->addTab( m_alarm, "todo/alarm", tr("Alarms") ); // m_remind = new TaskEditorAlarms( m_tab ); // m_tab->addTab( m_remind, "todo/reminder", tr("Reminders") ); // QLabel* lbl = new QLabel( m_tab ); // lbl->setText( tr("X-Ref") ); // m_tab->addTab( lbl, "todo/xref", tr("X-Ref") ); - m_rec = new ORecurranceWidget( true, QDate::currentDate(), this ); + m_rec = new OPimRecurrenceWidget( true, QDate::currentDate(), this ); m_tab->addTab( m_rec, "repeat", tr("Recurrence") ); /* signal and slots */ connect(m_overView, SIGNAL(recurranceEnabled(bool) ), m_rec, SLOT(setEnabled(bool) ) ); /* connect due date changed to the recurrence tab */ connect(m_stat, SIGNAL(dueDateChanged(const QDate&) ), m_rec, SLOT(setStartDate(const QDate& ) ) ); m_tab->setCurrentTab( m_overView ); } diff --git a/core/pim/todo/otaskeditor.h b/core/pim/todo/otaskeditor.h index 2daae52..7068df8 100644 --- a/core/pim/todo/otaskeditor.h +++ b/core/pim/todo/otaskeditor.h @@ -1,43 +1,43 @@ #ifndef OPIE_TASK_EDITOR_H #define OPIE_TASK_EDITOR_H #include <qdialog.h> -#include <opie/otodo.h> -#include <opie/otabwidget.h> +#include <opie2/opimtodo.h> +#include <opie2/otabwidget.h> +#include <opie2/opimrecurrencewidget.h> class TaskEditorOverView; class TaskEditorStatus; class TaskEditorAlarms; -class ORecurranceWidget; class QMultiLineEdit; class OTaskEditor : public QDialog { Q_OBJECT public: OTaskEditor(int cur); - OTaskEditor( const OTodo& todo ); + OTaskEditor( const OPimTodo& todo ); ~OTaskEditor(); /* * same as the c'tor but this gives us the * power to 'preload' the dialog */ void init( int cur ); - void init( const OTodo& todo ); + void init( const OPimTodo& todo ); - OTodo todo()const; + OPimTodo todo()const; private: - void load( const OTodo& ); + void load( const OPimTodo& ); void init(); OTabWidget *m_tab; TaskEditorOverView *m_overView; TaskEditorStatus *m_stat; TaskEditorAlarms *m_alarm; TaskEditorAlarms *m_remind; - ORecurranceWidget *m_rec; - OTodo m_todo; + OPimRecurrenceWidget *m_rec; + OPimTodo m_todo; }; #endif diff --git a/core/pim/todo/quickedit.h b/core/pim/todo/quickedit.h index 5fe74fe..0c0c204 100644 --- a/core/pim/todo/quickedit.h +++ b/core/pim/todo/quickedit.h @@ -1,45 +1,47 @@ #ifndef OPIE_QUICK_EDIT_H #define OPIE_QUICK_EDIT_H #include <qsignal.h> #include <qwidget.h> -#include <opie/otodo.h> +#include <opie2/opimtodo.h> + +using Opie::OPimTodo; namespace Todo{ class MainWindow; struct QuickEditBase { - virtual OTodo todo()const = 0l; + virtual OPimTodo todo()const = 0l; virtual QSignal* signal() = 0l; virtual QWidget* widget() = 0l; }; /* * this is my second try * of signal and slots with namespaces * and templates * I use a different approach now * I give a QSignal away * and have a protected method called emit */ /** * Quick edit is meant to quickly enter - * OTodos in a fast way + * OPimTodos in a fast way */ class QuickEdit : public QuickEditBase{ public: QuickEdit(MainWindow* main ); virtual ~QuickEdit(); - //OTodo todo()const; + //OPimTodo todo()const; QSignal* signal(); //QWidget* widget(); protected: MainWindow* mainWindow(); void commit(); private: MainWindow* m_main; QSignal* m_sig; }; }; #endif diff --git a/core/pim/todo/quickeditimpl.cpp b/core/pim/todo/quickeditimpl.cpp index 1863ef4..cd0684f 100644 --- a/core/pim/todo/quickeditimpl.cpp +++ b/core/pim/todo/quickeditimpl.cpp @@ -1,116 +1,116 @@ #include <qaction.h> #include <qlineedit.h> #include <qwhatsthis.h> #include <qpe/resource.h> -#include <opie/oclickablelabel.h> +#include <opie2/oclickablelabel.h> #include "mainwindow.h" #include "quickeditimpl.h" QuickEditImpl::QuickEditImpl( QWidget* parent, bool visible ) : QToolBar( (QMainWindow *)parent ), Todo::QuickEdit( (Todo::MainWindow *)parent ) { setHorizontalStretchable( TRUE ); // Load priority icons // TODO - probably should be done globally somewhere else, // see also tableview.cpp/h, taskeditoroverview.cpp/h priority1 = Resource::loadPixmap( "todo/priority1" ); priority3 = Resource::loadPixmap( "todo/priority3" ); priority5 = Resource::loadPixmap( "todo/priority5" ); m_lbl = new OClickableLabel( this ); m_lbl->setMinimumWidth( 15 ); m_lbl->setPixmap( priority3 ); connect(m_lbl, SIGNAL(clicked() ), this, SLOT(slotPrio()) ); 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 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() ) ); a->addTo( this ); a->setWhatsThis( QWidget::tr( "Click here to reset new task information.\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_visible = visible; if ( !m_visible ) { hide(); } m_menu = 0l; reinit(); } QuickEditImpl::~QuickEditImpl() { } -OTodo QuickEditImpl::todo()const { +OPimTodo QuickEditImpl::todo()const { return m_todo; } QWidget* QuickEditImpl::widget() { return this; } void QuickEditImpl::slotEnter() { - OTodo todo; + OPimTodo todo; if (!m_edit->text().isEmpty() ) { todo.setUid(1 ); // new uid todo.setPriority( m_state ); todo.setSummary( m_edit->text() ); if ( ((Todo::MainWindow *)parent())->currentCatId() != 0 ) todo.setCategories( ((Todo::MainWindow *)parent())->currentCatId() ); m_todo = todo; commit(); } m_todo = todo; reinit(); } void QuickEditImpl::slotPrio() { m_state -= 2; if ( m_state < 1 ) m_state = 5; switch( m_state ) { case 1: m_lbl->setPixmap( priority1 ); break; case 5: m_lbl->setPixmap( priority5 ); break; case 3: default: m_lbl->setPixmap( priority3 ); break; } } void QuickEditImpl::slotMore() { // TODO - implement } void QuickEditImpl::slotCancel() { reinit(); } void QuickEditImpl::reinit() { m_state = 3; m_lbl->setPixmap( priority3 ); m_edit->clear(); } diff --git a/core/pim/todo/quickeditimpl.h b/core/pim/todo/quickeditimpl.h index 89b94f8..d465dba 100644 --- a/core/pim/todo/quickeditimpl.h +++ b/core/pim/todo/quickeditimpl.h @@ -1,41 +1,41 @@ #ifndef OPIE_QUICK_EDIT_IMPL_H #define OPIE_QUICK_EDIT_IMPL_H #include <qpixmap.h> #include <qtoolbar.h> #include "quickedit.h" class QLineEdit; class QLabel; class QuickEditImpl : public QToolBar, public Todo::QuickEdit { Q_OBJECT public: QuickEditImpl( QWidget* parent, bool visible); ~QuickEditImpl(); - OTodo todo()const; + OPimTodo todo()const; QWidget* widget(); private slots: void slotEnter(); void slotPrio(); void slotMore(); void slotCancel(); private: void reinit(); int m_state; QLabel* m_lbl; QLineEdit* m_edit; QLabel* m_enter; QLabel* m_more; QPopupMenu* m_menu; - OTodo m_todo; + OPimTodo m_todo; bool m_visible; QPixmap priority1; QPixmap priority3; QPixmap priority5; }; #endif diff --git a/core/pim/todo/smalltodo.h b/core/pim/todo/smalltodo.h index 952ed04..963218e 100644 --- a/core/pim/todo/smalltodo.h +++ b/core/pim/todo/smalltodo.h @@ -1,70 +1,70 @@ /* =. This file is part of the OPIE Project .=l. Copyright (c) 2002 <zecke@handhelds.org> .>+-= _;:, .> :=|. 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. */ #ifndef TODO_SMALL_TODO_H #define TODO_SMALL_TODO_H #include <qdatetime.h> #include <qstring.h> #include <qstringlist.h> namespace Todo { /** * SmallTodo holds everything necessary - * to represent a OTodo without holding - * everything from a OTodo + * to represent a OPimTodo without holding + * everything from a OPimTodo */ class SmallTodo { public: SmallTodo(int uid = 0, bool comp = false, const QDate& date = QDate::currentDate(), const QString& = QString::null, const QStringList& = QStringList() ); SmallTodo( const SmallTodo& ); ~SmallTodo(); bool operator==( const SmallTodo& ); bool operator==( const SmallTodo& ) const; SmallTodo &operator=( const SmallTodo& ); QString name()const; QStringList categories()const; int uid()const; bool isCompleted()const; QDate date()const; private: struct SmallTodoPrivate; SmallTodoPrivate* d; void deref(); }; }; #endif diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp index d980a24..5bbf880 100644 --- a/core/pim/todo/tableview.cpp +++ b/core/pim/todo/tableview.cpp @@ -1,638 +1,638 @@ /* =. 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 <qpe/config.h> #include <qpe/resource.h> -#include <opie/orecur.h> +#include <opie2/opimrecurrence.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; } void TableView::initConfig() { Config config( "todo" ); config.setGroup( "Options" ); m_completeStrokeWidth = config.readNumEntry( "CompleteStrokeWidth", 8 ); for (int i = 0; i < numCols(); i++ ) { int width = config.readNumEntry("Width"+QString::number(i), -1 ); setColumnWidth(i, width == -1 ? columnWidth(i) : width ); } } TableView::TableView( MainWindow* window, QWidget* wid ) : QTable( wid ), TodoView( window ) { setName("TableView"); // Load icons // TODO - probably should be done globally somewhere else, // see also quickeditimpl.cpp/h, taskeditoroverview.cpp/h m_pic_completed = Resource::loadPixmap( "todo/completed" ); QString namestr; for ( unsigned int i = 1; i < 6; i++ ) { namestr = "todo/priority"; namestr.append( QString::number( i ) ); m_pic_priority[ i - 1 ] = Resource::loadPixmap( namestr ); } setUpdatesEnabled( false ); viewport()->setUpdatesEnabled( false ); m_enablePaint = false; setNumRows(0); setNumCols(4); horizontalHeader()->setLabel( 0, QWidget::tr("C.") ); horizontalHeader()->setLabel( 1, QWidget::tr("Priority") ); horizontalHeader()->setLabel( 2, QWidget::tr("Summary" ) ); horizontalHeader()->setLabel( 3, QWidget::tr("Deadline") ); setShowDeadline( todoWindow()->showDeadline() ); setSorting( TRUE ); setSelectionMode( NoSelection ); setLeftMargin( 0 ); verticalHeader()->hide(); connect((QTable*)this, SIGNAL( clicked( int, int, int, const QPoint& ) ), this, SLOT( slotClicked(int, int, int, const QPoint& ) ) ); connect((QTable*)this, SIGNAL( pressed( int, int, int, const QPoint& ) ), this, SLOT( slotPressed(int, int, int, const QPoint& ) ) ); connect((QTable*)this, SIGNAL(valueChanged(int, int) ), this, SLOT( slotValueChanged(int, int) ) ); connect((QTable*)this, SIGNAL(currentChanged(int, int) ), this, SLOT( slotCurrentChanged(int, int) ) ); m_menuTimer = new QTimer( this ); connect( m_menuTimer, SIGNAL(timeout()), this, SLOT(slotShowMenu()) ); /* now let's init the config */ initConfig(); m_enablePaint = true; setUpdatesEnabled( true ); viewport()->setUpdatesEnabled( true ); viewport()->update(); setSortOrder( 0 ); setAscending( TRUE ); m_first = true; } /* a new day has started * update the day */ void TableView::newDay() { clear(); updateView(); } TableView::~TableView() { Config config( "todo" ); config.setGroup( "Options" ); for (int i = 0; i < numCols(); i++ ) config.writeEntry("Width"+QString::number(i), columnWidth(i) ); } void TableView::slotShowMenu() { QPopupMenu *menu = todoWindow()->contextMenu( current(), sorted()[currentRow()].recurrence().doesRecur() ); menu->exec(QCursor::pos() ); delete menu; } 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() { - OTodo to = sorted()[currentRow()]; + 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"); m_row = false; static int id; id = startTimer(4000 ); /* FIXME we want one page to be read! * * Calculate that screensize */ todoWindow()->setReadAhead( 4 ); sort(); - OTodoAccess::List::Iterator it, end; + OPimTodoAccess::List::Iterator it, end; it = sorted().begin(); end = sorted().end(); qWarning("setTodos"); 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 OTodo&) { +void TableView::setTodo( int, const OPimTodo&) { sort(); /* repaint */ repaint(); } -void TableView::addEvent( const OTodo&) { +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 OTodo& ev) { +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 ); updateView(); } void TableView::setShowDeadline( bool b ) { qWarning( "Show DeadLine %d" , b ); 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"); 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() ); 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"); } 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 ); 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(); - OTodo task = sorted()[row]; + 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() ) ); } // Paint grid //p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) ); //QPen op = p->pen(); //p->setPen(cg.mid()); //p->drawLine( 0, cr.height() - 1, cr.width() - 1, cr.height() - 1 ); //p->drawLine( cr.width() - 1, 0, cr.width() - 1, cr.height() - 1 ); //p->setPen(op); QFont f = p->font(); QFontMetrics fm(f); int marg = ( cr.width() - BoxSize ) / 2; int x = 0; int y = ( cr.height() - BoxSize ) / 2; switch(col) { case 0: // completed field { //p->setPen( QPen( cg.text() ) ); //p->drawRect( x + marg, y, BoxSize, BoxSize ); //p->drawRect( x + marg+1, y+1, BoxSize-2, BoxSize-2 ); if ( task.isCompleted() ) { p->drawPixmap( x + marg, y, m_pic_completed ); } } break; case 1: // priority field { p->drawPixmap( x + marg, y, m_pic_priority[ task.priority() - 1 ] ); } break; case 2: // description field { QString text = task.summary().isEmpty() ? task.description().left(20) : task.summary(); p->drawText(2,2 + fm.ascent(), text); } break; case 3: { QString text; if (task.hasDueDate()) { int off = QDate::currentDate().daysTo( task.dueDate() ); text = tr( "%1 day(s)").arg(QString::number(off)); /* * set color if not completed */ if (!task.isCompleted() ) { QColor color = Qt::black; if ( off < 0 ) color = Qt::red; else if ( off == 0 ) color = Qt::yellow; else if ( off > 0 ) color = Qt::green; p->setPen(color ); } } 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"); if ( col == 1 ) { QWidget* wid = cellWidget(row, 1 ); if ( wid->inherits("QComboBox") ) { int pri = ((QComboBox*)wid)->currentItem() + 1; - OTodo todo = sorted()[row]; + 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(); - OTodo todo = sorted()[row]; + 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() ); 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 ); 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(); removeQuery( sorted().uidAt( row ) ); return; } switch( event->key() ) { case Qt::Key_F33: case Qt::Key_Enter: case Qt::Key_Return: 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) ); } event->accept(); break; default: QTable::keyPressEvent( event ); } } diff --git a/core/pim/todo/tableview.h b/core/pim/todo/tableview.h index 528ddc9..7f78255 100644 --- a/core/pim/todo/tableview.h +++ b/core/pim/todo/tableview.h @@ -1,130 +1,130 @@ /* =. 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. */ #ifndef OPIE_TABLE_VIEW_H #define OPIE_TABLE_VIEW_H #include <qtable.h> #include <qmap.h> #include <qpixmap.h> #include "todoview.h" class QTimer; namespace Todo { class CheckItem; class DueTextItem; class TableView : public QTable, public TodoView { Q_OBJECT public: TableView( MainWindow*, QWidget* parent ); ~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 ); - void replaceEvent( const OTodo& ); + void setTodo( int uid, const OPimTodo& ); + void addEvent( const OPimTodo& event ); + void replaceEvent( const OPimTodo& ); void removeEvent( int uid ); void setShowCompleted( bool ); void setShowDeadline( bool ); void setShowCategory(const QString& =QString::null ); void newDay(); QWidget* widget(); void sortColumn(int, bool, bool ); /* * we do our drawing ourselves * because we don't want to have * 40.000 QTableItems for 10.000 - * OTodos where we only show 10 at a time! + * OPimTodos where we only show 10 at a time! */ void paintCell(QPainter* p, int row, int col, const QRect&, bool ); private: /* reimplented for internal reasons */ void viewportPaintEvent( QPaintEvent* ); QTimer *m_menuTimer; bool m_enablePaint:1; QString m_oleCat; bool m_first : 1; QPixmap m_pic_completed; QPixmap m_pic_priority[ 5 ]; protected: 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, const QPoint& ); void slotValueChanged(int, int); void slotCurrentChanged(int, int ); void slotPriority(); private: void initConfig(); int m_completeStrokeWidth; bool m_row : 1; QPoint m_prevP; }; }; #endif diff --git a/core/pim/todo/taskeditoralarms.cpp b/core/pim/todo/taskeditoralarms.cpp index bcc40fe..930c94e 100644 --- a/core/pim/todo/taskeditoralarms.cpp +++ b/core/pim/todo/taskeditoralarms.cpp @@ -1,233 +1,232 @@ /* =. 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 "taskeditoralarms.h" -#include <opie/otodo.h> -#include <opie/opimnotifymanager.h> -#include <opie/otimepicker.h> +#include <opie2/opimnotifymanager.h> +#include <opie2/otimepicker.h> #include <qpe/datebookmonth.h> #include <qpe/resource.h> #include <qlistview.h> #include <qlayout.h> class AlarmItem : public QListViewItem { public: AlarmItem( QListView*, const OPimAlarm& ); ~AlarmItem(); OPimAlarm alarm()const; void setAlarm( const OPimAlarm& ); private: QDateTime m_dt; int m_type; }; AlarmItem::AlarmItem( QListView* view, const OPimAlarm& dt) : QListViewItem(view) { setAlarm( dt ); } void AlarmItem::setAlarm( const OPimAlarm& dt ) { m_dt = dt.dateTime(); m_type = dt.sound(); setText( 0, TimeString::dateString( m_dt.date() ) ); setText( 1, TimeString::timeString( m_dt.time() ) ); setText( 2, m_type == 0 ? QObject::tr("silent") : QObject::tr("loud") ); } AlarmItem::~AlarmItem() { } OPimAlarm AlarmItem::alarm()const{ OPimAlarm al( m_type, m_dt ); return al; } TaskEditorAlarms::TaskEditorAlarms( QWidget* parent, int, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { m_date = m_type = m_time = 0; QGridLayout *layout = new QGridLayout( this, 2, 2, 4, 4 ); lstAlarms = new QListView( this ); lstAlarms->addColumn( tr("Date") ); lstAlarms->addColumn( tr("Time") ); lstAlarms->addColumn( tr("Type") ); connect( lstAlarms, SIGNAL(clicked ( QListViewItem *, const QPoint &, int ) ), this, SLOT(inlineEdit(QListViewItem*, const QPoint&, int ) ) ); layout->addMultiCellWidget( lstAlarms, 0, 0, 0, 2 ); QPushButton *btn = new QPushButton( Resource::loadPixmap( "new" ), tr( "New" ), this ); //QWhatsThis::add( btn, tr( "Click here to add a new transaction." ) ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotNew() ) ); layout->addWidget( btn, 1, 0 ); /* use when we've reminders too */ #if 0 btn = new QPushButton( Resource::loadPixmap( "edit" ), tr( "Edit" ), this ); //QWhatsThis::add( btn, tr( "Select a transaction and then click here to edit it." ) ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotEdit() ) ); layout->addWidget( btn, 1, 1 ); #endif btn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), this ); //QWhatsThis::add( btn, tr( "Select a checkbook and then click here to delete it." ) ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotDelete() ) ); layout->addWidget( btn, 1, 2 ); } TaskEditorAlarms::~TaskEditorAlarms(){ } void TaskEditorAlarms::slotNew(){ (void)new AlarmItem(lstAlarms, OPimAlarm(0, QDateTime::currentDateTime() ) ); } void TaskEditorAlarms::slotEdit(){ } void TaskEditorAlarms::slotDelete(){ QListViewItem* item = lstAlarms->currentItem(); if (!item) return; lstAlarms->takeItem( item ); delete item; } -void TaskEditorAlarms::load( const OTodo& todo) { +void TaskEditorAlarms::load( const OPimTodo& todo) { lstAlarms->clear(); if (!todo.hasNotifiers() ) return; OPimNotifyManager::Alarms als = todo.notifiers().alarms(); if (als.isEmpty() ) return; OPimNotifyManager::Alarms::Iterator it = als.begin(); for ( ; it != als.end(); ++it ) (void)new AlarmItem( lstAlarms, (*it) ); } -void TaskEditorAlarms::save( OTodo& todo ) { +void TaskEditorAlarms::save( OPimTodo& todo ) { if (lstAlarms->childCount() <= 0 ) return; OPimNotifyManager::Alarms alarms; for ( QListViewItem* item = lstAlarms->firstChild(); item; item = item->nextSibling() ) { AlarmItem *alItem = static_cast<AlarmItem*>(item); alarms.append( alItem->alarm() ); } OPimNotifyManager& manager = todo.notifiers(); manager.setAlarms( alarms ); } void TaskEditorAlarms::inlineEdit( QListViewItem* alarm, const QPoint& p, int col ) { if (!alarm) return; AlarmItem* item = static_cast<AlarmItem*>(alarm); switch( col ) { // date case 0: return inlineSetDate( item, p ); // time case 1: return inlineSetTime( item ); // type case 2: return inlineSetType( item, p ); } } void TaskEditorAlarms::inlineSetDate( AlarmItem* item, const QPoint& p ) { QPopupMenu* pop = popup( 0 ); m_dbMonth->setDate( item->alarm().dateTime().date() ); pop->exec(p); OPimAlarm al = item->alarm(); QDateTime dt = al.dateTime(); dt.setDate( m_dbMonth->selectedDate() ); al.setDateTime( dt ); item->setAlarm( al ); } void TaskEditorAlarms::inlineSetType( AlarmItem* item, const QPoint& p ) { int type; QPopupMenu* pop = popup( 2 ); switch( pop->exec(p) ) { case 10: type = 1; break; case 20: default: type = 0; } OPimAlarm al = item->alarm(); al.setSound( type ); item->setAlarm( al ); } void TaskEditorAlarms::inlineSetTime( AlarmItem* item ) { OPimAlarm al = item->alarm(); QDateTime dt = al.dateTime(); OTimePickerDialog dialog; dialog.setTime( dt.time() ); if ( dialog.exec() == QDialog::Accepted ) { dt.setTime( dialog.time() ); al.setDateTime( dt ); item->setAlarm( al ); } } QPopupMenu* TaskEditorAlarms::popup( int column ) { QPopupMenu* pop = 0; switch( column ) { case 0:{ if (!m_date) { m_date = new QPopupMenu(this); m_dbMonth = new DateBookMonth(m_date, 0, TRUE); m_date->insertItem(m_dbMonth); } pop = m_date; } break; case 1: break; case 2:{ if (!m_type) { m_type = new QPopupMenu(this); m_type->insertItem( QObject::tr("loud"), 10 ); m_type->insertItem( QObject::tr("silent"), 20 ); } pop = m_type; } break; default: break; } return pop; } diff --git a/core/pim/todo/taskeditoralarms.h b/core/pim/todo/taskeditoralarms.h index 0aa52cc..2379b0c 100644 --- a/core/pim/todo/taskeditoralarms.h +++ b/core/pim/todo/taskeditoralarms.h @@ -1,72 +1,75 @@ /* =. This file is part of the OPIE Project .=l. Copyright (c) 2002,2003 <> .>+-= _;:, .> :=|. 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. */ #ifndef TASKEDITORALARMS_H #define TASKEDITORALARMS_H +#include <opie2/opimtodo.h> + #include <qwidget.h> class QListView; class QListViewItem; -class OTodo; + +using namespace Opie; class AlarmItem; class DateBookMonth; class TaskEditorAlarms : public QWidget { Q_OBJECT public: enum Type { Alarm = 0, Reminders }; TaskEditorAlarms( QWidget* parent = 0, int type = Alarm, const char* name = 0, WFlags fl = 0 ); ~TaskEditorAlarms(); - void load( const OTodo& ); - void save( OTodo& ); + void load( const OPimTodo& ); + void save( OPimTodo& ); private: QPopupMenu* popup( int column ); void inlineSetDate( AlarmItem*, const QPoint& p ); void inlineSetTime( AlarmItem*); void inlineSetType( AlarmItem*, const QPoint& p ); QListView* lstAlarms; QPopupMenu* m_date; QPopupMenu* m_time; QPopupMenu* m_type; DateBookMonth* m_dbMonth; protected slots: void slotNew(); void slotEdit(); void slotDelete(); void inlineEdit( QListViewItem*, const QPoint& p, int ); }; #endif // TASKEDITORALARMS_H diff --git a/core/pim/todo/taskeditoroverview.cpp b/core/pim/todo/taskeditoroverview.cpp index 415dcf2..294acb9 100644 --- a/core/pim/todo/taskeditoroverview.cpp +++ b/core/pim/todo/taskeditoroverview.cpp @@ -1,175 +1,175 @@ /* =. 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 "taskeditoroverview.h" -#include <opie/orecur.h> +//#include <opie2/opimrecurrence.h> #include <qpe/categoryselect.h> #include <qpe/datebookmonth.h> #include <qpe/resource.h> #include <qcheckbox.h> #include <qlabel.h> #include <qlayout.h> #include <qmultilineedit.h> #include <qwhatsthis.h> TaskEditorOverView::TaskEditorOverView( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { // Load icons // TODO - probably should be done globally somewhere else, // see also quickeditimpl.cpp/h, tableview.cpp/h QString namestr; for ( unsigned int i = 1; i < 6; i++ ) { namestr = "todo/priority"; namestr.append( QString::number( i ) ); m_pic_priority[ i - 1 ] = Resource::loadPixmap( namestr ); } QVBoxLayout *vb = new QVBoxLayout( this ); QScrollView *sv = new QScrollView( this ); vb->addWidget( sv ); sv->setResizePolicy( QScrollView::AutoOneFit ); sv->setFrameStyle( QFrame::NoFrame ); QWidget *container = new QWidget( sv->viewport() ); sv->addChild( container ); QGridLayout *layout = new QGridLayout( container, 7, 2, 4, 4 ); // Description 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 " ) ); cmbDesc->insertItem( tr( "Organize " ) ); cmbDesc->insertItem( tr( "Get " ) ); cmbDesc->insertItem( tr( "Update " ) ); cmbDesc->insertItem( tr( "Create " ) ); cmbDesc->insertItem( tr( "Plan " ) ); cmbDesc->insertItem( tr( "Call " ) ); cmbDesc->insertItem( tr( "Mail " ) ); cmbDesc->clearEdit(); layout->addMultiCellWidget( cmbDesc, 1, 1, 0, 1 ); QWhatsThis::add( cmbDesc, tr( "Enter brief description of the task here." ) ); // Priority label = new QLabel( QWidget::tr( "Priority:" ), container ); layout->addWidget( label, 2, 0 ); QWhatsThis::add( label, tr( "Select priority of task here." ) ); cmbPriority = new QComboBox( FALSE, container ); cmbPriority->setMinimumHeight( 26 ); cmbPriority->insertItem( m_pic_priority[ 0 ], tr( "Very High" ) ); cmbPriority->insertItem( m_pic_priority[ 1 ], tr( "High" ) ); cmbPriority->insertItem( m_pic_priority[ 2 ], tr( "Normal" ) ); cmbPriority->insertItem( m_pic_priority[ 3 ], tr( "Low" ) ); cmbPriority->insertItem( m_pic_priority[ 4 ], tr( "Very Low" ) ); cmbPriority->setCurrentItem( 2 ); layout->addWidget( cmbPriority, 2, 1 ); QWhatsThis::add( cmbPriority, tr( "Select priority of task here." ) ); // Category label = new QLabel( tr( "Category:" ), container ); layout->addWidget( label, 3, 0 ); QWhatsThis::add( label, tr( "Select category to organize this task with." ) ); cmbCategory = new CategorySelect( container ); layout->addWidget( cmbCategory, 3, 1 ); QWhatsThis::add( cmbCategory, tr( "Select category to organize this task with." ) ); // Recurrence 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( "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." ) ); } TaskEditorOverView::~TaskEditorOverView() { } -void TaskEditorOverView::load( const OTodo& todo ) +void TaskEditorOverView::load( const OPimTodo& todo ) { // Description cmbDesc->insertItem( todo.summary(), 0 ); cmbDesc->setCurrentItem( 0 ); // Priority cmbPriority->setCurrentItem( todo.priority() - 1 ); // Category cmbCategory->setCategories( todo.categories(), "Todo List", tr( "Todo List" ) ); // Recurrence ckbRecurrence->setChecked( todo.hasRecurrence() ); emit recurranceEnabled( todo.hasRecurrence() ); // Notes mleNotes->setText( todo.description() ); } -void TaskEditorOverView::save( OTodo &todo ) +void TaskEditorOverView::save( OPimTodo &todo ) { // Description todo.setSummary( cmbDesc->currentText() ); // Priority todo.setPriority( cmbPriority->currentItem() + 1 ); // Category if ( cmbCategory->currentCategory() != -1 ) { QArray<int> arr = cmbCategory->currentCategories(); todo.setCategories( arr ); } // Recurrence - don't need to save here... // Notes todo.setDescription( mleNotes->text() ); } void TaskEditorOverView::slotRecClicked() { emit recurranceEnabled( ckbRecurrence->isChecked() ); } diff --git a/core/pim/todo/taskeditoroverview.h b/core/pim/todo/taskeditoroverview.h index d5f5125..89679f1 100644 --- a/core/pim/todo/taskeditoroverview.h +++ b/core/pim/todo/taskeditoroverview.h @@ -1,69 +1,71 @@ /* =. 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. */ #ifndef TASKEDITOROVERVIEW_H #define TASKEDITOROVERVIEW_H -#include <opie/otodo.h> +#include <opie2/opimtodo.h> #include <qpixmap.h> #include <qwidget.h> class CategorySelect; class QCheckBox; class QComboBox; class QMultiLineEdit; +using namespace Opie; + class TaskEditorOverView : public QWidget { Q_OBJECT public: TaskEditorOverView( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~TaskEditorOverView(); QComboBox *cmbDesc; QComboBox *cmbPriority; CategorySelect *cmbCategory; QCheckBox *ckbRecurrence; QMultiLineEdit *mleNotes; - void load( const OTodo & ); - void save( OTodo & ); + void load( const OPimTodo & ); + void save( OPimTodo & ); signals: void recurranceEnabled( bool ); protected: QPixmap m_pic_priority[ 5 ]; protected slots: void slotRecClicked(); }; #endif // TASKEDITOROVERVIEW_H diff --git a/core/pim/todo/taskeditorstatus.cpp b/core/pim/todo/taskeditorstatus.cpp index 98e3cea..367dd58 100644 --- a/core/pim/todo/taskeditorstatus.cpp +++ b/core/pim/todo/taskeditorstatus.cpp @@ -1,303 +1,302 @@ /* =. 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 "taskeditorstatus.h" -#include <opie/otodo.h> -#include <opie/opimmaintainer.h> -#include <opie/opimstate.h> +#include <opie2/opimmaintainer.h> +#include <opie2/opimstate.h> #include <qpe/datebookmonth.h> #include <qcheckbox.h> #include <qcombobox.h> #include <qlabel.h> #include <qlayout.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 ) : QWidget( parent, name, fl ) { QDate curDate = QDate::currentDate(); m_start = m_comp = m_due = curDate; QString curDateStr = TimeString::longDateString( curDate ); QVBoxLayout *vb = new QVBoxLayout( this ); QScrollView *sv = new QScrollView( this ); vb->addWidget( sv ); sv->setResizePolicy( QScrollView::AutoOneFit ); sv->setFrameStyle( QFrame::NoFrame ); QWidget *container = new QWidget( sv->viewport() ); sv->addChild( container ); QGridLayout *layout = new QGridLayout( container, 7, 3, 4, 4 ); // Status QLabel *label = new QLabel( tr( "Status:" ), container ); layout->addWidget( label, 0, 0 ); QWhatsThis::add( label, tr( "Click here to set the current status of this task." ) ); cmbStatus = new QComboBox( FALSE, container ); cmbStatus->insertItem( tr( "Started" ) ); cmbStatus->insertItem( tr( "Postponed" ) ); cmbStatus->insertItem( tr( "Finished" ) ); cmbStatus->insertItem( tr( "Not started" ) ); layout->addMultiCellWidget( cmbStatus, 0, 0, 1, 2 ); QWhatsThis::add( cmbStatus, tr( "Click here to set the current status of this task." ) ); // Progress label = new QLabel( tr( "Progress:" ), container ); layout->addWidget( label, 1, 0 ); QWhatsThis::add( label, tr( "Select progress made on this task here." ) ); cmbProgress = new QComboBox( FALSE, container ); cmbProgress->insertItem( tr( "0 %" ) ); cmbProgress->insertItem( tr( "20 %" ) ); cmbProgress->insertItem( tr( "40 %" ) ); cmbProgress->insertItem( tr( "60 %" ) ); cmbProgress->insertItem( tr( "80 %" ) ); cmbProgress->insertItem( tr( "100 %" ) ); layout->addMultiCellWidget( cmbProgress, 1, 1, 1, 2 ); QWhatsThis::add( cmbProgress, tr( "Select progress made on this task here." ) ); // Start date ckbStart = new QCheckBox( tr( "Start Date:" ), container ); layout->addWidget( ckbStart, 2, 0 ); QWhatsThis::add( ckbStart, tr( "Click here to set the date this task was started." ) ); connect( ckbStart, SIGNAL( clicked() ), this, SLOT( slotStartChecked() ) ); btnStart = new QPushButton( curDateStr, container ); btnStart->setEnabled( FALSE ); layout->addMultiCellWidget( btnStart, 2, 2, 1, 2 ); QWhatsThis::add( btnStart, tr( "Click here to set the date this task was started." ) ); QPopupMenu *popup = new QPopupMenu( this ); m_startBook = new DateBookMonth( popup, 0, TRUE ); popup->insertItem( m_startBook ); btnStart->setPopup( popup ); connect( m_startBook, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( slotStartChanged( int, int, int ) ) ); // Due date ckbDue = new QCheckBox( tr( "Due Date:" ), container ); layout->addWidget( ckbDue, 3, 0 ); QWhatsThis::add( ckbDue, tr( "Click here to set the date this task needs to be completed by." ) ); connect( ckbDue, SIGNAL( clicked() ), this, SLOT( slotDueChecked() ) ); btnDue = new QPushButton( curDateStr, container ); btnDue->setEnabled( FALSE ); layout->addMultiCellWidget( btnDue, 3, 3, 1, 2 ); QWhatsThis::add( btnDue, tr( "Click here to set the date this task needs to be completed by." ) ); popup = new QPopupMenu( this ); m_dueBook = new DateBookMonth( popup, 0, TRUE ); popup->insertItem( m_dueBook ); btnDue->setPopup( popup ); connect( m_dueBook, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( slotDueChanged( int, int, int ) ) ); // Completed ckbComp = new QCheckBox( tr( "Completed:" ), container ); layout->addWidget( ckbComp, 4, 0 ); QWhatsThis::add( ckbComp, tr( "Click here to mark this task as completed." ) ); connect( ckbComp, SIGNAL( clicked() ), this, SLOT( slotCompChecked() ) ); btnComp = new QPushButton( curDateStr, container ); btnComp->setEnabled( FALSE ); layout->addMultiCellWidget( btnComp, 4, 4, 1, 2 ); QWhatsThis::add( btnComp, tr( "Click here to set the date this task was completed." ) ); popup = new QPopupMenu( this ); m_compBook = new DateBookMonth( popup, 0, TRUE ); popup->insertItem( m_compBook ); btnComp->setPopup( popup ); connect( m_compBook, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( slotCompChanged( int, int, int ) ) ); QSpacerItem *spacer = new QSpacerItem( 5, 5, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding ); layout->addItem( spacer, 5, 0 ); // Maintainer mode #if 0 label = new QLabel( tr( "Maintainer Mode:" ), container ); layout->addWidget( label, 6, 0 ); QWhatsThis::add( label, tr( "Click here to set the maintainer's role." ) ); cmbMaintMode = new QComboBox( FALSE, container ); cmbMaintMode->insertItem( tr( "Nothing" ) ); cmbMaintMode->insertItem( tr( "Responsible" ) ); cmbMaintMode->insertItem( tr( "Done By" ) ); cmbMaintMode->insertItem( tr( "Coordinating" ) ); // layout->addMultiCellWidget( cmbMaintMode, 6, 6, 1, 2 ); QWhatsThis::add( cmbMaintMode, tr( "Click here to set the maintainer's role." ) ); // Maintainer label = new QLabel( tr( "Maintainer:" ), container ); layout->addWidget( label, 7, 0 ); QWhatsThis::add( label, tr( "This is the name of the current task maintainer." ) ); txtMaintainer = new QLabel( tr( "test" ), container ); txtMaintainer->setTextFormat( QLabel::RichText ); layout->addWidget( txtMaintainer, 7, 1 ); QWhatsThis::add( txtMaintainer, tr( "This is the name of the current task maintainer." ) ); tbtMaintainer = new QToolButton( container ); tbtMaintainer->setPixmap( Resource::loadPixmap( "todo/more" ) ); // layout->addWidget( tbtMaintainer, 7, 2 ); QWhatsThis::add( tbtMaintainer, tr( "Click here to select the task maintainer." ) ); #endif } TaskEditorStatus::~TaskEditorStatus() { } -void TaskEditorStatus::load( const OTodo &todo ) +void TaskEditorStatus::load( const OPimTodo &todo ) { QDate date = QDate::currentDate(); QString str = TimeString::longDateString( date ); // Status int state = todo.hasState()? todo.state().state() : OPimState::NotStarted; if ( state == OPimState::Undefined ) state = OPimState::NotStarted; cmbStatus->setCurrentItem( state ); // Progress cmbProgress->setCurrentItem( todo.progress() / 20 ); // Start date ckbStart->setChecked( todo.hasStartDate() ); btnStart->setEnabled( todo.hasStartDate() ); if ( todo.hasStartDate() ) { m_start = todo.startDate(); btnStart->setText( TimeString::longDateString( m_start ) ); } else btnStart->setText( str ); // Due date ckbDue->setChecked( todo.hasDueDate() ); btnDue->setText( TimeString::longDateString( todo.dueDate() ) ); btnDue->setEnabled( todo.hasDueDate() ); m_due = todo.dueDate(); // Completed ckbComp->setChecked( todo.isCompleted() ); btnComp->setEnabled( todo.hasCompletedDate() ); if ( todo.hasCompletedDate() ) { m_comp = todo.completedDate(); btnComp->setText( TimeString::longDateString( m_comp ) ); } else btnComp->setText( str ); // Maintainer Mode #if 0 state = todo.hasMaintainer() ? todo.maintainer().mode() : OPimMaintainer::Nothing; if ( state == OPimMaintainer::Undefined ) state = OPimMaintainer::Nothing; cmbMaintMode->setCurrentItem( state ); #endif // Maintainer - not implemented yet } -void TaskEditorStatus::save( OTodo &todo ) +void TaskEditorStatus::save( OPimTodo &todo ) { QDate inval; // Status todo.setState( OPimState( cmbStatus->currentItem() ) ); // Progress todo.setProgress( cmbProgress->currentItem() * 20 ); // Start date if ( ckbStart->isChecked() ) { todo.setStartDate( m_start ); } else todo.setStartDate( inval ); // Due date if ( ckbDue->isChecked() ) { todo.setDueDate( m_due ); todo.setHasDueDate( true ); } else todo.setHasDueDate( false ); // Completed todo.setCompleted( ckbComp->isChecked() ); if ( ckbComp->isChecked() ) { todo.setCompletedDate( m_comp ); } else todo.setCompletedDate( inval ); #if 0 // Maintainer mode - not implemented yet // Maintainer /* TODO - resolve name to uid.....*/ todo.setMaintainer( OPimMaintainer( cmbMaintMode->currentItem(), -10 ) ); #endif } void TaskEditorStatus::slotStartChecked() { btnStart->setEnabled( ckbStart->isChecked() ); } void TaskEditorStatus::slotCompChecked() { btnComp->setEnabled( ckbComp->isChecked() ); } void TaskEditorStatus::slotDueChecked() { btnDue->setEnabled( ckbDue->isChecked() ); } void TaskEditorStatus::slotStartChanged(int y, int m, int d) { m_start.setYMD( y, m, d ); btnStart->setText( TimeString::longDateString( m_start ) ); } void TaskEditorStatus::slotCompChanged(int y, int m, int d) { m_comp.setYMD( y, m, d ); btnComp->setText( TimeString::longDateString( m_comp ) ); } 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/taskeditorstatus.h b/core/pim/todo/taskeditorstatus.h index 3544200..97129f0 100644 --- a/core/pim/todo/taskeditorstatus.h +++ b/core/pim/todo/taskeditorstatus.h @@ -1,100 +1,103 @@ /* =. 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. */ #ifndef TASKEDITORSTATUS_H #define TASKEDITORSTATUS_H +#include <opie2/opimtodo.h> + #include <qdatetime.h> #include <qwidget.h> class DateBookMonth; -class OTodo; class QCheckBox; class QComboBox; class QLabel; class QPushButton; class QToolButton; +using namespace Opie; + /** * This is the implementation of the Opie Task Editor Advanced tab * it features the State! * MaintainerMode * Description */ class TaskEditorStatus : public QWidget { Q_OBJECT public: TaskEditorStatus( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~TaskEditorStatus(); QComboBox *cmbStatus; QLabel *txtMaintainer; QToolButton *tbtMaintainer; QComboBox *cmbMaintMode; QCheckBox *ckbDue; QPushButton *btnDue; QCheckBox *ckbStart; QPushButton *btnStart; QCheckBox *ckbComp; QPushButton *btnComp; QComboBox *cmbProgress; /* * I could have a struct which returns a QWidget* - * load and save to a OTodo + * load and save to a OPimTodo * and use multiple inheretence with all other widgets * and then simply iterate over the list of structs * this way I could easily have plugins for the whole editor.... * but I do not do it -zecke */ - void load( const OTodo & ); - void save( OTodo & ); + void load( const OPimTodo & ); + void save( OPimTodo & ); private: QDate m_start; QDate m_comp; QDate m_due; DateBookMonth *m_startBook; DateBookMonth *m_compBook; DateBookMonth *m_dueBook; private slots: void slotStartChecked(); void slotCompChecked(); void slotDueChecked(); void slotStartChanged( int, int, int ); void slotCompChanged( int, int, int ); void slotDueChanged( int, int, int ); signals: void dueDateChanged( const QDate& date ); }; #endif // TASKEDITORSTATUS_H diff --git a/core/pim/todo/templatedialogimpl.cpp b/core/pim/todo/templatedialogimpl.cpp index 63d8107..c9ad3d0 100644 --- a/core/pim/todo/templatedialogimpl.cpp +++ b/core/pim/todo/templatedialogimpl.cpp @@ -1,127 +1,127 @@ #include <qlineedit.h> #include "mainwindow.h" #include "todoeditor.h" #include "todotemplatemanager.h" #include "templatedialogimpl.h" using namespace Todo; /* TRANSLATOR Todo::TemplateDialogImpl */ namespace { class TemplateListItem : public QListViewItem { public: TemplateListItem( QListView*, const QString& name, - const OTodo& ); + const OPimTodo& ); ~TemplateListItem(); - OTodo event()const; + OPimTodo event()const; QString text()const; void setText(const QString& str ); - void setEvent( const OTodo& ); + void setEvent( const OPimTodo& ); private: QString m_name; - OTodo m_ev; + OPimTodo m_ev; }; /* implementation */ TemplateListItem::TemplateListItem( QListView* view, const QString& text, - const OTodo& ev ) + const OPimTodo& ev ) : QListViewItem( view ), m_name( text ), m_ev( ev ) { QListViewItem::setText(0, m_name ); } TemplateListItem::~TemplateListItem() {} - OTodo TemplateListItem::event() const { + OPimTodo TemplateListItem::event() const { return m_ev; } QString TemplateListItem::text()const { return m_name; } void TemplateListItem::setText( const QString& str ) { QListViewItem::setText(0, str ); m_name = str; } - void TemplateListItem::setEvent( const OTodo& ev) { + void TemplateListItem::setEvent( const OPimTodo& ev) { m_ev = ev; } } TemplateDialogImpl::TemplateDialogImpl( MainWindow* win, TemplateManager* man ) : TemplateDialog( win ), m_win( win), m_man( man ) { /* fill the listview */ /* not the fastest way.... */ QStringList list = man->templates(); for (QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { new TemplateListItem( listView(), (*it), man->templateEvent( (*it) ) ); } listView()->addColumn( QWidget::tr("Name") ); connect( listView(), SIGNAL(clicked(QListViewItem*) ), this, SLOT(slotClicked(QListViewItem*) ) ); } TemplateDialogImpl::~TemplateDialogImpl() { } void TemplateDialogImpl::slotAdd() { QString str = QWidget::tr("New Template %1").arg( listView()->childCount() ); - OTodo ev; + OPimTodo ev; m_man->addEvent(str, ev); new TemplateListItem( listView(), str, ev ); } void TemplateDialogImpl::slotRemove() { if (!listView()->currentItem() ) return; TemplateListItem* item = static_cast<TemplateListItem*>( listView()->currentItem() ); listView()->takeItem( item ); m_man->removeEvent( item->text() ); delete item; } void TemplateDialogImpl::slotEdit() { if ( !listView()->currentItem() ) return; TemplateListItem* item = static_cast<TemplateListItem*>( listView()->currentItem() ); - OTodo ev = m_win->currentEditor()->edit( m_win, item->event() ); + OPimTodo ev = m_win->currentEditor()->edit( m_win, item->event() ); if ( m_win->currentEditor()->accepted() ) { item->setEvent( ev ); m_man->removeEvent( item->text() ); m_man->addEvent( item->text(), ev ); } } /* * we need to update * the text */ void TemplateDialogImpl::slotReturn() { if ( !listView()->currentItem() ) return; TemplateListItem* tbl = static_cast<TemplateListItem*>( listView()->currentItem() ); if (tbl->text() != edit()->text() ) { m_man->removeEvent( tbl->text() ); tbl->setText( edit()->text() ); m_man->addEvent( tbl->text(), tbl->event() ); } } /* update the lineedit when changing */ void TemplateDialogImpl::slotClicked( QListViewItem* item) { if (!item) return; TemplateListItem* tbl = static_cast<TemplateListItem*>(item); edit()->setText( tbl->text() ); } diff --git a/core/pim/todo/templatedialogimpl.h b/core/pim/todo/templatedialogimpl.h index f366c9e..cc78521 100644 --- a/core/pim/todo/templatedialogimpl.h +++ b/core/pim/todo/templatedialogimpl.h @@ -1,33 +1,33 @@ #ifndef OPIE_TEMPLATE_DIALOG_IMPL_H #define OPIE_TEMPLATE_DIALOG_IMPL_H #include <qlistview.h> -#include <opie/otodo.h> +#include <opie2/opimtodo.h> #include "templatedialog.h" namespace Todo { class MainWindow; class TemplateManager; class TemplateDialogImpl : public Todo::TemplateDialog { Q_OBJECT public: TemplateDialogImpl( MainWindow* win, TemplateManager* ); ~TemplateDialogImpl(); private: MainWindow* m_win; TemplateManager* m_man; private slots: void slotAdd(); void slotRemove(); void slotEdit(); void slotReturn(); void slotClicked(QListViewItem*); }; }; #endif diff --git a/core/pim/todo/textviewshow.cpp b/core/pim/todo/textviewshow.cpp index 35ea74b..01e5810 100644 --- a/core/pim/todo/textviewshow.cpp +++ b/core/pim/todo/textviewshow.cpp @@ -1,48 +1,48 @@ #include "textviewshow.h" using namespace Todo; TextViewShow::TextViewShow( QWidget* parent, MainWindow* win) : QTextView( parent ), TodoShow(win) { } TextViewShow::~TextViewShow() { } QString TextViewShow::type()const { return QString::fromLatin1("TextViewShow"); } -void TextViewShow::slotShow( const OTodo& ev ) { +void TextViewShow::slotShow( const OPimTodo& ev ) { setText( ev.toRichText() ); } 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/textviewshow.h b/core/pim/todo/textviewshow.h index 498de81..cc31522 100644 --- a/core/pim/todo/textviewshow.h +++ b/core/pim/todo/textviewshow.h @@ -1,20 +1,20 @@ #include <qtextview.h> #include "todoshow.h" namespace Todo { class TextViewShow : public QTextView, public TodoShow { public: TextViewShow( QWidget* parent, MainWindow* ); ~TextViewShow(); QString type()const; - void slotShow( const OTodo& ev ); + void slotShow( const OPimTodo& ev ); QWidget* widget(); protected: void keyPressEvent( QKeyEvent* ); }; }; diff --git a/core/pim/todo/todo.pro b/core/pim/todo/todo.pro index 51cfde7..9267082 100644 --- a/core/pim/todo/todo.pro +++ b/core/pim/todo/todo.pro @@ -1,49 +1,49 @@ #TEMPLATE = app CONFIG = qt warn_on release quick-app #DESTDIR = $(OPIEDIR)/bin HEADERS = smalltodo.h \ todomanager.h \ mainwindow.h \ todoview.h \ tableview.h \ todotemplatemanager.h \ todoeditor.h \ todoshow.h \ textviewshow.h \ templateeditor.h \ templatedialog.h \ templatedialogimpl.h \ quickedit.h \ quickeditimpl.h \ otaskeditor.h \ taskeditoroverview.h \ taskeditorstatus.h \ taskeditoralarms.h SOURCES = smalltodo.cpp \ todomanager.cpp \ mainwindow.cpp \ # main.cpp \ tableview.cpp \ todoview.cpp \ todotemplatemanager.cpp \ todoeditor.cpp \ todoshow.cpp \ textviewshow.cpp \ templateeditor.cpp \ templatedialog.cpp \ templatedialogimpl.cpp \ quickeditimpl.cpp \ quickedit.cpp \ otaskeditor.cpp \ taskeditoroverview.cpp \ taskeditorstatus.cpp \ taskeditoralarms.cpp TARGET = todolist INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include -LIBS += -lqpe -lopie +LIBS += -lqpe -lopiecore2 -lopieui2 -lopiepim2 include ( $(OPIEDIR)/include.pro ) diff --git a/core/pim/todo/todoedit.h b/core/pim/todo/todoedit.h index 02800ca..4e89e93 100644 --- a/core/pim/todo/todoedit.h +++ b/core/pim/todo/todoedit.h @@ -1,17 +1,17 @@ #ifndef OPIE_TODO_EDIT_H #define OPIE_TODO_EDIT_H -#include <opie/otodo.h> +#include <opie2/opimtodo.h> namespace Todo { class Edit { public: Edit(); virtual ~Edit(); - ToDoEvent newEvent( const OTodo& ) = 0; - ToDoEvent editEvent( const OTodo& ) = 0; + ToDoEvent newEvent( const OPimTodo& ) = 0; + ToDoEvent editEvent( const OPimTodo& ) = 0; }; }; #endif diff --git a/core/pim/todo/todoeditor.cpp b/core/pim/todo/todoeditor.cpp index 78aedd6..879d809 100644 --- a/core/pim/todo/todoeditor.cpp +++ b/core/pim/todo/todoeditor.cpp @@ -1,62 +1,62 @@ #include <qpe/qpeapplication.h> #include "otaskeditor.h" #include "todoeditor.h" using namespace Todo; Editor::Editor() { m_accepted = false; m_self = 0l; } Editor::~Editor() { delete m_self; m_self = 0; } -OTodo Editor::newTodo( int cur, +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; - OTodo ev = e->todo(); + OPimTodo ev = e->todo(); qWarning("Todo uid"); qWarning("Todo %s %d %d", ev.summary().latin1(), ev.progress(), ev.isCompleted() ); ev.setUid(1); return ev; } -OTodo Editor::edit( QWidget *, - const OTodo& todo ) { +OPimTodo Editor::edit( QWidget *, + const OPimTodo& todo ) { OTaskEditor *e = self(); e->init( todo ); e->setCaption( QObject::tr( "Edit Task" ) ); int ret = QPEApplication::execDialog( e ); - OTodo ev = e->todo(); + 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/todoeditor.h b/core/pim/todo/todoeditor.h index fe30634..bcfd205 100644 --- a/core/pim/todo/todoeditor.h +++ b/core/pim/todo/todoeditor.h @@ -1,29 +1,29 @@ #ifndef OPIE_TODO_EDITOR_H #define OPIE_TODO_EDITOR_H -#include <opie/otodo.h> +#include <opie2/opimtodo.h> class OTaskEditor; namespace Todo { class Editor { public: Editor(); ~Editor(); - OTodo newTodo( int currentCatId, + OPimTodo newTodo( int currentCatId, QWidget* par ); - OTodo edit( QWidget* par, - const OTodo& ev = OTodo() ); + OPimTodo edit( QWidget* par, + const OPimTodo& ev = OPimTodo() ); bool accepted()const; protected: OTaskEditor* self(); private: bool m_accepted: 1; OTaskEditor* m_self; }; }; #endif diff --git a/core/pim/todo/todomanager.cpp b/core/pim/todo/todomanager.cpp index 501cca7..21e1d0c 100644 --- a/core/pim/todo/todomanager.cpp +++ b/core/pim/todo/todomanager.cpp @@ -1,127 +1,127 @@ /* =. 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 <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 ); } TodoManager::~TodoManager() { delete m_db; } -OTodo TodoManager::event(int uid ) { +OPimTodo TodoManager::event(int uid ) { return m_db->find( uid ); } void TodoManager::updateList() { qWarning("update list"); m_list = m_db->allRecords(); } -OTodoAccess::List TodoManager::list() const{ +OPimTodoAccess::List TodoManager::list() const{ return m_list; } -OTodoAccess::List TodoManager::sorted( bool asc, int so, int f, int cat ) { +OPimTodoAccess::List TodoManager::sorted( bool asc, int so, int f, int cat ) { return m_db->sorted( asc, so, f, cat ); } -OTodoAccess::List::Iterator TodoManager::overDue() { +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; } -OTodoAccess::List::Iterator TodoManager::fromTo( const QDate& start, +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; } -OTodoAccess::List::Iterator TodoManager::query( const OTodo& ev, int query ) { +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; } -OTodoAccess* TodoManager::todoDB() { +OPimTodoAccess* TodoManager::todoDB() { return m_db; } -void TodoManager::add( const OTodo& ev ) { +void TodoManager::add( const OPimTodo& ev ) { m_db->add( ev ); } void TodoManager::update( int, const SmallTodo& ) { } -void TodoManager::update( int, const OTodo& ev) { +void TodoManager::update( int, const OPimTodo& ev) { m_db->replace( ev ); } bool TodoManager::remove( int uid ) { return m_db->remove( uid ); } void TodoManager::removeAll() { m_db->clear(); } void TodoManager::removeCompleted() { m_db->removeAllCompleted(); } void TodoManager::save() { m_db->save(); } bool TodoManager::saveAll() { return m_db->save(); } void TodoManager::reload() { m_db->reload(); } QStringList TodoManager::categories() { m_cat.load(categoryFileName() ); return m_cat.labels( "Todo List"); } /* * we rely on load beeing called from populateCategories */ int TodoManager::catId( const QString& cats ) { return m_cat.id( "Todo List", cats ); } void TodoManager::remove( const QArray<int>& ids) { for (uint i=0; i < ids.size(); i++ ) remove( ids[i] ); } bool TodoManager::isLoaded()const { return (m_db == 0 ); } void TodoManager::load() { if (!m_db) { - m_db = new OTodoAccess(); + m_db = new OPimTodoAccess(); m_db->load(); } } diff --git a/core/pim/todo/todomanager.h b/core/pim/todo/todomanager.h index 8544277..865b47b 100644 --- a/core/pim/todo/todomanager.h +++ b/core/pim/todo/todomanager.h @@ -1,111 +1,113 @@ /* =. 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. */ #ifndef OPIE_TODO_MANAGER_H #define OPIE_TODO_MANAGER_H -#include <qarray.h> -#include <qobject.h> -#include <qstring.h> +#include <opie2/opimtodo.h> +#include <opie2/otodoaccess.h> #include <qpe/categories.h> -#include <opie/otodo.h> -#include <opie/otodoaccess.h> +#include <qarray.h> +#include <qobject.h> +#include <qstring.h> #include "smalltodo.h" +using Opie::OPimTodo; +using Opie::OPimTodoAccess; namespace Todo { class TodoManager : public QObject{ Q_OBJECT public: bool isLoaded()const; void load(); TodoManager(QObject* obj = 0); ~TodoManager(); QStringList categories()/*const*/; int catId(const QString&); - OTodo event(int uid ); + OPimTodo event(int uid ); void updateList(); /** returns the iterator sorted if set sorted*/ - OTodoAccess::List list()const; - OTodoAccess::List sorted( bool asc, int so, int f, int cat ); + OPimTodoAccess::List list()const; + OPimTodoAccess::List sorted( bool asc, int so, int f, int cat ); - OTodoAccess::List::Iterator overDue(); - OTodoAccess::List::Iterator fromTo( const QDate& start, + OPimTodoAccess::List::Iterator overDue(); + OPimTodoAccess::List::Iterator fromTo( const QDate& start, const QDate& end ); - OTodoAccess::List::Iterator query( const OTodo& ev, int query ); + OPimTodoAccess::List::Iterator query( const OPimTodo& ev, int query ); void setCategory( bool sort, int category = -1); void setShowOverDue( bool show ); void setSortOrder( int sortOrder ); void setSortASC( bool ); void sort(); - OTodoAccess* todoDB(); + OPimTodoAccess* todoDB(); bool saveAll(); signals: void update(); void updateCategories(); public slots: - void add( const OTodo& ); + void add( const OPimTodo& ); void update( int uid, const SmallTodo& ); - void update( int uid, const OTodo& ); + void update( int uid, const OPimTodo& ); bool remove( int uid ); void remove( const QArray<int>& ); /** * remove all completed */ void removeCompleted(); void removeAll(); void reload(); void save(); private: - OTodoAccess* m_db; - OTodoAccess::List m_list; - OTodoAccess::List::Iterator m_it; - OTodoAccess::List m_sorted; + OPimTodoAccess* m_db; + OPimTodoAccess::List m_list; + OPimTodoAccess::List::Iterator m_it; + OPimTodoAccess::List m_sorted; Categories m_cat; int m_ca; /* sort cat */ bool m_shCat; int m_sortOrder; bool m_asc; }; }; #endif diff --git a/core/pim/todo/todoshow.h b/core/pim/todo/todoshow.h index 2babe93..1eeadf8 100644 --- a/core/pim/todo/todoshow.h +++ b/core/pim/todo/todoshow.h @@ -1,60 +1,62 @@ /* =. 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. */ #ifndef TODO_TODO_SHOW_H #define TODO_TODO_SHOW_H #include <qstring.h> #include <qwidget.h> -#include <opie/otodo.h> +#include <opie2/opimtodo.h> + +using Opie::OPimTodo; namespace Todo { class MainWindow; /** * TodoShow is the baseclass of * of all TodoShows. * The first implementation is a QTextView * implementation showing the Todo as richtext */ class TodoShow { public: TodoShow( MainWindow* win); virtual ~TodoShow(); virtual QString type()const = 0; - virtual void slotShow( const OTodo& ev ) = 0; + virtual void slotShow( const OPimTodo& ev ) = 0; virtual QWidget* widget() = 0; protected: void escapeView(); void showNext(); void showPrev(); private: MainWindow *m_win; }; }; #endif diff --git a/core/pim/todo/todotemplatemanager.cpp b/core/pim/todo/todotemplatemanager.cpp index 5b83f76..eeac51b 100644 --- a/core/pim/todo/todotemplatemanager.cpp +++ b/core/pim/todo/todotemplatemanager.cpp @@ -1,81 +1,81 @@ +#include <opie2/otodoaccess.h> +#include <opie2/otodoaccessxml.h> + #include <qpe/config.h> #include <qpe/global.h> -#include <opie/otodoaccess.h> -#include <opie/otodoaccessxml.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"); - OTodoAccessXML *xml = new OTodoAccessXML( QString::fromLatin1("template"), + OPimTodoAccessXML *xml = new OPimTodoAccessXML( QString::fromLatin1("template"), m_path ); - OTodoAccess todoDB(xml ); + OPimTodoAccess todoDB(xml ); todoDB.load(); - OTodoAccess::List::Iterator it; - OTodoAccess::List list = todoDB.allRecords(); + OPimTodoAccess::List::Iterator it; + OPimTodoAccess::List list = todoDB.allRecords(); for ( it = list.begin(); it != list.end(); ++it ) { - OTodo ev = (*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!!!!"); Config conf("todolist_templates"); - OTodoAccessXML *res = new OTodoAccessXML( "template", + OPimTodoAccessXML *res = new OPimTodoAccessXML( "template", m_path ); - OTodoAccess db(res); + OPimTodoAccess db(res); db.load(); db.clear(); - QMap<QString, OTodo>::Iterator it; + QMap<QString, OPimTodo>::Iterator it; for ( it = m_templates.begin(); it != m_templates.end(); ++it ) { - OTodo ev = it.data(); + OPimTodo ev = it.data(); conf.setGroup( QString::number( ev.uid() ) ); qWarning("Name" + it.key() ); conf.writeEntry("Name", it.key() ); db.add( ev ); } db.save(); } void TemplateManager::addEvent( const QString& str, - const OTodo& ev) { + const OPimTodo& ev) { qWarning("AddEvent"+ str ); - OTodo todo = ev; + 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, OTodo>::ConstIterator it; + QMap<QString, OPimTodo>::ConstIterator it; for (it = m_templates.begin(); it != m_templates.end(); ++it ) { list << it.key(); } return list; } -OTodo TemplateManager::templateEvent( const QString& templateName ) { +OPimTodo TemplateManager::templateEvent( const QString& templateName ) { return m_templates[templateName]; } diff --git a/core/pim/todo/todotemplatemanager.h b/core/pim/todo/todotemplatemanager.h index 387ced1..ee8aaaf 100644 --- a/core/pim/todo/todotemplatemanager.h +++ b/core/pim/todo/todotemplatemanager.h @@ -1,32 +1,33 @@ #ifndef OPIE_TODO_TEMPLATE_H #define OPIE_TODO_TEMPLATE_H +#include <opie2/opimtodo.h> + #include <qstring.h> #include <qmap.h> -#include <opie/otodo.h> - +using namespace Opie; namespace Todo { class TemplateManager { public: TemplateManager(); ~TemplateManager(); void load(); void save(); QStringList templates()const; - OTodo templateEvent( const QString& templateName ); + OPimTodo templateEvent( const QString& templateName ); /* also replaces one */ - void addEvent( const QString&, const OTodo& ); + void addEvent( const QString&, const OPimTodo& ); void removeEvent( const QString& ); private: QString m_path; - QMap<QString, OTodo> m_templates; + QMap<QString, OPimTodo> m_templates; }; }; #endif diff --git a/core/pim/todo/todoview.cpp b/core/pim/todo/todoview.cpp index 31047cf..d99cf77 100644 --- a/core/pim/todo/todoview.cpp +++ b/core/pim/todo/todoview.cpp @@ -1,69 +1,69 @@ #include "mainwindow.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; } -OTodo TodoView::event(int uid ) { +OPimTodo TodoView::event(int uid ) { return m_main->event( uid ); } -OTodoAccess::List TodoView::list(){ +OPimTodoAccess::List TodoView::list(){ todoWindow()->updateList(); return todoWindow()->list(); } -OTodoAccess::List TodoView::sorted()const{ +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() ); } 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 ); m_asc = b; } void TodoView::update(int, const SmallTodo& ) { //m_main->slotUpate1( uid, to ); } -void TodoView::update(int , const OTodo& ev ) { +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 OTodo& ev ) { +void TodoView::complete( const OPimTodo& 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 e5ed66f..a5ea9f5 100644 --- a/core/pim/todo/todoview.h +++ b/core/pim/todo/todoview.h @@ -1,136 +1,138 @@ /* =. 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. */ #ifndef TODO_VIEW_H #define TODO_VIEW_H #include <qarray.h> #include <qstring.h> #include <qvaluelist.h> #include <qwidget.h> -#include <opie/otodoaccess.h> +#include <opie2/otodoaccess.h> #include "smalltodo.h" +using Opie::OPimTodo; +using Opie::OPimTodoAccess; namespace Todo { class MainWindow; /** * due to inheretince problems we need this base class */ struct ViewBase { public: 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; - virtual void replaceEvent( const OTodo& ) = 0; + virtual void addEvent( const OPimTodo& ) = 0; + virtual void replaceEvent( const OPimTodo& ) = 0; virtual void removeEvent( int uid ) = 0; virtual void setShowCompleted( bool ) = 0; virtual void setShowDeadline( bool ) = 0; virtual void setShowCategory( const QString& = QString::null ) = 0; virtual void clear() = 0; virtual void newDay() = 0; }; /** * A base class for all TodoView which are showing * a list of todos. * Either in a QTable, QListView or any other QWidget * derived class * Through the MainWindow( dispatcher ) one can access * the relevant informations * * It's not possible to have signal and slots from within * templates this way you've to register for a signal */ class TodoView : public ViewBase{ public: /** * c'tor */ TodoView( MainWindow* win ); /** *d'tor */ virtual ~TodoView(); protected: MainWindow* todoWindow(); - OTodo event(int uid ); - OTodoAccess::List list(); - OTodoAccess::List sorted()const; + OPimTodo event(int uid ); + OPimTodoAccess::List list(); + OPimTodoAccess::List sorted()const; void sort(); void sort(int sort ); void setSortOrder( int order ); void setAscending( bool ); /* * These things needs to be implemented * in a implementation */ void showTodo( int uid ); void edit( int uid ); void update(int uid, const SmallTodo& to ); - void update(int uid, const OTodo& ev); + void update(int uid, const OPimTodo& 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 ); + void complete( const OPimTodo& ev ); private: MainWindow *m_main; - OTodoAccess::List m_sort; + OPimTodoAccess::List m_sort; bool m_asc : 1; int m_sortOrder; }; }; #endif |