summaryrefslogtreecommitdiff
authoralwin <alwin>2005-03-16 13:14:26 (UTC)
committer alwin <alwin>2005-03-16 13:14:26 (UTC)
commit3d43b9e40e562957e1a3fcbe9268634db45951ce (patch) (side-by-side diff)
tree637f67a6768f6a90e7834b96100f6c70bb66950b
parent4fef85eb55dbef5f8546caee084e4f0ce51081d3 (diff)
downloadopie-3d43b9e40e562957e1a3fcbe9268634db45951ce.zip
opie-3d43b9e40e562957e1a3fcbe9268634db45951ce.tar.gz
opie-3d43b9e40e562957e1a3fcbe9268634db45951ce.tar.bz2
ho.
in dayview a holiday will displayed (if plugin found) generated a straight forward dummy-holiday-plugin for testing the stuff.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp1258
-rw-r--r--core/pim/datebook/datebook.h87
-rw-r--r--core/pim/datebook/datebookday.cpp1084
-rw-r--r--core/pim/datebook/datebookday.h60
-rw-r--r--core/pim/datebook/datebookdayallday.cpp47
-rw-r--r--core/pim/datebook/datebookdayallday.h4
-rw-r--r--core/pim/datebook/holiday/dummy/config.in8
-rw-r--r--core/pim/datebook/holiday/dummy/dummy.pro20
-rw-r--r--core/pim/datebook/holiday/dummy/dummyholiday.cpp20
-rw-r--r--core/pim/datebook/holiday/dummy/dummyholiday.h19
10 files changed, 1416 insertions, 1191 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index a18a5b4..f6aab0c 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -21,1055 +21,1131 @@
**********************************************************************/
#define QTOPIA_INTERNAL_FD
#include "datebook.h"
#include "datebookday.h"
#include "datebooksettings.h"
#include "datebookweek.h"
#include "datebookweeklst.h"
#include "dateentryimpl.h"
#include <opie2/odebug.h>
+#include <opie2/oholidaypluginif.h>
+#include <opie2/oholidayplugin.h>
#include <qpe/datebookmonth.h>
#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <qpe/finddialog.h>
#include <qpe/ir.h>
#include <qpe/qpemessagebox.h>
#include <qpe/resource.h>
#include <qpe/sound.h>
#include <qpe/tzselect.h>
#include <qaction.h>
#include <qcopchannel_qws.h>
#include <qlayout.h>
#include <qmessagebox.h>
#include <qtimer.h>
#include <qtl.h>
#include <qtoolbar.h>
#include <qwidgetstack.h>
+#include <qdir.h>
+#include <qtopia/qlibrary.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
DateBook::DateBook( QWidget *parent, const char *, WFlags f )
: QMainWindow( parent, "datebook", f ),
aPreset( FALSE ),
presetTime( -1 ),
startTime( 8 ), // an acceptable default
rowStyle( 0 ),
bJumpToCurTime(FALSE),
syncing(FALSE),
inSearch(FALSE),
alarmCounter(0)
{
- bool needEvilHack= false; // if we need an Evil Hack
- QTime t;
- t.start();
- db = new DateBookDBHack;
- odebug << "loading db t=" << t.elapsed() << oendl;
- loadSettings();
- setCaption( tr("Calendar") );
- setIcon( Resource::loadPixmap( "datebook_icon" ) );
+ bool needEvilHack= false; // if we need an Evil Hack
+ QTime t;
+ t.start();
+ db = new DateBookDBHack;
+ odebug << "loading db t=" << t.elapsed() << oendl;
+ db_holiday = new DateBookHoliday();
- setToolBarsMovable( FALSE );
+ loadSettings();
+ setCaption( tr("Calendar") );
+ setIcon( Resource::loadPixmap( "datebook_icon" ) );
- views = new QWidgetStack( this );
- setCentralWidget( views );
+ setToolBarsMovable( FALSE );
- dayView = 0;
- weekView = 0;
- weekLstView = 0;
- monthView = 0;
+ views = new QWidgetStack( this );
+ setCentralWidget( views );
+
+ dayView = 0;
+ weekView = 0;
+ weekLstView = 0;
+ monthView = 0;
// QToolBar *bar = new QToolBar( this );
// bar->setHorizontalStretchable( TRUE );
// QMenuBar *mb = new QMenuBar( bar );
// mb->setMargin( 0 );
// QPopupMenu *view = new QPopupMenu( this );
// mb->insertItem( tr( "View" ), view );
- QToolBar *sub_bar = new QToolBar(this);
- sub_bar->setHorizontalStretchable(TRUE);
+ QToolBar *sub_bar = new QToolBar(this);
+ sub_bar->setHorizontalStretchable(TRUE);
- QActionGroup *g = new QActionGroup( this );
- g->setExclusive( TRUE );
+ QActionGroup *g = new QActionGroup( this );
+ g->setExclusive( TRUE );
- QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
- a->addTo( sub_bar );
+ QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
+ a->addTo( sub_bar );
- sub_bar->addSeparator();
+ sub_bar->addSeparator();
- a = new QAction( tr( "Today" ), Resource::loadPixmap( "datebook/to_day" ), QString::null, 0, g, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( slotToday() ) );
- a->addTo( sub_bar );
-// a->addTo( view );
+ a = new QAction( tr( "Today" ), Resource::loadPixmap( "datebook/to_day" ), QString::null, 0, g, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( slotToday() ) );
+ a->addTo( sub_bar );
+// a->addTo( view );
- sub_bar->addSeparator();
+ sub_bar->addSeparator();
- a = new QAction( tr( "Day" ), Resource::loadPixmap( "day" ), QString::null, 0, g, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( viewDay() ) );
- a->addTo( sub_bar );
+ a = new QAction( tr( "Day" ), Resource::loadPixmap( "day" ), QString::null, 0, g, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( viewDay() ) );
+ a->addTo( sub_bar );
// a->addTo( view );
- a->setToggleAction( TRUE );
- a->setOn( TRUE );
- dayAction = a;
+ a->setToggleAction( TRUE );
+ a->setOn( TRUE );
+ dayAction = a;
- a = new QAction( tr( "Week" ), Resource::loadPixmap( "week" ), QString::null, 0, g, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( viewWeek() ) );
- a->addTo( sub_bar );
+ a = new QAction( tr( "Week" ), Resource::loadPixmap( "week" ), QString::null, 0, g, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( viewWeek() ) );
+ a->addTo( sub_bar );
// a->addTo( view );
- a->setToggleAction( TRUE );
- weekAction = a;
+ a->setToggleAction( TRUE );
+ weekAction = a;
- a = new QAction( tr( "WeekLst" ), Resource::loadPixmap( "datebook/weeklst" ), QString::null, 0, g, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( viewWeekLst() ) );
- a->addTo( sub_bar );
+ a = new QAction( tr( "WeekLst" ), Resource::loadPixmap( "datebook/weeklst" ), QString::null, 0, g, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( viewWeekLst() ) );
+ a->addTo( sub_bar );
// a->addTo( view );
- a->setToggleAction( TRUE );
- weekLstAction = a;
+ a->setToggleAction( TRUE );
+ weekLstAction = a;
- a = new QAction( tr( "Month" ), Resource::loadPixmap( "month" ), QString::null, 0, g, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( viewMonth() ) );
- a->addTo( sub_bar );
+ a = new QAction( tr( "Month" ), Resource::loadPixmap( "month" ), QString::null, 0, g, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( viewMonth() ) );
+ a->addTo( sub_bar );
// a->addTo( view );
- a->setToggleAction( TRUE );
- monthAction = a;
+ a->setToggleAction( TRUE );
+ monthAction = a;
- sub_bar->addSeparator();
+ sub_bar->addSeparator();
- a = new QAction( tr( "Find" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL(activated()), this, SLOT(slotFind()) );
- a->addTo( sub_bar );
+ a = new QAction( tr( "Find" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL(activated()), this, SLOT(slotFind()) );
+ a->addTo( sub_bar );
- a = new QAction( tr( "Edit..." ), Resource::loadPixmap("SettingsIcon"), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( slotSettings() ) );
- a->addTo( sub_bar );
+ a = new QAction( tr( "Edit..." ), Resource::loadPixmap("SettingsIcon"), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( slotSettings() ) );
+ a->addTo( sub_bar );
- if(defaultView==DAY) viewDay();
- if(defaultView==WEEK) needEvilHack=true; // viewWeek();
- if(defaultView==WEEKLST) viewWeekLst();
- if(defaultView==MONTH) viewMonth();
+ if(defaultView==DAY) viewDay();
+ if(defaultView==WEEK) needEvilHack=true; // viewWeek();
+ if(defaultView==WEEKLST) viewWeekLst();
+ if(defaultView==MONTH) viewMonth();
- connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) );
- connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(changeWeek(bool)) );
+ connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) );
+ connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(changeWeek(bool)) );
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
- connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), this, SLOT(appMessage(const QCString&,const QByteArray&)) );
+ connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), this, SLOT(appMessage(const QCString&,const QByteArray&)) );
#endif
// listen on QPE/System
#if defined(Q_WS_QWS)
#if !defined(QT_NO_COP)
- QCopChannel *channel = new QCopChannel( "QPE/System", this );
- connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(receive(const QCString&,const QByteArray&)) );
- channel = new QCopChannel( "QPE/Datebook", this );
- connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(receive(const QCString&,const QByteArray&)) );
+ QCopChannel *channel = new QCopChannel( "QPE/System", this );
+ connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(receive(const QCString&,const QByteArray&)) );
+ channel = new QCopChannel( "QPE/Datebook", this );
+ connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(receive(const QCString&,const QByteArray&)) );
#endif
#endif
- odebug << "done t=" << t.elapsed() << oendl;
+ odebug << "done t=" << t.elapsed() << oendl;
connect( qApp, SIGNAL( flush() ), this, SLOT( flush() ) );
connect( qApp, SIGNAL( reload()), this, SLOT( reload() ) );
/*
* Here is a problem description:
* When Weekview is the default view
* a DateBookWeekView get's created
* redraw() get's called. So what?
* Remember that we're still in the c'tor
* and no final layout has happened? Ok
* now all Events get arranged. Their x
* position get's determined by a QHeader
* position. But the QHeader isn't layouted or
* at the right position. redraw() is a slot
* so we'll call it then via a singleShot
* from view()
*/
- if( needEvilHack ){
- QTimer::singleShot( 500, this, SLOT(viewWeek()) );
- }
+ if( needEvilHack ){
+ QTimer::singleShot( 500, this, SLOT(viewWeek()) );
+ }
}
void DateBook::receive( const QCString &msg, const QByteArray &data )
{
QDataStream stream( data, IO_ReadOnly );
if ( msg == "timeChange(QString)" ) {
- // update active view!
- if ( dayAction->isOn() )
- viewDay();
- else if ( weekAction->isOn() )
- viewWeek();
- else if ( monthAction->isOn() )
- viewMonth();
+ // update active view!
+ if ( dayAction->isOn() )
+ viewDay();
+ else if ( weekAction->isOn() )
+ viewWeek();
+ else if ( monthAction->isOn() )
+ viewMonth();
}
else if (msg == "editEvent(int)") {
- int uid;
- stream >> uid;
- Event e=db->eventByUID(uid);
- editEvent(e);
+ int uid;
+ stream >> uid;
+ Event e=db->eventByUID(uid);
+ editEvent(e);
}else if (msg == "viewDefault(QDate)"){
QDate day;
stream >> day;
viewDefault(day);
}
}
DateBook::~DateBook()
{
+ delete db_holiday;
}
void DateBook::slotSettings()
{
- DateBookSettings frmSettings( ampm, this );
- frmSettings.setStartTime( startTime );
- frmSettings.setAlarmPreset( aPreset, presetTime );
- frmSettings.setJumpToCurTime( bJumpToCurTime );
- frmSettings.setRowStyle( rowStyle );
- frmSettings.comboDefaultView->setCurrentItem(defaultView-1);
- frmSettings.comboWeekListView->setCurrentItem(weeklistviewconfig);
-
- bool found=false;
- for (int i=0; i<(frmSettings.comboLocation->count()); i++) {
- if ( frmSettings.comboLocation->text(i) == defaultLocation ) {
- frmSettings.comboLocation->setCurrentItem(i);
- found=true;
- break;
- }
- }
- if(!found) {
- frmSettings.comboLocation->insertItem(defaultLocation);
- frmSettings.comboLocation->setCurrentItem(frmSettings.comboLocation->count()-1);
- }
- frmSettings.comboCategory->setCategories(defaultCategories,"Calendar", tr("Calendar"));
-
- if ( QPEApplication::execDialog( &frmSettings ) ) {
- aPreset = frmSettings.alarmPreset();
- presetTime = frmSettings.presetTime();
- startTime = frmSettings.startTime();
- bJumpToCurTime = frmSettings.jumpToCurTime();
- rowStyle = frmSettings.rowStyle();
- defaultView=frmSettings.comboDefaultView->currentItem()+1;
- weeklistviewconfig=frmSettings.comboWeekListView->currentItem();
- defaultLocation=frmSettings.comboLocation->currentText();
- defaultCategories=frmSettings.comboCategory->currentCategories();
-
- 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();
- else if ( views->visibleWidget() == weekLstView )
- weekLstView->redraw();
- }
- }
+ DateBookSettings frmSettings( ampm, this );
+ frmSettings.setStartTime( startTime );
+ frmSettings.setAlarmPreset( aPreset, presetTime );
+ frmSettings.setJumpToCurTime( bJumpToCurTime );
+ frmSettings.setRowStyle( rowStyle );
+ frmSettings.comboDefaultView->setCurrentItem(defaultView-1);
+ frmSettings.comboWeekListView->setCurrentItem(weeklistviewconfig);
+
+ bool found=false;
+ for (int i=0; i<(frmSettings.comboLocation->count()); i++) {
+ if ( frmSettings.comboLocation->text(i) == defaultLocation ) {
+ frmSettings.comboLocation->setCurrentItem(i);
+ found=true;
+ break;
+ }
+ }
+ if(!found) {
+ frmSettings.comboLocation->insertItem(defaultLocation);
+ frmSettings.comboLocation->setCurrentItem(frmSettings.comboLocation->count()-1);
+ }
+ frmSettings.comboCategory->setCategories(defaultCategories,"Calendar", tr("Calendar"));
+
+ if ( QPEApplication::execDialog( &frmSettings ) ) {
+ aPreset = frmSettings.alarmPreset();
+ presetTime = frmSettings.presetTime();
+ startTime = frmSettings.startTime();
+ bJumpToCurTime = frmSettings.jumpToCurTime();
+ rowStyle = frmSettings.rowStyle();
+ defaultView=frmSettings.comboDefaultView->currentItem()+1;
+ weeklistviewconfig=frmSettings.comboWeekListView->currentItem();
+ defaultLocation=frmSettings.comboLocation->currentText();
+ defaultCategories=frmSettings.comboCategory->currentCategories();
+
+ 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();
+ else if ( views->visibleWidget() == weekLstView )
+ weekLstView->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();
+ 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 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();
+ 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();
+ 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();
- }
+ 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) {
- view(defaultView,d);
+ view(defaultView,d);
}
void DateBook::viewDay() {
- view(DAY,currentDate());
+ view(DAY,currentDate());
}
void DateBook::viewWeek() {
- view(WEEK,currentDate());
+ view(WEEK,currentDate());
}
void DateBook::viewWeekLst() {
- view(WEEKLST,currentDate());
+ view(WEEKLST,currentDate());
}
void DateBook::viewMonth() {
- view(MONTH,currentDate());
+ view(MONTH,currentDate());
}
void DateBook::insertEvent( const Event &e )
{
- Event dupEvent=e;
- if(!dupEvent.isValidUid() ) // tkcRom seems to be different
- dupEvent.assignUid();
- dupEvent.setLocation(defaultLocation);
- dupEvent.setCategories(defaultCategories);
- db->addEvent(dupEvent);
- emit newEvent();
+ Event dupEvent=e;
+ if(!dupEvent.isValidUid() ) // tkcRom seems to be different
+ dupEvent.assignUid();
+ dupEvent.setLocation(defaultLocation);
+ dupEvent.setCategories(defaultCategories);
+ db->addEvent(dupEvent);
+ emit newEvent();
}
void DateBook::duplicateEvent( const Event &e )
{
// 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;
+ if (syncing) {
+ QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
+ return;
}
- 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 );
-
- while ( QPEApplication::execDialog( &editDlg ) ) {
- Event newEv = entry->event();
- QString error = checkEvent(newEv);
- if (!error.isNull()) {
- if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0)
- continue;
- }
+ 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 );
+
+ while ( QPEApplication::execDialog( &editDlg ) ) {
+ Event newEv = entry->event();
+ QString error = checkEvent(newEv);
+ if (!error.isNull()) {
+ 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...
- if( newEv.uid() == e.uid() || !newEv.isValidUid() )
- newEv.assignUid();
+ if( newEv.uid() == e.uid() || !newEv.isValidUid() )
+ newEv.assignUid();
- 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;
- }
-
- // 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 );
-
- while ( QPEApplication::execDialog( &editDlg ) ) {
- 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, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0) continue;
- }
- db->editEvent(e, newEv);
- emit newEvent();
- break;
- }
+ 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 );
+
+ while ( QPEApplication::execDialog( &editDlg ) ) {
+ 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, tr("error box"), error, tr("Fix it"), tr("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;
+ 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 );
+ if ( !dayView ) {
+ dayView = new DateBookDay( ampm, onMonday, db, db_holiday, views, "day view" );
+ views->addWidget( dayView, DAY );
dayView->setJumpToCurTime( bJumpToCurTime );
- dayView->setStartViewTime( startTime );
- 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&)) );
- }
+ dayView->setStartViewTime( startTime );
+ 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 ( !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 );
+ }
}
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&) ) );
- connect( weekLstView, SIGNAL( duplicateEvent( const Event & ) ), this, SLOT( duplicateEvent( const Event & ) ) );
- connect( weekLstView, SIGNAL( beamEvent(const Event&) ), this, SLOT( beamEvent(const Event&) ) );
- connect( weekLstView, SIGNAL( removeEvent( const Event & ) ), this, SLOT( removeEvent( const Event & ) ) );
- }
+ 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&) ) );
+ connect( weekLstView, SIGNAL( duplicateEvent( const Event & ) ), this, SLOT( duplicateEvent( const Event & ) ) );
+ connect( weekLstView, SIGNAL( beamEvent(const Event&) ), this, SLOT( beamEvent(const Event&) ) );
+ connect( weekLstView, SIGNAL( removeEvent( const Event & ) ), this, SLOT( removeEvent( 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();
- }
+ 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 qpeconfig( "qpe" );
- qpeconfig.setGroup("Time");
- ampm = qpeconfig.readBoolEntry( "AMPM", TRUE );
- onMonday = qpeconfig.readBoolEntry( "MONDAY" );
-
- Config config("DateBook");
- config.setGroup("Main");
- startTime = config.readNumEntry("startviewtime", 8);
- aPreset = config.readBoolEntry("alarmpreset");
- presetTime = config.readNumEntry("presettime");
- bJumpToCurTime = config.readBoolEntry("jumptocurtime");
- rowStyle = config.readNumEntry("rowstyle");
- defaultView = config.readNumEntry("defaultview",DAY);
- weeklistviewconfig = config.readNumEntry("weeklistviewconfig",NORMAL);
-
- defaultLocation=config.readEntry("defaultLocation");
- QString tmpString=config.readEntry("defaultCategories");
- QStringList tmpStringList=QStringList::split(",",tmpString);
- defaultCategories.truncate(0);
-
- for( QStringList::Iterator i=tmpStringList.begin(); i!=tmpStringList.end(); i++) {
- defaultCategories.resize(defaultCategories.count()+1);
- defaultCategories[defaultCategories.count()-1]=(*i).toInt();
- }
+ Config qpeconfig( "qpe" );
+ qpeconfig.setGroup("Time");
+ ampm = qpeconfig.readBoolEntry( "AMPM", TRUE );
+ onMonday = qpeconfig.readBoolEntry( "MONDAY" );
+
+ Config config("DateBook");
+ config.setGroup("Main");
+ startTime = config.readNumEntry("startviewtime", 8);
+ aPreset = config.readBoolEntry("alarmpreset");
+ presetTime = config.readNumEntry("presettime");
+ bJumpToCurTime = config.readBoolEntry("jumptocurtime");
+ rowStyle = config.readNumEntry("rowstyle");
+ defaultView = config.readNumEntry("defaultview",DAY);
+ weeklistviewconfig = config.readNumEntry("weeklistviewconfig",NORMAL);
+
+ defaultLocation=config.readEntry("defaultLocation");
+ QString tmpString=config.readEntry("defaultCategories");
+ QStringList tmpStringList=QStringList::split(",",tmpString);
+ defaultCategories.truncate(0);
+
+ for( QStringList::Iterator i=tmpStringList.begin(); i!=tmpStringList.end(); i++) {
+ defaultCategories.resize(defaultCategories.count()+1);
+ defaultCategories[defaultCategories.count()-1]=(*i).toInt();
+ }
}
void DateBook::saveSettings()
{
- Config config( "qpe" );
- Config configDB( "DateBook" );
- configDB.setGroup( "Main" );
- configDB.writeEntry("startviewtime",startTime);
- configDB.writeEntry("alarmpreset",aPreset);
- configDB.writeEntry("presettime",presetTime);
- configDB.writeEntry("jumptocurtime", bJumpToCurTime);
- configDB.writeEntry("rowstyle", rowStyle);
- configDB.writeEntry("defaultview",defaultView);
- configDB.writeEntry("weeklistviewconfig",weeklistviewconfig);
-
- configDB.writeEntry("defaultLocation",defaultLocation);
- QStringList tmpStringList;
- for( uint i=0; i<defaultCategories.count(); i++) {
- tmpStringList << QString::number(defaultCategories[i]);
- }
- configDB.writeEntry("defaultCategories",tmpStringList.join(","));
+ Config config( "qpe" );
+ Config configDB( "DateBook" );
+ configDB.setGroup( "Main" );
+ configDB.writeEntry("startviewtime",startTime);
+ configDB.writeEntry("alarmpreset",aPreset);
+ configDB.writeEntry("presettime",presetTime);
+ configDB.writeEntry("jumptocurtime", bJumpToCurTime);
+ configDB.writeEntry("rowstyle", rowStyle);
+ configDB.writeEntry("defaultview",defaultView);
+ configDB.writeEntry("weeklistviewconfig",weeklistviewconfig);
+
+ configDB.writeEntry("defaultLocation",defaultLocation);
+ QStringList tmpStringList;
+ for( uint i=0; i<defaultCategories.count(); i++) {
+ tmpStringList << QString::number(defaultCategories[i]);
+ }
+ configDB.writeEntry("defaultCategories",tmpStringList.join(","));
}
void DateBook::appMessage(const QCString& msg, const QByteArray& data)
{
- bool needShow = FALSE;
- if ( msg == "alarm(QDateTime,int)" ) {
- QDataStream ds(data,IO_ReadOnly);
- QDateTime when; int warn;
- ds >> when >> warn;
-
- // check to make it's okay to continue,
- // this is the case that the time was set ahead, and
- // we are forced given a stale alarm...
- QDateTime current = QDateTime::currentDateTime();
- if ( current.time().hour() != when.time().hour() && current.time().minute() != when.time().minute() )
- return;
-
- QValueList<EffectiveEvent> list = db->getEffectiveEvents(when.addSecs(warn*60));
- if ( list.count() > 0 ) {
- QString msg;
- bool bSound = FALSE;
- int stopTimer = 0;
- bool found = FALSE;
- for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin(); it!=list.end(); ++it ) {
- if ( (*it).event().hasAlarm() ) {
- found = TRUE;
- msg += "<CENTER><B>" + (*it).description() + "</B>"
- + "<BR>" + (*it).location() + "<BR>"
- + TimeString::dateString((*it).event().start(),ampm)
- + (warn
- ? tr(" (in " + QString::number(warn)
- + tr(" minutes)"))
- : QString(""))
- + "<BR>"
- + (*it).notes() + "</CENTER>";
- if ( (*it).event().alarmSound() != Event::Silent ) {
- bSound = TRUE;
- }
- }
- }
- if ( found ) {
- if ( bSound ) {
- Sound::soundAlarm();
- alarmCounter = 0;
- stopTimer = startTimer( 5000 );
- }
- QDialog dlg( this, 0, TRUE );
- QVBoxLayout *vb = new QVBoxLayout( &dlg );
- QScrollView *view = new QScrollView( &dlg, "scrollView");
- view->setResizePolicy( QScrollView::AutoOneFit );
- vb->addWidget( view );
- QLabel *lblMsg = new QLabel( msg, &dlg );
- view->addChild( lblMsg );
- QPushButton *cmdOk = new QPushButton( tr("OK"), &dlg );
- connect( cmdOk, SIGNAL(clicked()), &dlg, SLOT(accept()) );
- vb->addWidget( cmdOk );
-
- needShow = QPEApplication::execDialog( &dlg );
-
- if ( bSound )
- killTimer( stopTimer );
- }
- }
- } else if ( msg == "nextView()" ) {
+ bool needShow = FALSE;
+ if ( msg == "alarm(QDateTime,int)" ) {
+ QDataStream ds(data,IO_ReadOnly);
+ QDateTime when; int warn;
+ ds >> when >> warn;
+
+ // check to make it's okay to continue,
+ // this is the case that the time was set ahead, and
+ // we are forced given a stale alarm...
+ QDateTime current = QDateTime::currentDateTime();
+ if ( current.time().hour() != when.time().hour() && current.time().minute() != when.time().minute() )
+ return;
+
+ QValueList<EffectiveEvent> list = db->getEffectiveEvents(when.addSecs(warn*60));
+ if ( list.count() > 0 ) {
+ QString msg;
+ bool bSound = FALSE;
+ int stopTimer = 0;
+ bool found = FALSE;
+ for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin(); it!=list.end(); ++it ) {
+ if ( (*it).event().hasAlarm() ) {
+ found = TRUE;
+ msg += "<CENTER><B>" + (*it).description() + "</B>"
+ + "<BR>" + (*it).location() + "<BR>"
+ + TimeString::dateString((*it).event().start(),ampm)
+ + (warn
+ ? tr(" (in " + QString::number(warn)
+ + tr(" minutes)"))
+ : QString(""))
+ + "<BR>"
+ + (*it).notes() + "</CENTER>";
+ if ( (*it).event().alarmSound() != Event::Silent ) {
+ bSound = TRUE;
+ }
+ }
+ }
+ if ( found ) {
+ if ( bSound ) {
+ Sound::soundAlarm();
+ alarmCounter = 0;
+ stopTimer = startTimer( 5000 );
+ }
+ QDialog dlg( this, 0, TRUE );
+ QVBoxLayout *vb = new QVBoxLayout( &dlg );
+ QScrollView *view = new QScrollView( &dlg, "scrollView");
+ view->setResizePolicy( QScrollView::AutoOneFit );
+ vb->addWidget( view );
+ QLabel *lblMsg = new QLabel( msg, &dlg );
+ view->addChild( lblMsg );
+ QPushButton *cmdOk = new QPushButton( tr("OK"), &dlg );
+ connect( cmdOk, SIGNAL(clicked()), &dlg, SLOT(accept()) );
+ vb->addWidget( cmdOk );
+
+ needShow = QPEApplication::execDialog( &dlg );
+
+ if ( bSound )
+ killTimer( stopTimer );
+ }
+ }
+ } else if ( msg == "nextView()" ) {
needShow = true;
- if ( !qApp-> activeWindow ( )) {
- needShow = TRUE;
- } else {
- QWidget* cur = views->visibleWidget();
- if ( cur ) {
- if ( cur == dayView )
- viewWeek();
- else if ( cur == weekView )
- viewWeekLst();
- else if ( cur == weekLstView )
- viewMonth();
- else if ( cur == monthView )
- viewDay();
- needShow = TRUE;
- }
- }
+ if ( !qApp-> activeWindow ( )) {
+ needShow = TRUE;
+ } else {
+ QWidget* cur = views->visibleWidget();
+ if ( cur ) {
+ if ( cur == dayView )
+ viewWeek();
+ else if ( cur == weekView )
+ viewWeekLst();
+ else if ( cur == weekLstView )
+ viewMonth();
+ else if ( cur == monthView )
+ 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);
+ 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();
- QPEApplication::setKeepRunning();
-// setActiveWindow();
- }
+// raise();
+ QPEApplication::setKeepRunning();
+// setActiveWindow();
+ }
}
void DateBook::reload()
{
- db->reload();
- if ( dayAction->isOn() ) viewDay();
- else if ( weekAction->isOn() ) viewWeek();
- else if ( monthAction->isOn() ) viewMonth();
- syncing = FALSE;
+ db->reload();
+ if ( dayAction->isOn() ) viewDay();
+ else if ( weekAction->isOn() ) viewWeek();
+ else if ( monthAction->isOn() ) viewMonth();
+ syncing = FALSE;
}
void DateBook::flush()
{
- syncing = TRUE;
- db->save();
+ syncing = TRUE;
+ db->save();
}
void DateBook::timerEvent( QTimerEvent *e )
{
- if ( alarmCounter < 10 ) {
- alarmCounter++;
- Sound::soundAlarm();
- } else {
- killTimer( e->timerId() );
- }
+ if ( alarmCounter < 10 ) {
+ alarmCounter++;
+ Sound::soundAlarm();
+ } else {
+ killTimer( e->timerId() );
+ }
}
void DateBook::changeClock( bool newClock )
{
- ampm = newClock;
- // repaint the affected objects...
- if (dayView) dayView->redraw();
- if (weekView) weekView->redraw();
- if (weekLstView) weekLstView->redraw();
+ ampm = newClock;
+ // repaint the affected objects...
+ if (dayView) dayView->redraw();
+ if (weekView) weekView->redraw();
+ if (weekLstView) weekLstView->redraw();
}
void DateBook::changeWeek( bool m )
{
- /* no need to redraw, each widget catches. Do need to
- store though for widgets we haven't made yet */
- onMonday = m;
+ /* no need to redraw, each widget catches. Do need to
+ store though for widgets we haven't made yet */
+ onMonday = m;
}
void DateBook::slotToday()
{
- // we need to view today using default view
- view(defaultView,QDate::currentDate());
+ // we need to view today using default view
+ view(defaultView,QDate::currentDate());
}
void DateBook::closeEvent( QCloseEvent *e )
{
- if(syncing) {
- /* no need to save, did that at flush */
- e->accept();
- return;
- }
-
- // save settings will generate it's own error messages, no
- // need to do checking ourselves.
- saveSettings();
- if ( db->save() ) {
- e->accept();
- } else {
- if ( QMessageBox::critical( this, tr( "Out of space" ),
- tr("Calendar was unable to save\n"
- "your changes.\n"
- "Free up some space and try again.\n"
- "\nQuit anyway?"),
- QMessageBox::Yes|QMessageBox::Escape,
- QMessageBox::No|QMessageBox::Default )
- != QMessageBox::No )
- e->accept();
- else
- e->ignore();
+ if(syncing) {
+ /* no need to save, did that at flush */
+ e->accept();
+ return;
+ }
+
+ // save settings will generate it's own error messages, no
+ // need to do checking ourselves.
+ saveSettings();
+ if ( db->save() ) {
+ e->accept();
+ } else {
+ if ( QMessageBox::critical( this, tr( "Out of space" ),
+ tr("Calendar was unable to save\n"
+ "your changes.\n"
+ "Free up some space and try again.\n"
+ "\nQuit anyway?"),
+ QMessageBox::Yes|QMessageBox::Escape,
+ QMessageBox::No|QMessageBox::Default )
+ != QMessageBox::No )
+ e->accept();
+ else
+ e->ignore();
}
}
// Entering directly from the "keyboard"
void DateBook::slotNewEventFromKey( const QString &str )
{
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;
}
// We get to here from a key pressed in the Day View
// So we can assume some things. We want the string
// passed in to be part of the description.
QDateTime start, end;
if ( views->visibleWidget() == dayView ) {
- dayView->selectedDates( start, end );
+ dayView->selectedDates( start, end );
} else if ( views->visibleWidget() == monthView ) {
- QDate d = monthView->selectedDate();
- start = end = d;
- start.setTime( QTime( 10, 0 ) );
- end.setTime( QTime( 12, 0 ) );
+ QDate d = monthView->selectedDate();
+ 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 ) );
+ 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 ) );
- }
+ 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, 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...
- if(location==0) {
- if(defaultLocation.isEmpty()) {
- ev.setLocation(tr("(Unknown)"));
- } else {
- ev.setLocation( defaultLocation );
- }
- } else {
- ev.setLocation(location);
- }
- ev.setCategories(defaultCategories);
- ev.setStart( start );
- ev.setEnd( end );
-
- e = new DateEntry( onMonday, ev, ampm, &newDlg );
- e->setAlarmEnabled( aPreset, presetTime, Event::Loud );
- sv->addChild( e );
- while ( QPEApplication::execDialog( &newDlg ) ) {
- 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 )
- continue;
- }
- db->addEvent( ev );
- emit newEvent();
- break;
- }
+ // 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...
+ if(location==0) {
+ if(defaultLocation.isEmpty()) {
+ ev.setLocation(tr("(Unknown)"));
+ } else {
+ ev.setLocation( defaultLocation );
+ }
+ } else {
+ ev.setLocation(location);
+ }
+ ev.setCategories(defaultCategories);
+ ev.setStart( start );
+ ev.setEnd( end );
+
+ e = new DateEntry( onMonday, ev, ampm, &newDlg );
+ e->setAlarmEnabled( aPreset, presetTime, Event::Loud );
+ sv->addChild( e );
+ while ( QPEApplication::execDialog( &newDlg ) ) {
+ 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 )
+ continue;
+ }
+ db->addEvent( ev );
+ emit newEvent();
+ break;
+ }
}
void DateBook::setDocument( const QString &filename )
{
if ( filename.find(".vcs") != int(filename.length()) - 4 ) return;
QValueList<Event> tl = Event::readVCalendar( filename );
for( QValueList<Event>::Iterator it = tl.begin(); it != tl.end(); ++it ) {
- db->addEvent( *it );
+ db->addEvent( *it );
}
}
static const char * beamfile = "/tmp/obex/event.vcs";
void DateBook::beamEvent( const Event &e )
{
- odebug << "trying to beam" << oendl;
+ odebug << "trying to beam" << oendl;
unlink( beamfile ); // delete if exists
mkdir("/tmp/obex/", 0755);
Event::writeVCalendar( beamfile, e );
Ir *ir = new Ir( this );
connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
QString description = e.description();
ir->send( beamfile, description, "text/x-vCalendar" );
}
void DateBook::beamDone( Ir *ir )
{
delete ir;
unlink( beamfile );
}
void DateBook::slotFind()
{
// move it to the day view...
viewDay();
FindDialog frmFind( "Calendar", this ); // no tr needed
frmFind.setUseDate( true );
frmFind.setDate( currentDate() );
QObject::connect( &frmFind,
SIGNAL(signalFindClicked(const QString&,const QDate&,bool,bool,int)),
- this,
- SLOT(slotDoFind(const QString&,const QDate&,bool,bool,int)) );
+ this,
+ SLOT(slotDoFind(const QString&,const QDate&,bool,bool,int)) );
QObject::connect( this,
- SIGNAL(signalNotFound()),
- &frmFind,
- SLOT(slotNotFound()) );
+ SIGNAL(signalNotFound()),
+ &frmFind,
+ SLOT(slotNotFound()) );
QObject::connect( this,
- SIGNAL(signalWrapAround()),
- &frmFind,
- SLOT(slotWrapAround()) );
- frmFind.move(0,0);
+ SIGNAL(signalWrapAround()),
+ &frmFind,
+ SLOT(slotWrapAround()) );
+ frmFind.move(0,0);
frmFind.exec();
inSearch = false;
}
bool catComp( QArray<int> cats, int category )
{
bool returnMe;
int i,
- count;
+ count;
count = int(cats.count());
returnMe = false;
if ( (category == -1 && count == 0) || category == -2 )
- returnMe = true;
+ returnMe = true;
else {
- for ( i = 0; i < count; i++ ) {
- if ( category == cats[i] ) {
- returnMe = true;
- break;
- }
- }
+ for ( i = 0; i < count; i++ ) {
+ if ( category == cats[i] ) {
+ returnMe = true;
+ break;
+ }
+ }
}
return returnMe;
}
void DateBook::slotDoFind( const QString& txt, const QDate &dt,
- bool caseSensitive, bool /*backwards*/,
- int category )
+ bool caseSensitive, bool /*backwards*/,
+ int category )
{
QDateTime dtEnd( QDate(3001, 1, 1), QTime(0, 0, 0) ),
- next;
+ next;
QRegExp r( txt );
r.setCaseSensitive( caseSensitive );
static Event rev, nonrev;
if ( !inSearch ) {
- rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
- nonrev.setStart( rev.start() );
- inSearch = true;
+ rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
+ nonrev.setStart( rev.start() );
+ inSearch = true;
}
static QDate searchDate = dt;
// if true at the end we will start at the begin again and afterwards
// we will emit string not found
static bool wrapAround = true;
bool candidtate;
candidtate = false;
QValueList<Event> repeats = db->getRawRepeats();
// find the candidate for the first repeat that matches...
// first check if there can ever be a match and then compute
// the next occurence from start. See if this event is closer
// to the beginning (start. next < dtEnd) and not smaller then the last
// result. If we find a canditate we set the dtEnd to the time
// of the ocurrence and rev to this occurence.
// set wrap around to true because there might be more events coming
// and we're not at the end.
QValueListConstIterator<Event> it;
QDate start = dt;
for ( it = repeats.begin(); it != repeats.end(); ++it ) {
- if ( catComp( (*it).categories(), category ) ) {
+ if ( catComp( (*it).categories(), category ) ) {
if ( (*it).match( r ) ) {
if ( nextOccurance( *it, start, next ) ) {
if ( next < dtEnd && !(next <= rev.start() ) ) {
rev = *it;
dtEnd = next;
rev.setStart( next );
candidtate = true;
wrapAround = true;
}
}
}
}
}
// now the for first non repeat...
// dtEnd is set by the previous iteration of repeatingEvents
// check if we find a closer item. Also set dtEnd to find even
// more close occurrence
QValueList<Event> nonRepeats = db->getNonRepeatingEvents( dt, dtEnd.date() );
qHeapSort( nonRepeats.begin(), nonRepeats.end() );
for ( it = nonRepeats.begin(); it != nonRepeats.end(); ++it ) {
- if ( catComp( (*it).categories(), category ) ) {
- if ( (*it).start() < dtEnd ) {
- if ( (*it).match( r ) && !(*it <= nonrev) ) {
- nonrev = *it;
- dtEnd = nonrev.start();
- candidtate = true;
- wrapAround = true;
- break;
- }
- }
- }
+ if ( catComp( (*it).categories(), category ) ) {
+ if ( (*it).start() < dtEnd ) {
+ if ( (*it).match( r ) && !(*it <= nonrev) ) {
+ nonrev = *it;
+ dtEnd = nonrev.start();
+ candidtate = true;
+ wrapAround = true;
+ break;
+ }
+ }
+ }
}
if ( candidtate ) {
- dayView->setStartViewTime( dtEnd.time().hour() );
- dayView->setDate( dtEnd.date().year(), dtEnd.date().month(),
- dtEnd.date().day() );
+ dayView->setStartViewTime( dtEnd.time().hour() );
+ dayView->setDate( dtEnd.date().year(), dtEnd.date().month(),
+ dtEnd.date().day() );
} else {
- if ( wrapAround ) {
- emit signalWrapAround();
- rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
- nonrev.setStart( rev.start() );
- } else
- emit signalNotFound();
- wrapAround = !wrapAround;
+ if ( wrapAround ) {
+ emit signalWrapAround();
+ rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
+ nonrev.setStart( rev.start() );
+ } else
+ emit signalNotFound();
+ wrapAround = !wrapAround;
}
}
Event DateBookDBHack::eventByUID(int uid) {
// FIXME: Dirty Hacks to get hold of the private event lists
QDate start;
QDate end=start.addDays(-1);
QValueList<Event> myEventList=getNonRepeatingEvents(start,end);
QValueList<Event> myRepeatEvents=getRawRepeats();
QValueList<Event>::ConstIterator it;
for (it = myEventList.begin(); it != myEventList.end(); it++) {
- if ((*it).uid() == uid) return *it;
+ if ((*it).uid() == uid) return *it;
}
for (it = myRepeatEvents.begin(); it != myRepeatEvents.end(); it++) {
- if ((*it).uid() == uid) return *it;
+ if ((*it).uid() == uid) return *it;
}
Event ev;
return ev; // return at least
}
+
+DateBookHoliday::DateBookHoliday()
+{
+ _pluginlist.clear();
+ init();
+}
+
+DateBookHoliday::~DateBookHoliday()
+{
+ deinit();
+}
+
+void DateBookHoliday::deinit()
+{
+ QValueList<HPlugin*>::Iterator it;
+ for (it=_pluginlist.begin();it!=_pluginlist.end();++it) {
+ HPlugin*_pl = *it;
+ // destructs itself?
+ _pl->_if->release();
+ _pl->_lib->unload();
+ delete _pl->_lib;
+ delete _pl;
+ }
+ _pluginlist.clear();
+}
+
+void DateBookHoliday::init()
+{
+ deinit();
+ QString path = QPEApplication::qpeDir() + "plugins/datebook/holiday";
+ QDir dir( path, "lib*.so" );
+ QStringList list = dir.entryList();
+ QStringList::Iterator it;
+ for (it=list.begin();it!=list.end();++it) {
+ Opie::Datebook::HolidayPluginIf*hif = 0;
+ QLibrary*lib=new QLibrary(path+"/"+*it);
+ if ((lib->queryInterface(IID_HOLIDAY_PLUGIN,(QUnknownInterface**)&hif) == QS_OK) && hif) {
+ Opie::Datebook::HolidayPlugin*pl = hif->plugin();
+ if (pl) {
+ HPlugin*_pl=new HPlugin;
+ _pl->_plugin = pl;
+ odebug << "Found holiday " << pl->description()<<oendl;
+ _pl->_lib = lib;
+ _pl->_if = hif;
+ _pluginlist.append(_pl);
+ } else {
+ }
+ } else {
+ delete lib;
+ }
+ }
+}
+
+QStringList DateBookHoliday::holidaylist(const QDate&aDate)
+{
+ QStringList ret;
+ QValueList<HPlugin*>::Iterator it;
+ for (it=_pluginlist.begin();it!=_pluginlist.end();++it) {
+ HPlugin*_pl = *it;
+ ret+=_pl->_plugin->entries(aDate);
+ }
+ return ret;
+}
+
+QStringList DateBookHoliday::holidaylist(unsigned year, unsigned month, unsigned day)
+{
+ return holidaylist(QDate(year,month,day));
+}
+
diff --git a/core/pim/datebook/datebook.h b/core/pim/datebook/datebook.h
index d7cfb33..54ffcfb 100644
--- a/core/pim/datebook/datebook.h
+++ b/core/pim/datebook/datebook.h
@@ -15,125 +15,154 @@
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#ifndef DATEBOOK_H
#define DATEBOOK_H
#include <qpe/datebookdb.h>
#include <qmainwindow.h>
-enum { DAY=1,WEEK,WEEKLST,MONTH }; // defaultView values
-enum { NONE=0,NORMAL,EXTENDED }; // WeekLstView's modes.
+enum { DAY=1,WEEK,WEEKLST,MONTH }; // defaultView values
+enum { NONE=0,NORMAL,EXTENDED }; // WeekLstView's modes.
class QAction;
class QWidgetStack;
class DateBookDay;
class DateBookWeek;
class DateBookWeekLst;
class DateBookMonth;
class Event;
class QDate;
class Ir;
+class QLibrary;
+
+namespace Opie {
+namespace Datebook {
+ class HolidayPlugin;
+ class HolidayPluginIf;
+}
+}
class DateBookDBHack : public DateBookDB {
public:
Event eventByUID(int id);
};
+class DateBookHoliday
+{
+public:
+ DateBookHoliday();
+ virtual ~DateBookHoliday();
+
+ QStringList holidaylist(const QDate&);
+ QStringList holidaylist(unsigned year, unsigned month, unsigned day);
+protected:
+ void init();
+ void deinit();
+
+ struct HPlugin {
+ Opie::Datebook::HolidayPlugin*_plugin;
+ QLibrary*_lib;
+ Opie::Datebook::HolidayPluginIf*_if;
+ };
+ QValueList<HPlugin*>_pluginlist;
+};
+
class DateBook : public QMainWindow
{
Q_OBJECT
public:
- static QString appName() { return QString::fromLatin1("datebook"); }
+ static QString appName() { return QString::fromLatin1("datebook"); }
DateBook( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
~DateBook();
signals:
void newEvent();
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, const QString &location=0);
void slotSettings();
- void slotToday(); // view today
+ 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 insertEvent( const Event &e );
- void editEvent( const Event &e );
+ void insertEvent( const Event &e );
+ 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();
private:
- DateBookDBHack *db;
- QWidgetStack *views;
- DateBookDay *dayView;
- DateBookWeek *weekView;
- DateBookMonth *monthView;
- DateBookWeekLst *weekLstView;
- QAction *dayAction, *weekAction, *weekLstAction, *monthAction;
- int weeklistviewconfig;
- bool aPreset; // have everything set to alarm?
- int presetTime; // the standard time for the alarm
- int startTime;
- int rowStyle;
- int defaultView;
- QArray<int> defaultCategories;
- QString defaultLocation;
- bool bJumpToCurTime; //should jump to current time in dayview?
- bool ampm;
- bool onMonday;
-
- bool syncing;
- bool inSearch;
-
- int alarmCounter;
+ DateBookDBHack *db;
+ DateBookHoliday*db_holiday;
+ QWidgetStack *views;
+ DateBookDay *dayView;
+ DateBookWeek *weekView;
+ DateBookMonth *monthView;
+ DateBookWeekLst *weekLstView;
+ QAction *dayAction, *weekAction, *weekLstAction, *monthAction;
+ int weeklistviewconfig;
+ bool aPreset; // have everything set to alarm?
+ int presetTime; // the standard time for the alarm
+ int startTime;
+ int rowStyle;
+ int defaultView;
+ QArray<int> defaultCategories;
+ QString defaultLocation;
+ bool bJumpToCurTime; //should jump to current time in dayview?
+ bool ampm;
+ bool onMonday;
+
+ bool syncing;
+ bool inSearch;
+
+ int alarmCounter;
QString checkEvent(const Event &);
};
#endif
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index ca63dc5..dfe39e5 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -13,761 +13,771 @@
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "datebookday.h"
#include "datebookdayheaderimpl.h"
#include "datebookdayallday.h"
+#include <opie2/oholidayplugin.h>
#include <qpe/resource.h>
#include <qpe/qpeapplication.h>
#include <qpe/ir.h>
#include <qsimplerichtext.h>
#include <qpopupmenu.h>
#include <qtimer.h>
DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, const char *name )
: QTable( 24, 1, parent, name ), ampm( whichClock ), currDate( QDate::currentDate() )
{
- enableClipper(TRUE);
- setTopMargin( 0 );
- horizontalHeader()->hide();
- setLeftMargin(38);
- setColumnStretchable( 0, TRUE );
- setHScrollBarMode( QScrollView::AlwaysOff );
- verticalHeader()->setPalette(white);
- verticalHeader()->setResizeEnabled(FALSE);
- setSelectionMode( Single );
-
- // get rid of being able to edit things...
- QTableItem *tmp;
- int row;
- for ( row = 0; row < numRows(); row++ ) {
- tmp = new QTableItem( this, QTableItem::Never, QString::null);
- setItem( row, 0, tmp );
- //setRowHeight( row, 40);
- }
-
- initHeader();
- QObject::connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotChangeClock(bool)) );
+ enableClipper(TRUE);
+ setTopMargin( 0 );
+ horizontalHeader()->hide();
+ setLeftMargin(38);
+ setColumnStretchable( 0, TRUE );
+ setHScrollBarMode( QScrollView::AlwaysOff );
+ verticalHeader()->setPalette(white);
+ verticalHeader()->setResizeEnabled(FALSE);
+ setSelectionMode( Single );
+
+ // get rid of being able to edit things...
+ QTableItem *tmp;
+ int row;
+ for ( row = 0; row < numRows(); row++ ) {
+ tmp = new QTableItem( this, QTableItem::Never, QString::null);
+ setItem( row, 0, tmp );
+ //setRowHeight( row, 40);
+ }
+
+ initHeader();
+ QObject::connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotChangeClock(bool)) );
}
void DateBookDayView::initHeader()
{
- QString strTmp;
- int preferredWidth = 0;
- for ( int i = 0; i < 24; ++i ) {
- if ( ampm ) {
- if ( i == 0 )
- strTmp = QString::number(12) + ":00";
- else if ( i == 12 )
- strTmp = QString::number(12) + tr(":00p");
- else if ( i > 12 )
- strTmp = QString::number( i - 12 ) + tr(":00p");
- else
- strTmp = QString::number(i) + ":00";
- } else {
- if ( i < 10 )
- strTmp = "0" + QString::number(i) + ":00";
- else
- strTmp = QString::number(i) + ":00";
- }
- strTmp = strTmp.rightJustify( 6, ' ' );
- verticalHeader()->setLabel( i, strTmp );
-
- // Compute correct width for current Font (Add some space right)
- int actWidth = QFontMetrics( QFont::defaultFont() ).width( strTmp + QString(" ") );
- if ( preferredWidth < actWidth )
- preferredWidth = actWidth;
- setRowStretchable( i, FALSE );
- }
-
- // It seems as if the header has a bug. It does not resize
- // correct horizontally if it is used vertical..
- // Thus, we do it manually..
- setLeftMargin( preferredWidth );
+ QString strTmp;
+ int preferredWidth = 0;
+ for ( int i = 0; i < 24; ++i ) {
+ if ( ampm ) {
+ if ( i == 0 )
+ strTmp = QString::number(12) + ":00";
+ else if ( i == 12 )
+ strTmp = QString::number(12) + tr(":00p");
+ else if ( i > 12 )
+ strTmp = QString::number( i - 12 ) + tr(":00p");
+ else
+ strTmp = QString::number(i) + ":00";
+ } else {
+ if ( i < 10 )
+ strTmp = "0" + QString::number(i) + ":00";
+ else
+ strTmp = QString::number(i) + ":00";
+ }
+ strTmp = strTmp.rightJustify( 6, ' ' );
+ verticalHeader()->setLabel( i, strTmp );
+
+ // Compute correct width for current Font (Add some space right)
+ int actWidth = QFontMetrics( QFont::defaultFont() ).width( strTmp + QString(" ") );
+ if ( preferredWidth < actWidth )
+ preferredWidth = actWidth;
+ setRowStretchable( i, FALSE );
+ }
+
+ // It seems as if the header has a bug. It does not resize
+ // correct horizontally if it is used vertical..
+ // Thus, we do it manually..
+ setLeftMargin( preferredWidth );
}
void DateBookDayView::slotDateChanged( int y, int m, int d )
{
- currDate.setYMD(y,m,d);
+ currDate.setYMD(y,m,d);
}
void DateBookDayView::slotChangeClock( bool newClock )
{
- ampm = newClock;
- initHeader();
+ ampm = newClock;
+ initHeader();
}
bool DateBookDayView::whichClock() const
{
- return ampm;
+ return ampm;
}
void DateBookDayView::moveUp()
{
- scrollBy(0, -20);
+ scrollBy(0, -20);
}
void DateBookDayView::moveDown()
{
- scrollBy(0, 20);
+ scrollBy(0, 20);
}
void DateBookDayView::paintCell( QPainter *p, int, int, const QRect &cr, bool )
{
- int w = cr.width();
- int h = cr.height();
- p->fillRect( 0, 0, w, h, colorGroup().brush( QColorGroup::Base ) );
- if ( showGrid() ) {
- // Draw our lines
- int x2 = w - 1;
- int y2 = h - 1;
- QPen pen( p->pen() );
- p->setPen( colorGroup().dark() );
- p->drawLine( x2, 0, x2, y2 );
- p->drawLine( 0, y2, x2, y2 );
-
- p->setPen( colorGroup().midlight() );
- p->drawLine( 0, y2 - h/2, x2, y2 - h/2);
-
- p->setPen( pen );
+ int w = cr.width();
+ int h = cr.height();
+ p->fillRect( 0, 0, w, h, colorGroup().brush( QColorGroup::Base ) );
+ if ( showGrid() ) {
+ // Draw our lines
+ int x2 = w - 1;
+ int y2 = h - 1;
+ QPen pen( p->pen() );
+ p->setPen( colorGroup().dark() );
+ p->drawLine( x2, 0, x2, y2 );
+ p->drawLine( 0, y2, x2, y2 );
+
+ p->setPen( colorGroup().midlight() );
+ p->drawLine( 0, y2 - h/2, x2, y2 - h/2);
+
+ p->setPen( pen );
}
}
void DateBookDayView::paintFocus( QPainter *, const QRect & )
{
}
void DateBookDayView::resizeEvent( QResizeEvent *e )
{
- QTable::resizeEvent( e );
- columnWidthChanged( 0 );
- emit sigColWidthChanged();
+ QTable::resizeEvent( e );
+ columnWidthChanged( 0 );
+ emit sigColWidthChanged();
}
void DateBookDayView::keyPressEvent( QKeyEvent *e )
{
- QString txt = e->text();
- if ( !txt.isNull() && txt[0] > ' ' && e->key() < 0x1000 ) {
- // we this is some sort of thing we know about...
- e->accept();
- emit sigCapturedKey( txt );
+ QString txt = e->text();
+ if ( !txt.isNull() && txt[0] > ' ' && e->key() < 0x1000 ) {
+ // we this is some sort of thing we know about...
+ e->accept();
+ emit sigCapturedKey( txt );
} else {
- // I don't know what this key is, do you?
- e->ignore();
- }
+ // I don't know what this key is, do you?
+ e->ignore();
+ }
}
void DateBookDayView::setRowStyle( int style )
{
- if (style<0) style = 0;
+ if (style<0) style = 0;
- for (int i=0; i<numRows(); i++)
- setRowHeight(i, style*10+20);
+ for (int i=0; i<numRows(); i++)
+ setRowHeight(i, style*10+20);
}
void DateBookDayView::contentsMouseReleaseEvent( QMouseEvent* /* e */ )
{
- int sh=99,eh=-1;
+ int sh=99,eh=-1;
- for(int i=0;i<this->numSelections();i++) {
- QTableSelection sel = this->selection( i );
- sh = QMIN(sh,sel.topRow());
- eh = QMAX(sh,sel.bottomRow()+1);
- }
- if (sh > 23 || eh < 1) {
- sh=8;
- eh=9;
- }
+ for(int i=0;i<this->numSelections();i++) {
+ QTableSelection sel = this->selection( i );
+ sh = QMIN(sh,sel.topRow());
+ eh = QMAX(sh,sel.bottomRow()+1);
+ }
+ if (sh > 23 || eh < 1) {
+ sh=8;
+ eh=9;
+ }
- quickLineEdit=new DateBookDayViewQuickLineEdit(QDateTime(currDate,QTime(sh,0,0,0)),QDateTime(currDate,QTime(eh,0,0,0)),this->viewport(),"quickedit");
- quickLineEdit->setGeometry(0,0,this->columnWidth(0)-1,this->rowHeight(0));
- this->moveChild(quickLineEdit,0,sh*this->rowHeight(0));
- quickLineEdit->setFocus();
- quickLineEdit->show();
+ quickLineEdit=new DateBookDayViewQuickLineEdit(QDateTime(currDate,QTime(sh,0,0,0)),QDateTime(currDate,QTime(eh,0,0,0)),this->viewport(),"quickedit");
+ quickLineEdit->setGeometry(0,0,this->columnWidth(0)-1,this->rowHeight(0));
+ this->moveChild(quickLineEdit,0,sh*this->rowHeight(0));
+ quickLineEdit->setFocus();
+ quickLineEdit->show();
}
//===========================================================================
DateBookDayViewQuickLineEdit::DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name) : QLineEdit(parent,name)
{
- active=1;
- quickEvent.setStart(start);
- quickEvent.setEnd(end);
- connect(this,SIGNAL(returnPressed()),this,SLOT(slotReturnPressed()));
+ active=1;
+ quickEvent.setStart(start);
+ quickEvent.setEnd(end);
+ connect(this,SIGNAL(returnPressed()),this,SLOT(slotReturnPressed()));
}
void DateBookDayViewQuickLineEdit::slotReturnPressed()
{
- if(active && (!this->text().isEmpty())) { // Fix to avoid having this event beeing added multiple times.
- quickEvent.setDescription(this->text());
- connect(this,SIGNAL(insertEvent(const Event&)),this->topLevelWidget(),SLOT(insertEvent(const Event&)));
- emit(insertEvent(quickEvent));
- active=0;
- }
+ if(active && (!this->text().isEmpty())) { // Fix to avoid having this event beeing added multiple times.
+ quickEvent.setDescription(this->text());
+ connect(this,SIGNAL(insertEvent(const Event&)),this->topLevelWidget(),SLOT(insertEvent(const Event&)));
+ emit(insertEvent(quickEvent));
+ active=0;
+ }
/* we need to return to this object.. */
- QTimer::singleShot(500, this, SLOT(finallyCallClose()) ); // Close and also delete this widget
+ 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 */)
{
- slotReturnPressed(); // Reuse code to add event and close this widget.
+ slotReturnPressed(); // Reuse code to add event and close this widget.
}
//===========================================================================
-DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, QWidget *parent, const char *name )
+DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, DateBookHoliday*newHdb, QWidget *parent, const char *name )
: QVBox( parent, name ), currDate( QDate::currentDate() ), db( newDb ), startTime( 0 )
{
- widgetList.setAutoDelete( true );
- header = new DateBookDayHeader( startOnMonday, this, "day header" );
- header->setDate( currDate.year(), currDate.month(), currDate.day() );
+ widgetList.setAutoDelete( true );
+ _holiday_db = newHdb;
+ 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();
+ m_allDays = new DatebookdayAllday(newDb, this, "all day event list" );
+ m_allDays->hide();
- view = new DateBookDayView( ampm, this, "day view" );
+ 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) ) );
- connect( view, SIGNAL( sigColWidthChanged() ), this, SLOT( slotColWidthChanged() ) );
- connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
- connect( view, SIGNAL(sigCapturedKey(const QString&)), this, SIGNAL(sigNewEvent(const QString&)) );
+ 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) ) );
+ connect( view, SIGNAL( sigColWidthChanged() ), this, SLOT( slotColWidthChanged() ) );
+ connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
+ connect( view, SIGNAL(sigCapturedKey(const QString&)), this, SIGNAL(sigNewEvent(const QString&)) );
- QTimer *timer = new QTimer( this );
+ QTimer *timer = new QTimer( this );
- connect( timer, SIGNAL(timeout()), this, SLOT(updateView()) ); //connect timer for updating timeMarker & daywidgetcolors
- timer->start( 1000*60*5, FALSE ); //update every 5min
+ connect( timer, SIGNAL(timeout()), this, SLOT(updateView()) ); //connect timer for updating timeMarker & daywidgetcolors
+ timer->start( 1000*60*5, FALSE ); //update every 5min
- selectedWidget = 0;
+ selectedWidget = 0;
- timeMarker = new DateBookDayTimeMarker( this );
- timeMarker->setTime( QTime::currentTime() );
- rowStyle = -1; // initialize with bogus values
+ timeMarker = new DateBookDayTimeMarker( this );
+ timeMarker->setTime( QTime::currentTime() );
+ rowStyle = -1; // initialize with bogus values
jumpToCurTime = false;
}
void DateBookDay::setJumpToCurTime( bool bJump )
{
- jumpToCurTime = bJump;
+ jumpToCurTime = bJump;
}
void DateBookDay::setRowStyle( int style )
{
- if (rowStyle != style) view->setRowStyle( style );
- rowStyle = style;
+ if (rowStyle != style) view->setRowStyle( style );
+ rowStyle = style;
}
void DateBookDay::updateView( void )
{
- timeMarker->setTime( QTime::currentTime() );
- //need to find a way to update all DateBookDayWidgets
+ timeMarker->setTime( QTime::currentTime() );
+ //need to find a way to update all DateBookDayWidgets
}
void DateBookDay::setSelectedWidget( DateBookDayWidget *w )
{
- selectedWidget = w;
+ selectedWidget = w;
}
DateBookDayWidget * DateBookDay::getSelectedWidget( void )
{
- return selectedWidget;
+ return selectedWidget;
}
void DateBookDay::selectedDates( QDateTime &start, QDateTime &end )
{
- start.setDate( currDate );
- end.setDate( currDate );
+ start.setDate( currDate );
+ end.setDate( currDate );
- int sh=99,eh=-1;
+ int sh=99,eh=-1;
- int n = dayView()->numSelections();
+ int n = dayView()->numSelections();
- for (int i=0; i<n; i++) {
- QTableSelection sel = dayView()->selection( i );
- sh = QMIN(sh,sel.topRow());
- eh = QMAX(sh,sel.bottomRow()+1);
- }
+ for (int i=0; i<n; i++) {
+ QTableSelection sel = dayView()->selection( i );
+ sh = QMIN(sh,sel.topRow());
+ eh = QMAX(sh,sel.bottomRow()+1);
+ }
- if (sh > 23 || eh < 1) {
- sh=8;
- eh=9;
- }
+ if (sh > 23 || eh < 1) {
+ sh=8;
+ eh=9;
+ }
- start.setTime( QTime( sh, 0, 0 ) );
- end.setTime( QTime( eh, 0, 0 ) );
+ start.setTime( QTime( sh, 0, 0 ) );
+ end.setTime( QTime( eh, 0, 0 ) );
}
void DateBookDay::setDate( int y, int m, int d )
{
- header->setDate( y, m, d );
- selectedWidget = 0;
+ header->setDate( y, m, d );
+ selectedWidget = 0;
}
void DateBookDay::setDate( QDate d)
{
- header->setDate( d.year(), d.month(), d.day() );
- selectedWidget = 0;
+ header->setDate( d.year(), d.month(), d.day() );
+ selectedWidget = 0;
}
void DateBookDay::dateChanged( int y, int m, int d )
{
- QDate date( y, m, d );
- if ( currDate == date )
- return;
- currDate.setYMD( y, m, d );
- relayoutPage();
- dayView()->clearSelection();
- QTableSelection ts;
-
- if (jumpToCurTime && this->date() == QDate::currentDate())
- {
- ts.init( QTime::currentTime().hour(), 0);
- ts.expandTo( QTime::currentTime().hour(), 0);
- } else {
- ts.init( startTime, 0 );
- ts.expandTo( startTime, 0 );
- }
+ QDate date( y, m, d );
+ if ( currDate == date )
+ return;
+ currDate.setYMD( y, m, d );
+ relayoutPage();
+ dayView()->clearSelection();
+ QTableSelection ts;
+
+ if (jumpToCurTime && this->date() == QDate::currentDate())
+ {
+ ts.init( QTime::currentTime().hour(), 0);
+ ts.expandTo( QTime::currentTime().hour(), 0);
+ } else {
+ ts.init( startTime, 0 );
+ ts.expandTo( startTime, 0 );
+ }
- dayView()->addSelection( ts );
- selectedWidget = 0;
+ dayView()->addSelection( ts );
+ selectedWidget = 0;
}
void DateBookDay::redraw()
{
- if ( isUpdatesEnabled() )
- relayoutPage();
+ if ( isUpdatesEnabled() )
+ relayoutPage();
}
void DateBookDay::getEvents()
{
- widgetList.clear();
+ 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.
+ QStringList hdays = _holiday_db->holidaylist(currDate);
+ QStringList::Iterator sit;
+ QObject* object = 0;
+ for (sit=hdays.begin();sit!=hdays.end();++sit) {
+ object = m_allDays->addHoliday(*sit);
+ if (!object) continue;
+ /* not to do something with it */
+ }
+ 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()==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 );
+ DateBookDayWidget* w = new DateBookDayWidget( *it, this );
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&) ) );
- }
- }
+ }
+ }
}
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();
- if ( e.minute() < 5 )
- end--;
- if ( end < start )
- end = start;
- while ( place < maxn ) {
- bool free = TRUE;
- int s = start;
- while( s <= end ) {
- if ( used[10*s+place] ) {
- free = FALSE;
- break;
- }
- s++;
- }
- if ( free )
- break;
- place++;
- }
- if ( place == maxn ) {
- return -1;
- }
- while( start <= end ) {
- used[10*start+place] = TRUE;
- start++;
- }
- return place;
+ int place = 0;
+ int start = item->event().start().hour();
+ QTime e = item->event().end();
+ int end = e.hour();
+ if ( e.minute() < 5 )
+ end--;
+ if ( end < start )
+ end = start;
+ while ( place < maxn ) {
+ bool free = TRUE;
+ int s = start;
+ while( s <= end ) {
+ if ( used[10*s+place] ) {
+ free = FALSE;
+ break;
+ }
+ s++;
+ }
+ if ( free )
+ break;
+ place++;
+ }
+ if ( place == maxn ) {
+ return -1;
+ }
+ while( start <= end ) {
+ used[10*start+place] = TRUE;
+ start++;
+ }
+ return place;
}
void DateBookDay::relayoutPage( bool fromResize )
{
- setUpdatesEnabled( FALSE );
- if ( !fromResize ) {
- getEvents(); // no need we already have them!
+ setUpdatesEnabled( FALSE );
+ 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
-
- int wCount = widgetList.count();
- int wid = view->columnWidth(0)-1;
- int wd;
- int n = 1;
-
- QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget
-
- for (int i = 0; i<wCount; anzIntersect[i] = 1, i++);
-
- if ( wCount < 20 ) {
-
- QArray<QRect> geometries(wCount);
- for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++); //stores geometry for each widget in vector
-
- for ( int i = 0; i < wCount; i++) {
- QValueList<int> intersectedWidgets;
-
- //find all widgets intersecting with widgetList.at(i)
- for ( int j = 0; j < wCount; j++) {
- if (i != j)
- if (geometries[j].intersects(geometries[i]))
- intersectedWidgets.append(j);
- }
-
- //for each of these intersecting widgets find out how many widgets are they intersecting with
- for ( uint j = 0; j < intersectedWidgets.count(); j++)
- {
- QArray<int> inter(wCount);
- inter[j]=1;
-
- if (intersectedWidgets[j] != -1)
- for ( uint k = j; k < intersectedWidgets.count(); k++) {
- if (j != k && intersectedWidgets[k] != -1)
- if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]])) {
- inter[j]++;
- intersectedWidgets[k] = -1;
- }
- if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1;
- }
- }
- if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++;
- }
-
-
- for ( int i = 0; i < wCount; i++) {
- DateBookDayWidget *w = widgetList.at(i);
- QRect geom = w->geometry();
- geom.setX( 0 );
- wd = (view->columnWidth(0)-1) / anzIntersect[i] - (anzIntersect[i]>1?2:0);
- geom.setWidth( wd );
- while ( intersects( w, geom ) ) {
- geom.moveBy( wd + 2 + 1, 0 );
- }
- w->setGeometry( geom );
- }
-
- if (jumpToCurTime && this->date() == QDate::currentDate()) {
- view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour
- } else {
- view->setContentsPos( 0, startTime * view->rowHeight(0) );
- }
- } else {
- int hours[24];
- memset( hours, 0, 24*sizeof( int ) );
- bool overFlow = FALSE;
- for ( int i = 0; i < wCount; i++ ) {
- DateBookDayWidget *w = widgetList.at(i);
- int start = w->event().start().hour();
- QTime e = w->event().end();
- int end = e.hour();
- if ( e.minute() < 5 )
- end--;
- if ( end < start )
- end = start;
- while( start <= end ) {
- hours[start]++;
- if ( hours[start] >= 10 )
- overFlow = TRUE;
- ++start;
- }
- if ( overFlow )
- break;
- }
- for ( int i = 0; i < 24; i++ ) {
- n = QMAX( n, hours[i] );
- }
- wid = ( view->columnWidth(0)-1 ) / n;
-
- bool used[24*10];
- memset( used, FALSE, 24*10*sizeof( bool ) );
-
- for ( int i = 0; i < wCount; i++ ) {
- DateBookDayWidget *w = widgetList.at(i);
- int xp = place( w, used, n );
- if ( xp != -1 ) {
- QRect geom = w->geometry();
- geom.setX( xp*(wid+2) );
- geom.setWidth( wid );
- w->setGeometry( geom );
- }
- }
-
- if (jumpToCurTime && this->date() == QDate::currentDate()) {
- view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour
- } else {
- view->setContentsPos( 0, startTime * view->rowHeight(0) );
- }
- }
-
- timeMarker->setTime( QTime::currentTime() ); //display timeMarker
- timeMarker->raise(); //on top of all widgets
- if (this->date() == QDate::currentDate()) { //only show timeMarker on current day
- timeMarker->show();
- } else {
- timeMarker->hide();
- }
- setUpdatesEnabled( TRUE );
- return;
+ 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
+
+ int wCount = widgetList.count();
+ int wid = view->columnWidth(0)-1;
+ int wd;
+ int n = 1;
+
+ QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget
+
+ for (int i = 0; i<wCount; anzIntersect[i] = 1, i++);
+
+ if ( wCount < 20 ) {
+
+ QArray<QRect> geometries(wCount);
+ for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++); //stores geometry for each widget in vector
+
+ for ( int i = 0; i < wCount; i++) {
+ QValueList<int> intersectedWidgets;
+
+ //find all widgets intersecting with widgetList.at(i)
+ for ( int j = 0; j < wCount; j++) {
+ if (i != j)
+ if (geometries[j].intersects(geometries[i]))
+ intersectedWidgets.append(j);
+ }
+
+ //for each of these intersecting widgets find out how many widgets are they intersecting with
+ for ( uint j = 0; j < intersectedWidgets.count(); j++)
+ {
+ QArray<int> inter(wCount);
+ inter[j]=1;
+
+ if (intersectedWidgets[j] != -1)
+ for ( uint k = j; k < intersectedWidgets.count(); k++) {
+ if (j != k && intersectedWidgets[k] != -1)
+ if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]])) {
+ inter[j]++;
+ intersectedWidgets[k] = -1;
+ }
+ if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1;
+ }
+ }
+ if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++;
+ }
+
+
+ for ( int i = 0; i < wCount; i++) {
+ DateBookDayWidget *w = widgetList.at(i);
+ QRect geom = w->geometry();
+ geom.setX( 0 );
+ wd = (view->columnWidth(0)-1) / anzIntersect[i] - (anzIntersect[i]>1?2:0);
+ geom.setWidth( wd );
+ while ( intersects( w, geom ) ) {
+ geom.moveBy( wd + 2 + 1, 0 );
+ }
+ w->setGeometry( geom );
+ }
+
+ if (jumpToCurTime && this->date() == QDate::currentDate()) {
+ view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour
+ } else {
+ view->setContentsPos( 0, startTime * view->rowHeight(0) );
+ }
+ } else {
+ int hours[24];
+ memset( hours, 0, 24*sizeof( int ) );
+ bool overFlow = FALSE;
+ for ( int i = 0; i < wCount; i++ ) {
+ DateBookDayWidget *w = widgetList.at(i);
+ int start = w->event().start().hour();
+ QTime e = w->event().end();
+ int end = e.hour();
+ if ( e.minute() < 5 )
+ end--;
+ if ( end < start )
+ end = start;
+ while( start <= end ) {
+ hours[start]++;
+ if ( hours[start] >= 10 )
+ overFlow = TRUE;
+ ++start;
+ }
+ if ( overFlow )
+ break;
+ }
+ for ( int i = 0; i < 24; i++ ) {
+ n = QMAX( n, hours[i] );
+ }
+ wid = ( view->columnWidth(0)-1 ) / n;
+
+ bool used[24*10];
+ memset( used, FALSE, 24*10*sizeof( bool ) );
+
+ for ( int i = 0; i < wCount; i++ ) {
+ DateBookDayWidget *w = widgetList.at(i);
+ int xp = place( w, used, n );
+ if ( xp != -1 ) {
+ QRect geom = w->geometry();
+ geom.setX( xp*(wid+2) );
+ geom.setWidth( wid );
+ w->setGeometry( geom );
+ }
+ }
+
+ if (jumpToCurTime && this->date() == QDate::currentDate()) {
+ view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour
+ } else {
+ view->setContentsPos( 0, startTime * view->rowHeight(0) );
+ }
+ }
+
+ timeMarker->setTime( QTime::currentTime() ); //display timeMarker
+ timeMarker->raise(); //on top of all widgets
+ if (this->date() == QDate::currentDate()) { //only show timeMarker on current day
+ timeMarker->show();
+ } else {
+ timeMarker->hide();
+ }
+ setUpdatesEnabled( TRUE );
+ return;
}
DateBookDayWidget *DateBookDay::intersects( const DateBookDayWidget *item, const QRect &geom )
{
- int i = 0;
- DateBookDayWidget *w = widgetList.at(i);
- int wCount = widgetList.count();
- while ( i < wCount && w != item ) {
- if ( w->geometry().intersects( geom ) ) {
- return w;
- }
- w = widgetList.at(++i);
- }
+ int i = 0;
+ DateBookDayWidget *w = widgetList.at(i);
+ int wCount = widgetList.count();
+ while ( i < wCount && w != item ) {
+ if ( w->geometry().intersects( geom ) ) {
+ return w;
+ }
+ w = widgetList.at(++i);
+ }
- return 0;
+ return 0;
}
QDate DateBookDay::date() const
{
- return currDate;
+ return currDate;
}
void DateBookDay::setStartViewTime( int startHere )
{
- startTime = startHere;
- dayView()->clearSelection();
- QTableSelection ts;
+ startTime = startHere;
+ dayView()->clearSelection();
+ QTableSelection ts;
- if (jumpToCurTime && this->date() == QDate::currentDate()) { //this should probably be in datebook.cpp where it's called?
- ts.init( QTime::currentTime().hour(), 0);
- ts.expandTo( QTime::currentTime().hour(), 0);
+ if (jumpToCurTime && this->date() == QDate::currentDate()) { //this should probably be in datebook.cpp where it's called?
+ ts.init( QTime::currentTime().hour(), 0);
+ ts.expandTo( QTime::currentTime().hour(), 0);
} else {
- ts.init( startTime, 0 );
- ts.expandTo( startTime, 0 );
- }
+ ts.init( startTime, 0 );
+ ts.expandTo( startTime, 0 );
+ }
- dayView()->addSelection( ts );
+ dayView()->addSelection( ts );
}
int DateBookDay::startViewTime() const
{
- return startTime;
+ return startTime;
}
void DateBookDay::slotWeekChanged( bool bStartOnMonday )
{
- header->setStartOfWeek( bStartOnMonday );
-// redraw();
+ header->setStartOfWeek( bStartOnMonday );
+// redraw();
}
void DateBookDay::keyPressEvent(QKeyEvent *e)
{
- switch(e->key()) {
- case Key_Up:
- view->moveUp();
- break;
- case Key_Down:
- view->moveDown();
- break;
- case Key_Left:
- setDate(QDate(currDate).addDays(-1));
- break;
- case Key_Right:
- setDate(QDate(currDate).addDays(1));
- break;
- default:
- e->ignore();
- }
+ switch(e->key()) {
+ case Key_Up:
+ view->moveUp();
+ break;
+ case Key_Down:
+ view->moveDown();
+ break;
+ case Key_Left:
+ setDate(QDate(currDate).addDays(-1));
+ break;
+ case Key_Right:
+ setDate(QDate(currDate).addDays(1));
+ break;
+ default:
+ e->ignore();
+ }
}
//===========================================================================
DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db )
- : QWidget( db->dayView()->viewport() ), ev( e ), dateBook( db )
+ : QWidget( db->dayView()->viewport() ), ev( e ), dateBook( db )
{
// why would someone use "<"? Oh well, fix it up...
// I wonder what other things may be messed up...
- QString strDesc = ev.description();
- int where = strDesc.find( "<" );
- while ( where != -1 ) {
- strDesc.remove( where, 1 );
- strDesc.insert( where, "&#60;" );
- where = strDesc.find( "<", where );
- }
-
- QString strCat;
+ QString strDesc = ev.description();
+ int where = strDesc.find( "<" );
+ while ( where != -1 ) {
+ strDesc.remove( where, 1 );
+ strDesc.insert( where, "&#60;" );
+ where = strDesc.find( "<", where );
+ }
+
+ QString strCat;
// ### Fix later...
// QString strCat = ev.category();
// where = strCat.find( "<" );
// while ( where != -1 ) {
-// strCat.remove( where, 1 );
-// strCat.insert( where, "&#60;" );
-// where = strCat.find( "<", where );
+// strCat.remove( where, 1 );
+// strCat.insert( where, "&#60;" );
+// where = strCat.find( "<", where );
// }
- QString strNote = ev.notes();
- where = strNote.find( "<" );
- while ( where != -1 ) {
- strNote.remove( where, 1 );
- strNote.insert( where, "&#60;" );
- where = strNote.find( "<", where );
- }
-
- text = "<b>" + strDesc + "</b><br>" + "<i>";
- if ( !strCat.isEmpty() ) {
- text += strCat + "</i><br>";
- }
- if (ev.event().type() == Event::Normal ) {
- setEventText( text );
- } else {
- setAllDayText( text );
- }
-
- text += "<br><br>" + strNote;
-
- setBackgroundMode( PaletteBase );
-
- QTime start = ev.start();
- QTime end = ev.end();
- int y = start.hour()*60+start.minute();
- int h = end.hour()*60+end.minute()-y;
- int rh = dateBook->dayView()->rowHeight(0);
- y = y*rh/60;
- h = h*rh/60;
-
- if ( h < 12 ) h = 12; // Make sure the widget is no smaller than 12 pixels high, so that it's possible to read atleast the first line.
- if ( y > ((24*rh)-12) ) y=(24*rh)-12; // Make sure the widget fits inside the dayview.
- geom.setY( y );
- geom.setHeight( h );
- geom.setX( 0 );
- geom.setWidth(dateBook->dayView()->columnWidth(0)-1);
+ QString strNote = ev.notes();
+ where = strNote.find( "<" );
+ while ( where != -1 ) {
+ strNote.remove( where, 1 );
+ strNote.insert( where, "&#60;" );
+ where = strNote.find( "<", where );
+ }
+
+ text = "<b>" + strDesc + "</b><br>" + "<i>";
+ if ( !strCat.isEmpty() ) {
+ text += strCat + "</i><br>";
+ }
+ if (ev.event().type() == Event::Normal ) {
+ setEventText( text );
+ } else {
+ setAllDayText( text );
+ }
+
+ text += "<br><br>" + strNote;
+
+ setBackgroundMode( PaletteBase );
+
+ QTime start = ev.start();
+ QTime end = ev.end();
+ int y = start.hour()*60+start.minute();
+ int h = end.hour()*60+end.minute()-y;
+ int rh = dateBook->dayView()->rowHeight(0);
+ y = y*rh/60;
+ h = h*rh/60;
+
+ if ( h < 12 ) h = 12; // Make sure the widget is no smaller than 12 pixels high, so that it's possible to read atleast the first line.
+ if ( y > ((24*rh)-12) ) y=(24*rh)-12; // Make sure the widget fits inside the dayview.
+ geom.setY( y );
+ geom.setHeight( h );
+ geom.setX( 0 );
+ geom.setWidth(dateBook->dayView()->columnWidth(0)-1);
}
void DateBookDayWidget::setAllDayText( QString &text ) {
- text += "<b>" + tr("This is an all day event.") + "</b>";
+ text += "<b>" + tr("This is an all day event.") + "</b>";
}
void DateBookDayWidget::setEventText( QString& text ) {
- bool whichClock = dateBook->dayView()->whichClock();
- if ( ev.startDate() != ev.endDate() ) {
- text += "<b>" + tr("Start") + "</b>: ";
- text += TimeString::timeString( ev.event().start().time(), whichClock, FALSE );
- text += " - " + TimeString::longDateString( ev.startDate() ) + "<br>";
- text += "<b>" + tr("End") + "</b>: ";
- text += TimeString::timeString( ev.event().end().time(), whichClock, FALSE );
- text += " - " + TimeString::longDateString( ev.endDate() );
- } else {
- text += "<b>" + tr("Time") + "</b>: ";
- text += TimeString::timeString( ev.start(), whichClock, FALSE );
- text += "<b>" + tr(" - ") + "</b>";
- text += TimeString::timeString( ev.end(), whichClock, FALSE );
- }
+ bool whichClock = dateBook->dayView()->whichClock();
+ if ( ev.startDate() != ev.endDate() ) {
+ text += "<b>" + tr("Start") + "</b>: ";
+ text += TimeString::timeString( ev.event().start().time(), whichClock, FALSE );
+ text += " - " + TimeString::longDateString( ev.startDate() ) + "<br>";
+ text += "<b>" + tr("End") + "</b>: ";
+ text += TimeString::timeString( ev.event().end().time(), whichClock, FALSE );
+ text += " - " + TimeString::longDateString( ev.endDate() );
+ } else {
+ text += "<b>" + tr("Time") + "</b>: ";
+ text += TimeString::timeString( ev.start(), whichClock, FALSE );
+ text += "<b>" + tr(" - ") + "</b>";
+ text += TimeString::timeString( ev.end(), whichClock, FALSE );
+ }
}
DateBookDayWidget::~DateBookDayWidget()
{
}
void DateBookDayWidget::paintEvent( QPaintEvent *e )
{
- QPainter p( this );
-
- if (dateBook->getSelectedWidget() == this) {
- p.setBrush( QColor( 155, 240, 230 ) ); // selected item
- } else {
- if (dateBook->date() == QDate::currentDate()) {
- QTime curTime = QTime::currentTime();
- if (ev.end() < curTime) {
- p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive
- } else {
- //change color in dependence of the time till the event starts
- int duration = curTime.secsTo(ev.start());
- if (duration < 0) duration = 0;
- int colChange = duration*160/86400; //86400: secs per day, 160: max color shift
- p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue
- }
- } else {
- p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date)
- //perhaps make a distinction between future/past dates
- }
- }
-
- p.setPen( QColor(100, 100, 100) );
- p.drawRect(rect());
+ QPainter p( this );
+
+ if (dateBook->getSelectedWidget() == this) {
+ p.setBrush( QColor( 155, 240, 230 ) ); // selected item
+ } else {
+ if (dateBook->date() == QDate::currentDate()) {
+ QTime curTime = QTime::currentTime();
+ if (ev.end() < curTime) {
+ p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive
+ } else {
+ //change color in dependence of the time till the event starts
+ int duration = curTime.secsTo(ev.start());
+ if (duration < 0) duration = 0;
+ int colChange = duration*160/86400; //86400: secs per day, 160: max color shift
+ p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue
+ }
+ } else {
+ p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date)
+ //perhaps make a distinction between future/past dates
+ }
+ }
+
+ p.setPen( QColor(100, 100, 100) );
+ p.drawRect(rect());
// p.drawRect(0,0, 5, height());
- int y = 0;
- int d = 0;
+ int y = 0;
+ int d = 0;
- if ( ev.event().hasAlarm() ) {
- p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) );
- y = 20;
- d = 20;
- }
+ if ( ev.event().hasAlarm() ) {
+ p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) );
+ y = 20;
+ d = 20;
+ }
- if ( ev.event().hasRepeat() ) {
- p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) );
- d = 20;
- y += 20;
- }
+ if ( ev.event().hasRepeat() ) {
+ p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) );
+ d = 20;
+ y += 20;
+ }
- QSimpleRichText rt( text, font() );
- rt.setWidth( geom.width() - d - 6 );
- rt.draw( &p, 7, 0, e->region(), colorGroup() );
+ QSimpleRichText rt( text, font() );
+ 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{
@@ -776,52 +786,52 @@ QDate DateBookDay::findRealStart( int uid, const QDate& isIncluded , DateBookDB
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;
+ DateBookDayWidget *item;
- item = dateBook->getSelectedWidget();
- if (item)
- item->update();
+ item = dateBook->getSelectedWidget();
+ if (item)
+ item->update();
- dateBook->setSelectedWidget(this);
- update();
- dateBook->repaint();
+ dateBook->setSelectedWidget(this);
+ update();
+ dateBook->repaint();
Event eve = 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 );
+ 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 );
if(Ir::supported() && ev.event().doRepeat() ) m.insertItem( tr( "Beam this occurence"), 5 );
- int r = m.exec( e->globalPos() );
- if ( r == 1 ) {
- emit editMe( eve );
- } else if ( r == 2 ) {
- emit deleteMe( eve );
- } else if ( r == 3 ) {
- emit beamMe( eve );
- } else if ( r == 4 ) {
- emit duplicateMe( eve );
- } else if ( r == 5 ) {
+ int r = m.exec( e->globalPos() );
+ if ( r == 1 ) {
+ emit editMe( eve );
+ } else if ( r == 2 ) {
+ emit deleteMe( eve );
+ } else if ( r == 3 ) {
+ emit beamMe( eve );
+ } else if ( r == 4 ) {
+ emit duplicateMe( eve );
+ } 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 );
@@ -865,71 +875,71 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
Event event( ev.event() );
event.setStart( start );
event.setEnd ( end );
emit beamMe( 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();
+ geom = r;
+ setFixedSize( r.width()+1, r.height()+1 );
+ dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
+ show();
}
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db )
- : QWidget( db->dayView()->viewport() ), dateBook( db )
+ : QWidget( db->dayView()->viewport() ), dateBook( db )
{
- setBackgroundMode( PaletteBase );
+ setBackgroundMode( PaletteBase );
}
DateBookDayTimeMarker::~DateBookDayTimeMarker()
{
}
void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ )
{
- QPainter p( this );
- p.setBrush( QColor( 255, 0, 0 ) );
+ QPainter p( this );
+ p.setBrush( QColor( 255, 0, 0 ) );
- QPen pen;
- pen.setStyle(NoPen);
+ QPen pen;
+ pen.setStyle(NoPen);
- p.setPen( pen );
- p.drawRect(rect());
+ p.setPen( pen );
+ p.drawRect(rect());
}
void DateBookDayTimeMarker::setTime( const QTime &t )
{
- int y = t.hour()*60+t.minute();
- int rh = dateBook->dayView()->rowHeight(0);
- y = y*rh/60;
+ int y = t.hour()*60+t.minute();
+ int rh = dateBook->dayView()->rowHeight(0);
+ y = y*rh/60;
- geom.setX( 0 );
+ geom.setX( 0 );
- int x = dateBook->dayView()->columnWidth(0)-1;
- geom.setWidth( x );
+ int x = dateBook->dayView()->columnWidth(0)-1;
+ geom.setWidth( x );
- geom.setY( y );
- geom.setHeight( 1 );
+ geom.setY( y );
+ geom.setHeight( 1 );
- setGeometry( geom );
+ setGeometry( geom );
- time = t;
+ time = t;
}
void DateBookDayTimeMarker::setGeometry( const QRect &r )
{
- geom = r;
- setFixedSize( r.width()+1, r.height()+1 );
- dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
- show();
+ geom = r;
+ setFixedSize( r.width()+1, r.height()+1 );
+ dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
+ show();
}
diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h
index c8cb26b..3e44364 100644
--- a/core/pim/datebook/datebookday.h
+++ b/core/pim/datebook/datebookday.h
@@ -31,70 +31,70 @@
#include <qlineedit.h>
class DateBookDayHeader;
class DateBookDB;
class DatebookdayAllday;
class QDateTime;
class QMouseEvent;
class QPaintEvent;
class QResizeEvent;
class DateBookDayViewQuickLineEdit : public QLineEdit
{
- Q_OBJECT
+ Q_OBJECT
public:
- DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0);
+ DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0);
protected:
- Event quickEvent;
- int active;
- void focusOutEvent( QFocusEvent *e );
+ Event quickEvent;
+ int active;
+ void focusOutEvent( QFocusEvent *e );
protected slots:
- void slotReturnPressed(void);
+ void slotReturnPressed(void);
void finallyCallClose();
signals:
- void insertEvent(const Event &e);
+ void insertEvent(const Event &e);
};
class DateBookDayView : public QTable
{
Q_OBJECT
public:
DateBookDayView( bool hourClock, QWidget *parent, const char *name );
bool whichClock() const;
void setRowStyle( int style );
public slots:
void moveUp();
void moveDown();
- void slotDateChanged( int year, int month, int day );
+ void slotDateChanged( int year, int month, int day );
signals:
void sigColWidthChanged();
void sigCapturedKey( const QString &txt );
protected slots:
- void slotChangeClock( bool );
+ void slotChangeClock( bool );
protected:
virtual void paintCell( QPainter *p, int row, int col, const QRect &cr, bool selected );
virtual void paintFocus( QPainter *p, const QRect &cr );
virtual void resizeEvent( QResizeEvent *e );
void keyPressEvent( QKeyEvent *e );
void contentsMouseReleaseEvent( QMouseEvent *e );
void initHeader();
private:
bool ampm;
- QDate currDate;
- DateBookDayViewQuickLineEdit *quickLineEdit;
+ QDate currDate;
+ DateBookDayViewQuickLineEdit *quickLineEdit;
};
class DateBookDay;
class DateBookDayWidget : public QWidget
{
Q_OBJECT
public:
DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db );
~DateBookDayWidget();
const QRect &geometry() { return geom; }
@@ -148,67 +148,68 @@ signals:
protected:
void paintEvent( QPaintEvent *e );
private:
QRect geom;
QTime time;
DateBookDay *dateBook;
};
//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights
class WidgetListClass : public QList<DateBookDayWidget>
{
- private:
+ private:
- int compareItems( QCollection::Item s1, QCollection::Item s2 )
- {
- //hmm, don't punish me for that ;)
- if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height())
- {
- return -1;
- } else
- {
- return 1;
- }
- }
+ int compareItems( QCollection::Item s1, QCollection::Item s2 )
+ {
+ //hmm, don't punish me for that ;)
+ if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height())
+ {
+ return -1;
+ } else
+ {
+ return 1;
+ }
+ }
};
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 );
+ DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb,DateBookHoliday*newHdb,
+ QWidget *parent, const char *name );
void selectedDates( QDateTime &start, QDateTime &end );
+
QDate date() const;
DateBookDayView *dayView() const { return view; }
void setStartViewTime( int startHere );
int startViewTime() const;
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 );
void redraw();
void slotWeekChanged( bool bStartOnMonday );
- void updateView(); //updates TimeMarker and DayWidget-colors
+ 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 *);
@@ -216,21 +217,22 @@ 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;
DateBookDayView *view;
DateBookDayHeader *header;
DatebookdayAllday *m_allDays;
DateBookDB *db;
- WidgetListClass widgetList; //reimplemented QList for sorting widgets by height
+ WidgetListClass widgetList; //reimplemented QList for sorting widgets by height
int startTime;
- bool jumpToCurTime; //should we jump to current time in dayview?
+ bool jumpToCurTime; //should we jump to current time in dayview?
int rowStyle;
DateBookDayWidget *selectedWidget; //actual selected widget (obviously)
- DateBookDayTimeMarker *timeMarker; //marker for current time
+ DateBookDayTimeMarker *timeMarker; //marker for current time
+ DateBookHoliday*_holiday_db;
};
#endif
diff --git a/core/pim/datebook/datebookdayallday.cpp b/core/pim/datebook/datebookdayallday.cpp
index a0aefd3..3c3f482 100644
--- a/core/pim/datebook/datebookdayallday.cpp
+++ b/core/pim/datebook/datebookdayallday.cpp
@@ -57,51 +57,86 @@ DatebookAlldayDisp* DatebookdayAllday::addEvent(const EffectiveEvent&ev)
DatebookAlldayDisp * lb;
lb = new DatebookAlldayDisp(dateBook,ev,m_MainFrame,NULL);
lb->show();
datebookdayalldayLayout->addWidget(lb);
subWidgets.append(lb);
connect(lb,SIGNAL(displayMe(const Event&)),lblDesc,SLOT(disp_event(const Event&)));
++item_count;
return lb;
}
+DatebookAlldayDisp* DatebookdayAllday::addHoliday(const QString&e)
+{
+ DatebookAlldayDisp * lb;
+ lb = new DatebookAlldayDisp(e,m_MainFrame,NULL);
+ lb->show();
+ 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("<"),"&#60;");
setBackgroundColor(yellow);
setText(strDesc);
setFrameStyle(QFrame::Raised|QFrame::Panel);
int s = QFontMetrics(font()).height()+4;
setMaximumHeight( s );
setMinimumSize( QSize( 0, s ) );
+ m_holiday = false;
+}
+
+DatebookAlldayDisp::DatebookAlldayDisp(const QString&aholiday,QWidget* parent,const char* name, WFlags fl)
+ : QLabel(parent,name,fl),m_Ev(),dateBook(0)
+{
+ QString strDesc = aholiday;
+ strDesc = strDesc.replace(QRegExp("<"),"&#60;");
+ Event ev;
+ ev.setDescription(strDesc);
+ ev.setAllDay(true);
+ m_Ev.setEvent(ev);
+ setBackgroundColor(yellow);
+ setText(strDesc);
+ setFrameStyle(QFrame::Raised|QFrame::Panel);
+
+ int s = QFontMetrics(font()).height()+4;
+ setMaximumHeight( s );
+ setMinimumSize( QSize( 0, s ) );
+ m_holiday = true;
}
DatebookAlldayDisp::~DatebookAlldayDisp()
{
}
void DatebookAlldayDisp::beam_single_event()
{
+ if (m_holiday) return;
// 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 );
@@ -142,29 +177,31 @@ void DatebookAlldayDisp::beam_single_event()
m_Event.setEnd ( end );
emit beamMe( m_Event );
}
}
void DatebookAlldayDisp::mousePressEvent(QMouseEvent*e)
{
Event ev = m_Ev.event();
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 );
+ if (!m_holiday) {
+ 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( ev );
break;
case 2:
emit deleteMe( ev );
break;
case 3:
diff --git a/core/pim/datebook/datebookdayallday.h b/core/pim/datebook/datebookdayallday.h
index f5867e5..4f5cffa 100644
--- a/core/pim/datebook/datebookdayallday.h
+++ b/core/pim/datebook/datebookdayallday.h
@@ -15,61 +15,65 @@ class DatebookAlldayDisp;
class DatebookEventDesc;
class DateBookDB;
class DatebookdayAllday : public QScrollView
{
Q_OBJECT
public:
DatebookdayAllday(DateBookDB* db,
QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
~DatebookdayAllday();
DatebookAlldayDisp* addEvent(const EffectiveEvent&e);
+ DatebookAlldayDisp* addHoliday(const QString&e);
const unsigned int items()const{return item_count;}
public slots:
void removeAllEvents();
protected:
QFrame * m_MainFrame;
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);
+ DatebookAlldayDisp(const QString&aholiday,
+ 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();
+ bool m_holiday:1;
};
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);
diff --git a/core/pim/datebook/holiday/dummy/config.in b/core/pim/datebook/holiday/dummy/config.in
new file mode 100644
index 0000000..caa90bc
--- a/dev/null
+++ b/core/pim/datebook/holiday/dummy/config.in
@@ -0,0 +1,8 @@
+ config DATEBOOK_DUMMY_HOLIDAY
+ boolean "opie-datebook-dummyholidayplugin"
+ default "n"
+ depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBOPIE2UI && LIBOPIE2PIM
+
+ comment "opie-datebook-dummyholidayplugin requires libopie2core, libopie2ui, libopie2pim"
+ depends !( ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBOPIE2UI && LIBOPIE2PIM )
+
diff --git a/core/pim/datebook/holiday/dummy/dummy.pro b/core/pim/datebook/holiday/dummy/dummy.pro
new file mode 100644
index 0000000..768bb77
--- a/dev/null
+++ b/core/pim/datebook/holiday/dummy/dummy.pro
@@ -0,0 +1,20 @@
+TEMPLATE = lib
+CONFIG -= moc
+CONFIG += qt plugin
+
+# Input
+HEADERS = dummyholiday.h
+SOURCES = dummyholiday.cpp
+INTERFACES=
+
+INCLUDEPATH += $(OPIEDIR)/include \
+ ../ ../library
+DEPENDPATH += $(OPIEDIR)/include \
+ ../ ../library
+
+LIBS+= -lqpe -lopiecore2 -lopieui2
+
+DESTDIR = $(OPIEDIR)/plugins/datebook/holiday
+TARGET = dummyholidayplugin
+
+include( $(OPIEDIR)/include.pro )
diff --git a/core/pim/datebook/holiday/dummy/dummyholiday.cpp b/core/pim/datebook/holiday/dummy/dummyholiday.cpp
new file mode 100644
index 0000000..dd00b9b
--- a/dev/null
+++ b/core/pim/datebook/holiday/dummy/dummyholiday.cpp
@@ -0,0 +1,20 @@
+#include "dummyholiday.h"
+
+#include <qobject.h>
+
+QString DummyHoliday::description()
+{
+ return QObject::tr("Test holiday plugin","dummyholiday");
+}
+
+QStringList DummyHoliday::entries(const QDate&aDate)
+{
+ return entries(0,0,aDate.day());
+}
+
+QStringList DummyHoliday::entries(unsigned year, unsigned month, unsigned day)
+{
+ QStringList ret;
+ if (day%2==0) ret.append(QObject::tr("You have a holiday!","dummyholiday"));
+ return ret;
+}
diff --git a/core/pim/datebook/holiday/dummy/dummyholiday.h b/core/pim/datebook/holiday/dummy/dummyholiday.h
new file mode 100644
index 0000000..9b28f24
--- a/dev/null
+++ b/core/pim/datebook/holiday/dummy/dummyholiday.h
@@ -0,0 +1,19 @@
+#ifndef __DUMMY_HOLIDAY_H
+#define __DUMMY_HOLIDAY_H
+
+#include <opie2/oholidayplugin.h>
+#include <opie2/oholidaypluginif.h>
+
+class DummyHoliday:public Opie::Datebook::HolidayPlugin
+{
+public:
+ DummyHoliday():Opie::Datebook::HolidayPlugin(){}
+ virtual ~DummyHoliday(){}
+
+ virtual QString description();
+ virtual QStringList entries(const QDate&);
+ virtual QStringList entries(unsigned year, unsigned month, unsigned day);
+};
+
+EXPORT_HOLIDAY_PLUGIN(DummyHoliday);
+#endif