From fea2436fef9e7096b31840e7170a23280f3d6e39 Mon Sep 17 00:00:00 2001 From: umopapisdn Date: Mon, 24 Mar 2003 09:06:06 +0000 Subject: New feature: In dayview it's now possible to duplicate an event (and immediatly change some parameters for the duplicate). --- (limited to 'core/pim/datebook') 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... - ev.setLocation( tr("(Unknown)") ); + 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 & ) ), @@ -720,18 +722,21 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) 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 ) 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 & ); -- cgit v0.9.0.2