-rw-r--r-- | core/pim/datebook/datebook.cpp | 50 | ||||
-rw-r--r-- | core/pim/datebook/datebook.pro | 6 | ||||
-rw-r--r-- | core/pim/datebook/datebookday.cpp | 127 | ||||
-rw-r--r-- | core/pim/datebook/datebookday.h | 6 | ||||
-rw-r--r-- | core/pim/datebook/datebookdayallday.cpp | 226 | ||||
-rw-r--r-- | core/pim/datebook/datebookdayallday.h | 80 | ||||
-rw-r--r-- | core/pim/datebook/datebooksettings.h | 5 | ||||
-rw-r--r-- | core/pim/datebook/datebookweek.cpp | 65 | ||||
-rw-r--r-- | core/pim/datebook/datebookweekheaderimpl.cpp | 12 | ||||
-rw-r--r-- | core/pim/datebook/datebookweeklst.cpp | 10 | ||||
-rw-r--r-- | core/pim/datebook/dateentryimpl.cpp | 2 | ||||
-rw-r--r-- | core/pim/datebook/opie-datebook.control | 6 | ||||
-rw-r--r-- | core/pim/datebook/repeatentry.cpp | 50 |
13 files changed, 564 insertions, 81 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp index b7e89b0..10a9b59 100644 --- a/core/pim/datebook/datebook.cpp +++ b/core/pim/datebook/datebook.cpp @@ -227,9 +227,13 @@ void DateBook::receive( const QCString &msg, const QByteArray &data ) int uid; stream >> uid; Event e=db->eventByUID(uid); editEvent(e); - } + }else if (msg == "viewDefault(QDate)"){ + QDate day; + stream >> day; + viewDefault(day); + } } DateBook::~DateBook() { @@ -435,11 +439,21 @@ void DateBook::duplicateEvent( const Event &e ) while (editDlg.exec() ) { Event newEv = entry->event(); QString error = checkEvent(newEv); if (!error.isNull()) { - if (QMessageBox::warning(this, "error box", error, "Fix it", "Continue", 0, 0, 1) == 0) + if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0) continue; } + /* + * The problem: + * DateBookDB does remove repeating events not by uid but by the time + * the recurrence was created + * so we need to update that time as well + */ + Event::RepeatPattern rp = newEv.repeatPattern(); + rp.createTime = ::time( NULL ); + newEv.setRepeat( TRUE, rp ); // has repeat and repeatPattern... + db->addEvent(newEv); emit newEvent(); break; } @@ -475,9 +489,9 @@ void DateBook::editEvent( const Event &e ) break; newEv.setUid(e.uid()); // FIXME: Hack not to clear uid QString error = checkEvent(newEv); if (!error.isNull()) { - if (QMessageBox::warning(this, "error box", error, "Fix it", "Continue", 0, 0, 1) == 0) continue; + if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0) continue; } db->editEvent(e, newEv); emit newEvent(); break; @@ -518,10 +532,10 @@ void DateBook::initDay() { if ( !dayView ) { dayView = new DateBookDay( ampm, onMonday, db, views, "day view" ); views->addWidget( dayView, DAY ); + dayView->setJumpToCurTime( bJumpToCurTime ); dayView->setStartViewTime( startTime ); - dayView->setJumpToCurTime( bJumpToCurTime ); dayView->setRowStyle( rowStyle ); connect( this, SIGNAL( newEvent() ), dayView, SLOT( redraw() ) ); connect( dayView, SIGNAL( newEvent() ), this, SLOT( fileNew() ) ); connect( dayView, SIGNAL( removeEvent( const Event & ) ), this, SLOT( removeEvent( const Event & ) ) ); @@ -696,8 +710,9 @@ void DateBook::appMessage(const QCString& msg, const QByteArray& data) killTimer( stopTimer ); } } } else if ( msg == "nextView()" ) { + needShow = true; if ( !qApp-> activeWindow ( )) { needShow = TRUE; } else { QWidget* cur = views->visibleWidget(); @@ -712,18 +727,33 @@ void DateBook::appMessage(const QCString& msg, const QByteArray& data) viewDay(); needShow = TRUE; } } - } + } else if (msg == "editEvent(int)") { + /* simple copy from receive */ + QDataStream stream(data,IO_ReadOnly); + int uid; + stream >> uid; + Event e=db->eventByUID(uid); + editEvent(e); + } else if (msg == "viewDefault(QDate)"){ + /* simple copy from receive */ + QDataStream stream(data,IO_ReadOnly); + QDate day; + stream >> day; + viewDefault(day); + needShow = true; + } + if ( needShow ) { #if defined(Q_WS_QWS) || defined(_WS_QWS_) - showMaximized(); +// showMaximized(); #else - show(); +// show(); #endif - raise(); +// raise(); QPEApplication::setKeepRunning(); - setActiveWindow(); +// setActiveWindow(); } } void DateBook::reload() @@ -916,9 +946,9 @@ void DateBook::beamDone( Ir *ir ) void DateBook::slotFind() { // move it to the day view... viewDay(); - FindDialog frmFind( "Calendar", this ); + FindDialog frmFind( "Calendar", this ); // no tr needed frmFind.setUseDate( true ); frmFind.setDate( currentDate() ); QObject::connect( &frmFind, SIGNAL(signalFindClicked(const QString&, const QDate&, diff --git a/core/pim/datebook/datebook.pro b/core/pim/datebook/datebook.pro index e8e0a98..ae30c8d 100644 --- a/core/pim/datebook/datebook.pro +++ b/core/pim/datebook/datebook.pro @@ -10,9 +10,10 @@ HEADERS = datebookday.h \ datebookweeklst.h \ datebookweekheaderimpl.h \ repeatentry.h \ noteentryimpl.h \ - onoteedit.h + onoteedit.h \ + datebookdayallday.h SOURCES = main.cpp \ datebookday.cpp \ datebook.cpp \ dateentryimpl.cpp \ @@ -22,9 +23,10 @@ SOURCES = main.cpp \ datebookweeklst.cpp \ datebookweekheaderimpl.cpp \ repeatentry.cpp \ noteentryimpl.cpp \ - onoteedit.cpp + onoteedit.cpp \ + datebookdayallday.cpp INTERFACES = dateentry.ui \ datebookdayheader.ui \ datebookweekheader.ui \ datebookweeklstheader.ui \ diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp index 0b213e9..f4008e9 100644 --- a/core/pim/datebook/datebookday.cpp +++ b/core/pim/datebook/datebookday.cpp @@ -20,8 +20,9 @@ #include <qmessagebox.h> #include "datebookday.h" #include "datebookdayheaderimpl.h" +#include "datebookdayallday.h" #include <qpe/datebookdb.h> #include <qpe/resource.h> #include <qpe/event.h> @@ -210,9 +211,13 @@ void DateBookDayViewQuickLineEdit::slotReturnPressed() connect(this,SIGNAL(insertEvent(const Event &)),this->topLevelWidget(),SLOT(insertEvent(const Event &))); emit(insertEvent(quickEvent)); active=0; } - this->close(true); // Close and also delete this widget + /* we need to return to this object.. */ + QTimer::singleShot(500, this, SLOT(finallyCallClose()) ); // Close and also delete this widget +} +void DateBookDayViewQuickLineEdit::finallyCallClose() { + close(true); // also deletes this widget... } void DateBookDayViewQuickLineEdit::focusOutEvent ( QFocusEvent * e ) { @@ -226,8 +231,12 @@ DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, QWid { widgetList.setAutoDelete( true ); header = new DateBookDayHeader( startOnMonday, this, "day header" ); header->setDate( currDate.year(), currDate.month(), currDate.day() ); + + m_allDays = new DatebookdayAllday(newDb, this, "all day event list" ); + m_allDays->hide(); + view = new DateBookDayView( ampm, this, "day view" ); connect( header, SIGNAL( dateChanged( int, int, int ) ), this, SLOT( dateChanged( int, int, int ) ) ); connect( header, SIGNAL( dateChanged( int, int, int ) ), view, SLOT( slotDateChanged( int, int, int ) ) ); @@ -244,8 +253,9 @@ DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, QWid timeMarker = new DateBookDayTimeMarker( this ); timeMarker->setTime( QTime::currentTime() ); rowStyle = -1; // initialize with bogus values + jumpToCurTime = false; } void DateBookDay::setJumpToCurTime( bool bJump ) { @@ -342,19 +352,33 @@ void DateBookDay::redraw() void DateBookDay::getEvents() { widgetList.clear(); + /* clear the AllDay List */ + m_allDays->hide(); // just in case + m_allDays->removeAllEvents(); + QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, currDate ); QValueListIterator<EffectiveEvent> it; + QObject* object = 0; for ( it = eventList.begin(); it != eventList.end(); ++it ) { EffectiveEvent ev=*it; if(!((ev.end().hour()==0) && (ev.end().minute()==0) && (ev.startDate()!=ev.date()))) { // Skip events ending at 00:00 starting at another day. + if (ev.event().type() == Event::AllDay ) { + object = m_allDays->addEvent( ev ); + if (!object) + continue; + }else { DateBookDayWidget* w = new DateBookDayWidget( *it, this ); - connect( w, SIGNAL( deleteMe( const Event & ) ), this, SIGNAL( removeEvent( const Event & ) ) ); - connect( w, SIGNAL( duplicateMe( const Event & ) ), this, SIGNAL( duplicateEvent( const Event & ) ) ); - connect( w, SIGNAL( editMe( const Event & ) ), this, SIGNAL( editEvent( const Event & ) ) ); - connect( w, SIGNAL( beamMe( const Event & ) ), this, SIGNAL( beamEvent( const Event & ) ) ); - widgetList.append( w ); + widgetList.append( w ); + object = w; + } + + connect( object, SIGNAL( deleteMe( const Event & ) ), this, SIGNAL( removeEvent( const Event & ) ) ); + connect( object, SIGNAL( duplicateMe( const Event & ) ), this, SIGNAL( duplicateEvent( const Event & ) ) ); + connect( object, SIGNAL( editMe( const Event & ) ), this, SIGNAL( editEvent( const Event & ) ) ); + connect( object, SIGNAL( beamMe( const Event & ) ), this, SIGNAL( beamEvent( const Event & ) ) ); + } } } @@ -395,11 +419,18 @@ static int place( const DateBookDayWidget *item, bool *used, int maxn ) void DateBookDay::relayoutPage( bool fromResize ) { setUpdatesEnabled( FALSE ); - if ( !fromResize ) + if ( !fromResize ) { getEvents(); // no need we already have them! + if (m_allDays->items() > 0 ) + m_allDays->show(); + /* + * else if ( m_allDays->items() == 0 ) already hide in getEvents + */ + } + widgetList.sort(); //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view @@ -729,8 +760,30 @@ void DateBookDayWidget::paintEvent( QPaintEvent *e ) rt.setWidth( geom.width() - d - 6 ); rt.draw( &p, 7, 0, e->region(), colorGroup() ); } +/* + * we need to find the real start date for a uid + * we need to check from one day to another... + */ +QDate DateBookDay::findRealStart( int uid, const QDate& isIncluded , DateBookDB* db) { + QDate dt( isIncluded ); + QDate fnd = dt; + + bool doAgain = true; + do{ + dt = dt.addDays( -1 ); + QValueList<EffectiveEvent> events = db->getEffectiveEvents( dt, dt ); + for (QValueList<EffectiveEvent>::Iterator it = events.begin(); it != events.end(); ++it ) { + EffectiveEvent ev = (*it); + if ( uid == ev.event().uid() && ev.start() != QTime(0, 0, 0 ) ) + return ev.date(); + } + }while (doAgain ); + + return fnd; +} + void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) { DateBookDayWidget *item; @@ -746,8 +799,9 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) m.insertItem( tr( "Edit" ), 1 ); m.insertItem( tr( "Duplicate" ), 4 ); m.insertItem( tr( "Delete" ), 2 ); if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 ); + if(Ir::supported() && ev.event().doRepeat() ) m.insertItem( tr( "Beam this occurence"), 5 ); int r = m.exec( e->globalPos() ); if ( r == 1 ) { emit editMe( ev.event() ); } else if ( r == 2 ) { @@ -755,9 +809,66 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) } else if ( r == 3 ) { emit beamMe( ev.event() ); } else if ( r == 4 ) { emit duplicateMe( ev.event() ); - } + } else if ( r == 5 ) { + // create an Event and beam it... + /* + * Start with the easy stuff. If start and end date is the same we can just use + * the values of effective events + * If it is a multi day event we need to find the real start and end date... + */ + if ( ev.event().start().date() == ev.event().end().date() ) { + Event event( ev.event() ); + + QDateTime dt( ev.date(), ev.start() ); + event.setStart( dt ); + + dt.setTime( ev.end() ); + event.setEnd( dt ); + emit beamMe( event ); + }else { + /* + * at least the the Times are right now + */ + QDateTime start( ev.event().start() ); + QDateTime end ( ev.event().end () ); + + + /* + * ok we know the start date or we need to find it + */ + if ( ev.start() != QTime( 0, 0, 0 ) ) { + start.setDate( ev.date() ); + }else { + QDate dt = DateBookDay::findRealStart( ev.event().uid(), ev.date(), dateBook->db ); + start.setDate( dt ); + } + + + /* + * ok we know now the end date... + * else + * get to know the offset btw the real start and real end + * and then add it to the new start date... + */ + if ( ev.end() != QTime(23, 59, 59 ) ) { + end.setDate( ev.date() ); + }else{ + int days = ev.event().start().date().daysTo( ev.event().end().date() ); + end.setDate( start.date().addDays( days ) ); + } + + + + Event event( ev.event() ); + event.setStart( start ); + event.setEnd ( end ); + + + emit beamMe( event ); + } + } } void DateBookDayWidget::setGeometry( const QRect &r ) { diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h index 961f60f..3898cbc 100644 --- a/core/pim/datebook/datebookday.h +++ b/core/pim/datebook/datebookday.h @@ -31,8 +31,9 @@ #include <qlineedit.h> class DateBookDayHeader; class DateBookDB; +class DatebookdayAllday; class QDateTime; class QMouseEvent; class QPaintEvent; class QResizeEvent; @@ -47,8 +48,9 @@ protected: int active; void focusOutEvent( QFocusEvent *e ); protected slots: void slotReturnPressed(void); + void finallyCallClose(); signals: void insertEvent(const Event &e); }; @@ -175,8 +177,9 @@ class WidgetListClass : public QList<DateBookDayWidget> class DateBookDay : public QVBox { Q_OBJECT + friend class DateBookDayWidget; // for beam this occurence and access to DateBookDB public: DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, QWidget *parent, const char *name ); void selectedDates( QDateTime &start, QDateTime &end ); @@ -187,8 +190,10 @@ public: void setSelectedWidget( DateBookDayWidget * ); DateBookDayWidget * getSelectedWidget( void ); void setJumpToCurTime( bool bJump ); void setRowStyle( int style ); + static QDate findRealStart( int uid, const QDate& isIncluded, + DateBookDB* ); public slots: void setDate( int y, int m, int d ); void setDate( QDate ); @@ -217,8 +222,9 @@ private: DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom ); QDate currDate; DateBookDayView *view; DateBookDayHeader *header; + DatebookdayAllday *m_allDays; DateBookDB *db; WidgetListClass widgetList; //reimplemented QList for sorting widgets by height int startTime; bool jumpToCurTime; //should we jump to current time in dayview? diff --git a/core/pim/datebook/datebookdayallday.cpp b/core/pim/datebook/datebookdayallday.cpp new file mode 100644 index 0000000..985f31a --- a/dev/null +++ b/core/pim/datebook/datebookdayallday.cpp @@ -0,0 +1,226 @@ +/**************************************************************************** +** GPL by Rajko Albrecht +** +** +** +** +** +****************************************************************************/ +#include "datebookdayallday.h" + +#include <qpushbutton.h> +#include <qlayout.h> +#include <qvariant.h> +#include <qtooltip.h> +#include <qwhatsthis.h> +#include <qobjectlist.h> +#include <qpe/event.h> +#include <qpe/ir.h> +#include <qpe/datebookdb.h> +#include <qpe/resource.h> +#include <qpopupmenu.h> +#include <qtimer.h> +#include <qregexp.h> +#include <qdatetime.h> + +#include "datebookday.h" + +/* + * Constructs a DatebookdayAllday which is a child of 'parent', with the + * name 'name' and widget flags set to 'f' + */ +DatebookdayAllday::DatebookdayAllday(DateBookDB* db, QWidget* parent, const char* name, WFlags fl ) + : QWidget( parent, name,fl ),item_count(0),dateBook(db) +{ + if ( !name ) + setName( "DatebookdayAllday" ); + setMinimumSize( QSize( 0, 0 ) ); + + datebookdayalldayLayout = new QVBoxLayout( this ); + datebookdayalldayLayout->setSpacing( 0 ); + datebookdayalldayLayout->setMargin( 0 ); + + lblDesc = new DatebookEventDesc(parent->parentWidget(),""); + lblDesc->setBackgroundColor(Qt::yellow); + lblDesc->hide(); + subWidgets.setAutoDelete(true); +} + +/* + * Destroys the object and frees any allocated resources + */ +DatebookdayAllday::~DatebookdayAllday() +{ + // no need to delete child widgets, Qt does it all for us +} + +DatebookAlldayDisp* DatebookdayAllday::addEvent(const EffectiveEvent&ev) +{ + DatebookAlldayDisp * lb; + lb = new DatebookAlldayDisp(dateBook,ev,this,NULL); + datebookdayalldayLayout->addWidget(lb); + subWidgets.append(lb); + + connect(lb,SIGNAL(displayMe(const Event &)),lblDesc,SLOT(disp_event(const Event&))); + ++item_count; + + return lb; +} + +void DatebookdayAllday::removeAllEvents() +{ + subWidgets.clear(); + item_count = 0; +} + +DatebookAlldayDisp::DatebookAlldayDisp(DateBookDB *db,const EffectiveEvent& ev, + QWidget* parent,const char* name,WFlags f) + : QLabel(parent,name,f),m_Ev(ev),dateBook(db) +{ + QString strDesc = m_Ev.description(); + strDesc = strDesc.replace(QRegExp("<"),"<"); + setBackgroundColor(yellow); + setText(strDesc); + setFrameStyle(QFrame::Raised|QFrame::Panel); + QSize s = sizeHint(); + setMaximumSize( QSize( 32767, s.height()-4 ) ); + setMinimumSize( QSize( 0, s.height()-4 ) ); +} + +DatebookAlldayDisp::~DatebookAlldayDisp() +{ +} + +void DatebookAlldayDisp::beam_single_event() +{ + // create an Event and beam it... + /* + * Start with the easy stuff. If start and end date is the same we can just use + * the values of effective m_Events + * If it is a multi day m_Event we need to find the real start and end date... + */ + if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) { + Event m_Event( m_Ev.event() ); + + QDateTime dt( m_Ev.date(), m_Ev.start() ); + m_Event.setStart( dt ); + + dt.setTime( m_Ev.end() ); + m_Event.setEnd( dt ); + emit beamMe( m_Event ); + }else { + /* + * at least the the Times are right now + */ + QDateTime start( m_Ev.event().start() ); + QDateTime end ( m_Ev.event().end () ); + + /* + * ok we know the start date or we need to find it + */ + if ( m_Ev.start() != QTime( 0, 0, 0 ) ) { + start.setDate( m_Ev.date() ); + }else { + QDate dt = DateBookDay::findRealStart( m_Ev.event().uid(), m_Ev.date(), dateBook ); + start.setDate( dt ); + } + + /* + * ok we know now the end date... + * else + * get to know the offset btw the real start and real end + * and then add it to the new start date... + */ + if ( m_Ev.end() != QTime(23, 59, 59 ) ) { + end.setDate( m_Ev.date() ); + }else{ + int days = m_Ev.event().start().date().daysTo( m_Ev.event().end().date() ); + end.setDate( start.date().addDays( days ) ); + } + Event m_Event( m_Ev.event() ); + m_Event.setStart( start ); + m_Event.setEnd ( end ); + emit beamMe( m_Event ); + } +} + +void DatebookAlldayDisp::mousePressEvent(QMouseEvent*e) +{ + QColor b = backgroundColor(); + setBackgroundColor(green); + update(); + QPopupMenu m; + m.insertItem( DateBookDayWidget::tr( "Edit" ), 1 ); + m.insertItem( DateBookDayWidget::tr( "Duplicate" ), 4 ); + m.insertItem( DateBookDayWidget::tr( "Delete" ), 2 ); + if(Ir::supported()) m.insertItem( DateBookDayWidget::tr( "Beam" ), 3 ); + if(Ir::supported() && m_Ev.event().doRepeat() ) m.insertItem( DateBookDayWidget::tr( "Beam this occurence"), 5 ); + m.insertItem( tr( "Info"),6); + int r = m.exec( e->globalPos() ); + setBackgroundColor(b); + update(); + switch (r) { + case 1: + emit editMe( m_Ev.event() ); + break; + case 2: + emit deleteMe( m_Ev.event() ); + break; + case 3: + emit beamMe( m_Ev.event() ); + break; + case 4: + emit duplicateMe( m_Ev.event() ); + break; + case 5: + beam_single_event(); + break; + case 6: + emit displayMe( m_Ev.event() ); + break; + default: + break; + } +} + +DatebookEventDesc::DatebookEventDesc(QWidget*parent,const char*name) + :QLabel(parent,name) +{ + m_Timer=new QTimer(this); + connect(m_Timer,SIGNAL(timeout()),this,SLOT(hide())); + setFrameStyle(QFrame::Sunken|QFrame::Panel); + setTextFormat(RichText); +} + +DatebookEventDesc::~DatebookEventDesc() +{ +} + +void DatebookEventDesc::mousePressEvent(QMouseEvent*) +{ + hide(); + if (m_Timer->isActive()) m_Timer->stop(); +} + +void DatebookEventDesc::disp_event(const Event&e) +{ + if (m_Timer->isActive()) m_Timer->stop(); + QString text; + text = "<b><i>"+e.description()+"</i></b><br>"; + if (e.notes().length()>0) { + text+="<b>"+e.notes()+"</b><br>"; + } + if (e.location().length()>0) { + text+="<i>"+e.location()+"</i><br>"; + } + text = text.replace(QRegExp("\n"),"<br>"); + setText(text); + QSize s = sizeHint(); + s+=QSize(10,10); + resize(s); + move( QMAX(0,(parentWidget()->width()-width()) / 2), + (parentWidget()->height()-height())/2 ); + show(); + m_Timer->start(2000,true); +} + diff --git a/core/pim/datebook/datebookdayallday.h b/core/pim/datebook/datebookdayallday.h new file mode 100644 index 0000000..c781785 --- a/dev/null +++ b/core/pim/datebook/datebookdayallday.h @@ -0,0 +1,80 @@ +#ifndef DATEBOOKDAYALLDAYBASE_H +#define DATEBOOKDAYALLDAYBASE_H + +#include <qvariant.h> +#include <qframe.h> +#include <qlabel.h> +#include <qlist.h> +#include <qpe/event.h> + +class QVBoxLayout; +class QHBoxLayout; +class QGridLayout; +class DatebookAlldayDisp; +class DatebookEventDesc; +class DateBookDB; + +class DatebookdayAllday : public QWidget +{ + Q_OBJECT + +public: + DatebookdayAllday(DateBookDB* db, + QWidget* parent = 0, const char* name = 0, WFlags fl = 0); + ~DatebookdayAllday(); + DatebookAlldayDisp* addEvent(const EffectiveEvent&e); + const unsigned int items()const{return item_count;} + +public slots: + void removeAllEvents(); + +protected: + QVBoxLayout* datebookdayalldayLayout; + DatebookEventDesc * lblDesc; + unsigned int item_count; + QList<DatebookAlldayDisp> subWidgets; + DateBookDB *dateBook; +}; + +class DatebookAlldayDisp : public QLabel +{ + Q_OBJECT + +public: + DatebookAlldayDisp(DateBookDB* db,const EffectiveEvent& e, + QWidget* parent=0,const char* name = 0, WFlags fl=0); + virtual ~DatebookAlldayDisp(); + +signals: + void deleteMe( const Event &e ); + void duplicateMe( const Event &e ); + void editMe( const Event &e ); + void beamMe( const Event &e ); + void displayMe(const Event &e); + +public slots: + +protected: + EffectiveEvent m_Ev; + DateBookDB* dateBook; + void mousePressEvent( QMouseEvent *e ); + void beam_single_event(); +}; + +class DatebookEventDesc: public QLabel +{ + Q_OBJECT + +public: + DatebookEventDesc(QWidget* Parent=0,const char* name = 0); + virtual ~DatebookEventDesc(); + +public slots: + void disp_event(const Event&e); + +protected: + void mousePressEvent(QMouseEvent*e); + QTimer* m_Timer; +}; + +#endif // DATEBOOKDAYALLDAYBASE_H diff --git a/core/pim/datebook/datebooksettings.h b/core/pim/datebook/datebooksettings.h index c3036e1..cf8a0ff 100644 --- a/core/pim/datebook/datebooksettings.h +++ b/core/pim/datebook/datebooksettings.h @@ -24,8 +24,9 @@ #include <qpe/categoryselect.h> class DateBookSettings : public DateBookSettingsBase { + Q_OBJECT public: DateBookSettings( bool whichClock, QWidget *parent = 0, const char *name = 0, bool modal = TRUE, WFlags = 0 ); ~DateBookSettings(); @@ -35,14 +36,14 @@ public: bool alarmPreset() const; int presetTime() const; void setAlarmType( int alarmType ); int alarmType() const; - + void setJumpToCurTime( bool bJump ); bool jumpToCurTime() const; void setRowStyle( int style ); int rowStyle() const; - + private slots: void slot12Hour( int ); void slotChangeClock( bool ); diff --git a/core/pim/datebook/datebookweek.cpp b/core/pim/datebook/datebookweek.cpp index 2ad7aa9..ab7e963 100644 --- a/core/pim/datebook/datebookweek.cpp +++ b/core/pim/datebook/datebookweek.cpp @@ -19,23 +19,16 @@ **********************************************************************/ #include "datebookweek.h" #include "datebookweekheaderimpl.h" -#include <qpe/calendar.h> #include <qpe/datebookdb.h> -#include <qpe/event.h> #include <qpe/qpeapplication.h> -#include <qpe/timestring.h> +#include <qpe/calendar.h> -#include <qdatetime.h> #include <qheader.h> #include <qlabel.h> #include <qlayout.h> -#include <qpainter.h> -#include <qpopupmenu.h> #include <qtimer.h> -#include <qspinbox.h> -#include <qstyle.h> //----------------------------------------------------------------- @@ -88,46 +81,39 @@ DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday, } void DateBookWeekView::initNames() { +#warning Please review this ! (eilers) + + // Ok, I am Mr. Pedantic, but shouldn't we count until 6 instead of 7, if bOnMonday is false ? (eilers) + static bool bFirst = true; if ( bFirst ) { if ( bOnMonday ) { - header->addLabel( tr("Mo", "Monday" ) ); - header->addLabel( tr("Tu", "Tuesday") ); - header->addLabel( tr("We", "Wednesday" ) ); - header->addLabel( tr("Th", "Thursday" ) ); - header->addLabel( tr("Fr", "Friday" ) ); - header->addLabel( tr("Sa", "Saturday" ) ); - header->addLabel( tr("Su", "Sunday" ) ); + for ( int i = 1; i<=7; i++ ) { + header->addLabel( Calendar::nameOfDay( i ) ); + } + } else { - header->addLabel( tr("Su", "Sunday" ) ); - header->addLabel( tr("Mo", "Monday") ); - header->addLabel( tr("Tu", "Tuesday") ); - header->addLabel( tr("We", "Wednesday" ) ); - header->addLabel( tr("Th", "Thursday" ) ); - header->addLabel( tr("Fr", "Friday" ) ); - header->addLabel( tr("Sa", "Saturday" ) ); - } + header->addLabel( Calendar::nameOfDay( 7 ) ); + for ( int i = 1; i<7; i++ ) { + header->addLabel( Calendar::nameOfDay( i ) ); + } + } bFirst = false; } else { // we are change things... if ( bOnMonday ) { - header->setLabel( 1, tr("Mo", "Monday") ); - header->setLabel( 2, tr("Tu", "Tuesday") ); - header->setLabel( 3, tr("We", "Wednesday" ) ); - header->setLabel( 4, tr("Th", "Thursday" ) ); - header->setLabel( 5, tr("Fr", "Friday" ) ); - header->setLabel( 6, tr("Sa", "Saturday" ) ); - header->setLabel( 7, tr("Su", "Sunday" ) ); + for ( int i = 1; i<=7; i++ ) { + header->setLabel( i, Calendar::nameOfDay( i ) ); + } + } else { - header->setLabel( 1, tr("Su", "Sunday" ) ); - header->setLabel( 2, tr("Mo", "Monday") ); - header->setLabel( 3, tr("Tu", "Tuesday") ); - header->setLabel( 4, tr("We", "Wednesday" ) ); - header->setLabel( 5, tr("Th", "Thursday" ) ); - header->setLabel( 6, tr("Fr", "Friday" ) ); - header->setLabel( 7, tr("Sa", "Saturday" ) ); + header->setLabel( 1, Calendar::nameOfDay( 7 ) ); + for ( int i = 1; i<7; i++ ) { + header->setLabel( i+1, Calendar::nameOfDay( i ) ); + } + } } } @@ -401,9 +387,10 @@ void DateBookWeek::showDay( int day ) { QDate d=bdate; // Calculate offset to first day of week. - int dayoffset=d.dayOfWeek(); + int dayoffset=d.dayOfWeek() % 7; + if(bStartOnMonday) dayoffset--; day--; d=d.addDays(day-dayoffset); @@ -574,8 +561,10 @@ QDate DateBookWeek::weekDate() const // Calculate offset to first day of week. int dayoffset=d.dayOfWeek(); if(bStartOnMonday) dayoffset--; + else if( dayoffset == 7 ) + dayoffset = 0; return d.addDays(-dayoffset); } diff --git a/core/pim/datebook/datebookweekheaderimpl.cpp b/core/pim/datebook/datebookweekheaderimpl.cpp index ff7626f..770410e 100644 --- a/core/pim/datebook/datebookweekheaderimpl.cpp +++ b/core/pim/datebook/datebookweekheaderimpl.cpp @@ -69,20 +69,24 @@ void DateBookWeekHeader::pickDate() } void DateBookWeekHeader::nextMonth() { + qWarning("nextMonth() " ); setDate(date.addDays(28)); } void DateBookWeekHeader::prevMonth() { + qWarning("prevMonth() " ); setDate(date.addDays(-28)); } void DateBookWeekHeader::nextWeek() { + qWarning("nextWeek() " ); setDate(date.addDays(7)); } void DateBookWeekHeader::prevWeek() { + qWarning("prevWeek() "); setDate(date.addDays(-7)); } void DateBookWeekHeader::setDate( int y, int m, int d ) @@ -93,11 +97,15 @@ void DateBookWeekHeader::setDate( int y, int m, int d ) void DateBookWeekHeader::setDate(const QDate &d) { int year,week,dayofweek; date=d; dayofweek=d.dayOfWeek(); - if(bStartOnMonday) dayofweek--; + if(bStartOnMonday) + dayofweek--; + else if( dayofweek == 7 ) + /* we already have the right day -7 would lead to the current week..*/ + dayofweek = 0; + date=date.addDays(-dayofweek); - calcWeek(date,week,year,bStartOnMonday); QDate start=date; QDate stop=start.addDays(6); labelDate->setText( QString::number(start.day()) + "." + diff --git a/core/pim/datebook/datebookweeklst.cpp b/core/pim/datebook/datebookweeklst.cpp index 7817042..aad1f3a 100644 --- a/core/pim/datebook/datebookweeklst.cpp +++ b/core/pim/datebook/datebookweeklst.cpp @@ -60,9 +60,14 @@ DateBookWeekLstHeader::~DateBookWeekLstHeader(){} void DateBookWeekLstHeader::setDate(const QDate &d) { int year,week,dayofweek; date=d; dayofweek=d.dayOfWeek(); - if(bStartOnMonday) dayofweek--; + if(bStartOnMonday) + dayofweek--; + else if( dayofweek == 7 ) + /* we already have the right day -7 would lead to the same week */ + dayofweek = 0; + date=date.addDays(-dayofweek); calcWeek(date,week,year,bStartOnMonday); QDate start=date; @@ -116,9 +121,9 @@ DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /* onM */, : DateBookWeekLstDayHdrBase(parent, name, fl) { date=d; - static const char *wdays={"MTWTFSSM"}; + static const QString wdays=tr("MTWTFSSM", "Week days"); char day=wdays[d.dayOfWeek()-1]; label->setText( QString(QObject::tr(QString(QChar(day)))) + " " +QString::number(d.day()) ); add->setText("+"); @@ -236,8 +241,9 @@ DateBookWeekLstView::DateBookWeekLstView(QValueList<EffectiveEvent> &ev, // Calculate offset to first day of week. int dayoffset=d.dayOfWeek(); if(bStartOnMonday) dayoffset--; + else if( dayoffset == 7 ) dayoffset = 0; for (int i=0; i<7; i++) { // Header DateBookWeekLstDayHdr *hdr=new DateBookWeekLstDayHdr(d.addDays(i-dayoffset), bStartOnMonday,this); diff --git a/core/pim/datebook/dateentryimpl.cpp b/core/pim/datebook/dateentryimpl.cpp index 13d2ce2..d9e5225 100644 --- a/core/pim/datebook/dateentryimpl.cpp +++ b/core/pim/datebook/dateentryimpl.cpp @@ -401,8 +401,10 @@ void DateEntry::slotRepeat() if ( e->exec() ) { rp = e->repeatPattern(); setRepeatLabel(); } + // deleting sounds like a nice idea... + delete e; } void DateEntry::slotChangeStartOfWeek( bool onMonday ) { diff --git a/core/pim/datebook/opie-datebook.control b/core/pim/datebook/opie-datebook.control index 1a28448..fe5a086 100644 --- a/core/pim/datebook/opie-datebook.control +++ b/core/pim/datebook/opie-datebook.control @@ -1,11 +1,11 @@ Package: opie-datebook -Files: bin/datebook apps/1Pim/datebook.desktop pics/datebook +Files: bin/datebook apps/1Pim/datebook.desktop Priority: optional Section: opie/applications Conflicts: qpe-tkccalendar Maintainer: Warwick Allison <warwick@trolltech.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION -Depends: task-opie-minimal, libopie1 +Depends: task-opie-minimal, libopie1, opie-pics Description: A datebook/appointment manager A datebook/appointment manager for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/core/pim/datebook/repeatentry.cpp b/core/pim/datebook/repeatentry.cpp index 5637c4d..b1a162d 100644 --- a/core/pim/datebook/repeatentry.cpp +++ b/core/pim/datebook/repeatentry.cpp @@ -32,21 +32,38 @@ #include <time.h> // Global Templates for use in setting up the repeat label... -const QString strDayTemplate = QObject::tr("Every"); -const QString strYearTemplate = QObject::tr("%1 %2 every "); -const QString strMonthDateTemplate = QObject::tr("The %1 every "); -const QString strMonthDayTemplate = QObject::tr("The %1 %1 of every"); -const QString strWeekTemplate = QObject::tr("Every "); -const QString dayLabel[] = { QObject::tr("Monday"), - QObject::tr("Tuesday"), - QObject::tr("Wednesday"), - QObject::tr("Thursday"), - QObject::tr("Friday"), - QObject::tr("Saturday"), - QObject::tr("Sunday") }; +// the problem is these strings get initialized before QPEApplication can install the translator -zecke +namespace { +QString strDayTemplate; +QString strYearTemplate; +QString strMonthDateTemplate; +QString strMonthDayTemplate; +QString strWeekTemplate; +QString dayLabel[7]; +} +/* + * static linkage to not polute the symbol table... + * The problem is that const and static linkage are resolved prior to installing a translator + * leading to that the above strings are translted but to the original we delay the init of these strings... + * -zecke + */ +static void fillStrings() { + strDayTemplate = QObject::tr("Every"); + strYearTemplate = QObject::tr("%1 %2 every "); + strMonthDateTemplate = QObject::tr("The %1 every "); + strMonthDayTemplate = QObject::tr("The %1 %1 of every"); + strWeekTemplate = QObject::tr("Every "); + dayLabel[0] = QObject::tr("Monday"); + dayLabel[1] = QObject::tr("Tuesday"); + dayLabel[2] = QObject::tr("Wednesday"); + dayLabel[3] = QObject::tr("Thursday"); + dayLabel[4] = QObject::tr("Friday"); + dayLabel[5] = QObject::tr("Saturday"); + dayLabel[6] = QObject::tr("Sunday"); +} static QString numberPlacing( int x ); // return the proper word format for // x (1st, 2nd, etc) static int week( const QDate &dt ); // what week in the month is dt? @@ -58,8 +75,11 @@ RepeatEntry::RepeatEntry( bool startOnMonday, start( newStart ), currInterval( NONE ), startWeekOnMonday( startOnMonday ) { + if (strDayTemplate.isEmpty() ) + fillStrings(); + init(); fraType->setButton( currInterval ); chkNoEnd->setChecked( TRUE ); setupNone(); @@ -73,8 +93,10 @@ RepeatEntry::RepeatEntry( bool startOnMonday, const Event::RepeatPattern &rp, start( startDate ), end( rp.endDate() ), startWeekOnMonday( startOnMonday ) { + if (strDayTemplate.isEmpty() ) + fillStrings(); // do some stuff with the repeat pattern init(); switch ( rp.type ) { default: @@ -405,9 +427,9 @@ void RepeatEntry::setupRepeatLabel( int x ) case DAY: if ( x > 1 ) strVar2 = tr( "days" ); else - strVar2 = tr( "day" ); + strVar2 = tr( "day" ); break; case WEEK: if ( x > 1 ) strVar2 = tr( "weeks" ); @@ -499,9 +521,9 @@ void RepeatEntry::slotWeekLabel() else str += ", " + *itStr; } } - str = str.prepend( "on " ); + str = str.prepend( tr("on ") ); lblWeekVar->setText( str ); } void RepeatEntry::slotMonthLabel( int type ) |