[PATCH] datebook: show events on all days in month view
Paul Eggleton <[email protected]>
| Newsgroups | gmane.comp.handhelds.opie.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi there, The attached patch makes the datebook month view show events on all days including the extra days from the previous/next month. It also prevents the events from being refreshed twice. This fixes bug #1351 (http://opie-bugs.oszine.de/view.php?id=1351). Cheers, Paul _______________________________________________ http://opie.handhelds.org/cgi-bin/moin.cgi/DeveloperWikiIndex Opie-devel mailing list [email protected] https://handhelds.org/mailman/listinfo/opie-devel
datebook_full_event_table.patch
(text/x-diff, 5 KB)
Index: odatebookmonth.cpp
===================================================================
RCS file: /cvs/opie/core/pim/datebook/modules/monthview/odatebookmonth.cpp,v
retrieving revision 1.2
diff -u -r1.2 odatebookmonth.cpp
--- odatebookmonth.cpp 15 Jun 2005 19:45:55 -0000 1.2
+++ odatebookmonth.cpp 29 Dec 2006 08:32:25 -0000
@@ -177,6 +177,22 @@
col = effective_day % 7;
}
+bool ODateBookMonthTable::findDate( QDate date, int &row, int &col )
+{
+ int rows = numRows();
+ int cols = numCols();
+ for(int r=0;r<rows;r++) {
+ for(int c=0;c<cols;c++) {
+ if(getDateAt(r, c) == date) {
+ row = r;
+ col = c;
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
void ODateBookMonthTable::dayClicked( int row, int col )
{
changeDaySelection( row, col );
@@ -190,32 +206,43 @@
void ODateBookMonthTable::changeDaySelection( int row, int col )
{
- DayItemMonth *i = (DayItemMonth*)item( row, col );
- if ( !i )
- return;
- switch ( i->type() ) {
- case Calendar::Day::ThisMonth:
- selMonth = month;
- break;
- case Calendar::Day::PrevMonth:
- selMonth = month-1;
- break;
- default:
- selMonth = month+1;
- }
-
- selYear = year;
- if ( selMonth <= 0 ) {
- selMonth = 12;
- selYear--;
- } else if ( selMonth > 12 ) {
- selMonth = 1;
- selYear++;
- }
- selDay = i->day();
+ QDate selDate = getDateAt( row, col );
+ selYear = selDate.year();
+ selMonth = selDate.month();
+ selDay = selDate.day();
+}
+
+QDate ODateBookMonthTable::getDateAt( int row, int col )
+{
+ int itemMonth, itemYear;
+
+ DayItemMonth *i = (DayItemMonth*)item( row, col );
+ if ( !i )
+ return QDate(1900, 1, 1);
+ switch ( i->type() ) {
+ case Calendar::Day::ThisMonth:
+ itemMonth = month;
+ break;
+ case Calendar::Day::PrevMonth:
+ itemMonth = month-1;
+ break;
+ default:
+ itemMonth = month+1;
+ }
+
+ itemYear = year;
+ if ( itemMonth <= 0 ) {
+ itemMonth = 12;
+ itemYear--;
+ }
+ else if ( itemMonth > 12 ) {
+ itemMonth = 1;
+ itemYear++;
+ }
+
+ return QDate( itemYear, itemMonth, i->day());
}
-
void ODateBookMonthTable::viewportMouseReleaseEvent( QMouseEvent * )
{
dayClicked( currentRow(), currentColumn() );
@@ -223,34 +250,33 @@
void ODateBookMonthTable::getEvents()
{
- if ( !db )
- return;
-
- QDate dtStart( year, month, 1 );
- d->mMonthEvents = db->getEffectiveEvents( dtStart,
- QDate( year, month,
- dtStart.daysInMonth() ) );
- QValueListIterator<EffectiveEvent> it = d->mMonthEvents.begin();
- // now that the events are sorted, basically go through the list, make
- // a small list for every day and set it for each item...
- // clear all the items...
- while ( it != d->mMonthEvents.end() ) {
- QValueList<EffectiveEvent> dayEvent;
- EffectiveEvent e = *it;
- ++it;
- dayEvent.append( e );
- while ( it != d->mMonthEvents.end()
- && e.date() == (*it).date() ) {
- dayEvent.append( *it );
- ++it;
- }
- int row, col;
- findDay( e.date().day(), row, col );
- DayItemMonth* w = static_cast<DayItemMonth*>( item( row, col ) );
- w->setEvents( dayEvent );
- updateCell( row, col );
- dayEvent.clear();
- }
+ if ( !db )
+ return;
+
+ QDate dtStart = getDateAt(0,0);
+ QDate dtEnd = getDateAt(numRows()-1, numCols()-1);
+ d->mMonthEvents = db->getEffectiveEvents( dtStart, dtEnd);
+ QValueListIterator<EffectiveEvent> it = d->mMonthEvents.begin();
+ // now that the events are sorted, basically go through the list, make
+ // a small list for every day and set it for each item...
+ // clear all the items...
+ while ( it != d->mMonthEvents.end() ) {
+ QValueList<EffectiveEvent> dayEvent;
+ EffectiveEvent e = *it;
+ ++it;
+ dayEvent.append( e );
+ while ( it != d->mMonthEvents.end()
+ && e.date() == (*it).date() ) {
+ dayEvent.append( *it );
+ ++it;
+ }
+ int row, col;
+ findDate( e.date(), row, col );
+ DayItemMonth* w = static_cast<DayItemMonth*>( item( row, col ) );
+ w->setEvents( dayEvent );
+ updateCell( row, col );
+ dayEvent.clear();
+ }
}
@@ -345,7 +371,9 @@
void ODateBookMonth::redraw()
{
table->setDate( year, month, day );
- table->redraw();
+ // table->setDate already calls setupTable, which is all that
+ // redraw will do here that's useful - bluelightning
+ //table->redraw();
}
QDate ODateBookMonth::selectedDate() const
Index: odatebookmonth.h
===================================================================
RCS file: /cvs/opie/core/pim/datebook/modules/monthview/odatebookmonth.h,v
retrieving revision 1.1
diff -u -r1.1 odatebookmonth.h
--- odatebookmonth.h 20 Mar 2005 10:51:55 -0000 1.1
+++ odatebookmonth.h 29 Dec 2006 08:32:26 -0000
@@ -81,8 +81,10 @@
void setupLabels();
void findDay( int day, int &row, int &col );
+ bool findDate( QDate date, int &row, int &col );
void getEvents();
void changeDaySelection( int row, int col );
+ QDate getDateAt( int row, int col );
int year, month, day;
int selYear, selMonth, selDay;