[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/kplato/libs/models
From:       Dag Andersen <danders () get2net ! dk>
Date:       2010-03-25 9:18:56
Message-ID: 20100325091856.ED60BAC876 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1107297 by danders:

Calendar: Show values defined in parent calendars (in italic)
to make it clearer that sub-calendars inherit from parents.

BUG:231902


 M  +94 -29    kptcalendarmodel.cpp  
 M  +3 -0      kptcalendarmodel.h  


--- trunk/koffice/kplato/libs/models/kptcalendarmodel.cpp #1107296:1107297
@@ -821,15 +821,51 @@
         return result;
     }
     CalendarDay *d = day( index );
-    if ( d ) {
-        switch ( d->state() ) {
-            case CalendarDay::Working:
-                result = workDuration( d, role );
-                break;
-            default:
-                result = dayState( d, role );
-                break;
+    if ( d == 0 ) {
+        return QVariant();
+    }
+    switch ( role ) {
+        case Qt::DisplayRole: {
+            switch ( d->state() ) {
+                case CalendarDay::Working:
+                    result = workDuration( d, role );
+                    break;
+                case CalendarDay::NonWorking:
+                    result = dayState( d, role );
+                    break;
+                default: {
+                    // Return parent value (if any)
+                    for ( Calendar *c = m_calendar->parentCal(); c != 0; c = \
c->parentCal() ) { +                        d = c->weekday( index.column() + 1 );
+                        Q_ASSERT( d );
+                        if ( d->state() == CalendarDay::Working ) {
+                            return workDuration( d, role );
+                        }
+                        if ( d->state() == CalendarDay::NonWorking ) {
+                           return  dayState( d, role );
+                        }
+                    }
+                    break;
+                }
+            }
+            break;
         }
+        case Qt::FontRole: {
+            if ( d->state() != CalendarDay::Undefined ) {
+                return QVariant();
+            }
+            // If defined in parent, return italic
+            for ( Calendar *c = m_calendar->parentCal(); c != 0; c = c->parentCal() \
) { +                d = c->weekday( index.column() + 1 );
+                Q_ASSERT( d );
+                if ( d->state() != CalendarDay::Undefined ) {
+                    QFont f;
+                    f.setItalic( true );
+                    return f;
+                }
+            }
+            break;
+        }
     }
     if ( result.isValid() ) {
         if ( role == Qt::DisplayRole && result.type() == QVariant::String && \
result.toString().isEmpty()) { @@ -912,6 +948,47 @@
     emit reset();
 }
 
+QVariant DateTableDataModel::data( const Calendar &cal, const QDate &date, int role \
) const +{
+    switch ( role ) {
+        case Qt::DisplayRole: {
+            CalendarDay *day = cal.findDay( date );
+            if ( day == 0 || day->state() == CalendarDay::Undefined ) {
+                if ( cal.parentCal() ) {
+                    return data( *( cal.parentCal() ), date, role );
+                }
+                return "";
+            }
+            if ( day->state() == CalendarDay::NonWorking ) {
+                return i18nc( "NonWorking", "NW" );
+            }
+            double v;
+            v = day->workDuration().toDouble( Duration::Unit_h );
+            return KGlobal::locale()->formatNumber( v, 1 );
+        }
+        case Qt::TextAlignmentRole:
+            return (uint)( Qt::AlignHCenter | Qt::AlignBottom );
+        case Qt::FontRole: {
+            CalendarDay *day = cal.findDay( date );
+            if ( day && day->state() != CalendarDay::Undefined ) {
+                if ( &cal != m_calendar ) {
+                    QFont f;
+                    f.setItalic( true );
+                    return f;
+                }
+                return QVariant();
+            }
+            if ( cal.parentCal() ) {
+                return data( *( cal.parentCal() ), date, role );
+            }
+            break;
+        }
+        default:
+            break;
+    }
+    return QVariant();
+}
+
 QVariant DateTableDataModel::data( const QDate &date, int role, int dataType ) const
 {
     //kDebug()<<date<<role<<dataType;
@@ -952,28 +1029,10 @@
             break;
         }
         case 0: {
-            switch ( role ) {
-                case Qt::DisplayRole: {
-                    if ( m_calendar == 0 ) {
-                        return "";
-                    }
-                    CalendarDay *day = m_calendar->findDay( date );
-                    if ( day == 0 || day->state() == CalendarDay::Undefined ) {
-                        return "";
-                    }
-                    if ( day->state() == CalendarDay::NonWorking ) {
-                        return i18nc( "NonWorking", "NW" );
-                    }
-                    double v;
-                    v = day->workDuration().toDouble( Duration::Unit_h );
-                    return KGlobal::locale()->formatNumber( v, 1 );
-                }
-                case Qt::TextAlignmentRole:
-                    return (uint)( Qt::AlignHCenter | Qt::AlignBottom );
-                default:
-                    break;
+            if ( m_calendar == 0 ) {
+                return "";
             }
-            break;
+            return data( *m_calendar, date, role );
         }
         default:
             break;
@@ -1017,6 +1076,12 @@
 
     QString text = model->data( date, Qt::DisplayRole, 0 ).toString();
     int align = model->data( date, Qt::TextAlignmentRole, 0 ).toInt();
+    QFont f = option.font;
+    QVariant v = model->data( date, Qt::FontRole, 0 );
+    if ( v.isValid() ) {
+        f = v.value<QFont>();
+    }
+    painter->setFont( f );
     painter->setPen( option.palette.color( QPalette::Text ) );
     painter->drawText(rect, align, text, &r);
 
--- trunk/koffice/kplato/libs/models/kptcalendarmodel.h #1107296:1107297
@@ -212,6 +212,9 @@
     void reset();
     void dataChanged( const QDate &start, const QDate &end );
 
+protected:
+    QVariant data( const Calendar &cal, const QDate &date, int role ) const;
+
 private:
     Calendar *m_calendar;
 };


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic