-rw-r--r-- | core/pim/datebook/datebook.cpp | 67 | ||||
-rw-r--r-- | core/pim/datebook/datebook.h | 3 | ||||
-rw-r--r-- | core/pim/datebook/datebookday.cpp | 29 | ||||
-rw-r--r-- | core/pim/datebook/datebookday.h | 2 |
4 files changed, 86 insertions, 15 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp index fa509d9..47be523 100644 --- a/core/pim/datebook/datebook.cpp +++ b/core/pim/datebook/datebook.cpp @@ -389,32 +389,89 @@ void DateBook::viewDefault(const QDate &d) { void DateBook::viewDay() { view(DAY,currentDate()); } void DateBook::viewWeek() { view(WEEK,currentDate()); } void DateBook::viewWeekLst() { view(WEEKLST,currentDate()); } void DateBook::viewMonth() { view(MONTH,currentDate()); } +void DateBook::duplicateEvent( const Event &e ) +{ + qWarning("Hmmm..."); + // Alot of code duplication, as this is almost like editEvent(); + if (syncing) { + QMessageBox::warning( this, tr("Calendar"), + tr( "Can not edit data, currently syncing") ); + return; + } + + Event dupevent; + dupevent.setStart(e.start()); + dupevent.setEnd(e.end()); + dupevent.setDescription(e.description()); + dupevent.setLocation(e.location()); +// dupevent.setCategory(e.category()); // how is this done?? + dupevent.setNotes(e.notes()); + dupevent.setAllDay(e.isAllDay()); + dupevent.setTimeZone(e.timeZone()); + if(e.hasAlarm()) dupevent.setAlarm(e.alarmDelay(),e.alarmSound()); + if(e.hasRepeat()) dupevent.setRepeat(e.repeatPattern()); + + // workaround added for text input. + QDialog editDlg( this, 0, TRUE ); + DateEntry *entry; + editDlg.setCaption( tr("Duplicate Event") ); + QVBoxLayout *vb = new QVBoxLayout( &editDlg ); + QScrollView *sv = new QScrollView( &editDlg, "scrollview" ); + sv->setResizePolicy( QScrollView::AutoOneFit ); + // KLUDGE!!! + sv->setHScrollBarMode( QScrollView::AlwaysOff ); + vb->addWidget( sv ); + entry = new DateEntry( onMonday, dupevent, ampm, &editDlg, "editor" ); + entry->timezone->setEnabled( FALSE ); + sv->addChild( entry ); + +#if defined(Q_WS_QWS) || defined(_WS_QWS_) + editDlg.showMaximized(); +#endif + while (editDlg.exec() ) { + Event newEv = entry->event(); + if(newEv.description().isEmpty() && newEv.notes().isEmpty() ) + 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; + } + db->addEvent(newEv); + emit newEvent(); + break; + } +} + void DateBook::editEvent( const Event &e ) { if (syncing) { QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") ); return; } // workaround added for text input. QDialog editDlg( this, 0, TRUE ); DateEntry *entry; editDlg.setCaption( tr("Edit Event") ); QVBoxLayout *vb = new QVBoxLayout( &editDlg ); QScrollView *sv = new QScrollView( &editDlg, "scrollview" ); sv->setResizePolicy( QScrollView::AutoOneFit ); // KLUDGE!!! @@ -479,32 +536,34 @@ void DateBook::showDay( int year, int month, int day ) void DateBook::initDay() { if ( !dayView ) { dayView = new DateBookDay( ampm, onMonday, db, views, "day view" ); views->addWidget( dayView, DAY ); 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 & ) ) ); connect( dayView, SIGNAL( editEvent( const Event & ) ), this, SLOT( editEvent( const Event & ) ) ); + connect( dayView, SIGNAL( duplicateEvent( const Event & ) ), + this, SLOT( duplicateEvent( const Event & ) ) ); connect( dayView, SIGNAL( beamEvent( const Event & ) ), this, SLOT( beamEvent( const Event & ) ) ); connect( dayView, SIGNAL(sigNewEvent(const QString &)), this, SLOT(slotNewEventFromKey(const QString &)) ); } } void DateBook::initWeek() { if ( !weekView ) { weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" ); weekView->setStartViewTime( startTime ); views->addWidget( weekView, WEEK ); connect( weekView, SIGNAL( showDate( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) ); connect( this, SIGNAL( newEvent() ), @@ -803,49 +862,53 @@ void DateBook::slotNewEventFromKey( const QString &str ) start = end = d; start.setTime( QTime( 10, 0 ) ); end.setTime( QTime( 12, 0 ) ); } else if ( views->visibleWidget() == weekView ) { QDate d = weekView->date(); start = end = d; start.setTime( QTime( 10, 0 ) ); end.setTime( QTime( 12, 0 ) ); } else if ( views->visibleWidget() == weekLstView ) { QDate d = weekLstView->date(); start = end = d; start.setTime( QTime( 10, 0 ) ); end.setTime( QTime( 12, 0 ) ); } slotNewEntry(start, end, str); } -void DateBook::slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str) { +void DateBook::slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str, const QString &location) { // argh! This really needs to be encapsulated in a class // or function. QDialog newDlg( this, 0, TRUE ); newDlg.setCaption( DateEntryBase::tr("New Event") ); DateEntry *e; QVBoxLayout *vb = new QVBoxLayout( &newDlg ); QScrollView *sv = new QScrollView( &newDlg ); sv->setResizePolicy( QScrollView::AutoOneFit ); sv->setFrameStyle( QFrame::NoFrame ); sv->setHScrollBarMode( QScrollView::AlwaysOff ); vb->addWidget( sv ); Event ev; ev.setDescription( str ); // When the new gui comes in, change this... - ev.setLocation( tr("(Unknown)") ); + if(location==0) { + ev.setLocation( tr("(Unknown)") ); + } else { + ev.setLocation(location); + } ev.setStart( start ); ev.setEnd( end ); e = new DateEntry( onMonday, ev, ampm, &newDlg ); e->setAlarmEnabled( aPreset, presetTime, Event::Loud ); sv->addChild( e ); #if defined(Q_WS_QWS) || defined(_WS_QWS_) newDlg.showMaximized(); #endif while (newDlg.exec()) { ev = e->event(); ev.assignUid(); QString error = checkEvent( ev ); if ( !error.isNull() ) { if ( QMessageBox::warning( this, tr("Error!"), error, tr("Fix it"), tr("Continue"), 0, 0, 1 ) == 0 ) diff --git a/core/pim/datebook/datebook.h b/core/pim/datebook/datebook.h index ba8f97e..623862b 100644 --- a/core/pim/datebook/datebook.h +++ b/core/pim/datebook/datebook.h @@ -52,54 +52,55 @@ signals: void signalNotFound(); void signalWrapAround(); protected: QDate currentDate(); void timerEvent( QTimerEvent *e ); void closeEvent( QCloseEvent *e ); void view(int v, const QDate &d); public slots: void flush(); void reload(); private slots: void fileNew(); - void slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str); + void slotNewEntry(const QDateTime &start, const QDateTime &end, const QString &str, const QString &location=0); void slotSettings(); void newDefaultView(QAction *a); void slotToday(); // view today void changeClock( bool newClock ); void changeWeek( bool newDay ); void appMessage(const QCString& msg, const QByteArray& data); // handle key events in the day view... void slotNewEventFromKey( const QString &str ); void slotFind(); void slotDoFind( const QString &, const QDate &, bool, bool, int ); void viewDefault(const QDate &d); void viewDay(); void viewWeek(); void viewWeekLst(); void viewMonth(); void showDay( int y, int m, int d ); void editEvent( const Event &e ); + void duplicateEvent( const Event &e ); void removeEvent( const Event &e ); void receive( const QCString &msg, const QByteArray &data ); void setDocument( const QString & ); void beamEvent( const Event &e ); void beamDone( Ir *ir ); private: void addEvent( const Event &e ); void initDay(); void initWeek(); void initWeekLst(); void initMonth(); void loadSettings(); void saveSettings(); diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp index 42f026a..5d472a6 100644 --- a/core/pim/datebook/datebookday.cpp +++ b/core/pim/datebook/datebookday.cpp @@ -300,32 +300,34 @@ void DateBookDay::redraw() if ( isUpdatesEnabled() ) relayoutPage(); } void DateBookDay::getEvents() { widgetList.clear(); QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, currDate ); QValueListIterator<EffectiveEvent> it; for ( it = eventList.begin(); it != eventList.end(); ++it ) { EffectiveEvent ev=*it; if(!(ev.end().hour()==ev.start().hour() && ev.end().minute()==ev.start().minute())) { // Skip effective events with no duration. (i.e ending at 00:00) 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 ); } } } static int place( const DateBookDayWidget *item, bool *used, int maxn ) { int place = 0; int start = item->event().start().hour(); QTime e = item->event().end(); int end = e.hour(); @@ -707,44 +709,47 @@ void DateBookDayWidget::paintEvent( QPaintEvent *e ) QSimpleRichText rt( text, font() ); rt.setWidth( geom.width() - d - 6 ); rt.draw( &p, 7, 0, e->region(), colorGroup() ); } void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) { DateBookDayWidget *item; item = dateBook->getSelectedWidget(); if (item) item->update(); dateBook->setSelectedWidget(this); update(); dateBook->repaint(); - QPopupMenu m; - m.insertItem( tr( "Edit" ), 1 ); - m.insertItem( tr( "Delete" ), 2 ); - if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 ); - int r = m.exec( e->globalPos() ); - if ( r == 1 ) { - emit editMe( ev.event() ); - } else if ( r == 2 ) { - emit deleteMe( ev.event() ); - } else if ( r == 3 ) { - emit beamMe( ev.event() ); - } + QPopupMenu m; + m.insertItem( tr( "Edit" ), 1 ); + m.insertItem( tr( "Duplicate" ), 4 ); + m.insertItem( tr( "Delete" ), 2 ); + if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 ); + int r = m.exec( e->globalPos() ); + if ( r == 1 ) { + emit editMe( ev.event() ); + } else if ( r == 2 ) { + emit deleteMe( ev.event() ); + } else if ( r == 3 ) { + emit beamMe( ev.event() ); + } else if ( r == 4 ) { + emit duplicateMe( ev.event() ); + } } void DateBookDayWidget::setGeometry( const QRect &r ) { geom = r; setFixedSize( r.width()+1, r.height()+1 ); dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); show(); } //--------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------- DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db ) diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h index db1cd04..2faf24e 100644 --- a/core/pim/datebook/datebookday.h +++ b/core/pim/datebook/datebookday.h @@ -66,32 +66,33 @@ private: class DateBookDay; class DateBookDayWidget : public QWidget { Q_OBJECT public: DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db ); ~DateBookDayWidget(); const QRect &geometry() { return geom; } void setGeometry( const QRect &r ); const EffectiveEvent &event() const { return ev; } signals: void deleteMe( const Event &e ); + void duplicateMe( const Event &e ); void editMe( const Event &e ); void beamMe( const Event &e ); protected: void paintEvent( QPaintEvent *e ); void mousePressEvent( QMouseEvent *e ); private: /** * Sets the text for an all day Event * All day events have no time associated */ void setAllDayText( QString& text ); /** * Sets the EventText @@ -162,32 +163,33 @@ public: int startViewTime() const; void setSelectedWidget( DateBookDayWidget * ); DateBookDayWidget * getSelectedWidget( void ); void setJumpToCurTime( bool bJump ); void setRowStyle( int style ); public slots: void setDate( int y, int m, int d ); void setDate( QDate ); void redraw(); void slotWeekChanged( bool bStartOnMonday ); void updateView(); //updates TimeMarker and DayWidget-colors signals: void removeEvent( const Event& ); void editEvent( const Event& ); + void duplicateEvent( const Event& ); void beamEvent( const Event& ); void newEvent(); void sigNewEvent( const QString & ); protected slots: void keyPressEvent(QKeyEvent *); private slots: void dateChanged( int y, int m, int d ); void slotColWidthChanged() { relayoutPage(); }; private: void getEvents(); void relayoutPage( bool fromResize = false ); DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom ); QDate currDate; |