author | umopapisdn <umopapisdn> | 2003-04-13 21:41:19 (UTC) |
---|---|---|
committer | umopapisdn <umopapisdn> | 2003-04-13 21:41:19 (UTC) |
commit | 1745c6565e18506d5cb5631ae13cfc5fab060fee (patch) (side-by-side diff) | |
tree | 4206eaf78b396c31e7e8729886b0c9c32bae9855 | |
parent | 6f610544d3db6198c90105b70fab1cc84f5a1fbd (diff) | |
download | opie-1745c6565e18506d5cb5631ae13cfc5fab060fee.zip opie-1745c6565e18506d5cb5631ae13cfc5fab060fee.tar.gz opie-1745c6565e18506d5cb5631ae13cfc5fab060fee.tar.bz2 |
New feature: Added the possibility to add "quick entries" in dayview merely by clicking on the calendar, which overlays a qlineedit.
Right now it adds 1 hour events, this will soon be adressed.
-rw-r--r-- | core/pim/datebook/datebook.cpp | 7 | ||||
-rw-r--r-- | core/pim/datebook/datebook.h | 1 | ||||
-rw-r--r-- | core/pim/datebook/datebookday.cpp | 177 | ||||
-rw-r--r-- | core/pim/datebook/datebookday.h | 23 |
4 files changed, 124 insertions, 84 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 @@ -384,4 +384,11 @@ void DateBook::viewMonth() { } +void DateBook::insertEvent( const Event &e ) +{ + qWarning("Adding Event!"); + db->addEvent(e); + emit newEvent(); +} + void DateBook::duplicateEvent( const Event &e ) { 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 @@ -89,4 +89,5 @@ private slots: void showDay( int y, int m, int d ); + void insertEvent( const Event &e ); void editEvent( const Event &e ); void duplicateEvent( 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 @@ -39,10 +39,10 @@ #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 ) +DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, const char *name ) + : QTable( 24, 1, parent, name ), ampm( whichClock ), currDate( QDate::currentDate() ) { enableClipper(TRUE); @@ -64,7 +64,7 @@ DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, //setRowHeight( row, 40); } + initHeader(); - QObject::connect( qApp, SIGNAL(clockChanged(bool)), - this, SLOT(slotChangeClock(bool)) ); + QObject::connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotChangeClock(bool)) ); } @@ -94,4 +94,9 @@ void DateBookDayView::initHeader() } +void DateBookDayView::slotDateChanged( int y, int m, int d ) +{ + currDate.setYMD(y,m,d); +} + void DateBookDayView::slotChangeClock( bool newClock ) { @@ -140,5 +145,4 @@ void DateBookDayView::paintFocus( QPainter *, const QRect & ) } - void DateBookDayView::resizeEvent( QResizeEvent *e ) { @@ -169,13 +173,46 @@ void DateBookDayView::setRowStyle( int style ) } +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) +{ + 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; + } + this->close(true); // Close and also delete this widget +} + +void DateBookDayViewQuickLineEdit::focusOutEvent ( QFocusEvent * e ) +{ + slotReturnPressed(); // Reuse code to add event and close this widget. +} + +//=========================================================================== + +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 ); @@ -184,17 +221,13 @@ DateBookDay::DateBookDay( bool ampm, bool startOnMonday, view = new DateBookDayView( ampm, this, "day view" ); - 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&)) ); + 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 + connect( timer, SIGNAL(timeout()), this, SLOT(updateView()) ); //connect timer for updating timeMarker & daywidgetcolors timer->start( 1000*60*5, FALSE ); //update every 5min @@ -247,4 +280,5 @@ void DateBookDay::selectedDates( QDateTime &start, QDateTime &end ) eh = QMAX(sh,sel.bottomRow()+1); } + if (sh > 23 || eh < 1) { sh=8; @@ -259,5 +293,4 @@ void DateBookDay::setDate( int y, int m, int d ) { header->setDate( y, m, d ); - selectedWidget = 0; } @@ -266,5 +299,4 @@ void DateBookDay::setDate( QDate d) { header->setDate( d.year(), d.month(), d.day() ); - selectedWidget = 0; } @@ -284,6 +316,5 @@ void DateBookDay::dateChanged( int y, int m, int d ) ts.init( QTime::currentTime().hour(), 0); ts.expandTo( QTime::currentTime().hour(), 0); - } else - { + } else { ts.init( startTime, 0 ); ts.expandTo( startTime, 0 ); @@ -291,7 +322,5 @@ void DateBookDay::dateChanged( int y, int m, int d ) dayView()->addSelection( ts ); - selectedWidget = 0; - } @@ -312,16 +341,11 @@ void DateBookDay::getEvents() 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 ); } } - } @@ -346,5 +370,6 @@ static int place( const DateBookDayWidget *item, bool *used, int maxn ) s++; } - if ( free ) break; + if ( free ) + break; place++; } @@ -384,13 +409,13 @@ void DateBookDay::relayoutPage( bool fromResize ) 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++) - { + 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++) + 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 @@ -401,8 +426,7 @@ void DateBookDay::relayoutPage( bool fromResize ) if (intersectedWidgets[j] != -1) - for ( uint k = j; k < intersectedWidgets.count(); k++) + for ( uint k = j; k < intersectedWidgets.count(); k++) { if (j != k && intersectedWidgets[k] != -1) - if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]])) - { + if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]])) { inter[j]++; intersectedWidgets[k] = -1; @@ -410,5 +434,5 @@ void DateBookDay::relayoutPage( bool fromResize ) if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1; } - + } if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++; } @@ -418,11 +442,7 @@ void DateBookDay::relayoutPage( bool fromResize ) 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 ); @@ -431,13 +451,10 @@ void DateBookDay::relayoutPage( bool fromResize ) } - if (jumpToCurTime && this->date() == QDate::currentDate()) + if (jumpToCurTime && this->date() == QDate::currentDate()) { view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour - else + } else { view->setContentsPos( 0, startTime * view->rowHeight(0) ); - - + } } else { - - int hours[24]; memset( hours, 0, 24*sizeof( int ) ); @@ -480,9 +497,10 @@ void DateBookDay::relayoutPage( bool fromResize ) } - if (jumpToCurTime && this->date() == QDate::currentDate()) + if (jumpToCurTime && this->date() == QDate::currentDate()) { view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour - else + } else { view->setContentsPos( 0, startTime * view->rowHeight(0) ); } + } timeMarker->setTime( QTime::currentTime() ); //display timeMarker @@ -522,10 +540,8 @@ void DateBookDay::setStartViewTime( int startHere ) QTableSelection ts; - if (jumpToCurTime && this->date() == QDate::currentDate()) //this should probably be in datebook.cpp where it's called? - { + 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 - { + } else { ts.init( startTime, 0 ); ts.expandTo( startTime, 0 ); @@ -568,10 +584,7 @@ void DateBookDay::keyPressEvent(QKeyEvent *e) //=========================================================================== -DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e, - DateBookDay *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... @@ -606,8 +619,9 @@ DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e, 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; @@ -631,7 +645,9 @@ DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e, } + void DateBookDayWidget::setAllDayText( QString &text ) { text += "<b>" + tr("This is an all day event.") + "</b>"; } + void DateBookDayWidget::setEventText( QString& text ) { bool whichClock = dateBook->dayView()->whichClock(); @@ -659,27 +675,19 @@ void DateBookDayWidget::paintEvent( QPaintEvent *e ) QPainter p( this ); - if (dateBook->getSelectedWidget() == this) - { + if (dateBook->getSelectedWidget() == this) { p.setBrush( QColor( 155, 240, 230 ) ); // selected item - } else - { - if (dateBook->date() == QDate::currentDate()) - { + } else { + if (dateBook->date() == QDate::currentDate()) { QTime curTime = QTime::currentTime(); - - if (ev.end() < curTime) - { + if (ev.end() < curTime) { p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive - } else - { + } 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 - { + } else { p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date) //perhaps make a distinction between future/past dates @@ -717,5 +725,6 @@ void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) item = dateBook->getSelectedWidget(); - if (item) item->update(); + if (item) + item->update(); dateBook->setSelectedWidget(this); 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 @@ -28,4 +28,7 @@ #include <qlist.h> +#include "datebook.h" +#include <qlineedit.h> + class DateBookDayHeader; class DateBookDB; @@ -35,4 +38,20 @@ 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 { @@ -47,4 +66,5 @@ public slots: void moveUp(); void moveDown(); + void slotDateChanged( int year, int month, int day ); signals: @@ -59,7 +79,10 @@ protected: virtual void resizeEvent( QResizeEvent *e ); void keyPressEvent( QKeyEvent *e ); + void contentsMouseReleaseEvent( QMouseEvent *e ); void initHeader(); private: bool ampm; + QDate currDate; + DateBookDayViewQuickLineEdit *quickLineEdit; }; |