author | zecke <zecke> | 2002-04-14 15:14:03 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-04-14 15:14:03 (UTC) |
commit | a0fe593db4e700989cc19e28b67a58f87823afeb (patch) (side-by-side diff) | |
tree | 1a369409be81aa0feb15899b56adda6ec12b2591 | |
parent | 16dd1d47d51e6307be8d89d36571115cb7c8788c (diff) | |
download | opie-a0fe593db4e700989cc19e28b67a58f87823afeb.zip opie-a0fe593db4e700989cc19e28b67a58f87823afeb.tar.gz opie-a0fe593db4e700989cc19e28b67a58f87823afeb.tar.bz2 |
-menu restructure ( closer to the Zaurus)
-first Part of restoring journal I need to rewrite the whole crap later
qt journaled on a row basis which doesn't work anymore cause of
flexible sorting
-something I forgot ;)
-rw-r--r-- | core/pim/todo/mainwindow.cpp | 106 | ||||
-rw-r--r-- | core/pim/todo/mainwindow.h | 14 | ||||
-rw-r--r-- | core/pim/todo/todotable.cpp | 148 | ||||
-rw-r--r-- | core/pim/todo/todotable.h | 7 |
4 files changed, 238 insertions, 37 deletions
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp index b5cace9..883d78c 100644 --- a/core/pim/todo/mainwindow.cpp +++ b/core/pim/todo/mainwindow.cpp @@ -126,2 +126,4 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) : QPopupMenu *edit = new QPopupMenu( this ); + QPopupMenu *options = new QPopupMenu(this ); + contextMenu = new QPopupMenu( this ); @@ -137,3 +139,3 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) : - a = new QAction( tr( "Edit" ), Resource::loadIconSet( "edit" ), + a = new QAction( tr( "Edit Task" ), Resource::loadIconSet( "edit" ), QString::null, 0, this, 0 ); @@ -146,4 +148,5 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) : editAction = a; + edit->insertSeparator(); - a = new QAction( tr( "Delete" ), Resource::loadIconSet( "trash" ), + a = new QAction( tr( "Delete..." ), Resource::loadIconSet( "trash" ), QString::null, 0, this, 0 ); @@ -157,2 +160,22 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) : + // delete All in category is missing.... + // set All Done + // set All Done in category + + a = new QAction( QString::null, tr( "Delete all..."), 0, this, 0 ); + connect(a, SIGNAL( activated() ), + this, SLOT( slotDeleteAll() ) ); + a->addTo(edit ); + a->setEnabled( FALSE ); + deleteAllAction = a; + + edit->insertSeparator(); + a = new QAction( QString::null, tr("Duplicate" ), 0, this, 0 ); + connect(a, SIGNAL( activated() ), + this, SLOT( slotDuplicate() ) ); + a->addTo(edit ); + a->setEnabled( FALSE ); + duplicateAction = a; + + edit->insertSeparator(); if ( Ir::supported() ) { @@ -171,3 +194,5 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) : a->addTo( bar ); - a->addTo( edit ); + a->addTo( options ); + options->insertSeparator(); + if ( table->numRows() ) @@ -188,5 +213,20 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) : - mb->insertItem( tr( "Data" ), edit ); - mb->insertItem( tr( "View" ), catMenu ); + + completedAction->addTo( options ); + completedAction->setOn( table->showCompleted() ); + showdeadlineAction->addTo( options ); + showdeadlineAction->setOn( table->showDeadline() ); + options->insertSeparator( ); + QList<QWidget> list; + list.append(table ); + OFontMenu *menu = new OFontMenu(this, "menu",list ); + menu->forceSize( table->horizontalHeader(), 10 ); + //catMenu->insertItem(tr("Fonts"), menu ); + list.clear(); + options->insertItem( tr("Fonts"), menu ); + + mb->insertItem( tr( "Data" ), edit ); + mb->insertItem( tr( "Category" ), catMenu ); + mb->insertItem( tr( "Options"), options ); resize( 200, 300 ); @@ -281,2 +321,26 @@ void TodoWindow::slotDelete() } +void TodoWindow::slotDeleteAll() +{ + if(syncing) { + QMessageBox::warning(this, tr("Todo"), + tr("Can not edit data, currently syncing")); + return; + } + + //QString strName = table->text( table->currentRow(), 2 ).left( 30 ); + + if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), tr("Should I delete all tasks?") ) ) + return; + + + + table->setPaintingEnabled( false ); + table->removeAllEntries(); + table->setPaintingEnabled( true ); + + if ( table->numRows() == 0 ) { + currentEntryChanged( -1, 0 ); + findAction->setEnabled( FALSE ); + } +} @@ -309,3 +373,15 @@ void TodoWindow::slotEdit() } - +void TodoWindow::slotDuplicate() +{ + if(syncing) { + QMessageBox::warning(this, tr("Todo"), + tr("Can not edit data, currently syncing")); + return; + } + ToDoEvent ev = table->currentEntry(); + ToDoEvent ev2 = ToDoEvent( ev ); + table->setPaintingEnabled( false ); + table->addEntry( ev2 ); + table->setPaintingEnabled( true ); +} void TodoWindow::slotShowPopup( const QPoint &p ) @@ -329,2 +405,4 @@ void TodoWindow::currentEntryChanged( int r, int ) deleteAction->setEnabled( TRUE ); + duplicateAction->setEnabled( TRUE ); + deleteAllAction->setEnabled( TRUE ); } else { @@ -332,2 +410,4 @@ void TodoWindow::currentEntryChanged( int r, int ) deleteAction->setEnabled( FALSE ); + duplicateAction->setEnabled( FALSE ); + deleteAllAction->setEnabled( FALSE ); } @@ -360,14 +440,2 @@ void TodoWindow::populateCategories() catMenu->clear(); - - QList<QWidget> list; - list.append(table ); - OFontMenu *menu = new OFontMenu(this, "menu",list ); - menu->forceSize( table->horizontalHeader(), 10 ); - catMenu->insertItem(tr("Fonts"), menu ); - - completedAction->addTo( catMenu ); - completedAction->setOn( table->showCompleted() ); - showdeadlineAction->addTo( catMenu ); - showdeadlineAction->setOn( table->showDeadline() ); - catMenu->insertSeparator(); int id, rememberId; @@ -375,3 +443,3 @@ void TodoWindow::populateCategories() catMenu->insertItem( tr( "All Categories" ), id++ ); -// catMenu->insertSeparator(); + catMenu->insertSeparator(); QStringList categories = table->categories(); diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h index 9be7c66..b9172e1 100644 --- a/core/pim/todo/mainwindow.h +++ b/core/pim/todo/mainwindow.h @@ -60,3 +60,5 @@ protected slots: void beamDone( Ir * ); - + void slotDeleteAll(); + void slotDuplicate(); + protected: @@ -70,6 +72,8 @@ private: QAction *editAction, - *deleteAction, - *findAction, - * completedAction, - *showdeadlineAction ; + *deleteAction, + *findAction, + *completedAction, + *showdeadlineAction, + *deleteAllAction, + *duplicateAction; QPopupMenu *contextMenu, *catMenu; diff --git a/core/pim/todo/todotable.cpp b/core/pim/todo/todotable.cpp index 2acd03c..401d2c8 100644 --- a/core/pim/todo/todotable.cpp +++ b/core/pim/todo/todotable.cpp @@ -24,2 +24,4 @@ #include <opie/tododb.h> +#include <opie/xmltree.h> + #include <qpe/categoryselect.h> @@ -34,2 +36,3 @@ #include <qdatetime.h> +#include <qtextstream.h> @@ -42,9 +45,10 @@ #include <stdio.h> +#include <iostream> +namespace { - -static bool taskCompare( const ToDoEvent &task, const QRegExp &r, int category ); - -static QString journalFileName(); - + static bool taskCompare( const ToDoEvent &task, const QRegExp &r, int category ); + static QString journalFileName(); + static ToDoEvent xmlToEvent( XMLElement *ev ); +} CheckItem::CheckItem( QTable *t, const QString &key ) @@ -411,3 +415,3 @@ void TodoTable::load( const QString &fn ) if ( QFile::exists(journalFileName()) ) { - loadFile( journalFileName(), true ); + applyJournal( ); save( fn ); @@ -420,3 +424,2 @@ void TodoTable::load( const QString &fn ) } - void TodoTable::updateVisible() @@ -448,3 +451,3 @@ void TodoTable::updateVisible() } else { - // do some comparing, we have to reverse our idea here... which idea - zecke + // do some comparing, we have to reverse our idea here... which idea? - zecke if ( !hide ) { @@ -501,2 +504,3 @@ void TodoTable::clear() ToDoEvent *todo = *it; + updateJournal( todo, ACTION_REMOVE, 0 ); delete todo; @@ -535,3 +539,3 @@ void TodoTable::slotCheckPriority(int row, int col ) -void TodoTable::updateJournal( const ToDoEvent &/*todo*/, journal_action action, int row ) +void TodoTable::updateJournal( const ToDoEvent &todo, journal_action action, int row ) { @@ -545,3 +549,20 @@ void TodoTable::updateJournal( const ToDoEvent &/*todo*/, journal_action action, buf += " Action=\"" + QString::number( int(action) ) + "\""; - buf += " Row=\"" + QString::number( row ) + "\""; // better write the id + buf += " Uid=\"" + QString::number( todo.uid() ) + "\""; // better write the id + buf += " Completed=\""+ QString::number((int)todo.isCompleted() ) + "\""; + buf += " HasDate=\""+ QString::number((int)todo.hasDate() ) +"\""; + buf += " Priority=\"" + QString::number( todo.priority() ) + "\""; + QArray<int> arrat = todo.categories(); + QString attr; + for(uint i=0; i < arrat.count(); i++ ){ + attr.append(QString::number(arrat[i])+";" ); + } + if(!attr.isEmpty() ) // remove the last ; + attr.remove(attr.length()-1, 1 ); + buf += " Categories=\"" + attr + "\""; + buf += " Description=\"" + todo.description() + "\""; + if(todo.hasDate() ) { + buf += " DateYear=\""+QString::number( todo.date().year() ) + "\""; + buf += " DateMonth=\"" + QString::number( todo.date().month() ) + "\""; + buf += " DateDay=\"" + QString::number( todo.date().day() ) + "\""; + } buf += "/>\n"; @@ -717,3 +738,51 @@ int TodoTable::showCategoryId() const } - +void TodoTable::applyJournal() +{ + // we need to hack + QFile file( journalFileName() ); + if( file.open(IO_ReadOnly ) ) { + QByteArray ar = file.readAll(); + file.close(); + QFile file2( journalFileName() + "_new" ); + if( file2.open(IO_WriteOnly ) ){ + QTextStream str(&file2 ); + str << QString::fromLatin1("<Tasks>") << endl; + str << ar.data(); + str << QString::fromLatin1("</Tasks>") << endl; + file2.close(); + } + XMLElement *root = XMLElement::load(journalFileName()+ "_new"); + XMLElement *el = root->firstChild(); + el = el->firstChild(); + while( el ){ + qWarning("journal: %s %s", el->attribute("Uid" ).latin1(), el->tagName().latin1() ); + doApply( el ); + el = el->nextChild(); + } + QFile::remove(journalFileName()+ "_new" ); + } +} +// check Action and decide +void TodoTable::doApply(XMLElement *el ) +{ + QString dummy; + bool ok; + int action; + dummy = el->attribute("Action" ); + action = dummy.toInt(&ok ); + ToDoEvent ev = xmlToEvent( el ); + if( ok ){ + switch( action ){ + case ACTION_ADD: + addEntry( ev ); + break; + case ACTION_REMOVE:{ // find an entry with the same uid and remove it then + break; + } + case ACTION_REPLACE: + break; + } + } +} +namespace { static bool taskCompare( const ToDoEvent &task, const QRegExp &r, int category ) @@ -743,6 +812,60 @@ static QString journalFileName() str = getenv( "HOME" ); - str += "/.todojournal"; + str += "/.opie_todojournal"; return str; } +static ToDoEvent xmlToEvent( XMLElement *element ) +{ + QString dummy; + ToDoEvent event; + bool ok; + int dumInt; + // completed + dummy = element->attribute("Completed" ); + dumInt = dummy.toInt(&ok ); + if(ok ) event.setCompleted( dumInt == 0 ? false : true ); + // hasDate + dummy = element->attribute("HasDate" ); + dumInt = dummy.toInt(&ok ); + if(ok ) event.setHasDate( dumInt == 0 ? false: true ); + // set the date + bool hasDa = dumInt; + if ( hasDa ) { //parse the date + int year, day, month = 0; + year = day = month; + // year + dummy = element->attribute("DateYear" ); + dumInt = dummy.toInt(&ok ); + if( ok ) year = dumInt; + // month + dummy = element->attribute("DateMonth" ); + dumInt = dummy.toInt(&ok ); + if(ok ) month = dumInt; + dummy = element->attribute("DateDay" ); + dumInt = dummy.toInt(&ok ); + if(ok ) day = dumInt; + // set the date + QDate date( year, month, day ); + event.setDate( date); + } + dummy = element->attribute("Priority" ); + dumInt = dummy.toInt(&ok ); + if(!ok ) dumInt = ToDoEvent::NORMAL; + event.setPriority( dumInt ); + //description + dummy = element->attribute("Description" ); + event.setDescription( dummy ); + // category + dummy = element->attribute("Categories" ); + QStringList ids = QStringList::split(";", dummy ); + event.setCategories( ids ); + + //uid + dummy = element->attribute("Uid" ); + dumInt = dummy.toInt(&ok ); + if(ok ) event.setUid( dumInt ); + + return event; +} +} // int TodoTable::rowHeight( int ) const @@ -761 +884,2 @@ static QString journalFileName() // } + diff --git a/core/pim/todo/todotable.h b/core/pim/todo/todotable.h index 32df514..6917e04 100644 --- a/core/pim/todo/todotable.h +++ b/core/pim/todo/todotable.h @@ -94,4 +94,5 @@ class DueTextItem : public QTableItem -enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE }; +enum journal_action { ACTION_ADD=0, ACTION_REMOVE, ACTION_REPLACE }; +class XMLElement; class TodoTable : public QTable @@ -122,4 +123,7 @@ public: void load( const QString &fn ); + void applyJournal( ); void clear(); void removeCurrentEntry(); + void removeAllEntries() { clear(); }; + //void removeAllEntriesInCategory(const QString &category ); @@ -155,2 +159,3 @@ private: void loadFile( const QString &strFile, bool fromJournal = false ); + void doApply(XMLElement *el ); |