summaryrefslogtreecommitdiff
authorzecke <zecke>2002-04-23 12:45:20 (UTC)
committer zecke <zecke>2002-04-23 12:45:20 (UTC)
commite25c5384f3f3025be64ed26d244c59afc5862711 (patch) (side-by-side diff)
tree603f32b0550ecda9cbe95a93807a2a89b32cabcd
parent367304a610dd618ad45ddce8256ba4d7d8ded442 (diff)
downloadopie-e25c5384f3f3025be64ed26d244c59afc5862711.zip
opie-e25c5384f3f3025be64ed26d244c59afc5862711.tar.gz
opie-e25c5384f3f3025be64ed26d244c59afc5862711.tar.bz2
Patch from Stefan Eilers for overview
merged by hand
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/TODO3
-rw-r--r--core/pim/todo/mainwindow.cpp68
-rw-r--r--core/pim/todo/mainwindow.h16
-rw-r--r--core/pim/todo/opie-todo.control2
-rw-r--r--core/pim/todo/todo.pro6
-rw-r--r--core/pim/todo/todolabel.cc58
-rw-r--r--core/pim/todo/todolabel.h51
-rw-r--r--core/pim/todo/todotable.cpp24
-rw-r--r--core/pim/todo/todotable.h2
9 files changed, 202 insertions, 28 deletions
diff --git a/core/pim/todo/TODO b/core/pim/todo/TODO
index 7601dd2..b00450c 100644
--- a/core/pim/todo/TODO
+++ b/core/pim/todo/TODO
@@ -1,4 +1 @@
--fix the journal (wip )
--fix day wrapping update all DueDateItems
-when checking the C. box update the deadline
--TodoLabel : public TextView
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp
index fc17c5f..d3f4cb4 100644
--- a/core/pim/todo/mainwindow.cpp
+++ b/core/pim/todo/mainwindow.cpp
@@ -1,12 +1,12 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
- Copyright (C) 2002 zecke
- Copyright (C) 2002 Stefan Eilers
+** Copyright (C) 2002 zecke
+** Copyright (C) 2002 Stefan Eilers (se, eilers.stefan@epost.de)
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
@@ -20,16 +20,17 @@
**
**********************************************************************/
#define QTOPIA_INTERNAL_FD
#include "mainwindow.h"
#include "todoentryimpl.h"
#include "todotable.h"
+#include "todolabel.h"
#include <opie/tododb.h>
#include <opie/todovcalresource.h>
#include <opie/ofontmenu.h>
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <qpe/finddialog.h>
@@ -43,16 +44,17 @@
#include <qaction.h>
#include <qarray.h>
#include <qdatastream.h>
#include <qdatetime.h>
#include <qfile.h>
#include <qmessagebox.h>
#include <qpopupmenu.h>
+#include <qwidgetstack.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
@@ -66,17 +68,18 @@ static QString categoriesXMLFilename()
return Global::applicationFileName("todolist","categories.xml");
}
TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) :
QMainWindow( parent, name, f ), syncing(FALSE)
{
// QTime t;
// t.start();
-
+ mView = 0l;
+ mStack = new QWidgetStack(this, "main stack");
setCaption( tr("Todo") );
QString str;
table = new TodoTable( this );
table->setColumnWidth( 2, 10 );
table->setPaintingEnabled( FALSE );
table->setUpdatesEnabled( FALSE );
table->viewport()->setUpdatesEnabled( FALSE );
@@ -96,17 +99,19 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) :
str = categoriesXMLFilename();
if ( str.isNull() )
QMessageBox::critical( this,
tr( "Out of Space" ),
tr( "Unable to create startup files\n"
"Free up some space\n"
"before you enter any data") );
- setCentralWidget( table );
+ mStack->addWidget(table, 1 );
+ mStack->raiseWidget( 1 );
+ setCentralWidget( mStack );
setToolBarsMovable( FALSE );
// qDebug("after load: t=%d", t.elapsed() );
Config config( "todo" );
config.setGroup( "View" );
bool complete = config.readBoolEntry( "ShowComplete", true );
table->setShowCompleted( complete );
@@ -141,16 +146,23 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) :
QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ),
this, SLOT( slotEdit() ) );
a->addTo( bar );
a->addTo( edit );
a->addTo( contextMenu );
a->setEnabled( FALSE );
editAction = a;
+
+ a = new QAction( QString::null, tr("View Task"), 0, this, 0 );
+ a->addTo( edit );
+ a->addTo( contextMenu );
+ connect( a, SIGNAL( activated() ),
+ this, SLOT(slotShowDetails() ) );
+
edit->insertSeparator();
a = new QAction( tr( "Delete..." ), Resource::loadIconSet( "trash" ),
QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ),
this, SLOT( slotDelete() ) );
a->addTo( bar );
a->addTo( edit );
@@ -171,18 +183,20 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) :
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() ) {
a = new QAction( tr( "Beam" ), Resource::loadPixmap( "beam" ),
QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ),
this, SLOT( slotBeam() ) );
a->addTo( edit );
a->addTo( bar );
}
@@ -244,16 +258,18 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) :
table->viewport()->setUpdatesEnabled( TRUE );
connect( completedAction, SIGNAL( toggled(bool) ), this, SLOT( showCompleted(bool) ) );
connect( showdeadlineAction, SIGNAL( toggled(bool) ), this, SLOT( showDeadline(bool) ) );
connect( catMenu, SIGNAL(activated(int)), this, SLOT(setCategory(int)) );
connect( table, SIGNAL( currentChanged( int, int ) ),
this, SLOT( currentEntryChanged( int, int ) ) );
+ connect( table, SIGNAL(showDetails(const ToDoEvent &) ),
+ this, SLOT(slotShowDetails(const ToDoEvent & ) ) );
// qDebug("done: t=%d", t.elapsed() );
}
void TodoWindow::slotNew()
{
if(syncing) {
QMessageBox::warning(this, tr("Todo"),
tr("Can not edit data, currently syncing"));
@@ -281,16 +297,17 @@ void TodoWindow::slotNew()
//todo.assignUid();
table->addEntry( todo );
table->setPaintingEnabled( true );
findAction->setEnabled( TRUE );
}
// I'm afraid we must call this every time now, otherwise
// spend expensive time comparing all these strings...
populateCategories();
+ mStack->raiseWidget(1 );
}
TodoWindow::~TodoWindow()
{
}
void TodoWindow::slotDelete()
{
@@ -313,40 +330,42 @@ void TodoWindow::slotDelete()
table->setPaintingEnabled( false );
table->removeCurrentEntry();
table->setPaintingEnabled( true );
if ( table->numRows() == 0 ) {
currentEntryChanged( -1, 0 );
findAction->setEnabled( FALSE );
}
+ mStack->raiseWidget(1);
}
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?") ) )
+ if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), tr("Delete all tasks?") ) )
return;
table->setPaintingEnabled( false );
table->removeAllEntries();
table->setPaintingEnabled( true );
if ( table->numRows() == 0 ) {
currentEntryChanged( -1, 0 );
findAction->setEnabled( FALSE );
}
+ mStack->raiseWidget(1 );
}
void TodoWindow::slotEdit()
{
if(syncing) {
QMessageBox::warning(this, tr("Todo"),
tr("Can not edit data, currently syncing"));
return;
@@ -364,30 +383,39 @@ void TodoWindow::slotEdit()
if ( ret == QDialog::Accepted ) {
table->setPaintingEnabled( false );
todo = e.todoEntry();
table->replaceCurrentEntry( todo );
table->setPaintingEnabled( true );
}
populateCategories();
-
+ mStack->raiseWidget( 1 );
}
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 );
+ ToDoEvent ev2 = ToDoEvent( ev ); // what about the uid
+ int uid;
+ { // uid
+ Qtopia::UidGen *uidgen = new Qtopia::UidGen();
+ uid = uidgen->generate();
+ delete uidgen;
+ }
+ ev2.setUid( uid );
table->setPaintingEnabled( false );
table->addEntry( ev2 );
table->setPaintingEnabled( true );
+
+ mStack->raiseWidget( 1 );
}
void TodoWindow::slotShowPopup( const QPoint &p )
{
contextMenu->popup( p );
}
void TodoWindow::showCompleted( bool s )
{
@@ -428,23 +456,26 @@ void TodoWindow::setCategory( int c )
table->setShowCategory( tr( "Unfiled" ) );
setCaption( tr("Todo") + " - " + tr( "Unfiled" ) );
} else {
QString cat = table->categories()[c - 2];
table->setShowCategory( cat );
setCaption( tr("Todo") + " - " + cat );
}
table->setPaintingEnabled( true );
+
+ mStack->raiseWidget( 1 );
}
void TodoWindow::populateCategories()
{
catMenu->clear();
int id, rememberId;
id = 1;
+ rememberId = 0;
catMenu->insertItem( tr( "All Categories" ), id++ );
catMenu->insertSeparator();
QStringList categories = table->categories();
categories.append( tr( "Unfiled" ) );
for ( QStringList::Iterator it = categories.begin();
it != categories.end(); ++it ) {
catMenu->insertItem( *it, id );
if ( *it == table->showCategory() )
@@ -467,16 +498,21 @@ void TodoWindow::reload()
void TodoWindow::flush()
{
syncing = TRUE;
table->save( todolistXMLFilename() );
}
void TodoWindow::closeEvent( QCloseEvent *e )
{
+ if( mStack->visibleWidget() != table ){
+ mStack->raiseWidget( 1 );
+ e->ignore();
+ return;
+ }
if(syncing) {
/* no need to save if in the middle of syncing */
e->accept();
return;
}
if ( table->save( todolistXMLFilename() ) ) {
e->accept();
@@ -557,15 +593,29 @@ void TodoWindow::slotBeam()
}
void TodoWindow::beamDone( Ir *ir )
{
delete ir;
unlink( beamfile );
}
-/* added 20.01.2k2 by se */
void TodoWindow::showDeadline( bool s )
{
table->setPaintingEnabled( false );
table->setShowDeadline( s );
table->setPaintingEnabled( true );
}
+void TodoWindow::slotShowDetails()
+{
+ ToDoEvent event = table->currentEntry();
+ slotShowDetails( event );
+}
+void TodoWindow::slotShowDetails( const ToDoEvent &event )
+{
+ if( mView == 0l ){
+ mView = new TodoLabel(mStack);
+ mStack->addWidget( mView, 2 );
+ }
+ mView->init( event );
+ mView->sync();
+ mStack->raiseWidget( 2);
+}
diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h
index b9172e1..f62ec6e 100644
--- a/core/pim/todo/mainwindow.h
+++ b/core/pim/todo/mainwindow.h
@@ -1,10 +1,11 @@
/**********************************************************************
- Copyright (C) 2002 Holger 'zecke' Freyther <freyther@kde.org>
+** Copyright (C) 2002 Holger 'zecke' Freyther <freyther@kde.org>
+** Copyright (C) 2002 by Stefan Eilers (se, eilers.stefan@epost.de)
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia and Opi Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
@@ -24,16 +25,20 @@
#include <qmainwindow.h>
class TodoTable;
class QAction;
class QPopupMenu;
class Ir;
class OFontMenu;
+class TodoLabel;
+class ToDoDB;
+class QWidgetStack;
+class ToDoEvent;
class TodoWindow : public QMainWindow
{
Q_OBJECT
public:
TodoWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
~TodoWindow();
@@ -44,43 +49,48 @@ public slots:
protected slots:
void slotNew();
void slotDelete();
void slotEdit();
void slotShowPopup( const QPoint & );
void showCompleted( bool );
- /* added 20.01.2k2 by se */
void showDeadline( bool );
-
+
+ void slotShowDetails(const ToDoEvent &event );
+ void slotShowDetails();
+
void currentEntryChanged( int r, int c );
void setCategory( int );
void slotFind();
void setDocument( const QString & );
void slotBeam();
void beamDone( Ir * );
void slotDeleteAll();
void slotDuplicate();
protected:
void closeEvent( QCloseEvent *e );
private:
void populateCategories();
+ //inline void switchToTable(); // move back to the normal view
private:
TodoTable *table;
+ TodoLabel *mView;
QAction *editAction,
*deleteAction,
*findAction,
*completedAction,
*showdeadlineAction,
*deleteAllAction,
*duplicateAction;
QPopupMenu *contextMenu, *catMenu;
+ QWidgetStack *mStack;
bool syncing;
};
#endif
diff --git a/core/pim/todo/opie-todo.control b/core/pim/todo/opie-todo.control
index cb9b110..71929af 100644
--- a/core/pim/todo/opie-todo.control
+++ b/core/pim/todo/opie-todo.control
@@ -1,9 +1,9 @@
Files: bin/todolist apps/Applications/todo.desktop
Priority: optional
Section: opie/applications
-Maintainer: Warwick Allison <warwick@trolltech.com>
+Maintainer: Holger 'zecke' Freyther <zecke@handhelds.org>
Architecture: arm
Version: $QPE_VERSION-$SUB_VERSION
Depends: opie-base ($QPE_VERSION)
Description: TODO-list manager
A Todo-list manager for the Opie environment.
diff --git a/core/pim/todo/todo.pro b/core/pim/todo/todo.pro
index a46fb47..a365081 100644
--- a/core/pim/todo/todo.pro
+++ b/core/pim/todo/todo.pro
@@ -1,18 +1,20 @@
TEMPLATE = app
CONFIG = qt warn_on release
DESTDIR = $(OPIEDIR)/bin
HEADERS = mainwindow.h \
todotable.h \
- todoentryimpl.h
+ todoentryimpl.h \
+ todolabel.h
SOURCES = main.cpp \
mainwindow.cpp \
todotable.cpp \
- todoentryimpl.cpp
+ todoentryimpl.cpp \
+ todolabel.cc
INTERFACES = todoentry.ui
TARGET = todolist
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe -lopie
diff --git a/core/pim/todo/todolabel.cc b/core/pim/todo/todolabel.cc
new file mode 100644
index 0000000..4ce3499
--- a/dev/null
+++ b/core/pim/todo/todolabel.cc
@@ -0,0 +1,58 @@
+/**********************************************************************
+** Copyright (C) 2002 by Stefan Eilers (se, eilers.stefan@epost.de)
+** Copyright (C) 2002 Holger 'zecke' Freyther <freyther@kde.org>
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+**
+** This file is part of the Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+
+#include <qpe/stringutil.h>
+
+#include <qregexp.h>
+#include <qstylesheet.h>
+
+
+#include "todolabel.h"
+
+TodoLabel::TodoLabel( QWidget *parent, const char *name )
+ : QTextView( parent, name )
+{
+}
+
+TodoLabel::~TodoLabel()
+{
+}
+
+void TodoLabel::init( const ToDoEvent &item )
+{
+ m_item = item;
+}
+
+void TodoLabel::sync()
+{
+ QString text = m_item.richText();
+ setText( text );
+}
+
+void TodoLabel::keyPressEvent( QKeyEvent *e )
+{
+ if ( e->key() == Qt::Key_F33 ) {
+ emit okPressed();
+ }
+}
diff --git a/core/pim/todo/todolabel.h b/core/pim/todo/todolabel.h
new file mode 100644
index 0000000..b6d67af
--- a/dev/null
+++ b/core/pim/todo/todolabel.h
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2002 by Stefan Eilers (se, eilers.stefan@epost.de)
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+**
+** This file is part of the Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef TODOLABEL_H
+#define TODOLABEL_H
+
+#include <opie/todoevent.h>
+
+#include <qtextview.h>
+
+class TodoLabel : public QTextView
+{
+ Q_OBJECT
+
+public:
+ TodoLabel( QWidget *parent, const char *name = 0 );
+ ~TodoLabel();
+
+public slots:
+ void init( const ToDoEvent &item);
+ void sync();
+
+signals:
+ void okPressed();
+
+protected:
+ void keyPressEvent( QKeyEvent * );
+
+private:
+ ToDoEvent m_item;
+
+};
+
+#endif
diff --git a/core/pim/todo/todotable.cpp b/core/pim/todo/todotable.cpp
index d0bc61c..753c036 100644
--- a/core/pim/todo/todotable.cpp
+++ b/core/pim/todo/todotable.cpp
@@ -300,25 +300,31 @@ void TodoTable::slotClicked( int row, int col, int, const QPoint &pos )
}
emit signalDoneChanged( i->isChecked() );
}
}
break;
case 1:
break;
case 2:
- // may as well edit it...
- // menuTimer->stop();
-// emit signalEdit();
- // fall through
- case 3:
- // may as well edit it...
+ // may as well edit it...
+ // menuTimer->stop();
+ // emit signalEdit();
+ // Show detailed view of the selected entry
+ {
menuTimer->stop();
- // emit signalEdit();
- break;
+ ToDoEvent *todo = todoList[static_cast<CheckItem*>(item(row, 0))];
+ emit showDetails( *todo );
+ }
+ break;
+ case 3:
+ // may as well edit it...
+ menuTimer->stop();
+ // emit signalEdit();
+ break;
}
}
void TodoTable::slotPressed( int row, int col, int, const QPoint &pos )
{
if ( col == 2 && cellGeometry( row, col ).contains(pos) )
menuTimer->start( 750, TRUE );
}
@@ -340,17 +346,17 @@ void TodoTable::internalAddEntries( QList<ToDoEvent> &list )
ToDoEvent *it;
for ( it = list.first(); it; it = list.next() )
insertIntoTable( it, row++ );
}
ToDoEvent TodoTable::currentEntry() const
{
- printf ("in currentEntry\n");
+ //qWarning ("in currentEntry\n");
QTableItem *i = item( currentRow(), 0 );
if ( !i || rowHeight( currentRow() ) <= 0 )
return ToDoEvent();
ToDoEvent *todo = todoList[(CheckItem*)i];
todo->setCompleted( ( (CheckItem*)item( currentRow(), 0 ) )->isChecked() );
todo->setPriority( ( (ComboItem*)item( currentRow(), 1 ) )->text().toInt() );
return *todo;
diff --git a/core/pim/todo/todotable.h b/core/pim/todo/todotable.h
index 458e07a..2f6e635 100644
--- a/core/pim/todo/todotable.h
+++ b/core/pim/todo/todotable.h
@@ -137,17 +137,17 @@ public:
signals:
void signalEdit();
void signalDoneChanged( bool b );
void signalPriorityChanged( int i );
void signalShowMenu( const QPoint & );
void signalNotFound();
void signalWrapAround();
-
+ void showDetails( const ToDoEvent & );
protected:
void keyPressEvent( QKeyEvent *e );
private:
void updateVisible();
void viewportPaintEvent( QPaintEvent * );
void internalAddEntries( QList<ToDoEvent> &list);
inline void insertIntoTable( ToDoEvent *todo, int row );