summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp7
-rw-r--r--core/pim/datebook/datebook.h3
-rw-r--r--core/pim/datebook/datebookday.cpp863
-rw-r--r--core/pim/datebook/datebookday.h25
4 files changed, 469 insertions, 429 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index 4fbcb10..6dd8918 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -383,6 +383,13 @@ void DateBook::viewMonth() {
view(MONTH,currentDate());
}
+void DateBook::insertEvent( const Event &e )
+{
+ qWarning("Adding Event!");
+ db->addEvent(e);
+ emit newEvent();
+}
+
void DateBook::duplicateEvent( const Event &e )
{
qWarning("Hmmm...");
diff --git a/core/pim/datebook/datebook.h b/core/pim/datebook/datebook.h
index 5216770..3f57d4a 100644
--- a/core/pim/datebook/datebook.h
+++ b/core/pim/datebook/datebook.h
@@ -88,7 +88,8 @@ private slots:
void showDay( int y, int m, int d );
- 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 );
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index db4c2fd..0a40ea9 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -38,100 +38,105 @@
#include <qtextcodec.h>
#include <qpalette.h>
+#include <qlineedit.h>
+
#include <qtimer.h>
-DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent,
- const char *name )
- : QTable( 24, 1, parent, name ),
- ampm( whichClock )
-{
- 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)) );
+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)) );
}
void DateBookDayView::initHeader()
{
- QString strTmp;
- 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";
+ QString strTmp;
+ 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 );
+ setRowStretchable( i, FALSE );
}
- strTmp = strTmp.rightJustify( 6, ' ' );
- verticalHeader()->setLabel( i, strTmp );
- setRowStretchable( i, FALSE );
- }
+}
+
+void DateBookDayView::slotDateChanged( int y, int m, int 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 );
}
}
@@ -139,25 +144,24 @@ 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 )
@@ -168,41 +172,70 @@ void DateBookDayView::setRowStyle( int style )
setRowHeight(i, style*10+20);
}
+void DateBookDayView::contentsMouseReleaseEvent( QMouseEvent *e )
+{
+ int y=e->y();
+ int diff=y%(this->rowHeight(0));
+ int hour=y/this->rowHeight(0);
+ quickLineEdit=new DateBookDayViewQuickLineEdit(QDateTime(currDate,QTime(hour,0,0,0)),QDateTime(currDate,QTime(hour,59,0,0)),this->viewport(),"quickedit");
+ quickLineEdit->setGeometry(0,0,this->columnWidth(0)-1,this->rowHeight(0));
+ this->moveChild(quickLineEdit,0,y-diff);
+ quickLineEdit->setFocus();
+ quickLineEdit->show();
+}
+
//===========================================================================
-DateBookDay::DateBookDay( bool ampm, bool startOnMonday,
- DateBookDB *newDb, QWidget *parent,
- const char *name )
- : QVBox( parent, name ),
- currDate( QDate::currentDate() ),
- db( newDb ),
- startTime( 0 )
+DateBookDayViewQuickLineEdit::DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0) : QLineEdit(parent,name)
{
- widgetList.setAutoDelete( true );
- header = new DateBookDayHeader( startOnMonday, this, "day header" );
- header->setDate( currDate.year(), currDate.month(), currDate.day() );
- view = new DateBookDayView( ampm, this, "day view" );
+ active=1;
+ quickEvent.setStart(start);
+ quickEvent.setEnd(end);
+ connect(this,SIGNAL(returnPressed()),this,SLOT(slotReturnPressed()));
+}
- connect( header, SIGNAL( dateChanged( int, int, int ) ),
- this, SLOT( dateChanged( 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&)) );
+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;
+ }
+ this->close(true); // Close and also delete this widget
+}
- QTimer *timer = new QTimer( this );
+void DateBookDayViewQuickLineEdit::focusOutEvent ( QFocusEvent * e )
+{
+ slotReturnPressed(); // Reuse code to add event and close this widget.
+}
- connect( timer, SIGNAL(timeout()),
- this, SLOT(updateView()) ); //connect timer for updating timeMarker & daywidgetcolors
- timer->start( 1000*60*5, FALSE ); //update every 5min
+//===========================================================================
- selectedWidget = 0;
+DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, 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() );
+ 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&)) );
+
+ 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
- timeMarker = new DateBookDayTimeMarker( this );
- timeMarker->setTime( QTime::currentTime() );
- rowStyle = -1; // initialize with bogus values
+ selectedWidget = 0;
+
+ timeMarker = new DateBookDayTimeMarker( this );
+ timeMarker->setTime( QTime::currentTime() );
+ rowStyle = -1; // initialize with bogus values
}
void DateBookDay::setJumpToCurTime( bool bJump )
@@ -234,71 +267,67 @@ DateBookDayWidget * DateBookDay::getSelectedWidget( void )
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);
- }
- if (sh > 23 || eh < 1) {
- sh=8;
- eh=9;
- }
+ 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;
+ }
- 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 );
- }
-
- dayView()->addSelection( ts );
+ QDate date( y, m, d );
+ if ( currDate == date )
+ return;
+ currDate.setYMD( y, m, d );
+ relayoutPage();
+ dayView()->clearSelection();
+ QTableSelection ts;
- selectedWidget = 0;
+ 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;
}
void DateBookDay::redraw()
{
- if ( isUpdatesEnabled() )
- relayoutPage();
+ if ( isUpdatesEnabled() )
+ relayoutPage();
}
void DateBookDay::getEvents()
@@ -311,280 +340,264 @@ void DateBookDay::getEvents()
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.
DateBookDayWidget* w = new DateBookDayWidget( *it, this );
- connect( w, SIGNAL( deleteMe( const Event & ) ),
- this, SIGNAL( removeEvent( const Event & ) ) );
- connect( w, SIGNAL( duplicateMe( const Event & ) ),
- this, SIGNAL( duplicateEvent( const Event & ) ) );
- connect( w, SIGNAL( editMe( const Event & ) ),
- this, SIGNAL( editEvent( const Event & ) ) );
- connect( w, SIGNAL( beamMe( const Event & ) ),
- this, SIGNAL( beamEvent( const Event & ) ) );
+ connect( w, SIGNAL( deleteMe( const Event & ) ), this, SIGNAL( removeEvent( const Event & ) ) );
+ connect( w, SIGNAL( duplicateMe( const Event & ) ), this, SIGNAL( duplicateEvent( const Event & ) ) );
+ connect( w, SIGNAL( editMe( const Event & ) ), this, SIGNAL( editEvent( const Event & ) ) );
+ connect( w, SIGNAL( beamMe( const Event & ) ), this, SIGNAL( beamEvent( const Event & ) ) );
widgetList.append( w );
}
- }
-
+ }
}
static int place( const DateBookDayWidget *item, bool *used, int maxn )
{
- int place = 0;
- int start = item->event().start().hour();
- QTime e = item->event().end();
- int end = e.hour();
- 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++;
+ 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 ( free ) break;
- place++;
- }
- if ( place == maxn ) {
- return -1;
- }
- while( start <= end ) {
- used[10*start+place] = TRUE;
- start++;
- }
- return 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!
-
- 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;
+ setUpdatesEnabled( FALSE );
+ if ( !fromResize )
+ getEvents(); // no need we already have them!
+
+ 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]++;
}
- 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 {
+ 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 );
+ }
+ }
- 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) );
+ }
}
- 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();
+ 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;
+ 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;
+ 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);
}
- 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;
-
- 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 );
- }
+ 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);
+ } else {
+ 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 )
+DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e, DateBookDay *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 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;
+// ### Fix later...
// QString strCat = ev.category();
// where = strCat.find( "<" );
// while ( where != -1 ) {
@@ -605,14 +618,15 @@ DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e,
if ( !strCat.isEmpty() ) {
text += strCat + "</i><br>";
}
- if (ev.event().type() == Event::Normal )
+ if (ev.event().type() == Event::Normal ) {
setEventText( text );
- else
+ } else {
setAllDayText( text );
+ }
- text += "<br><br>" + strNote;
+ text += "<br><br>" + strNote;
- setBackgroundMode( PaletteBase );
+ setBackgroundMode( PaletteBase );
QTime start = ev.start();
QTime end = ev.end();
@@ -630,9 +644,11 @@ DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e,
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() ) {
@@ -656,59 +672,51 @@ DateBookDayWidget::~DateBookDayWidget()
void DateBookDayWidget::paintEvent( QPaintEvent *e )
{
- QPainter p( this );
+ 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
- }
- }
+ 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.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() );
}
void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
@@ -716,7 +724,8 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
DateBookDayWidget *item;
item = dateBook->getSelectedWidget();
- if (item) item->update();
+ if (item)
+ item->update();
dateBook->setSelectedWidget(this);
update();
@@ -741,10 +750,10 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
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();
}
@@ -753,7 +762,7 @@ void DateBookDayWidget::setGeometry( const QRect &r )
DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db )
- : QWidget( db->dayView()->viewport() ), dateBook( db )
+ : QWidget( db->dayView()->viewport() ), dateBook( db )
{
setBackgroundMode( PaletteBase );
}
@@ -795,8 +804,8 @@ void DateBookDayTimeMarker::setTime( const QTime &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 2faf24e..961f60f 100644
--- a/core/pim/datebook/datebookday.h
+++ b/core/pim/datebook/datebookday.h
@@ -27,6 +27,9 @@
#include <qvbox.h>
#include <qlist.h>
+#include "datebook.h"
+#include <qlineedit.h>
+
class DateBookDayHeader;
class DateBookDB;
class QDateTime;
@@ -34,6 +37,22 @@ class QMouseEvent;
class QPaintEvent;
class QResizeEvent;
+class DateBookDayViewQuickLineEdit : public QLineEdit
+{
+ Q_OBJECT
+public:
+ DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0);
+protected:
+ Event quickEvent;
+ int active;
+ void focusOutEvent( QFocusEvent *e );
+protected slots:
+ void slotReturnPressed(void);
+signals:
+ void insertEvent(const Event &e);
+};
+
+
class DateBookDayView : public QTable
{
Q_OBJECT
@@ -46,21 +65,25 @@ public:
public slots:
void moveUp();
void moveDown();
+ 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;
};
class DateBookDay;