-rw-r--r-- | core/pim/datebook/datebook.cpp | 65 | ||||
-rw-r--r-- | core/pim/datebook/datebook.h | 3 | ||||
-rw-r--r-- | core/pim/datebook/datebookday.cpp | 5 | ||||
-rw-r--r-- | core/pim/datebook/datebookday.h | 2 |
4 files changed, 73 insertions, 2 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 @@ -402,6 +402,63 @@ 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) { @@ -492,6 +549,8 @@ void DateBook::initDay() 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 &)), @@ -816,7 +875,7 @@ void DateBook::slotNewEventFromKey( const QString &str ) } 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 ); @@ -832,7 +891,11 @@ void DateBook::slotNewEntry(const QDateTime &start, const QDateTime &end, const Event ev; ev.setDescription( str ); // When the new gui comes in, change this... + if(location==0) { ev.setLocation( tr("(Unknown)") ); + } else { + ev.setLocation(location); + } ev.setStart( start ); ev.setEnd( end ); 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 @@ -65,7 +65,7 @@ public slots: 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 @@ -87,6 +87,7 @@ private slots: 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 ); 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 @@ -313,6 +313,8 @@ void DateBookDay::getEvents() 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 & ) ), @@ -722,6 +724,7 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) 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() ); @@ -731,6 +734,8 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) emit deleteMe( ev.event() ); } else if ( r == 3 ) { emit beamMe( ev.event() ); + } else if ( r == 4 ) { + emit duplicateMe( ev.event() ); } } 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 @@ -79,6 +79,7 @@ public: signals: void deleteMe( const Event &e ); + void duplicateMe( const Event &e ); void editMe( const Event &e ); void beamMe( const Event &e ); @@ -175,6 +176,7 @@ public slots: signals: void removeEvent( const Event& ); void editEvent( const Event& ); + void duplicateEvent( const Event& ); void beamEvent( const Event& ); void newEvent(); void sigNewEvent( const QString & ); |