author | zecke <zecke> | 2002-11-30 11:20:47 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-11-30 11:20:47 (UTC) |
commit | fdda15344fdf7f71fd9e1e4db15ecc5e12224ddb (patch) (side-by-side diff) | |
tree | 32e68b5b483dd3ce8041542e7d95f0b6d8dbf644 | |
parent | bd692f7ebe04e23151cce39baf311b925ccf91b1 (diff) | |
download | opie-fdda15344fdf7f71fd9e1e4db15ecc5e12224ddb.zip opie-fdda15344fdf7f71fd9e1e4db15ecc5e12224ddb.tar.gz opie-fdda15344fdf7f71fd9e1e4db15ecc5e12224ddb.tar.bz2 |
Back from hospital with new power
This versions clean up m failure on templates with Qt... in todoview
Implements Recurrance( backends to not safe it yet )
OPimState and Maintainer mode in some ways
and much more
This one also implements the OPimMainWindow specs
and has a small Memu replacement to get the toolbar in one line
-rw-r--r-- | core/pim/todo/mainwindow.cpp | 213 | ||||
-rw-r--r-- | core/pim/todo/mainwindow.h | 24 | ||||
-rw-r--r-- | core/pim/todo/otaskeditor.cpp | 35 | ||||
-rw-r--r-- | core/pim/todo/otaskeditor.h | 5 | ||||
-rw-r--r-- | core/pim/todo/tableview.cpp | 27 | ||||
-rw-r--r-- | core/pim/todo/taskeditoradvanced.ui | 8 | ||||
-rw-r--r-- | core/pim/todo/taskeditoroverviewimpl.cpp | 55 | ||||
-rw-r--r-- | core/pim/todo/taskeditoroverviewimpl.h | 1 | ||||
-rw-r--r-- | core/pim/todo/todo.pro | 6 | ||||
-rw-r--r-- | core/pim/todo/todomanager.cpp | 7 | ||||
-rw-r--r-- | core/pim/todo/todomanager.h | 7 | ||||
-rw-r--r-- | core/pim/todo/todoview.cpp | 55 | ||||
-rw-r--r-- | core/pim/todo/todoview.h | 82 |
13 files changed, 310 insertions, 215 deletions
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp index 9b2423b..b2b3b8f 100644 --- a/core/pim/todo/mainwindow.cpp +++ b/core/pim/todo/mainwindow.cpp @@ -43,8 +43,9 @@ #include <qpe/ir.h> #include <qpe/resource.h> #include <qpe/qpemessagebox.h> +#include <opie/orecur.h> #include <opie/otodoaccessvcal.h> #include "quickeditimpl.h" #include "todotemplatemanager.h" @@ -58,9 +59,11 @@ using namespace Todo; MainWindow::MainWindow( QWidget* parent, - const char* name ) { + const char* name ) + : OPimMainWindow("Todolist") +{ m_syncing = false; m_counter = 0; m_tempManager = new TemplateManager(); @@ -176,15 +179,12 @@ void MainWindow::initActions() { /* initialize the view menu */ a = new QAction( QString::null, tr("Show only over due"), 0, this, 0, TRUE ); - a->addTo( m_view ); + a->addTo( m_options ); a->setOn( showOverDue() ); connect(a, SIGNAL(toggled(bool)), this, SLOT(slotShowDue(bool) ) ); - m_view->insertSeparator(); - - m_bar->insertItem( tr("View"), m_view ); /* templates */ m_edit->insertItem(tr("New from template"), m_template, -1, 0 ); @@ -219,9 +219,8 @@ void MainWindow::initUI() { /** QPopupMenu */ m_edit = new QPopupMenu( this ); m_options = new QPopupMenu( this ); - m_view = new QPopupMenu( this ); m_catMenu = new QPopupMenu( this ); m_template = new QPopupMenu( this ); m_catMenu->setCheckable( TRUE ); @@ -253,26 +252,28 @@ void MainWindow::initShow() { MainWindow::~MainWindow() { delete templateManager(); } void MainWindow::connectBase( ViewBase* base) { - base->connectShow( this, SLOT(slotShow(int) ) ); - base->connectEdit( this, SLOT(slotEdit(int) ) ); - base->connectUpdateSmall( this, - SLOT(slotUpate1(int, const Todo::SmallTodo&) )); - base->connectUpdateBig( this, - SLOT(slotUpate2(int, const OTodo& ) ) ); - base->connectUpdateView( this, SLOT(slotUpdate3( QWidget* ) ) ) ; - base->connectRemove(&m_todoMgr, - SLOT(remove(int)) ); -} -QPopupMenu* MainWindow::contextMenu( int uid ) { + // 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"); @@ -280,11 +281,8 @@ QPopupMenu* MainWindow::options() { } QPopupMenu* MainWindow::edit() { return m_edit; } -QPopupMenu* MainWindow::view() { - return m_view; -} QToolBar* MainWindow::toolbar() { return m_tool; } OTodoAccess::List MainWindow::list()const { @@ -412,30 +410,9 @@ void MainWindow::slotNewFromTemplate( int id ) { populateCategories(); } } void MainWindow::slotNew() { - if(m_syncing) { - QMessageBox::warning(this, tr("Todo"), - tr("Can not edit data, currently syncing")); - return; - } - - - OTodo todo = currentEditor()->newTodo( currentCatId(), - this ); - - if ( currentEditor()->accepted() ) { - //todo.assignUid(); - 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( ); + create(); } void MainWindow::slotDuplicate() { if(m_syncing) { QMessageBox::warning(this, tr("Todo"), @@ -473,9 +450,8 @@ void MainWindow::slotDeleteAll() { tr("Can not edit data, currently syncing")); return; } - //QString strName = table->text( table->currentRow(), 2 ).left( 30 ); if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), tr("all tasks?") ) ) return; @@ -493,10 +469,10 @@ void MainWindow::slotDeleteCompleted() { if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), tr("all completed tasks?") ) ) return; - // FIXME - //m_todoMgr.remove( currentView()->completed() ); + + m_todoMgr.removeCompleted(); currentView()->updateView( ); } void MainWindow::slotFind() { @@ -551,20 +527,9 @@ void MainWindow::setDocument( const QString& fi) { } static const char *beamfile = "/tmp/opie-todo.vcs"; void MainWindow::slotBeam() { - ::unlink( beamfile ); - OTodo todo = event( currentView()->current() ); - OTodoAccessVCal* cal = new OTodoAccessVCal(QString::fromLatin1(beamfile) ); - OTodoAccess acc( cal ); - acc.load(); - acc.add( todo ); - acc.save(); - Ir* ir = new Ir(this ); - connect(ir, SIGNAL(done(Ir*) ), - this, SLOT(beamDone(Ir*) ) ); - ir->send( beamfile, todo.summary(), "text/x-vCalendar" ); - + beam( currentView()->current() ); } void MainWindow::beamDone( Ir* ir) { delete ir; ::unlink( beamfile ); @@ -703,4 +668,138 @@ void MainWindow::slotQuickEntered() { } QuickEditBase* MainWindow::quickEditor() { return m_curQuick; } +void MainWindow::slotComplete( int uid ) { + slotComplete( event(uid) ); +} +void MainWindow::slotComplete( const OTodo& todo ) { + OTodo 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 + */ + if ( to.recurrence().doesRecur() && to.isCompleted() ) { + OTodo to2( to ); + + /* the spinned off one won't recur anymore */ + to.setRecurrence( ORecur() ); + + ORecur 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 ) ) { + 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 ); + to2.setStartDate( inval ); + 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, tr("Todo"), + tr("Can not edit data, currently syncing")); + return uid; + } + + + OTodo todo = currentEditor()->newTodo( currentCatId(), + this ); + + if ( currentEditor()->accepted() ) { + //todo.assignUid(); + uid = todo.uid(); + 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; + + return m_todoMgr.remove( uid ); +} +void MainWindow::beam( int uid, int ) { + ::unlink( beamfile ); + OTodo todo = event( uid ); + OTodoAccessVCal* cal = new OTodoAccessVCal(QString::fromLatin1(beamfile) ); + OTodoAccess acc( cal ); + acc.load(); + acc.add( todo ); + acc.save(); + Ir* ir = new Ir(this ); + connect(ir, SIGNAL(done(Ir*) ), + this, SLOT(beamDone(Ir*) ) ); + ir->send( beamfile, todo.summary(), "text/x-vCalendar" ); +} +void MainWindow::show( int uid ) { + slotShow( uid ); +} +void MainWindow::edit( int uid ) { + slotEdit( uid ); +} +void MainWindow::add( const OPimRecord& rec) { + if ( rec.rtti() != OTodo::rtti() ) return; + + const OTodo& todo = static_cast<const OTodo&>(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(); +} +/* todo does not have the QDataStream<< and >> operators implemented :( + * FIXME + */ +OPimRecord* MainWindow::record( int rtti, const QByteArray& ) { + return 0l; +} diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h index 270cbd1..14cfa82 100644 --- a/core/pim/todo/mainwindow.h +++ b/core/pim/todo/mainwindow.h @@ -29,12 +29,12 @@ #ifndef TODO_MAIN_WINDOW_H #define TODO_MAIN_WINDOW_H #include <qlist.h> -#include <qmainwindow.h> #include <opie/otodoaccess.h> #include <opie/otodo.h> +#include <opie/opimmainwindow.h> #include "smalltodo.h" #include "todoview.h" #include "quickedit.h" @@ -55,20 +55,20 @@ namespace Todo { class TodoShow; class TemplateEditor; struct QuickEditBase; - class MainWindow : public QMainWindow { + class MainWindow : public OPimMainWindow { Q_OBJECT + friend class TodoView; // avoid QObject here.... public: MainWindow( QWidget *parent = 0, const char* name = 0 ); ~MainWindow(); /** return a context menu for an OTodo */ - QPopupMenu* contextMenu(int uid ); + QPopupMenu* contextMenu(int uid, bool doesRecur = FALSE ); QPopupMenu* options(); QPopupMenu* edit(); - QPopupMenu* view(); QToolBar* toolbar(); void updateList(); @@ -135,9 +135,8 @@ private slots: QWidgetStack *m_stack; QPopupMenu* m_catMenu, *m_edit, *m_options, - *m_view, *m_template; /* box with two rows * top will be the quick edit * this will bite my ass once @@ -160,13 +159,15 @@ private slots: private slots: void slotShow(int); void slotEdit(int); -private slots: void slotUpdate3( QWidget* ); + void slotComplete( int uid ); + void slotComplete( const OTodo& ev ); void slotNewFromTemplate(int id ); void slotNew(); void slotDuplicate(); + void slotDelete(); void slotDeleteAll(); void slotDeleteCompleted(); @@ -184,8 +185,19 @@ private slots: void slotBeam(); void beamDone( Ir* ); void slotShowDetails(); void slotShowDue( bool ); + /* reimplementation from opimmainwindow */ + protected slots: + void flush(); + void reload(); + int create(); + bool remove( int uid ); + void beam(int uid, int transport = IrDa ); + void show( int uid ); + void edit( int uid ); + void add( const OPimRecord& ); + OPimRecord* record( int rtti, const QByteArray& ); }; }; #endif diff --git a/core/pim/todo/otaskeditor.cpp b/core/pim/todo/otaskeditor.cpp index 8b261de..eeb3c0c 100644 --- a/core/pim/todo/otaskeditor.cpp +++ b/core/pim/todo/otaskeditor.cpp @@ -1,13 +1,14 @@ #include <qdatetime.h> #include <qlayout.h> #include <qlabel.h> #include <qmultilineedit.h> +#include <qscrollview.h> #include <opie/orecurrancewidget.h> #include "taskeditoroverviewimpl.h" -#include "taskeditoradvanced.h" +#include "taskeditoradvancedimpl.h" #include "taskeditoralarms.h" #include "otaskeditor.h" @@ -39,34 +40,38 @@ OTodo OTaskEditor::todo()const{ qWarning("saving!"); OTodo to; to.setUid(m_uid ); m_overView->save( to ); - to.setDescription( m_line->text() ); + m_adv->save( to ); + to.setRecurrence( m_rec->recurrence() ); return to; } void OTaskEditor::load(const OTodo& to) { m_overView->load( to ); - m_line->setText( to.description() ); + m_adv->load( to ); + m_rec->setRecurrence( to.recurrence(), to.hasDueDate() ? to.dueDate() : QDate::currentDate() ); } void OTaskEditor::init() { - QVBoxLayout* lay = new QVBoxLayout(this); + QVBoxLayout* lay = new QVBoxLayout(this ); + QScrollView* view = new QScrollView( this ); + view->setResizePolicy( QScrollView::AutoOneFit ); + lay->addWidget( view ); + setCaption("Task Editor"); - m_tab = new OTabWidget(this); + QWidget* container = new QWidget( view->viewport() ); + view->addChild( container ); + QVBoxLayout* layo = new QVBoxLayout( container ); + m_tab = new OTabWidget(container ); + layo->addWidget( m_tab ); /* * Add the Widgets */ m_overView = new TaskEditorOverViewImpl(m_tab ); m_tab->addTab( m_overView, QString::null, tr("Overview") ); - m_adv = new TaskEditorAdvanced( m_tab ); - m_line = new QMultiLineEdit(m_adv ); - m_line->setWordWrap( QMultiLineEdit::WidgetWidth ); - QLabel* label = new QLabel(m_adv ); - label->setText( tr("Description") ); - ((QGridLayout*) m_adv->layout() )->addWidget( label,3, 0 ); - ((QGridLayout*) m_adv->layout())->addWidget( m_line,4,0 ); + m_adv = new TaskEditorAdvancedImpl( m_tab ); m_tab->addTab( m_adv, QString::null, tr("Advanced") ); m_alarm = new TaskEditorAlarms( m_tab ); m_tab->addTab( m_alarm, QString::null, tr("Alarms") ); @@ -80,12 +85,16 @@ void OTaskEditor::init() { m_rec = new ORecurranceWidget( true, QDate::currentDate(), this ); m_tab->addTab( m_rec, QString::null, tr("Recurrance") ); - lay->addWidget(m_tab ); /* signal and slots */ connect(m_overView, SIGNAL(recurranceEnabled(bool) ), m_rec, SLOT(setEnabled(bool) ) ); + /* connect due date changed to the recurrence tab */ + connect(m_overView, 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 bcbd543..b43abbf 100644 --- a/core/pim/todo/otaskeditor.h +++ b/core/pim/todo/otaskeditor.h @@ -6,9 +6,9 @@ #include <opie/otodo.h> #include <opie/otabwidget.h> class TaskEditorOverViewImpl; -class TaskEditorAdvanced; +class TaskEditorAdvancedImpl; class TaskEditorAlarms; class ORecurranceWidget; class QMultiLineEdit; class OTaskEditor : public QDialog { @@ -31,13 +31,12 @@ private: void init(); OTabWidget *m_tab; TaskEditorOverViewImpl* m_overView; - TaskEditorAdvanced *m_adv; + TaskEditorAdvancedImpl *m_adv; TaskEditorAlarms *m_alarm; TaskEditorAlarms* m_remind; ORecurranceWidget* m_rec; - QMultiLineEdit* m_line; int m_uid; }; diff --git a/core/pim/todo/tableview.cpp b/core/pim/todo/tableview.cpp index ded2dbd..0f683c9 100644 --- a/core/pim/todo/tableview.cpp +++ b/core/pim/todo/tableview.cpp @@ -34,8 +34,10 @@ #include <qpopupmenu.h> #include <qpe/config.h> +#include <opie/orecur.h> + #include "mainwindow.h" //#include "tableitems.h" #include "tableview.h" @@ -119,22 +121,23 @@ void TableView::newDay() { TableView::~TableView() { } void TableView::slotShowMenu() { - QPopupMenu *menu = todoWindow()->contextMenu( current() ); + 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() { int uid = sorted().uidAt(currentRow() ); - qWarning("uid %d", uid ); + return uid; } QString TableView::currentRepresentation() { - return text( currentRow(), 2); + OTodo to = sorted()[currentRow()]; + return to.summary().isEmpty() ? to.description().left(20) : to.summary() ; } /* show overdue */ void TableView::showOverDue( bool ) { clear(); @@ -144,9 +147,9 @@ void TableView::showOverDue( bool ) { void TableView::updateView( ) { qWarning("update view"); m_row = false; static int id; - id = startTimer(2000 ); + id = startTimer(4000 ); /* FIXME we want one page to be read! * * Calculate that screensize */ @@ -241,12 +244,9 @@ void TableView::slotClicked(int row, int col, int, if ( x >= ( w - BoxSize ) / 2 && x <= ( w - BoxSize ) / 2 + BoxSize && y >= ( h - BoxSize ) / 2 && y <= ( h - BoxSize ) / 2 + BoxSize ) { - OTodo todo = sorted()[row]; - todo.setCompleted( !todo.isCompleted() ); - TodoView::update( todo.uid(), todo ); - updateView(); + TodoView::complete(sorted()[row] ); } } break; @@ -368,9 +368,9 @@ void TableView::paintCell(QPainter* p, int row, int col, const QRect& cr, bool case 2: // description field { QString text = task.summary().isEmpty() ? - task.description() : + task.description().left(20) : task.summary(); p->drawText(2,2 + fm.ascent(), text); } break; @@ -461,9 +461,9 @@ void TableView::slotPriority() { * up and down. On odd or even we will currentRow()+-4 or +-9 * */ void TableView::timerEvent( QTimerEvent* ev ) { - qWarning("sorted %d", sorted().count() ); +// qWarning("sorted %d", sorted().count() ); if (sorted().count() == 0 ) return; int row = currentRow(); @@ -512,13 +512,10 @@ void TableView::contentsMouseReleaseEvent( QMouseEvent* e) { int colNew = columnAt(e->x() ); qWarning("colNew: %d colOld: %d", colNew, colOld ); if ( row == rowAt( e->y() ) && row != -1 && colOld != colNew ) { - OTodo todo = sorted()[row]; - todo.setCompleted( !todo.isCompleted() ); - TodoView::update( todo.uid(), todo ); - updateView(); - return; + TodoView::complete( sorted()[row] ); + return; } QTable::contentsMouseReleaseEvent( e ); } void TableView::contentsMouseMoveEvent( QMouseEvent* e ) { diff --git a/core/pim/todo/taskeditoradvanced.ui b/core/pim/todo/taskeditoradvanced.ui index 3ea1346..6160712 100644 --- a/core/pim/todo/taskeditoradvanced.ui +++ b/core/pim/todo/taskeditoradvanced.ui @@ -10,9 +10,9 @@ <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>236</width> + <width>232</width> <height>307</height> </rect> </property> <property stdset="1"> @@ -194,8 +194,14 @@ <class>QComboBox</class> <item> <property> <name>text</name> + <string>Nothing</string> + </property> + </item> + <item> + <property> + <name>text</name> <string>Responsible</string> </property> </item> <item> diff --git a/core/pim/todo/taskeditoroverviewimpl.cpp b/core/pim/todo/taskeditoroverviewimpl.cpp index 24b3386..aef3b1d 100644 --- a/core/pim/todo/taskeditoroverviewimpl.cpp +++ b/core/pim/todo/taskeditoroverviewimpl.cpp @@ -6,8 +6,10 @@ #include <qpe/datebookmonth.h> #include <qpe/categoryselect.h> #include <qpe/timestring.h> +#include <opie/orecur.h> + #include "taskeditoroverviewimpl.h" /* * we need to hack @@ -19,49 +21,84 @@ TaskEditorOverViewImpl::TaskEditorOverViewImpl( QWidget* parent, const char* nam } TaskEditorOverViewImpl::~TaskEditorOverViewImpl() { } void TaskEditorOverViewImpl::load( const OTodo& todo) { - /* + /* * now that we're 'preloaded' we * need to disable the buttons * holding the dat */ btnDue-> setEnabled( FALSE ); btnComp-> setEnabled( FALSE ); btnStart->setEnabled( FALSE ); - + /* + * get some basic dateinfos for now + */ QDate date = QDate::currentDate(); QString str = TimeString::longDateString( date ); - emit recurranceEnabled( FALSE ); - ckbStart->setChecked( FALSE ); - btnStart->setText( str ); + CheckBox7->setChecked( todo.recurrence().doesRecur() ); + emit recurranceEnabled( todo.recurrence().doesRecur() ); + - ckbComp->setChecked( FALSE ); - btnComp->setText( str ); + 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 ); + + ckbComp->setChecked( todo.hasCompletedDate() ); + btnComp->setEnabled( todo.hasCompletedDate() ); + if ( todo.hasCompletedDate() ) { + m_comp = todo.completedDate(); + btnComp->setText( TimeString::longDateString( m_comp ) ); + }else + btnComp->setText( str ); cmbProgress->setCurrentItem( todo.progress()/20 ); cmbSum->insertItem( todo.summary(), 0 ); cmbSum->setCurrentItem( 0 ); ckbDue->setChecked( todo.hasDueDate() ); btnDue->setText( TimeString::longDateString( todo.dueDate() ) ); btnDue->setEnabled( todo.hasDueDate() ); + m_due = todo.dueDate(); cmbPrio->setCurrentItem( todo.priority() -1 ); ckbCompleted->setChecked( todo.isCompleted() ); comboCategory->setCategories( todo.categories(), "Todo List", tr("Todo List") ); } void TaskEditorOverViewImpl::save( OTodo& to) { - qWarning("save it now"); + /* a invalid date */ + QDate inval; + /* save our info back */ + + /* due date */ if ( ckbDue->isChecked() ) { to.setDueDate( m_due ); to.setHasDueDate( true ); }else to.setHasDueDate( false ); + + /* start date */ + if ( ckbStart->isChecked() ) { + to.setStartDate( m_start ); + }else + to.setStartDate( inval ); + + /* comp date */ + if ( ckbComp->isChecked() ) { + qWarning("completed checked"); + to.setCompletedDate( m_comp ); + }else + to.setCompletedDate( inval ); + + if ( comboCategory->currentCategory() != -1 ) { QArray<int> arr = comboCategory->currentCategories(); to.setCategories( arr ); } @@ -135,13 +172,15 @@ void TaskEditorOverViewImpl::slotStartChanged(int y, int m, int d) { btnStart->setText( TimeString::longDateString( m_start ) ); } void TaskEditorOverViewImpl::slotDueChecked() { btnDue->setEnabled( ckbDue->isChecked() ); + emit dueDateChanged( m_due ); qWarning("slotDueChecked"); } void TaskEditorOverViewImpl::slotDueChanged(int y, int m, int d ) { m_due.setYMD(y, m, d ); btnDue->setText( TimeString::longDateString( m_due ) ); + emit dueDateChanged( m_due ); } void TaskEditorOverViewImpl::slotCompletedChecked() { btnComp->setEnabled( ckbComp->isChecked() ); qWarning("slotCompletedChecked"); diff --git a/core/pim/todo/taskeditoroverviewimpl.h b/core/pim/todo/taskeditoroverviewimpl.h index 4fab381..5ee985e 100644 --- a/core/pim/todo/taskeditoroverviewimpl.h +++ b/core/pim/todo/taskeditoroverviewimpl.h @@ -19,8 +19,9 @@ public: void load( const OTodo& ); void save( OTodo& ); signals: void recurranceEnabled( bool ); + void dueDateChanged( const QDate& date ); private: void init(); void popup(QPushButton*, QPopupMenu*); diff --git a/core/pim/todo/todo.pro b/core/pim/todo/todo.pro index 8f21416..40a5f28 100644 --- a/core/pim/todo/todo.pro +++ b/core/pim/todo/todo.pro @@ -17,9 +17,10 @@ HEADERS = smalltodo.h \ templatedialogimpl.h \ quickedit.h \ quickeditimpl.h \ otaskeditor.h \ - taskeditoroverviewimpl.h + taskeditoroverviewimpl.h \ + taskeditoradvancedimpl.h SOURCES = smalltodo.cpp \ todomanager.cpp \ mainwindow.cpp \ @@ -36,9 +37,10 @@ SOURCES = smalltodo.cpp \ templatedialogimpl.cpp \ quickeditimpl.cpp \ quickedit.cpp \ otaskeditor.cpp \ - taskeditoroverviewimpl.cpp + taskeditoroverviewimpl.cpp \ + taskeditoradvancedimpl.cpp INTERFACES = taskeditoradvanced.ui taskeditoralarms.ui taskeditoroverview.ui TARGET = todolist INCLUDEPATH += $(OPIEDIR)/include diff --git a/core/pim/todo/todomanager.cpp b/core/pim/todo/todomanager.cpp index 1f81539..b5b87de 100644 --- a/core/pim/todo/todomanager.cpp +++ b/core/pim/todo/todomanager.cpp @@ -84,14 +84,17 @@ void TodoManager::update( int, const SmallTodo& ) { } void TodoManager::update( int, const OTodo& ev) { m_db->replace( ev ); } -void TodoManager::remove( int uid ) { - m_db->remove( uid ); +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() { diff --git a/core/pim/todo/todomanager.h b/core/pim/todo/todomanager.h index b03b598..8544277 100644 --- a/core/pim/todo/todomanager.h +++ b/core/pim/todo/todomanager.h @@ -81,10 +81,15 @@ namespace Todo { public slots: void add( const OTodo& ); void update( int uid, const SmallTodo& ); void update( int uid, const OTodo& ); - void remove( int uid ); + bool remove( int uid ); void remove( const QArray<int>& ); + + /** + * remove all completed + */ + void removeCompleted(); void removeAll(); void reload(); void save(); diff --git a/core/pim/todo/todoview.cpp b/core/pim/todo/todoview.cpp index 4cf7d30..3e808e7 100644 --- a/core/pim/todo/todoview.cpp +++ b/core/pim/todo/todoview.cpp @@ -3,54 +3,26 @@ #include "todoview.h" using namespace Todo; + + + TodoView::TodoView( MainWindow* win ) : m_main( win ) { - hack = new InternQtHack; m_asc = false; m_sortOrder = -1; } TodoView::~TodoView() { - delete hack; }; - -void TodoView::connectShow(QObject* obj, - const char* slot ) { - QObject::connect( hack, SIGNAL(showTodo(int) ), - obj, slot ); -} -void TodoView::connectEdit( QObject* obj, - const char* slot ) { - QObject::connect( hack, SIGNAL(edit(int) ), - obj, slot ); -} -void TodoView::connectUpdateSmall( QObject* obj, - const char* slot ) { - QObject::connect( hack, SIGNAL(update(int, const Todo::SmallTodo& ) ), - obj, slot ); -} -void TodoView::connectUpdateBig( QObject* obj, - const char* slot ) { - QObject::connect( hack, SIGNAL(update(int, const OTodo& ) ), - obj, slot ); -} -void TodoView::connectUpdateView( QObject* obj, - const char* slot ) { - QObject::connect( hack, SIGNAL(update(QWidget*) ), - obj, slot ); -} -void TodoView::connectRemove( QObject* obj, - const char* slot ) { - QObject::connect( hack, SIGNAL(remove(int) ), - obj, slot ); -} MainWindow* TodoView::todoWindow() { return m_main; } -OTodo TodoView::event(int uid ) { return m_main->event( uid ); } +OTodo TodoView::event(int uid ) { + return m_main->event( uid ); +} OTodoAccess::List TodoView::list(){ todoWindow()->updateList(); return todoWindow()->list(); } @@ -76,4 +48,19 @@ void TodoView::update(int, const SmallTodo& ) { } void TodoView::update(int , const OTodo& 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 ) { + m_main->slotComplete( ev ); +} diff --git a/core/pim/todo/todoview.h b/core/pim/todo/todoview.h index e5c77f9..e73e808 100644 --- a/core/pim/todo/todoview.h +++ b/core/pim/todo/todoview.h @@ -39,51 +39,14 @@ #include "smalltodo.h" namespace Todo { - - /** - * According to tronical it's not possible - * to have Q_OBJECT in a template at all - * so this is a hack widget not meant - * to be public - */ - class InternQtHack : public QObject { - Q_OBJECT - public: - InternQtHack() : QObject() {}; - void emitShow(int uid) { emit showTodo(uid); } - void emitEdit(int uid) { emit edit(uid ); } - void emitUpdate( int uid, - const SmallTodo& to) { - emit update(uid, to ); - } - void emitUpdate( int uid, - const OTodo& ev ){ - emit update(uid, ev ); - } - void emitRemove( int uid ) { - emit remove( uid ); - } - void emitUpdate( QWidget* wid ) { - emit update( wid ); - } - signals: - void showTodo(int uid ); - void edit(int uid ); - void update( int uid, const Todo::SmallTodo& ); - void update( int uid, const OTodo& ); - /* sorry you need to cast */; - void update( QWidget* wid ); - void remove( int uid ); - - }; class MainWindow; /** * due to inheretince problems we need this base class */ - class ViewBase { + struct ViewBase { public: virtual QWidget* widget() = 0; virtual QString type()const = 0; virtual int current() = 0; @@ -101,18 +64,9 @@ namespace Todo { virtual void setShowCompleted( bool ) = 0; virtual void setShowDeadline( bool ) = 0; virtual void setShowCategory( const QString& = QString::null ) = 0; virtual void clear() = 0; -/* virtual QArray<int> completed() = 0; */ virtual void newDay() = 0; - - virtual void connectShow( QObject*, const char* ) = 0; - virtual void connectEdit( QObject*, const char* ) = 0; - virtual void connectUpdateSmall( QObject*, const char* ) = 0; - virtual void connectUpdateBig( QObject*, const char* ) = 0; - virtual void connectUpdateView( QObject*, const char*) = 0; - virtual void connectRemove( QObject*, const char* ) = 0; - }; /** * A base class for all TodoView which are showing @@ -137,23 +91,8 @@ namespace Todo { *d'tor */ virtual ~TodoView(); - /* connect to the show signal */ - void connectShow(QObject* obj, - const char* slot ); - - /* connect to edit */ - void connectEdit( QObject* obj, - const char* slot ); - void connectUpdateSmall( QObject* obj, - const char* slot ); - void connectUpdateBig( QObject* obj, - const char* slot ) ; - void connectUpdateView( QObject* obj, - const char* slot ); - void connectRemove( QObject* obj, - const char* slot ); protected: MainWindow* todoWindow(); OTodo event(int uid ); OTodoAccess::List list(); @@ -163,22 +102,19 @@ namespace Todo { void setSortOrder( int order ); void setAscending( bool ); /* - These things needs to be implemented - in a implementation - signals: - */ - protected: - void showTodo( int uid ) { hack->emitShow(uid); } - void edit( int uid ) { hack->emitEdit(uid); } + * 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 remove( int uid ) { - hack->emitRemove( uid ); - } + void remove( int uid ); + void complete( int uid ); + void complete( const OTodo& ev ); private: - InternQtHack* hack; MainWindow *m_main; OTodoAccess::List m_sort; bool m_asc : 1; int m_sortOrder; |