author | zecke <zecke> | 2003-05-12 13:21:59 (UTC) |
---|---|---|
committer | zecke <zecke> | 2003-05-12 13:21:59 (UTC) |
commit | 9a4c9544a59f8395f2ec5e7c99028570f8bd8bd1 (patch) (side-by-side diff) | |
tree | 8af13b984750f743b7f9f06bbf04b531b1a10ff2 /core/pim | |
parent | a4c8b8912c9e87a2fd76103193e6b4f91c2a2c5d (diff) | |
download | opie-9a4c9544a59f8395f2ec5e7c99028570f8bd8bd1.zip opie-9a4c9544a59f8395f2ec5e7c99028570f8bd8bd1.tar.gz opie-9a4c9544a59f8395f2ec5e7c99028570f8bd8bd1.tar.bz2 |
Hospital Hacking Session
make more translatable
fix up GUI for Opie1.0 in regards what is implemnted
implement setting and removing of Alarms!!!!
Show Alarms once they got fired...
-rw-r--r-- | core/pim/todo/mainwindow.cpp | 133 | ||||
-rw-r--r-- | core/pim/todo/mainwindow.h | 5 | ||||
-rw-r--r-- | core/pim/todo/otaskeditor.cpp | 13 | ||||
-rw-r--r-- | core/pim/todo/quickeditimpl.cpp | 16 | ||||
-rw-r--r-- | core/pim/todo/taskeditoralarms.cpp | 190 | ||||
-rw-r--r-- | core/pim/todo/taskeditoralarms.h | 24 | ||||
-rw-r--r-- | core/pim/todo/taskeditorstatus.cpp | 11 | ||||
-rw-r--r-- | core/pim/todo/templatedialog.cpp | 10 | ||||
-rw-r--r-- | core/pim/todo/templatedialogimpl.cpp | 10 | ||||
-rw-r--r-- | core/pim/todo/templateeditor.cpp | 5 | ||||
-rw-r--r-- | core/pim/todo/todomanager.cpp | 1 |
11 files changed, 370 insertions, 48 deletions
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp index c5cedc6..5119ae0 100644 --- a/core/pim/todo/mainwindow.cpp +++ b/core/pim/todo/mainwindow.cpp @@ -23,39 +23,44 @@ If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <unistd.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 "quickeditimpl.h" #include "todotemplatemanager.h" #include "templateeditor.h" #include "tableview.h" #include "textviewshow.h" #include "todoeditor.h" #include "mainwindow.h" @@ -292,39 +297,46 @@ QPopupMenu* MainWindow::edit() { return m_edit; } QToolBar* MainWindow::toolbar() { return m_tool; } OTodoAccess::List MainWindow::list()const { return m_todoMgr.list(); } OTodoAccess::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) { 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 ) { return m_todoMgr.event( uid ); } bool MainWindow::isSyncing()const { return m_syncing; } TemplateManager* MainWindow::templateManager() { return m_tempManager; } Editor* MainWindow::currentEditor() { @@ -441,24 +453,25 @@ void MainWindow::slotDelete() { if (!currentView()->current() ) return; if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), QWidget::tr("Can not edit data, currently syncing")); return; } QString strName = currentView()->currentRepresentation(); if (!QPEMessageBox::confirmDelete(this, QWidget::tr("Todo"), strName ) ) return; + handleAlarms( OTodo(), m_todoMgr.event( currentView()->current() ) ); m_todoMgr.remove( currentView()->current() ); currentView()->removeEvent( currentView()->current() ); raiseCurrentView(); } void MainWindow::slotDeleteAll() { if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), QWidget::tr("Can not edit data, currently syncing")); return; } @@ -632,31 +645,32 @@ void MainWindow::slotShow( int uid ) { qWarning("slotShow"); currentShow()->slotShow( event( uid ) ); m_stack->raiseWidget( currentShow()->widget() ); } void MainWindow::slotEdit( int uid ) { if (uid == 1 ) return; if(m_syncing) { QMessageBox::warning(this, QWidget::tr("Todo"), QWidget::tr("Can not edit data, currently syncing")); return; } - OTodo todo = m_todoMgr.event( uid ); + OTodo old_todo = m_todoMgr.event( uid ); - todo = currentEditor()->edit(this, todo ); + OTodo todo = currentEditor()->edit(this, old_todo ); /* if completed */ if ( currentEditor()->accepted() ) { qWarning("Replacing now" ); + handleAlarms( old_todo, todo ); m_todoMgr.update( todo.uid(), todo ); currentView()->replaceEvent( todo ); /* a Category might have changed */ populateCategories(); } raiseCurrentView(); } /* void MainWindow::slotUpdate1( int uid, const SmallTodo& ev) { m_todoMgr.update( uid, ev ); } @@ -757,41 +771,45 @@ int MainWindow::create() { QMessageBox::warning(this, QWidget::tr("Todo"), QWidget::tr("Can not edit data, currently syncing")); return uid; } OTodo todo = currentEditor()->newTodo( currentCatId(), this ); if ( currentEditor()->accepted() ) { //todo.assignUid(); uid = todo.uid(); + handleAlarms( OTodo(), 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 ) ); + return m_todoMgr.remove( uid ); } void MainWindow::beam( int uid) { ::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*) ), @@ -812,12 +830,123 @@ void MainWindow::add( const OPimRecord& 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() { 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) { + /* + * 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 ); + 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 %0</h1><br>").arg( TimeString::dateString( dt ) ); + text += todo.toRichText(); + view->setText( text ); + + dlg.showMaximized(); + bool needToStay = dlg.exec(); + + if (loud) + killAlarm(); + + if (needToStay) { + showMaximized(); + raise(); + QPEApplication::setKeepRunning(); + setActiveWindow(); + } + +} diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h index 434e969..02e2449 100644 --- a/core/pim/todo/mainwindow.h +++ b/core/pim/todo/mainwindow.h @@ -95,24 +95,26 @@ namespace Todo { 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 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; @@ -186,16 +188,17 @@ private slots: 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/otaskeditor.cpp b/core/pim/todo/otaskeditor.cpp index e26d5e4..84f854f 100644 --- a/core/pim/todo/otaskeditor.cpp +++ b/core/pim/todo/otaskeditor.cpp @@ -33,57 +33,60 @@ void OTaskEditor::init( int cur ) { } void OTaskEditor::init( const OTodo& to ) { load( to ); m_uid = to.uid(); } OTodo OTaskEditor::todo()const{ qWarning("saving!"); OTodo to; to.setUid(m_uid ); 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) { m_overView->load( to ); m_stat->load( to ); m_rec->setRecurrence( to.recurrence(), to.hasDueDate() ? to.dueDate() : QDate::currentDate() ); + m_alarm->setEnabled( !to.hasRecurrence() ); + m_alarm->load( to ); } void OTaskEditor::init() { setCaption("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") ); +// 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") ); +// 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_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& ) ) ); diff --git a/core/pim/todo/quickeditimpl.cpp b/core/pim/todo/quickeditimpl.cpp index 91d3131..f4c7c47 100644 --- a/core/pim/todo/quickeditimpl.cpp +++ b/core/pim/todo/quickeditimpl.cpp @@ -16,44 +16,44 @@ QuickEditImpl::QuickEditImpl( QWidget* parent, bool visible ) // 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, 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." ) ); + 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, 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." ) ); + 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." ) ); - QAction *a = new QAction( tr( "More" ), Resource::loadPixmap( "todo/more" ), QString::null, 0, this, 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( 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." ) ); + 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." ) ); - a = new QAction( tr( "Enter" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); + 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( 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->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( tr( "Cancel" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); + 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( 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." ) ); + 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() { } diff --git a/core/pim/todo/taskeditoralarms.cpp b/core/pim/todo/taskeditoralarms.cpp index 3cb5576..bff3338 100644 --- a/core/pim/todo/taskeditoralarms.cpp +++ b/core/pim/todo/taskeditoralarms.cpp @@ -19,58 +19,220 @@ : = ...= . :.=- -. .:....=;==+<; 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 <qpe/datebookmonth.h> #include <qpe/resource.h> +#include <qpe/timestring.h> +#include <qdatetime.h> #include <qlistview.h> #include <qpushbutton.h> +#include <qpopupmenu.h> #include <qlayout.h> #include <qwhatsthis.h> -TaskEditorAlarms::TaskEditorAlarms( QWidget* parent, const char* name, WFlags fl ) + +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 ) { - QGridLayout *layout = new QGridLayout( this, 2, 3, 4, 4 ); + 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() ) ); + 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() ) ); + 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() ) ); + connect( btn, SIGNAL( clicked() ), this, SLOT( slotDelete() ) ); layout->addWidget( btn, 1, 2 ); } -TaskEditorAlarms::~TaskEditorAlarms() -{ +TaskEditorAlarms::~TaskEditorAlarms(){ } -void TaskEditorAlarms::slotNew() -{ +void TaskEditorAlarms::slotNew(){ + (void)new AlarmItem(lstAlarms, OPimAlarm(0, QDateTime::currentDateTime() ) ); } -void TaskEditorAlarms::slotEdit() -{ +void TaskEditorAlarms::slotEdit(){ } -void TaskEditorAlarms::slotDelete() -{ +void TaskEditorAlarms::slotDelete(){ + QListViewItem* item = lstAlarms->currentItem(); + if (!item) return; + + lstAlarms->takeItem( item ); delete item; + + +} + +void TaskEditorAlarms::load( const OTodo& 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 ) { + 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 f77ded5..0aa52cc 100644 --- a/core/pim/todo/taskeditoralarms.h +++ b/core/pim/todo/taskeditoralarms.h @@ -1,15 +1,15 @@ /* =. This file is part of the OPIE Project - .=l. Copyright (c) 2002 <> + .=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 @@ -23,30 +23,50 @@ 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 <qwidget.h> class QListView; +class QListViewItem; +class OTodo; +class AlarmItem; +class DateBookMonth; class TaskEditorAlarms : public QWidget { Q_OBJECT public: - TaskEditorAlarms( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); + 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& ); +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/taskeditorstatus.cpp b/core/pim/todo/taskeditorstatus.cpp index 4331877..0ab4223 100644 --- a/core/pim/todo/taskeditorstatus.cpp +++ b/core/pim/todo/taskeditorstatus.cpp @@ -135,47 +135,49 @@ TaskEditorStatus::TaskEditorStatus( QWidget* parent, const char* name, WFlags f 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 ); +// 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 ); +// 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 ) { QDate date = QDate::currentDate(); QString str = TimeString::longDateString( date ); // Status @@ -207,29 +209,30 @@ void TaskEditorStatus::load( const OTodo &todo ) // 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 ) { QDate inval; // Status todo.setState( OPimState( cmbStatus->currentItem() ) ); // Progress todo.setProgress( cmbProgress->currentItem() * 20 ); @@ -251,29 +254,31 @@ void TaskEditorStatus::save( OTodo &todo ) 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() ); } diff --git a/core/pim/todo/templatedialog.cpp b/core/pim/todo/templatedialog.cpp index c94f69c..8dfbd0b 100644 --- a/core/pim/todo/templatedialog.cpp +++ b/core/pim/todo/templatedialog.cpp @@ -1,39 +1,41 @@ #include <qpushbutton.h> #include <qhbox.h> #include <qlayout.h> #include <qlistview.h> #include <qlineedit.h> #include "templatedialog.h" using namespace Todo; +/* TRANSLATOR Todo::TemplateDialog */ + TemplateDialog::TemplateDialog( QWidget* widget ) : QDialog( widget, "TemplateDialog", TRUE ) { - setCaption( tr("Template Editor") ); + setCaption( QWidget::tr("Template Editor") ); m_main = new QVBoxLayout(this ); m_list = new QListView( this ); m_main->addWidget( m_list, 100 ); m_lne = new QLineEdit( this ); m_main->addWidget( m_lne ); m_btnBar = new QHBox( this ); - m_add = new QPushButton( tr("Add"), m_btnBar ); - m_edit = new QPushButton( tr("Edit"), m_btnBar ); - m_rem = new QPushButton( tr("Remove"), m_btnBar ); + m_add = new QPushButton( QWidget::tr("Add"), m_btnBar ); + m_edit = new QPushButton( QWidget::tr("Edit"), m_btnBar ); + m_rem = new QPushButton( QWidget::tr("Remove"), m_btnBar ); m_main->addWidget( m_btnBar ); connect(m_add, SIGNAL(clicked() ), this, SLOT(slotAdd() ) ); connect(m_edit, SIGNAL(clicked() ), this, SLOT(slotEdit() ) ); connect(m_rem, SIGNAL(clicked() ), this, SLOT(slotRemove() ) ); connect(m_lne, SIGNAL(returnPressed() ), this, SLOT(slotReturn() ) ); } diff --git a/core/pim/todo/templatedialogimpl.cpp b/core/pim/todo/templatedialogimpl.cpp index 77c5363..fed92f0 100644 --- a/core/pim/todo/templatedialogimpl.cpp +++ b/core/pim/todo/templatedialogimpl.cpp @@ -1,23 +1,25 @@ #include <qlistview.h> #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& ); ~TemplateListItem(); OTodo event()const; QString text()const; void setText(const QString& str ); void setEvent( const OTodo& ); @@ -52,68 +54,66 @@ namespace { 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( tr("Name") ); + listView()->addColumn( QWidget::tr("Name") ); connect( listView(), SIGNAL(clicked(QListViewItem*) ), this, SLOT(slotClicked(QListViewItem*) ) ); } TemplateDialogImpl::~TemplateDialogImpl() { } void TemplateDialogImpl::slotAdd() { - QString str = tr("New Template %1").arg( listView()->childCount() ); + QString str = QWidget::tr("New Template %1").arg( listView()->childCount() ); OTodo ev; m_man->addEvent(str, ev); new TemplateListItem( listView(), str, ev ); } void TemplateDialogImpl::slotRemove() { TemplateListItem* item = (TemplateListItem*) listView()->currentItem(); listView()->takeItem( item ); m_man->removeEvent( item->text() ); delete item; } void TemplateDialogImpl::slotEdit() { TemplateListItem* item = (TemplateListItem*)listView()->currentItem(); OTodo ev = m_win->currentEditor()->edit( m_win, item->event() ); if ( m_win->currentEditor()->accepted() ) { - qWarning("accepted"); item->setEvent( ev ); - qWarning("Priority %d", ev.priority() ); m_man->removeEvent( item->text() ); m_man->addEvent( item->text(), ev ); } } /* * we need to update * the text */ void TemplateDialogImpl::slotReturn() { TemplateListItem* tbl = (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 = (TemplateListItem*)item; + TemplateListItem* tbl = static_cast<TemplateListItem*>(item); edit()->setText( tbl->text() ); } diff --git a/core/pim/todo/templateeditor.cpp b/core/pim/todo/templateeditor.cpp index 3930428..ca02173 100644 --- a/core/pim/todo/templateeditor.cpp +++ b/core/pim/todo/templateeditor.cpp @@ -20,20 +20,19 @@ TemplateEditor::~TemplateEditor() { } /* ok we add us to the Menubar */ void TemplateEditor::init() { QAction* a = new QAction( QString::null, QWidget::tr("Configure Templates"), 0, this, 0, FALSE ); connect(a, SIGNAL(activated() ), this, SLOT(setUp() ) ); a->addTo( m_main->options() ); } void TemplateEditor::setUp() { - qWarning("set up"); TemplateDialogImpl dlg(m_main, m_man ); int ret= dlg.exec(); - if (QDialog::Accepted != ret ) { + if (QDialog::Accepted != ret ) m_man->load(); - }else + else m_main->populateTemplates(); } diff --git a/core/pim/todo/todomanager.cpp b/core/pim/todo/todomanager.cpp index b5b87de..df2e711 100644 --- a/core/pim/todo/todomanager.cpp +++ b/core/pim/todo/todomanager.cpp @@ -113,17 +113,16 @@ QStringList TodoManager::categories() { 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) { - qWarning("loading!"); m_db = new OTodoAccess(); m_db->load(); } } |