summaryrefslogtreecommitdiff
authorumopapisdn <umopapisdn>2003-04-12 00:22:57 (UTC)
committer umopapisdn <umopapisdn>2003-04-12 00:22:57 (UTC)
commit59e2de381eebb33238ee1b257736a9ae0afdbb7e (patch) (side-by-side diff)
treeb86025f2f75318aba65534048105cec36d4b7766
parentd37f3eac6b876285eb7a03ab01194ea261458ea5 (diff)
downloadopie-59e2de381eebb33238ee1b257736a9ae0afdbb7e.zip
opie-59e2de381eebb33238ee1b257736a9ae0afdbb7e.tar.gz
opie-59e2de381eebb33238ee1b257736a9ae0afdbb7e.tar.bz2
Bugfix: (bug #0000833) Duplicating an event should also duplicate the category.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp137
1 files changed, 58 insertions, 79 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index 3e18374..1bc82a5 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -282,358 +282,337 @@ void DateBook::slotSettings()
startTime = frmSettings.startTime();
bJumpToCurTime = frmSettings.jumpToCurTime();
rowStyle = frmSettings.rowStyle();
if ( dayView )
dayView->setStartViewTime( startTime );
dayView->setJumpToCurTime( bJumpToCurTime );
dayView->setRowStyle( rowStyle );
if ( weekView )
weekView->setStartViewTime( startTime );
saveSettings();
// make the change obvious
if ( views->visibleWidget() ) {
if ( views->visibleWidget() == dayView )
dayView->redraw();
else if ( views->visibleWidget() == weekView )
weekView->redraw();
}
}
}
void DateBook::fileNew()
{
slotNewEventFromKey("");
}
QString DateBook::checkEvent(const Event &e)
{
/* check if overlaps with itself */
bool checkFailed = FALSE;
/* check the next 12 repeats. should catch most problems */
QDate current_date = e.start().date();
Event previous = e;
for(int i = 0; i < 12; i++)
{
QDateTime next;
if (!nextOccurance(previous, current_date.addDays(1), next)) {
break; // no more repeats
}
if(next < previous.end()) {
checkFailed = TRUE;
break;
}
current_date = next.date();
}
if(checkFailed)
return tr("Event duration is potentially longer\n"
"than interval between repeats.");
return QString::null;
}
QDate DateBook::currentDate()
{
QDate d = QDate::currentDate();
if ( dayView && views->visibleWidget() == dayView ) {
d = dayView->date();
} else if ( weekView && views->visibleWidget() == weekView ) {
d = weekView->date();
} else if ( weekLstView && views->visibleWidget() == weekLstView ) {
d = weekLstView->date();
} else if ( monthView && views->visibleWidget() == monthView ) {
d = monthView->selectedDate();
}
return d;
}
void DateBook::view(int v, const QDate &d) {
if (v==DAY) {
initDay();
dayAction->setOn( TRUE );
dayView->setDate( d );
views->raiseWidget( dayView );
dayView->redraw();
} else if (v==WEEK) {
initWeek();
weekAction->setOn( TRUE );
weekView->setDate( d );
views->raiseWidget( weekView );
weekView->redraw();
} else if (v==WEEKLST) {
initWeekLst();
weekLstAction->setOn( TRUE );
weekLstView->setDate(d);
views->raiseWidget( weekLstView );
weekLstView->redraw();
} else if (v==MONTH) {
initMonth();
monthAction->setOn( TRUE );
monthView->setDate( d.year(), d.month(), d.day() );
views->raiseWidget( monthView );
monthView->redraw();
}
}
void DateBook::viewDefault(const QDate &d) {
Config config("DateBook");
config.setGroup("Main");
int current=config.readNumEntry("defaultview", DAY);
view(current,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;
+ 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());
-
+
+ Event dupevent(e); // Make a duplicate.
+
// 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 );
+ 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;
+ 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)
+ continue;
+ }
+ db->addEvent(newEv);
+ emit newEvent();
+ break;
}
- 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;
- }
+ 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!!!
- sv->setHScrollBarMode( QScrollView::AlwaysOff );
- vb->addWidget( sv );
- entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" );
- entry->timezone->setEnabled( FALSE );
- sv->addChild( entry );
+ // 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!!!
+ sv->setHScrollBarMode( QScrollView::AlwaysOff );
+ vb->addWidget( sv );
+ entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" );
+ entry->timezone->setEnabled( FALSE );
+ sv->addChild( entry );
#if defined(Q_WS_QWS) || defined(_WS_QWS_)
- editDlg.showMaximized();
+ 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;
+ 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->editEvent(e, newEv);
emit newEvent();
break;
- }
+ }
}
void DateBook::removeEvent( const Event &e )
{
- if (syncing) {
- QMessageBox::warning( this, tr("Calendar"),
- tr( "Can not edit data, currently syncing") );
- return;
- }
+ if (syncing) {
+ QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
+ return;
+ }
QString strName = e.description();
if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) )
return;
db->removeEvent( e );
if ( views->visibleWidget() == dayView && dayView )
dayView->redraw();
}
void DateBook::addEvent( const Event &e )
{
QDate d = e.start().date();
initDay();
dayView->setDate( d );
}
void DateBook::showDay( int year, int month, int day )
{
QDate d(year, month, day);
view(DAY,d);
}
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() ),
weekView, SLOT( redraw() ) );
}
//But also get it right: the year that we display can be different
//from the year of the current date. So, first find the year
//number of the current week.
int yearNumber, totWeeks;
calcWeek( currentDate(), totWeeks, yearNumber, onMonday );
QDate d = QDate( yearNumber, 12, 31 );
calcWeek( d, totWeeks, yearNumber, onMonday );
while ( totWeeks == 1 ) {
d = d.addDays( -1 );
calcWeek( d, totWeeks, yearNumber, onMonday );
}
if ( totWeeks != weekView->totalWeeks() )
weekView->setTotalWeeks( totWeeks );
}
void DateBook::initWeekLst() {
if ( !weekLstView ) {
weekLstView = new DateBookWeekLst( ampm, onMonday, db,
views, "weeklst view" );
views->addWidget( weekLstView, WEEKLST );
//weekLstView->setStartViewTime( startTime );
connect( weekLstView, SIGNAL( showDate( int, int, int ) ),
this, SLOT( showDay( int, int, int ) ) );
connect( weekLstView, SIGNAL( addEvent( const QDateTime &,
const QDateTime &,
const QString & , const QString &) ),
this, SLOT( slotNewEntry( const QDateTime &,
const QDateTime &,
const QString & , const QString &) ) );
connect( this, SIGNAL( newEvent() ),
weekLstView, SLOT( redraw() ) );
connect( weekLstView, SIGNAL( editEvent( const Event & ) ),
this, SLOT( editEvent( const Event & ) ) );
}
}
void DateBook::initMonth()
{
if ( !monthView ) {
monthView = new DateBookMonth( views, "month view", FALSE, db );
views->addWidget( monthView, MONTH );
connect( monthView, SIGNAL( dateClicked( int, int, int ) ),
this, SLOT( showDay( int, int, int ) ) );
connect( this, SIGNAL( newEvent() ),
monthView, SLOT( redraw() ) );
qApp->processEvents();
}
}
void DateBook::loadSettings()
{
{
Config config( "qpe" );
config.setGroup("Time");
ampm = config.readBoolEntry( "AMPM", TRUE );
onMonday = config.readBoolEntry( "MONDAY" );
}
{
Config config("DateBook");
config.setGroup("Main");
startTime = config.readNumEntry("startviewtime", 8);
aPreset = config.readBoolEntry("alarmpreset");
presetTime = config.readNumEntry("presettime");