fileformat/DataTypes/ActivityChangeInfoArray.h
Go to the documentation of this file.
00001 #ifndef ACTIVITYCHANGEINFOARRAY_H
00002 #define ACTIVITYCHANGEINFOARRAY_H
00003 
00004 #include "ActivityChangeInfoCard.h"
00005 #include "../PictureGenerators/SvgDayActivity.h"
00006 #include <QtCore/QDebug>
00007 
00008 
00009 bool prepareActivityChangeInfoArray(Subblocks<ActivityChangeInfo> activities){
00010         //set durations
00011         for(int j = 0; j < activities.size() - 1; ++j){
00012                 if(activities[j + 1].t != 0) activities[j].duration = activities[j + 1].t - activities[j].t;
00013                 else activities[j].duration = 60*24 - activities[j].t;
00014         }
00015         activities[activities.size() - 1].duration = 60*24 - activities[activities.size() - 1].t;
00016         return true;
00017 }
00018 
00019 SvgDayActivity visualizeActivityChangeInfoArray(Subblocks<ActivityChangeInfo> activities){
00020                                 SvgDayActivity visualization;
00021                         for(int j = 0; j < Activities.size(); ++j){
00022                                 visualization.add(Activities[j].t,Activities[j].duration,(Activities[j].a+1)*10,Activities[j].color(),Activities[j].toString());
00023                         }
00024 }
00025 
00026 class ActivityChangeInfoArray : public DataType {
00027         Q_DECLARE_TR_FUNCTIONS(ActivityChangeInfoArray)
00028 private:
00029         int dataSize;
00030         bool invalid;
00031         QVector<ActivityChangeInfoCard> Activities;
00032 public:
00033         ActivityChangeInfoArray(const DataPointer& filewalker, int dataSize) : DataType(filewalker), dataSize(dataSize) {
00034                 if(start.bytesLeft() < dataSize) invalid = true;
00035                 else {
00036                         invalid = false;
00037                         for(int j = 0; j < dataSize; j += 2){
00038                                 Activities.append(ActivityChangeInfoCard(start + j));
00039                         }
00040                         for(int j = 0; j < Activities.size() - 1; ++j){
00041                                 if(Activities[j + 1].t != 0) Activities[j].duration = Activities[j + 1].t - Activities[j].t;
00042                                 else Activities[j].duration = 60*24 - Activities[j].t;
00043                         }
00044                         Activities[Activities.size() - 1].duration = 60*24 - Activities[Activities.size() - 1].t;
00045                 }
00046         }
00047         void printOn(Reporter& o) const {
00048                 if(invalid){
00049                         o.tagValuePair("invalid", "size is larger than remaining space");
00050                 }
00051                 if(o.allowSvg()){
00052                         SvgDayActivity visualization;
00053                         for(int j = 0; j < Activities.size(); ++j){
00054                                 visualization.add(Activities[j].t,Activities[j].duration,(Activities[j].a+1)*10,Activities[j].color(),Activities[j].toString());
00055                         }
00056                         o.tagValuePair("Activities", visualization.toString());
00057                 }
00058                 for(int j = 0; j < Activities.size(); ++j) o << Activities[j];
00059         }
00060         int size() const {
00061                 return dataSize;
00062         }
00063 };
00064 #endif