27 #include "../../../st/maptools/TrajectoryDataSetLayer.h" 
   29 #include "../canvas/MapDisplay.h" 
   36 #include "ui_TimeSliderWidgetForm.h" 
   37 #include "ui_SliderPropertiesDialogForm.h" 
   48 #include <QGraphicsEffect> 
   50 #include <QGraphicsView> 
   52 #include <QParallelAnimationGroup> 
   53 #include <QPropertyAnimation> 
   56 #include <QTextStream> 
   57 #include <QContextMenuEvent> 
   58 #include <QMessageBox> 
   59 #include <QInputDialog> 
   60 #include <QDateTimeEdit> 
   61 #include <QColorDialog> 
   62 #include <QListWidget> 
   65 #include <QFileDialog> 
   70     m_erasePerfectly(false),
 
   71     m_ui(new Ui::TimeSliderWidgetForm),
 
   72     m_maxSliderValue(1000000000),
 
   77   setFocusPolicy(Qt::StrongFocus);
 
   78   setMouseTracking(
true);
 
   91   m_ui->m_TemporalHorizontalSlider->setMinimum(0);
 
   94   m_ui->m_durationSpinBox->setMinimum(100);
 
   95   m_ui->m_durationSpinBox->setMaximum(100000000);
 
   96   m_ui->m_durationSpinBox->setValue(10000);
 
   97   m_ui->m_durationSpinBox->setSingleStep(10000);
 
   99   m_spd->
m_ui->m_initialTimeLineEdit->setEnabled(
false);
 
  100   m_spd->
m_ui->m_finalTimeLineEdit->setEnabled(
false);
 
  102   m_spd->
m_ui->m_opacitySpinBox->setMinimum(0);
 
  103   m_spd->
m_ui->m_opacitySpinBox->setMaximum(255);
 
  104   m_spd->
m_ui->m_opacitySpinBox->setValue(255);
 
  105   m_spd->
m_ui->m_opacitySpinBox->setSingleStep(5);
 
  118   m_ui->m_settingsToolButton->setIcon(QIcon::fromTheme(
"preferences-system"));
 
  119   m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-start"));
 
  120   m_ui->m_stopToolButton->setIcon(QIcon::fromTheme(
"media-playback-stop"));
 
  123   connect(
m_ui->m_dateTimeEdit, SIGNAL(dateTimeChanged(
const QDateTime&) ), 
this, SLOT(
onDateTimeEditChanged(
const QDateTime&)));
 
  128   connect(
m_ui->m_TemporalHorizontalSlider, SIGNAL(sliderMoved (
int)), 
this, SLOT(
onSliderMoved(
int)));
 
  130   setAttribute(Qt::WA_DeleteOnClose, 
true);
 
  138   m_spd->
m_ui->m_forwardRadioButton->setCheckable(
true);
 
  142   QBrush brush(Qt::transparent);
 
  143   QPalette palette(brush, brush, brush, brush, brush, brush, brush, brush, brush);
 
  162   m_spd->
m_ui->m_forwardColorPushButton->installEventFilter(
this);
 
  163   m_spd->
m_ui->m_backwardColorPushButton->installEventFilter(
this);
 
  164   m_spd->
m_ui->m_iconPushButton->installEventFilter(
this);
 
  165   m_ui->m_dateTimeEdit->installEventFilter(
this);
 
  167   m_ui->m_dateTimeEdit->setDisplayFormat(
"dd/MMM/yyyy hh:mm:ss");
 
  171     m_ui->m_durationSpinBox->setEnabled(
false);
 
  172     m_ui->m_settingsToolButton->setEnabled(
false);
 
  173     m_ui->m_playToolButton->setEnabled(
false);
 
  174     m_ui->m_stopToolButton->setEnabled(
false);
 
  175     m_ui->m_dateTimeEdit->setEnabled(
false);
 
  180     m_ui->m_durationSpinBox->setEnabled(
true);
 
  181     m_ui->m_settingsToolButton->setEnabled(
true);
 
  182     m_ui->m_playToolButton->setEnabled(
true);
 
  183     m_ui->m_stopToolButton->setEnabled(
true);
 
  185       m_ui->m_dateTimeEdit->setEnabled(
true);
 
  187       m_ui->m_dateTimeEdit->setEnabled(
false);
 
  199     QList<QGraphicsItem*>::iterator it = list.begin(); 
 
  211   m_parallelAnimation->stop(); 
 
  212   m_parallelAnimation->clear();
 
  213   delete m_parallelAnimation;
 
  214   delete m_animationScene;
 
  216   bool b = m_animationView->testAttribute(Qt::WA_DeleteOnClose);
 
  217   m_animationView->close();
 
  219     delete m_animationView;
 
  229   if(layer->getType() == 
"TRAJECTORYDATASETLAYER")
 
  232     QString title(tl->
getTitle().c_str());
 
  233     QPair<QString, te::st::TrajectoryDataSetLayer*> p(title, tl);
 
  234     if(trajectoryAlreadyExists(p))
 
  235       QMessageBox::information(
this, title + 
" already exists", 
"This item is already being animated!");
 
  237       addTrajectory(tl, 
"");
 
  245   if(layer->getType() == 
"TRAJECTORYDATASETLAYER")
 
  247     QString title = layer->getTitle().c_str();
 
  248     removeAnimation(title);
 
  266   QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
 
  268   QList<QGraphicsItem*> list = m_animationScene->items();
 
  269   QList<QGraphicsItem*>::iterator it;
 
  271   for(it = list.begin(); it != list.end(); ++it)
 
  364   int ind = m_spd->m_ui->m_animationComboBox->currentIndex();
 
  367     QString title = m_spd->m_ui->m_animationComboBox->currentText();
 
  368     removeAnimation(title);
 
  376     int ind = m_spd->m_ui->m_animationComboBox->currentIndex();
 
  379     QString title = m_spd->m_ui->m_animationComboBox->currentText();
 
  380     removeAnimation(title);
 
  386   QList<QGraphicsItem*> list = m_animationScene->items();
 
  387   QList<QGraphicsItem*>::iterator it;
 
  389   for(it = list.begin(); it != list.end(); ++it)
 
  395       if(list.count() == 1)
 
  397         onStopToolButtonnClicked();
 
  398         m_animationScene->removeItem(ai);
 
  399         m_parallelAnimation->removeAnimation(ai->
m_animation);
 
  402         m_ui->m_TemporalHorizontalSlider->setValue(0);
 
  403         m_parallelAnimation->setCurrentTime(0);
 
  404         m_ui->m_settingsToolButton->setEnabled(
false);
 
  405         m_ui->m_playToolButton->setEnabled(
false);
 
  406         m_ui->m_stopToolButton->setEnabled(
false);
 
  407         m_ui->m_durationSpinBox->setEnabled(
false);
 
  408         m_ui->m_dateTimeEdit->setEnabled(
false);
 
  410         removeOnPropertieCombo(title);
 
  415       bool running = 
false;
 
  416       int state = m_parallelAnimation->state();
 
  417       if(state == QAbstractAnimation::Running)
 
  420         onPlayToolButtonnClicked();
 
  423       m_currentTime = m_parallelAnimation->currentTime();
 
  424       m_animationScene->removeItem(ai);
 
  425       m_parallelAnimation->removeAnimation(ai->
m_animation);
 
  426       if(ai->pixmap().isNull() == 
false)
 
  428         if(m_animationScene->m_numberOfTrajectories)
 
  430           m_animationScene->m_mutex.lock();
 
  431           m_animationScene->m_trajectoryPixmap->fill(Qt::transparent);
 
  432           m_animationScene->m_mutex.unlock();
 
  439       calculateSpatialExtent();
 
  440       calculateTemporalExtent();
 
  442       setDuration(m_duration);
 
  443       setDirection(m_direction);
 
  447         onPlayToolButtonnClicked();
 
  448         m_parallelAnimation->setCurrentTime(m_currentTime);
 
  454   removeOnPropertieCombo(title);
 
  461   size_t size = m_spd->m_ui->m_animationComboBox->count();
 
  462   for(i = 0; i < size; ++i)
 
  464     QString ititle = m_spd->m_ui->m_animationComboBox->itemText(i);
 
  467       m_spd->m_ui->m_animationComboBox->removeItem(i);
 
  469         onAnimationComboBoxActivated(i-1);
 
  470       else if(m_spd->m_ui->m_animationComboBox->count() > 0)
 
  471         onAnimationComboBoxActivated(0);
 
  480   const QMimeData* mdata = e->mimeData();
 
  481   QList<QUrl> urls = mdata->urls();
 
  484     QByteArray ba = mdata->data(
"application/x-terralib;value=\"DraggedItems\"");
 
  488       std::vector<te::qt::widgets::AbstractTreeItem*>* ditems = (std::vector<AbstractTreeItem*>*)s.toULongLong();
 
  489       std::vector<te::qt::widgets::AbstractTreeItem*>::iterator it;
 
  490       for(it = ditems->begin(); it != ditems->end(); ++it)
 
  493         std::string ltype = ati->
getLayer()->getType();
 
  494         if(ltype == 
"TRAJECTORYDATASETLAYER")
 
  501     e->setDropAction(Qt::LinkAction);
 
  503     QString path = urls.begin()->path();
 
  504     size_t pos = path.indexOf(
"/");
 
  508     QStringList nameFilter;
 
  509     nameFilter.append(
"*.ctl");
 
  510     QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
  511     if(files.empty() == 
false)
 
  513       QString file(path + 
"/" + files.first());
 
  514       FILE* fp = fopen(file.toStdString().c_str(), 
"r");
 
  516       int c = fread(buf, 
sizeof(
char), 2000, fp);
 
  520       if(s.contains(
"undef", Qt::CaseInsensitive))
 
  526       nameFilter.append(
"S1123*.jpg");
 
  527       QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
  528       if(files.empty() == 
false && files.first().length() == 26)
 
  533         nameFilter.append(
"S1118*.jpg");
 
  534         QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
  535         if(files.empty() == 
false && files.first().length() == 26)
 
  547   m_dropModifiers = e->keyboardModifiers();
 
  548   const QMimeData* mdata = e->mimeData();
 
  549   m_dropUrls = mdata->urls();
 
  550   m_dropBA = mdata->data(
"application/x-terralib;value=\"DraggedItems\"");
 
  551   QTimer::singleShot(10, 
this, SLOT(dropAction()));
 
  557   int state = m_parallelAnimation->state();
 
  558   int tempo = m_currentTime;
 
  559   if(state == QAbstractAnimation::Running)
 
  560     onPlayToolButtonnClicked(); 
 
  562   if(m_dropModifiers == Qt::NoModifier)
 
  564     onStopToolButtonnClicked();
 
  565     m_spd->m_ui->m_animationComboBox->clear();
 
  566     m_spd->m_ui->m_animationComboBox->clear();
 
  567     m_ui->m_TemporalHorizontalSlider->setValue(0);
 
  568     m_parallelAnimation->setCurrentTime(0);
 
  569     m_ui->m_settingsToolButton->setEnabled(
false);
 
  570     m_ui->m_playToolButton->setEnabled(
false);
 
  571     m_ui->m_stopToolButton->setEnabled(
false);
 
  572     m_ui->m_durationSpinBox->setEnabled(
false);
 
  573     m_ui->m_dateTimeEdit->setEnabled(
false);
 
  575     QList<QGraphicsItem*> list = m_animationScene->items();
 
  576     QList<QGraphicsItem*>::iterator it;
 
  577     for(it = list.begin(); it != list.end(); ++it)
 
  580       m_animationScene->removeItem(ai);
 
  581       m_parallelAnimation->removeAnimation(ai->
m_animation);
 
  589     m_spd->m_ui->m_animationComboBox->clear();
 
  595   if(m_dropUrls.empty())
 
  597     if(m_dropBA.count() != 0)
 
  600       std::vector<te::qt::widgets::AbstractTreeItem*>* ditems = (std::vector<AbstractTreeItem*>*)s.toULongLong();
 
  601       std::vector<te::qt::widgets::AbstractTreeItem*>::iterator it;
 
  602       for(it = ditems->begin(); it != ditems->end(); ++it)
 
  605         std::string ltype = ati->
getLayer()->getType();
 
  606         if(ltype == 
"TRAJECTORYDATASETLAYER")
 
  609           QString title(tl->
getTitle().c_str());
 
  610           QPair<QString, te::st::TrajectoryDataSetLayer*> p(title, tl);
 
  611           if(trajectoryAlreadyExists(p))
 
  612             QMessageBox::information(
this, title + 
" already exists", 
"This item is already being animated!");
 
  614             addTrajectory(tl, 
"");
 
  621     QList<QUrl>::iterator it;
 
  622     for(it = m_dropUrls.begin(); it != m_dropUrls.end(); ++it)
 
  624       QString path = it->path();
 
  626       QString title = dir.dirName();
 
  629       QPair<QString, QString> p(title, path);
 
  631       if(coverageAlreadyExists(p))
 
  632         QMessageBox::information(
this, 
"animation already exists", 
"This item is already being animated!");
 
  634         addTemporalImages(path);
 
  638   if(state == QAbstractAnimation::Running || m_dropModifiers == Qt::NoModifier)
 
  640     m_currentTime = tempo;
 
  641     onPlayToolButtonnClicked();
 
  642     m_parallelAnimation->setCurrentTime(m_currentTime);
 
  648   for(
int i = 0; i < m_spd->m_ui->m_animationComboBox->count(); ++i)
 
  650     if(item.first == m_spd->m_ui->m_animationComboBox->itemText(i))
 
  672   for(
int i = 0; i < m_spd->m_ui->m_animationComboBox->count(); ++i)
 
  674     if(item.first == m_spd->m_ui->m_animationComboBox->itemText(i))
 
  696   int state = m_parallelAnimation->state();
 
  698   QString title = tl->
getTitle().c_str();
 
  700   m_animationScene->addItem(ti);
 
  702   animation->setEasingCurve(QEasingCurve::Linear);
 
  708   size_t size = dset->
size();
 
  719       std::auto_ptr<te::dt::DateTime> time = dset->
getTime();
 
  721       if(tiraRepetido == *tinstant)
 
  723       tiraRepetido = *tinstant;
 
  727       std::auto_ptr<te::gm::Geometry> geom = dset->
getGeometry();
 
  735   m_parallelAnimation->addAnimation(animation);
 
  736   calculateSpatialExtent();
 
  737   calculateTemporalExtent();
 
  739   setDuration(m_duration);
 
  740   setDirection(m_direction);
 
  742   if(state == QAbstractAnimation::Running)
 
  744     onPlayToolButtonnClicked();
 
  745     m_parallelAnimation->setCurrentTime(m_currentTime);
 
  747   if(m_animationScene->items().isEmpty() == 
false)
 
  749     m_ui->m_durationSpinBox->setEnabled(
true);
 
  750     m_ui->m_settingsToolButton->setEnabled(
true);
 
  751     m_ui->m_playToolButton->setEnabled(
true);
 
  752     m_ui->m_stopToolButton->setEnabled(
true);
 
  753     if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
  754       m_ui->m_dateTimeEdit->setEnabled(
true);
 
  756       m_ui->m_dateTimeEdit->setEnabled(
false);
 
  785   m_spd->m_ui->m_animationComboBox->addItem(title);
 
  786   int count = m_spd->m_ui->m_animationComboBox->count();
 
  787   m_spd->m_ui->m_animationComboBox->setCurrentIndex(count-1);
 
  793   onAnimationComboBoxActivated(count-1);
 
  798   if(m_animationScene->items().isEmpty())
 
  799     m_ui->m_durationSpinBox->setValue(m_duration);
 
  801   int state = m_parallelAnimation->state();
 
  802   m_currentTime = m_parallelAnimation->currentTime();
 
  803   if(state == QAbstractAnimation::Running)
 
  804     onPlayToolButtonnClicked();
 
  809     QMessageBox::information(
this, 
"Error", 
"Load error: " + filePath);
 
  814   calculateSpatialExtent();
 
  815   calculateTemporalExtent();
 
  817   setDuration(m_duration);
 
  818   setDirection(m_direction);
 
  819   if(state == QAbstractAnimation::Running)
 
  821     onPlayToolButtonnClicked();
 
  822     m_parallelAnimation->setCurrentTime(m_currentTime);
 
  824   if(m_animationScene->items().isEmpty() == 
false)
 
  826     m_ui->m_durationSpinBox->setEnabled(
true);
 
  827     m_ui->m_settingsToolButton->setEnabled(
true);
 
  828     m_ui->m_playToolButton->setEnabled(
true);
 
  829     m_ui->m_stopToolButton->setEnabled(
true);
 
  830     if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
  831       m_ui->m_dateTimeEdit->setEnabled(
true);
 
  833       m_ui->m_dateTimeEdit->setEnabled(
false);
 
  863   m_spd->m_ui->m_animationComboBox->addItem(dir.dirName());
 
  864   int count = m_spd->m_ui->m_animationComboBox->count();
 
  865   m_spd->m_ui->m_animationComboBox->setCurrentIndex(count-1);
 
  866   onAnimationComboBoxActivated(count-1);
 
  938   PixmapItem* pi = getTemporalImageCtlParameters(path);
 
  942   m_animationScene->addItem(pi);
 
  945   animation->setEasingCurve(QEasingCurve::Linear);
 
  946   m_parallelAnimation->addAnimation(animation);
 
  948   QString suffix = 
"." + pi->
m_suffix;
 
  949   QStringList nameFilter;
 
  950   nameFilter.append(
"*" + suffix);
 
  952   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
  953   size_t count = files.count();
 
  962   for(
size_t i = 0; i < count; ++i)
 
  964     QString f = files[i];
 
  976   for(
size_t i = 0; i < count; ++i)
 
  979       pos -= QPointF(w, h);
 
  981       pos += QPointF(w, h);
 
  994   QList<QGraphicsItem*> list = m_animationScene->items();
 
  995   QList<QGraphicsItem*>::iterator it;
 
  997   for(it = list.begin(); it != list.end(); ++it)
 
 1005       m_spatialExtent.Union(e);
 
 1010   QRectF rect(m_spatialExtent.m_llx, m_spatialExtent.m_lly, m_spatialExtent.getWidth(), m_spatialExtent.getHeight());
 
 1011   m_animationScene->setSceneRect(rect);
 
 1012   m_animationView->setSceneRect(rect);
 
 1013   m_animationView->fitInView(rect);
 
 1024   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1025   QList<QGraphicsItem*>::iterator it = list.begin();
 
 1026   if(it != list.end())
 
 1034   while(it != list.end())
 
 1038     if(initial < t_initial)
 
 1039       t_initial = initial;
 
 1049   if(list.count() == 1)
 
 1051     m_temporalAnimationExtent = tp;
 
 1053     for(it = list.begin(); it != list.end(); ++it)
 
 1064   QVector<te::dt::TimePeriod> 
times;
 
 1065   QVector<te::gm::Envelope> envelopes;
 
 1066   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1067   QList<QGraphicsItem*>::iterator it;
 
 1068   for(it = list.begin(); it != list.end(); ++it)
 
 1075   if(m_parallelAnimation->state() == QAbstractAnimation::Stopped)
 
 1076     m_parallelAnimation->clear();
 
 1079     int cur = m_parallelAnimation->currentTime();
 
 1080     m_parallelAnimation->stop();
 
 1081     m_parallelAnimation->clear();
 
 1082     m_parallelAnimation->setCurrentTime(cur);
 
 1085   for(it = list.begin(), i = 0 ; it != list.end(); ++it, ++i)
 
 1093     m_parallelAnimation->addAnimation(a);
 
 1102   boost::posix_time::ptime iTime = m_temporalAnimationExtent.getInitialTimeInstant().getTimeInstant();
 
 1103   boost::posix_time::ptime fTime = m_temporalAnimationExtent.getFinalTimeInstant().getTimeInstant();
 
 1104   boost::posix_time::time_duration diff = fTime - iTime;
 
 1105   double totalSeconds = diff.total_seconds();
 
 1107   diff = pTime - iTime;
 
 1108   double seconds = diff.total_seconds();
 
 1110   double t = seconds / totalSeconds;
 
 1111   int ret = qRound(t * (
double)m_duration);
 
 1117   double t = m_parallelAnimation->currentTime();
 
 1118   double trel = t / (double)m_duration;
 
 1121   boost::posix_time::ptime iTime = m_temporalAnimationExtent.getInitialTimeInstant().
getTimeInstant();
 
 1122   boost::posix_time::ptime fTime = m_temporalAnimationExtent.getFinalTimeInstant().getTimeInstant();
 
 1123   boost::posix_time::time_duration diff = fTime - iTime;
 
 1124   double totalSeconds = diff.total_seconds();
 
 1126   int secs = qRound(totalSeconds * trel);
 
 1127   boost::posix_time::time_duration td = boost::posix_time::seconds(secs);
 
 1128   boost::posix_time::ptime time = iTime + td;
 
 1135   if(m_animationScene->items().isEmpty())
 
 1137   if(m_parallelAnimation->state() == QAbstractAnimation::Stopped)
 
 1144   if(m_ui->m_dateTimeEdit->isEnabled() == 
false)
 
 1145     t = getTimeInstant();
 
 1148     QDateTime d = m_ui->m_dateTimeEdit->dateTime();
 
 1153   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1154   QList<QGraphicsItem*>::iterator it;
 
 1156   if(m_animationScene->m_numberOfCoverages) 
 
 1159     for(it = list.begin(); it != list.end(); ++it)
 
 1162       if(ai->pixmap().isNull())
 
 1167         if(t < tini || t > tfim)
 
 1172         drawPixmapItem(pi, drect, painter);
 
 1177   if(m_animationScene->m_numberOfTrajectories) 
 
 1180     m_animationScene->m_mutex.lock();
 
 1181     QPixmap* pixt = ((
AnimationScene*)(m_animationScene))->m_trajectoryPixmap;
 
 1182     painter->drawPixmap(0, 0, *pixt);
 
 1183     m_animationScene->m_mutex.unlock();
 
 1186     for(it = list.begin(); it != list.end(); ++it)
 
 1189       if(ai->pixmap().isNull() == 
false)
 
 1194         if(t < tini || t > tfim)
 
 1199         QRect r = ai->pixmap().rect();
 
 1201         QRect dr = m_display->rect();
 
 1202         if(dr.intersects(r))
 
 1219   m_direction = direction;
 
 1220   m_parallelAnimation->setDirection(m_direction);
 
 1222   unsigned int count = m_parallelAnimation->animationCount();
 
 1223   for(
unsigned int i = 0; i < count; ++i)
 
 1225     QPropertyAnimation* a = (QPropertyAnimation*)m_parallelAnimation->animationAt(i);
 
 1234     m_animationScene->setDuration(duration);
 
 1239   m_animationScene->createNewPixmap();
 
 1244   m_animationScene->createNewPixmap();
 
 1245   m_animationScene->setMatrix();
 
 1246   m_animationScene->draw(m_currentTime);
 
 1251   m_animationScene->setAutomaticPan(title);
 
 1270   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1271   QList<QGraphicsItem*>::iterator it;
 
 1272   for(it = list.begin(); it != list.end(); ++it)
 
 1307   if(obj == m_spd->m_ui->m_forwardColorPushButton)
 
 1309     if(e->type() == QEvent::Paint)
 
 1311       QPainter painter(m_spd->m_ui->m_forwardColorPushButton);
 
 1312       QBrush brush(m_spd->m_ui->m_forwardColorPushButton->palette().color(QPalette::Window));
 
 1313       painter.fillRect(m_spd->m_ui->m_forwardColorPushButton->rect(), brush);
 
 1316     else if(e->type() == QEvent::MouseButtonPress)
 
 1318       QColor cor = QColorDialog::getColor(m_spd->m_ui->m_forwardColorPushButton->palette().color(QPalette::Window), 
this, 
"Forward Color", QColorDialog::ShowAlphaChannel);
 
 1319       if(cor.isValid() == 
false)
 
 1321       else if(cor == m_spd->m_ui->m_forwardColorPushButton->palette().color(QPalette::Window))
 
 1324       m_spd->m_ui->m_forwardColorPushButton->setPalette(QPalette(cor));
 
 1326       QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
 
 1328       QList<QGraphicsItem*> list = m_animationScene->items();
 
 1329       QList<QGraphicsItem*>::iterator it;
 
 1332       for(it = list.begin(); it != list.end(); ++it)
 
 1336         if(title == titlecb)
 
 1347   else if(obj == m_spd->m_ui->m_backwardColorPushButton)
 
 1349     if(e->type() == QEvent::Paint)
 
 1351       QPainter painter(m_spd->m_ui->m_backwardColorPushButton);
 
 1352       QBrush brush(m_spd->m_ui->m_backwardColorPushButton->palette().color(QPalette::Window));
 
 1353       painter.fillRect(m_spd->m_ui->m_backwardColorPushButton->rect(), brush);
 
 1356     else if(e->type() == QEvent::MouseButtonPress)
 
 1358       QColor cor = QColorDialog::getColor(m_spd->m_ui->m_backwardColorPushButton->palette().color(QPalette::Window), 
this, 
"Forward Color", QColorDialog::ShowAlphaChannel);
 
 1359       if(cor.isValid() == 
false)
 
 1361       else if(cor == m_spd->m_ui->m_backwardColorPushButton->palette().color(QPalette::Window))
 
 1364       m_spd->m_ui->m_backwardColorPushButton->setPalette(QPalette(cor));
 
 1366       QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
 
 1368       QList<QGraphicsItem*> list = m_animationScene->items();
 
 1369       QList<QGraphicsItem*>::iterator it;
 
 1372       for(it = list.begin(); it != list.end(); ++it)
 
 1376         if(title == titlecb)
 
 1387   else if(obj == m_spd->m_ui->m_iconPushButton)
 
 1389     if(e->type() == QEvent::Paint)
 
 1391       QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
 
 1393       QList<QGraphicsItem*> list = m_animationScene->items();
 
 1394       QList<QGraphicsItem*>::iterator it;
 
 1397       for(it = list.begin(); it != list.end(); ++it)
 
 1400         QPixmap pix = ai->pixmap();
 
 1401         if(pix.isNull() == 
false)
 
 1405           if(title == titlecb)
 
 1411         QPainter painter(m_spd->m_ui->m_iconPushButton);
 
 1412         painter.fillRect(m_spd->m_ui->m_iconPushButton->rect(), QBrush(Qt::white));
 
 1413         QPixmap pix = ti->pixmap();
 
 1414         QRect r = pix.rect();
 
 1415         r.moveCenter(m_spd->m_ui->m_iconPushButton->rect().center());
 
 1416         painter.drawPixmap(r, pix, pix.rect());
 
 1421     else if(e->type() == QEvent::MouseButtonPress)
 
 1423       QString fileName = QFileDialog::getOpenFileName(
this, tr(
"Select File"), 
"C:/", tr(
"Images (*.png *.xpm *.jpg *.gif)"));
 
 1424       if(fileName.isNull())
 
 1427       QPixmap pix(fileName);
 
 1430         QMessageBox::information(
this, 
"Pixmap Error", 
"Invalid File");
 
 1434       QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
 
 1436       QList<QGraphicsItem*> list = m_animationScene->items();
 
 1437       QList<QGraphicsItem*>::iterator it;
 
 1440       for(it = list.begin(); it != list.end(); ++it)
 
 1443         if(ai->pixmap().isNull() == 
false)
 
 1447           if(title == titlecb)
 
 1454         pp.fill(Qt::transparent);
 
 1455         QPainter painter(&pp);
 
 1456         painter.drawPixmap(pp.rect(), pix, pix.rect());
 
 1461         m_spd->m_ui->m_iconPushButton->update();
 
 1466   else if(obj == m_ui->m_dateTimeEdit)
 
 1468     if(e->type() == QEvent::MouseButtonRelease)
 
 1470       QDateTime d = m_ui->m_dateTimeEdit->dateTime();
 
 1480       else if(d >= maximun)
 
 1482       else if(d == m_oldQDateTime)
 
 1483         d = fixDateTimeEdit(m_ui->m_dateTimeEdit, d);
 
 1485       m_ui->m_dateTimeEdit->setDateTime(d);
 
 1489         onFinishAnimation();
 
 1493   else if(obj == m_spd->m_ui->m_initialAnimationDateTimeEdit)
 
 1495     if(e->type() == QEvent::MouseButtonRelease)
 
 1497       QDateTime d = m_spd->m_ui->m_initialAnimationDateTimeEdit->dateTime();
 
 1507       else if(d >= maximun)
 
 1509       else if(d == m_oldQDateTime)
 
 1510         d = fixDateTimeEdit(m_spd->m_ui->m_initialAnimationDateTimeEdit, d);
 
 1512       m_spd->m_ui->m_initialAnimationDateTimeEdit->setDateTime(d);
 
 1517   else if(obj == m_spd->m_ui->m_finalAnimationDateTimeEdit)
 
 1519     if(e->type() == QEvent::MouseButtonRelease)
 
 1521       QDateTime d = m_spd->m_ui->m_finalAnimationDateTimeEdit->dateTime();
 
 1531       else if(d >= maximun)
 
 1533       else if(d == m_oldQDateTime)
 
 1534         d = fixDateTimeEdit(m_spd->m_ui->m_finalAnimationDateTimeEdit, d);
 
 1536       m_spd->m_ui->m_finalAnimationDateTimeEdit->setDateTime(d);
 
 1541   return QObject::eventFilter(obj, e);
 
 1660   if(m_spd->isHidden())
 
 1668   if(m_animationScene->items().isEmpty())
 
 1671   int state = m_parallelAnimation->state();
 
 1672   if(state == QAbstractAnimation::Running)
 
 1674     m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-start"));
 
 1675     m_parallelAnimation->pause();
 
 1676     m_ui->m_dateTimeEdit->setEnabled(
true);
 
 1681     m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-pause"));
 
 1682     if(m_comingBack == 
false)
 
 1684       if(m_spd->m_ui->m_forwardRadioButton->isChecked())
 
 1685         onForwardRadioButtonClicked(
true);
 
 1686       if(m_spd->m_ui->m_backwardRadioButton->isChecked())
 
 1687         onBackwardRadioButtonClicked(
true);
 
 1689     if(m_spd->m_ui->m_loopCheckBox->isChecked())
 
 1690       onLoopCheckBoxClicked(
true);
 
 1691     if(m_spd->m_ui->m_goAndBackCheckBox->isChecked())
 
 1692       onGoAndBackCheckBoxClicked(
true);
 
 1694     if(m_parallelAnimation->direction() == QAbstractAnimation::Forward)
 
 1696       if(m_ui->m_TemporalHorizontalSlider->value() == m_maxSliderValue)
 
 1698         m_parallelAnimation->setCurrentTime(0);
 
 1699         m_ui->m_TemporalHorizontalSlider->setValue(0);
 
 1704       if(m_ui->m_TemporalHorizontalSlider->value() == 0)
 
 1706         m_parallelAnimation->setCurrentTime(m_duration);
 
 1707         m_ui->m_TemporalHorizontalSlider->setValue(m_maxSliderValue);
 
 1710     m_ui->m_dateTimeEdit->setEnabled(
false);
 
 1718   if(m_animationScene->items().isEmpty())
 
 1721   m_parallelAnimation->stop();
 
 1722   m_ui->m_dateTimeEdit->setEnabled(
false);
 
 1723   m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-start"));
 
 1730       m_comingBack = 
false;
 
 1734   if(m_finished == 
false)
 
 1736     if(m_parallelAnimation->direction() == QAbstractAnimation::Forward)
 
 1738       m_ui->m_TemporalHorizontalSlider->setValue(0);
 
 1739       m_parallelAnimation->setCurrentTime(0);
 
 1743       m_ui->m_TemporalHorizontalSlider->setValue(m_maxSliderValue);
 
 1744       m_parallelAnimation->setCurrentTime(m_parallelAnimation->duration());
 
 1747     m_display->update();
 
 1754   int state = m_parallelAnimation->state();
 
 1755   if(state == QAbstractAnimation::Running)
 
 1757     m_parallelAnimation->pause();
 
 1760     m_display->update();
 
 1761     m_parallelAnimation->resume();
 
 1767     m_display->update();
 
 1773   int state = m_parallelAnimation->state();
 
 1774   if(state == QAbstractAnimation::Running)
 
 1777     calculateSpatialExtent();
 
 1780     m_display->update();
 
 1781     m_parallelAnimation->start();
 
 1786     calculateSpatialExtent();
 
 1789     m_display->update();
 
 1795   if(m_animationScene->items().isEmpty())
 
 1798   int state = m_parallelAnimation->state();
 
 1799   if(state == QAbstractAnimation::Stopped)
 
 1802     m_parallelAnimation->start();
 
 1804   else if(state == QAbstractAnimation::Paused)
 
 1806     m_parallelAnimation->resume();
 
 1812   int oldCurTime = m_parallelAnimation->currentTime();
 
 1814   if(m_parallelAnimation->state() == QAbstractAnimation::Stopped)
 
 1816     onStopToolButtonnClicked();
 
 1820   double v = (double)value / (
double)m_maxSliderValue;
 
 1822   int curTime = qRound(v * (
double)m_parallelAnimation->duration());
 
 1824   if(curTime >= m_parallelAnimation->duration())
 
 1825     curTime = m_parallelAnimation->duration();
 
 1828   if(m_goAndBack == 
true)
 
 1830     if(m_comingBack == 
false && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 1832     else if(m_comingBack == 
false && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 1834     else if(m_comingBack == 
true && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 1836     else if(m_comingBack == 
true && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 1841     if(m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 1843     else if(m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 1847   m_parallelAnimation->setCurrentTime(curTime);
 
 1849     this->erase(curTime);
 
 1851   m_currentTime = curTime;
 
 1853   if(m_currentTime == 0 || m_currentTime == m_parallelAnimation->duration())
 
 1854     onFinishAnimation();
 
 1856   if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
 1857     m_display->update();
 
 1862   QDateTime qdatetime(qdate, qtime);
 
 1863   m_ui->m_dateTimeEdit->setDateTime(qdatetime);
 
 1868   QAbstractAnimation::Direction direction = m_parallelAnimation->direction();
 
 1869   if(direction == QAbstractAnimation::Forward)
 
 1870     direction = QAbstractAnimation::Backward;
 
 1872     direction = QAbstractAnimation::Forward;
 
 1873   setDirection(direction);
 
 1880     if(m_currentTime >= m_duration && m_parallelAnimation->direction() == QAbstractAnimation::Forward)
 
 1882       m_currentTime = m_duration;
 
 1884       m_comingBack = 
true;
 
 1885       m_parallelAnimation->setCurrentTime(m_currentTime);
 
 1887     else if(m_currentTime <= 0 && m_parallelAnimation->direction() == QAbstractAnimation::Backward)
 
 1891       m_comingBack = 
false;
 
 1892       m_parallelAnimation->setCurrentTime(m_currentTime);
 
 1896     m_parallelAnimation->pause();
 
 1905     m_comingBack = !m_comingBack;
 
 1916       m_parallelAnimation->setCurrentTime(m_currentTime);
 
 1921       if(m_comingBack == 
false)
 
 1922         onStopToolButtonnClicked();
 
 1932       onStopToolButtonnClicked();
 
 1938   m_currentTime = m_parallelAnimation->currentTime();
 
 1939   int v = qRound((
double)m_maxSliderValue * (
double)m_currentTime/(
double)m_duration);
 
 1941   m_ui->m_TemporalHorizontalSlider->setValue(v);
 
 1943   updateTimeTextEdit();
 
 1948   if(m_ui->m_dateTimeEdit->isEnabled() == 
false && m_animationScene->items().isEmpty() == 
false)
 
 1953     QDateTime qdatetime(qdate, qtime);
 
 1954     m_ui->m_dateTimeEdit->setDateTime(qdatetime);
 
 1960   emit deleteTimeSliderWidget();
 
 1965   int state = m_parallelAnimation->state();
 
 1966   if(state == QAbstractAnimation::Running)
 
 1967     onPlayToolButtonnClicked();
 
 1969   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1970   int i = list.indexOf(item);
 
 1974   QList<QGraphicsItem*>::iterator it = list.begin();
 
 1975   while(it != list.end())
 
 1978     m_animationScene->removeItem(ai);
 
 1981   while(list.isEmpty() == 
false)
 
 1984     m_animationScene->addItem(ai);
 
 1987   onPlayToolButtonnClicked();
 
 1992   int state = m_parallelAnimation->state();
 
 1993   if(state == QAbstractAnimation::Running)
 
 1994     onPlayToolButtonnClicked();
 
 1996   QList<QGraphicsItem*> list = m_animationScene->items();
 
 1997   int i = list.indexOf(item);
 
 2001   QList<QGraphicsItem*>::iterator it = list.begin();
 
 2002   while(it != list.end())
 
 2005     m_animationScene->removeItem(ai);
 
 2008   while(list.isEmpty() == 
false)
 
 2011     m_animationScene->addItem(ai);
 
 2014   onPlayToolButtonnClicked();
 
 2019   QString title = m_spd->m_ui->m_animationComboBox->currentText();
 
 2021   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2022   QList<QGraphicsItem*>::iterator it;
 
 2024   for(it = list.begin(); it != list.end(); ++it)
 
 2038   QString title = m_spd->m_ui->m_animationComboBox->currentText();
 
 2040   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2041   QList<QGraphicsItem*>::iterator it;
 
 2043   for(it = list.begin(); it != list.end(); ++it)
 
 2057   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2058   QList<QGraphicsItem*>::iterator it;
 
 2059   for(it = list.begin(); it != list.end(); ++it)
 
 2062     if(ai->pixmap().isNull() == 
false)
 
 2066   if(m_erasePerfectly)
 
 2068     m_parallelAnimation->setCurrentTime(curTime);
 
 2072     m_parallelAnimation->setCurrentTime(curTime);
 
 2074   m_currentTime = curTime;
 
 2079   if(val == m_duration)
 
 2082   m_currentTime = m_parallelAnimation->currentTime();
 
 2083   double f = double(m_currentTime) / (double)m_duration;
 
 2085   int step = m_ui->m_durationSpinBox->singleStep();
 
 2090   if(v == 0 || v == m_duration + step || v == m_duration - step)
 
 2096       else if(v > step*10)
 
 2099         v = m_duration + step;
 
 2102     else if(step == 1000)
 
 2107         v = m_duration - step;
 
 2109       else if(v > step*10)
 
 2112         v = m_duration + step;
 
 2115     else if(step == 10000)
 
 2120         v = m_duration - step;
 
 2122       else if(v > step*10)
 
 2125         v = m_duration + step;
 
 2128     else if(step == 100000)
 
 2133         v = m_duration - step;
 
 2135       else if(v > step*10)
 
 2138         v = m_duration + step;
 
 2141     else if(step == 1000000)
 
 2146         v = m_duration - step;
 
 2148       else if(v > step*10)
 
 2151         v = m_duration + step;
 
 2155     m_duration = (v / step) * step;
 
 2156     m_ui->m_durationSpinBox->setValue(m_duration);
 
 2157     m_ui->m_durationSpinBox->setSingleStep(step);
 
 2162   bool running = 
false;
 
 2163   if(m_parallelAnimation->state() == QAbstractAnimation::Running)
 
 2166     onPlayToolButtonnClicked();
 
 2169   m_currentTime = qRound(f * (
double)m_duration);
 
 2170   m_animationScene->m_mutex.lock();
 
 2171   m_animationScene->m_trajectoryPixmap->fill(Qt::transparent);
 
 2172   m_animationScene->m_mutex.unlock();
 
 2173   setDuration(m_duration);
 
 2174   m_parallelAnimation->setCurrentTime(m_currentTime);
 
 2177     onPlayToolButtonnClicked();
 
 2182   if(m_ui->m_dateTimeEdit->isEnabled() == 
false)
 
 2186   int oldCurTime = m_parallelAnimation->currentTime();
 
 2189   unsigned long totalSecs =  m_temporalAnimationExtent.getTimePeriod().length().total_seconds();
 
 2191   te::dt::Date date(t.date().year(), t.date().month(), t.date().day());
 
 2196   unsigned long secs =  tp.
getTimePeriod().length().total_seconds();
 
 2198   double v = (double)secs / (
double)totalSecs;
 
 2199   int curTime = qRound(v * (
double)m_parallelAnimation->duration());
 
 2201   if(curTime > m_parallelAnimation->duration())
 
 2202     curTime = m_parallelAnimation->duration();
 
 2205   if(m_goAndBack == 
true)
 
 2207     if(m_comingBack == 
false && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 2209     else if(m_comingBack == 
false && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 2211     else if(m_comingBack == 
true && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 2213     else if(m_comingBack == 
true && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 2218     if(m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
 
 2220     else if(m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
 
 2224   m_currentTime = curTime;
 
 2225   m_parallelAnimation->setCurrentTime(curTime);
 
 2227     this->erase(curTime);
 
 2229   if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
 
 2230     m_display->update();
 
 2236   QDateTimeEdit::Section section = dte->currentSection();
 
 2237   if(section == QDateTimeEdit::SecondSection)
 
 2239     int sec = t.time().second();
 
 2245   else if(section == QDateTimeEdit::MinuteSection)
 
 2247     int min = t.time().minute();
 
 2253   else if(section == QDateTimeEdit::HourSection)
 
 2255     int hour = t.time().hour();
 
 2257       t = t.addSecs(-3600);
 
 2259       t = t.addSecs(3600);
 
 2261   else if(section == QDateTimeEdit::DaySection)
 
 2263     int day = t.date().day();
 
 2269   else if(section == QDateTimeEdit::MonthSection)
 
 2271     int month = t.date().month();
 
 2273       t = t.addMonths(-1);
 
 2287   if(dwrect.intersects(rec))
 
 2289     QRect r = pi->
m_matrix.mapRect(rec).toRect();
 
 2293       painter->drawImage(r, *ima);
 
 2296       QSize size = ima->size();
 
 2297       int width = size.width();
 
 2298       int height = size.height();
 
 2300       if(ima->format() == QImage::Format_ARGB32)
 
 2302         for(
int i = 0; i < height; ++i)
 
 2304           unsigned char* u = ima->scanLine(i);
 
 2305           for(
int j = 0; j < width; ++j)
 
 2307             QRgb* v = (QRgb*)(u + (j << 2));
 
 2309               *v =  qRgba(qRed(*v), qGreen(*v), qBlue(*v) , pi->
m_opacity);
 
 2312         painter->drawImage(r, *ima);
 
 2316         QImage img(size, QImage::Format_ARGB32);
 
 2317         for(
int i = 0; i < height; ++i)
 
 2319           unsigned char* u = ima->scanLine(i);
 
 2320           unsigned char* uu = img.scanLine(i);
 
 2322           for(
int j = 0; j < width; ++j)
 
 2324             QRgb* v = (QRgb*)(u + (j << 2));
 
 2325             QRgb* uv = (QRgb*)(uu + (j << 2));
 
 2327               *uv =  qRgba(qRed(*v), qGreen(*v), qBlue(*v) , pi->
m_opacity);
 
 2330         painter->drawImage(r, img);
 
 2340     painter->drawPixmap(pos, t->pixmap());
 
 2343     QSize size = t->pixmap().size();
 
 2344     int width = size.width();
 
 2345     int height = size.height();
 
 2346     QImage ima = t->pixmap().toImage();
 
 2348     if(ima.format() == QImage::Format_ARGB32)
 
 2350       for(
int i = 0; i < height; ++i)
 
 2352         unsigned char* u = ima.scanLine(i);
 
 2353         for(
int j = 0; j < width; ++j)
 
 2355           QRgb* v = (QRgb*)(u + (j << 2));
 
 2357             *v =  qRgba(255, 255, 255 , 0);
 
 2359             *v =  qRgba(qRed(*v), qGreen(*v), qBlue(*v) , t->
m_opacity);
 
 2362       painter->drawImage(pos, ima);
 
 2366       QImage img(size, QImage::Format_ARGB32);
 
 2367       for(
int i = 0; i < height; ++i)
 
 2369         unsigned char* u = ima.scanLine(i);
 
 2370         unsigned char* uu = img.scanLine(i);
 
 2372         for(
int j = 0; j < width; ++j)
 
 2374           QRgb* v = (QRgb*)(u + (j << 2));
 
 2375           QRgb* uv = (QRgb*)(uu + (j << 2));
 
 2377             *uv =  qRgba(255, 255, 255 , 0);
 
 2379             *uv =  qRgba(qRed(*v), qGreen(*v), qBlue(*v) , t->
m_opacity);
 
 2382       painter->drawImage(pos, img);
 
 2389   QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
 
 2391   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2392   QList<QGraphicsItem*>::iterator it;
 
 2394   for(it = list.begin(); it != list.end(); ++it)
 
 2398     if(title.contains(titlecb))
 
 2402       m_display->update();
 
 2410   QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
 
 2412   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2413   QList<QGraphicsItem*>::iterator it;
 
 2415   for(it = list.begin(); it != list.end(); ++it)
 
 2419     if(title.contains(titlecb))
 
 2421       QPixmap pix = ai->pixmap();
 
 2423       QPixmap pn(m_spd->m_ui->m_widthSpinBox->value(), m_spd->m_ui->m_heightSpinBox->value());
 
 2424       pn.fill(Qt::transparent);
 
 2425       if(pix.isNull() == 
false)
 
 2429         if(file.isEmpty() == 
false)
 
 2435             QPainter painter(&pn);
 
 2436             painter.drawPixmap(pn.rect(), pf, pf.rect());
 
 2440             m_spd->m_ui->m_iconPushButton->update();
 
 2441             m_display->update();
 
 2446         pn.fill(Qt::transparent);
 
 2447         QPainter painter(&pn);
 
 2449         painter.setBrush(b);
 
 2452         painter.drawEllipse(QRect(1, 1, 18, 18));
 
 2456         m_spd->m_ui->m_iconPushButton->update();
 
 2458       m_display->update();
 
 2466   QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
 
 2468   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2469   QList<QGraphicsItem*>::iterator it;
 
 2471   for(it = list.begin(); it != list.end(); ++it)
 
 2475     if(title.contains(titlecb))
 
 2477       QPixmap pix = ai->pixmap();
 
 2478       QPixmap pn(m_spd->m_ui->m_widthSpinBox->value(), m_spd->m_ui->m_heightSpinBox->value());
 
 2479       pn.fill(Qt::transparent);
 
 2480       if(pix.isNull() == 
false)
 
 2484         if(file.isEmpty() == 
false)
 
 2490             QPainter painter(&pn);
 
 2491             painter.drawPixmap(pn.rect(), pf, pf.rect());
 
 2495             m_spd->m_ui->m_iconPushButton->update();
 
 2496             m_display->update();
 
 2501         QPainter painter(&pn);
 
 2503         painter.setBrush(b);
 
 2506         painter.drawEllipse(QRect(1, 1, 18, 18));
 
 2508         m_spd->m_ui->m_iconPushButton->update();
 
 2512       m_display->update();
 
 2523   QDateTime qdatetimei(qdatei, qtimei);
 
 2524   m_spd->m_ui->m_initialAnimationDateTimeEdit->setDateTime(qdatetimei);
 
 2529   QDateTime qdatetimef(qdatef, qtimef);
 
 2530   m_spd->m_ui->m_finalAnimationDateTimeEdit->setDateTime(qdatetimef);
 
 2532   if(m_direction == QAbstractAnimation::Forward)
 
 2534     if(m_spd->m_ui->m_forwardRadioButton->isChecked() == 
false)
 
 2535       m_spd->m_ui->m_forwardRadioButton->toggle();
 
 2539     m_spd->m_ui->m_loopCheckBox->setChecked(
true);
 
 2541     m_spd->m_ui->m_goAndBackCheckBox->setChecked(
true);
 
 2546   QDateTime t = m_spd->m_ui->m_initialAnimationDateTimeEdit->dateTime();
 
 2547   te::dt::Date date(t.date().year(), t.date().month(), t.date().day());
 
 2555   QDateTime t = m_spd->m_ui->m_finalAnimationDateTimeEdit->dateTime();
 
 2556   te::dt::Date date(t.date().year(), t.date().month(), t.date().day());
 
 2567   QDateTime qdatetime(qdate, qtime);
 
 2568   m_spd->m_ui->m_initialAnimationDateTimeEdit->setDateTime(qdatetime);
 
 2576   QDateTime qdatetime(qdate, qtime);
 
 2577   m_spd->m_ui->m_finalAnimationDateTimeEdit->setDateTime(qdatetime);
 
 2582   if(b==
false && m_spd->m_ui->m_propertyWidget->isHidden())
 
 2584   if(b==
true && m_spd->m_ui->m_propertyWidget->isHidden()==
false)
 
 2587   int h = m_spd->m_ui->m_propertyWidget->height();
 
 2591     m_spd->m_ui->m_propertyWidget->hide();
 
 2592     resize(width(), height()-h);
 
 2596     m_spd->m_ui->m_propertyWidget->show();
 
 2597     resize(width(), height()+h);
 
 2606   QDateTime qdatetimei(qdatei, qtimei);
 
 2607   QDateTime qdi = m_spd->m_ui->m_initialAnimationDateTimeEdit->dateTime();
 
 2608   if(qdatetimei != qdi)
 
 2614   QDateTime qdatetimef(qdatef, qtimef);
 
 2615   QDateTime qdf = m_spd->m_ui->m_finalAnimationDateTimeEdit->dateTime();
 
 2616   if(qdatetimef != qdf)
 
 2619   if(m_spd->m_ui->m_forwardRadioButton->isChecked() && m_direction != QAbstractAnimation::Forward)
 
 2621   if(m_spd->m_ui->m_forwardRadioButton->isChecked() == 
false && m_direction != QAbstractAnimation::Backward)
 
 2623   if(m_spd->m_ui->m_loopCheckBox->isChecked() != m_loop)
 
 2625   if(m_spd->m_ui->m_goAndBackCheckBox->isChecked() != m_goAndBack)
 
 2633   if(m_direction == QAbstractAnimation::Forward)
 
 2636       m_comingBack = 
false;
 
 2644   if(m_direction == QAbstractAnimation::Backward)
 
 2647       m_comingBack = 
false;
 
 2660   if(m_goAndBack != b)
 
 2665       m_comingBack = 
false;
 
 2676   if(ti > tf || ti == tf)
 
 2678     QMessageBox::warning(
this, 
"Time Extent Error", 
"Initial time can not be larger than the end time!", QMessageBox::Ok);
 
 2688   QDateTime qdatetimei(qdatei, qtimei);
 
 2689   QDateTime qdi = m_spd->m_ui->m_initialAnimationDateTimeEdit->dateTime();
 
 2692   t = m_temporalAnimationExtent.getFinalTimeInstant();
 
 2695   QDateTime qdatetimef(qdatef, qtimef);
 
 2696   QDateTime qdf = m_spd->m_ui->m_finalAnimationDateTimeEdit->dateTime();
 
 2698   if(qdatetimei == qdi && qdatetimef == qdf)
 
 2703   boost::posix_time::time_duration ndiff = nfTime - niTime;
 
 2704   double ntotalSeconds = ndiff.total_seconds();
 
 2706   boost::posix_time::time_duration diff = fTime - iTime;
 
 2707   double totalSeconds = diff.total_seconds();
 
 2708   double rel = m_duration / totalSeconds;
 
 2710   int nduration = qRound(rel * ntotalSeconds);
 
 2714   if(btinst >= niTime && btinst <= nfTime)
 
 2716     boost::posix_time::time_duration d = btinst - niTime;
 
 2717     double tot = d.total_seconds();
 
 2718     m_currentTime = qRound(nduration * tot / ntotalSeconds);
 
 2721     m_currentTime = nduration;
 
 2723   int state = m_parallelAnimation->state();
 
 2724   if(state == QAbstractAnimation::Running)
 
 2725     onPlayToolButtonnClicked();
 
 2727   QDateTime dt = m_ui->m_dateTimeEdit->dateTime();
 
 2733   calculateSpatialExtent();
 
 2735   m_duration = nduration;
 
 2736   m_ui->m_durationSpinBox->setValue(m_duration);
 
 2737   setDuration(m_duration);
 
 2738   setDirection(m_direction);
 
 2740   if(state == QAbstractAnimation::Running)
 
 2742     onPlayToolButtonnClicked();
 
 2743     m_parallelAnimation->setCurrentTime(m_currentTime);
 
 2744     m_parallelAnimation->start();
 
 2748     m_parallelAnimation->setCurrentTime(m_currentTime);
 
 2749     m_parallelAnimation->start();
 
 2750     if(state == QAbstractAnimation::Paused)
 
 2751       m_parallelAnimation->pause();   
 
 2754   if(tp == m_temporalAnimationExtent)
 
 2755     onDateTimeEditChanged(dt);
 
 2786   QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
 
 2788   QList<QGraphicsItem*> list = m_animationScene->items();
 
 2789   QList<QGraphicsItem*>::iterator it;
 
 2791   for(it = list.begin(); it != list.end(); ++it)
 
 2795     if(title.contains(titlecb))
 
 2798       m_spd->m_ui->m_opacitySpinBox->setValue(op);
 
 2800       QString sini = getDateString(tini);
 
 2802       QString sfim = getDateString(tfim);
 
 2803       m_spd->m_ui->m_initialTimeLineEdit->setText(sini);
 
 2804       m_spd->m_ui->m_finalTimeLineEdit->setText(sfim);
 
 2806       adjustTrajectoryGroupBox(ai);
 
 2816   QDateTime qdatetime(qdate, qtime);
 
 2817   return qdatetime.toString(
"dd/MMM/yyyy hh:mm:ss");
 
 2822   QPixmap pix = ai->pixmap();
 
 2825     m_spd->m_ui->m_trajectoryGroupBox->setEnabled(
false);
 
 2826     m_spd->m_ui->m_forwardColorPushButton->setPalette(QPalette(Qt::gray));
 
 2827     m_spd->m_ui->m_forwardColorPushButton->update();
 
 2828     m_spd->m_ui->m_backwardColorPushButton->setPalette(QPalette(Qt::gray));
 
 2829     m_spd->m_ui->m_backwardColorPushButton->update();
 
 2830     m_spd->m_ui->m_autoPanCheckBox->setChecked(
false);
 
 2831     m_spd->m_ui->m_drawTrailCheckBox->setChecked(
false);
 
 2835     m_spd->m_ui->m_trajectoryGroupBox->setEnabled(
true);
 
 2837     m_spd->m_ui->m_forwardColorPushButton->setPalette(QPalette(ti->
m_forwardColor));
 
 2838     m_spd->m_ui->m_forwardColorPushButton->update();
 
 2839     m_spd->m_ui->m_backwardColorPushButton->setPalette(QPalette(ti->
m_backwardColor));
 
 2840     m_spd->m_ui->m_backwardColorPushButton->update();
 
 2842     m_spd->m_ui->m_panFactorDoubleSpinBox->setValue(ti->
m_panFactor);
 
 2843     m_spd->m_ui->m_drawTrailCheckBox->setChecked(ti->
m_drawTrail);
 
 2845     QPixmap pix = ti->pixmap();
 
 2846     m_spd->m_ui->m_widthSpinBox->setValue(pix.width());
 
 2847     m_spd->m_ui->m_heightSpinBox->setValue(pix.height());
 
 2848     m_spd->m_ui->m_iconPushButton->update();
 
 2866   QString file(fileName);
 
 2867   int ind = file.indexOf(
"_");
 
 2868   if(file.indexOf(
"_", ind+1) != -1)
 
 2869     ind = file.indexOf(
"_", ind+1);
 
 2870   file.remove(0, ind+1);
 
 2871   QString ano(file), mes(file), dia(file), hour(file), min(file);
 
 2872   ano.remove(4, ano.length()-4);
 
 2874   mes.remove(2, mes.length()-2);
 
 2876   dia.remove(2, dia.length()-2);
 
 2878   hour.remove(2, hour.length()-2);
 
 2880   min.remove(2, min.length()-2);
 
 2882   te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
 
 2889   QString title = m_spd->m_ui->m_animationComboBox->currentText();
 
 2890   setAutomaticPan(title);
 
 2896   QString file(path + 
"/racc.ctl");
 
 2897   FILE* fp = fopen(file.toStdString().c_str(), 
"r");
 
 2901   fread(buf, 2000, 
sizeof(
char), fp);
 
 2903   QString ss(QString(buf).simplified());
 
 2906   if(!(ss.contains(
"undef ", Qt::CaseInsensitive) && ss.contains(
"title", Qt::CaseInsensitive) && 
 
 2907     ss.contains(
"xdef", Qt::CaseInsensitive) && ss.contains(
"ydef", Qt::CaseInsensitive) && 
 
 2908     ss.contains(
"linear", Qt::CaseInsensitive) && ss.contains(
"zdef", Qt::CaseInsensitive)))
 
 2919   size_t pos = ss.indexOf(
"UNDEF ", Qt::CaseInsensitive) + strlen(
"UNDEF "); 
 
 2921   pos = ss.indexOf(
"TITLE", Qt::CaseInsensitive);
 
 2923   pi->
m_undef = atoi(s.toStdString().c_str());
 
 2927   pos = ss.indexOf(
"XDEF ", Qt::CaseInsensitive) + strlen(
"XDEF ");
 
 2929   pos = ss.indexOf(
" ");
 
 2931   pi->
m_ncols = atoi(s.toStdString().c_str());
 
 2934   pos = ss.indexOf(
"LINEAR ", Qt::CaseInsensitive) + strlen(
"LINEAR ");
 
 2936   pos = ss.indexOf(
" ");
 
 2938   double llx = atof(s.toStdString().c_str()) - 360.;
 
 2940   pos = ss.indexOf(
"YDEF ", Qt::CaseInsensitive);
 
 2942   double resX = atof(s.toStdString().c_str());
 
 2946   pos = ss.indexOf(
"YDEF ", Qt::CaseInsensitive) + strlen(
"YDEF ");
 
 2948   pos = ss.indexOf(
" ");
 
 2950   pi->
m_nlines = atoi(s.toStdString().c_str());
 
 2953   pos = ss.indexOf(
"LINEAR ", Qt::CaseInsensitive) + strlen(
"LINEAR ");
 
 2955   pos = ss.indexOf(
" ");
 
 2957   double lly = atof(s.toStdString().c_str());
 
 2959   pos = ss.indexOf(
"ZDEF ", Qt::CaseInsensitive);
 
 2961   double resY = atof(s.toStdString().c_str());
 
 2964   double w = (double)pi->
m_ncols * resX;
 
 2965   double h = (
double)pi->
m_nlines * resY;
 
 2973   std::vector<std::pair<int, QColor> > tab;
 
 2975   tab.push_back(std::pair<int, QColor>(i+=3, QColor(2, 1, 201, 255)));
 
 2976   tab.push_back(std::pair<int, QColor>(i+=3, QColor(1, 71, 254, 255)));
 
 2977   tab.push_back(std::pair<int, QColor>(i+=3, QColor(3, 148, 250, 255)));
 
 2978   tab.push_back(std::pair<int, QColor>(i+=3, QColor(5, 200, 251, 255)));
 
 2979   tab.push_back(std::pair<int, QColor>(i+=3, QColor(2, 254, 233, 255)));
 
 2980   tab.push_back(std::pair<int, QColor>(i+=3, QColor(1, 254, 151, 255)));
 
 2981   tab.push_back(std::pair<int, QColor>(i+=3, QColor(2, 254, 4, 255)));
 
 2982   tab.push_back(std::pair<int, QColor>(i+=3, QColor(99, 254, 2, 255)));
 
 2983   tab.push_back(std::pair<int, QColor>(i+=3, QColor(200, 255, 1, 255)));
 
 2984   tab.push_back(std::pair<int, QColor>(i+=3, QColor(237, 255, 0, 255)));
 
 2985   tab.push_back(std::pair<int, QColor>(i+=3, QColor(251, 232, 2, 255)));
 
 2986   tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 199, 2, 255)));
 
 2987   tab.push_back(std::pair<int, QColor>(i+=3, QColor(252, 179, 2, 255)));
 
 2988   tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 147, 4, 255)));
 
 2989   tab.push_back(std::pair<int, QColor>(i+=3, QColor(253, 99, 2, 255)));
 
 2990   tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 1, 2, 255)));
 
 2991   tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 0, 49, 255)));
 
 2992   tab.push_back(std::pair<int, QColor>(i+=3, QColor(255, 5, 1, 255)));
 
 3000   QString file(path + 
"/Prec5km.ctl");
 
 3001   FILE* fp = fopen(file.toStdString().c_str(), 
"r");
 
 3005   fread(buf, 2000, 
sizeof(
char), fp);
 
 3007   QString ss(QString(buf).simplified());
 
 3010   if(!(ss.contains(
"undef ", Qt::CaseInsensitive) && ss.contains(
"xdef", Qt::CaseInsensitive) 
 
 3011     && ss.contains(
"ydef", Qt::CaseInsensitive) && ss.contains(
"linear", Qt::CaseInsensitive)
 
 3012     && ss.contains(
"zdef", Qt::CaseInsensitive)))
 
 3023   size_t pos = ss.indexOf(
"undef ", Qt::CaseInsensitive) + strlen(
"undef "); 
 
 3025   pos = ss.indexOf(
"xdef", Qt::CaseInsensitive);
 
 3027   pi->
m_undef = atof(s.toStdString().c_str());
 
 3031   pos = ss.indexOf(
"xdef ", Qt::CaseInsensitive) + strlen(
"xdef ");
 
 3033   pos = ss.indexOf(
" ");
 
 3035   pi->
m_ncols = atoi(s.toStdString().c_str());
 
 3038   pos = ss.indexOf(
"linear ", Qt::CaseInsensitive) + strlen(
"linear ");
 
 3040   pos = ss.indexOf(
" ");
 
 3042   double llx = atof(s.toStdString().c_str());
 
 3044   pos = ss.indexOf(
"ydef ", Qt::CaseInsensitive);
 
 3046   double resX = atof(s.toStdString().c_str());
 
 3050   pos = ss.indexOf(
"ydef ", Qt::CaseInsensitive) + strlen(
"ydef ");
 
 3052   pos = ss.indexOf(
" ");
 
 3054   pi->
m_nlines = atoi(s.toStdString().c_str());
 
 3057   pos = ss.indexOf(
"linear ", Qt::CaseInsensitive) + strlen(
"linear ");
 
 3059   pos = ss.indexOf(
" ");
 
 3061   double lly = atof(s.toStdString().c_str());
 
 3063   pos = ss.indexOf(
"zdef ", Qt::CaseInsensitive);
 
 3065   double resY = atof(s.toStdString().c_str());
 
 3068   double w = (double)pi->
m_ncols * resX;
 
 3069   double h = (
double)pi->
m_nlines * resY;
 
 3077   std::vector<std::pair<int, QColor> > tab;
 
 3079   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 1, 201, 255)));
 
 3080   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 18, 213, 255)));
 
 3081   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 24, 220, 255)));
 
 3082   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 36, 227, 255)));
 
 3083   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 54, 240, 255)));
 
 3084   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 71, 254, 255)));
 
 3085   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 90, 252, 255)));
 
 3086   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 106, 251, 255)));
 
 3087   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 130, 253, 255)));
 
 3088   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 148, 250, 255)));
 
 3089   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 160, 250, 255)));
 
 3090   tab.push_back(std::pair<int, QColor>(i+=1, QColor(4, 174, 250, 255)));
 
 3091   tab.push_back(std::pair<int, QColor>(i+=1, QColor(4, 186, 250, 255)));
 
 3092   tab.push_back(std::pair<int, QColor>(i+=1, QColor(5, 200, 251, 255)));
 
 3093   tab.push_back(std::pair<int, QColor>(i+=1, QColor(5, 214, 246, 255)));
 
 3094   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 227, 241, 255)));
 
 3095   tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 240, 237, 255)));
 
 3096   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 254, 233, 255)));
 
 3097   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 254, 212, 255)));
 
 3098   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 190, 255)));
 
 3099   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 170, 255)));
 
 3100   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 160, 255)));
 
 3101   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 151, 255)));
 
 3102   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 105, 255)));
 
 3103   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 72, 255)));
 
 3104   tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 37, 255)));
 
 3105   tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 254, 4, 255)));
 
 3106   tab.push_back(std::pair<int, QColor>(i+=1, QColor(25, 254, 4, 255)));
 
 3107   tab.push_back(std::pair<int, QColor>(i+=1, QColor(56, 254, 3, 255)));
 
 3108   tab.push_back(std::pair<int, QColor>(i+=1, QColor(71, 254, 3, 255)));
 
 3109   tab.push_back(std::pair<int, QColor>(i+=1, QColor(99, 254, 2, 255)));
 
 3110   tab.push_back(std::pair<int, QColor>(i+=1, QColor(125, 254, 2, 255)));
 
 3111   tab.push_back(std::pair<int, QColor>(i+=1, QColor(150, 254, 2, 255)));
 
 3112   tab.push_back(std::pair<int, QColor>(i+=1, QColor(175, 254, 2, 255)));
 
 3113   tab.push_back(std::pair<int, QColor>(i+=1, QColor(200, 255, 1, 255)));
 
 3114   tab.push_back(std::pair<int, QColor>(i+=1, QColor(209, 255, 1, 255)));
 
 3115   tab.push_back(std::pair<int, QColor>(i+=1, QColor(218, 255, 1, 255)));
 
 3116   tab.push_back(std::pair<int, QColor>(i+=1, QColor(229, 255, 1, 255)));
 
 3117   tab.push_back(std::pair<int, QColor>(i+=1, QColor(237, 255, 0, 255)));
 
 3118   tab.push_back(std::pair<int, QColor>(i+=1, QColor(240, 248, 0, 255)));
 
 3119   tab.push_back(std::pair<int, QColor>(i+=1, QColor(244, 241, 0, 255)));
 
 3120   tab.push_back(std::pair<int, QColor>(i+=1, QColor(250, 237, 0, 255)));
 
 3121   tab.push_back(std::pair<int, QColor>(i+=1, QColor(251, 232, 2, 255)));
 
 3122   tab.push_back(std::pair<int, QColor>(i+=1, QColor(251, 226, 2, 255)));
 
 3123   tab.push_back(std::pair<int, QColor>(i+=1, QColor(252, 215, 2, 255)));
 
 3124   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 208, 2, 255)));
 
 3125   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 199, 2, 255)));
 
 3126   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 194, 2, 255)));
 
 3127   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 190, 2, 255)));
 
 3128   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 184, 2, 255)));
 
 3129   tab.push_back(std::pair<int, QColor>(i+=1, QColor(252, 179, 2, 255)));
 
 3130   tab.push_back(std::pair<int, QColor>(i+=1, QColor(252, 172, 2, 255)));
 
 3131   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 164, 2, 255)));
 
 3132   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 155, 2, 255)));
 
 3133   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 147, 4, 255)));
 
 3134   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 136, 4, 255)));
 
 3135   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 125, 3, 255)));
 
 3136   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 112, 3, 255)));
 
 3137   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 99, 2, 255)));
 
 3138   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 75, 2, 255)));
 
 3139   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 50, 2, 255)));
 
 3140   tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 25, 2, 255)));
 
 3141   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 2, 255)));
 
 3142   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 12, 255)));
 
 3143   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 25, 255)));
 
 3144   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 37, 255)));
 
 3145   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 0, 49, 255)));
 
 3146   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 2, 37, 255)));
 
 3147   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 3, 25, 255)));
 
 3148   tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 4, 12, 255)));
 
 3149   tab.push_back(std::pair<int, QColor>(i+=1, QColor(255, 5, 1, 255)));
 
 3156   QString path = pi->
m_dir.absolutePath() + 
"/";
 
 3159   QString baseName = fi.baseName();
 
 3162   if(pi->
m_suffix == 
".bin" && baseName == 
"racc")
 
 3164     size_t nchars = pi->
m_ncols * 2;
 
 3165     uchar* buf = 
new uchar[nchars];
 
 3166     FILE* fp = fopen(file.toStdString().c_str(), 
"rb");
 
 3168     ima->fill(Qt::transparent);
 
 3172     for(
size_t j = 0; j < pi->
m_nlines; ++j)
 
 3174       uchar* u = ima->scanLine(j);
 
 3175       fread(buf, nchars, 
sizeof(
char), fp);
 
 3176       for(
size_t i = 0; i < pi->
m_ncols; i++)
 
 3178         uc[0] = *(buf + (i<<1));
 
 3179         uc[1] = *(buf + (1+(i<<1)));
 
 3180         ushort b = *(ushort*)uc;
 
 3184           QRgb* v = (QRgb*)(u + (i << 2));
 
 3185           *v = qRgba(pi->
m_lut[b].red(), pi->
m_lut[b].green(), pi->
m_lut[b].blue(), 255);
 
 3192   else if(pi->
m_suffix == 
".bin" && baseName.contains(
"Prec5km"))
 
 3194     QString auxFile(file);
 
 3195     size_t pos = auxFile.indexOf(baseName);
 
 3196     auxFile.remove(0, pos);
 
 3197     pos = auxFile.indexOf(
"_");
 
 3198     size_t pp = auxFile.indexOf(
".bin");
 
 3199     int offset = atoi(auxFile.mid(pos+1, pp-pos+1).toStdString().c_str());
 
 3202     auxFile.remove(pos, auxFile.length()-pos);
 
 3203     auxFile = path + auxFile + pi->
m_suffix;
 
 3205     size_t nchars = pi->
m_ncols * 4;
 
 3206     uchar* buf = 
new uchar[nchars];
 
 3207     FILE* fp = fopen(auxFile.toStdString().c_str(), 
"rb");
 
 3208     fseek(fp, offset, SEEK_SET);
 
 3209     fseek(fp, 4, SEEK_CUR); 
 
 3211     ima->fill(Qt::transparent);
 
 3215     for(
size_t j = 0; j < pi->
m_nlines; ++j)
 
 3217       uchar* u = ima->scanLine(pi->
m_nlines-1-j); 
 
 3218       fread(buf, nchars, 
sizeof(
char), fp);
 
 3220       for(
size_t i = 0; i < pi->
m_ncols; i++)
 
 3222         uc[0] = *(buf + (i<<2));
 
 3223         uc[1] = *(buf + (1+(i<<2)));
 
 3224         uc[2] = *(buf + (2+(i<<2)));
 
 3225         uc[3] = *(buf + (3+(i<<2)));
 
 3226         float b = *(
float*)uc;
 
 3229           uchar a = (uchar) (b * 10000. + .5);
 
 3230           QRgb* v = (QRgb*)(u + (i << 2));
 
 3231           *v = qRgba(pi->
m_lut[a].red(), pi->
m_lut[a].green(), pi->
m_lut[a].blue(), 255);
 
 3239     ima = 
new QImage(file);
 
 3248   QString d = dir.dirName();
 
 3249   QStringList nameFilter;
 
 3250   nameFilter.append(
"*.ctl");
 
 3251   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3252   QString ctlFile = files.first();
 
 3254   if(ctlFile == 
"racc.ctl")
 
 3255     pi = getHidroMetadata(path);
 
 3256   else if(ctlFile == 
"Prec5km.ctl")
 
 3257     pi = getEtaMetadata(path);
 
 3261     nameFilter.append(
"S11*.jpg");
 
 3262     QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3263     if(files.empty() == 
false && files.first().length() == 26)
 
 3264       pi = getGoesMetadata(path);
 
 3266       pi = getTemporalImageMetadata(path);
 
 3274   PixmapItem* pi = getHidroCtlParameters(path);
 
 3278   m_animationScene->addItem(pi);
 
 3281   animation->setEasingCurve(QEasingCurve::Linear);
 
 3282   m_parallelAnimation->addAnimation(animation);
 
 3284   QStringList nameFilter;
 
 3285   nameFilter.append(
"*.bin");
 
 3287   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3288   size_t count = files.count();
 
 3297   for(
size_t i = 0; i < count; ++i)
 
 3299     QString f = files[i];
 
 3300     t = getHidroTime(f);
 
 3313   for(
size_t i = 0; i < count; ++i)
 
 3316       pos -= QPointF(dw, dh);
 
 3318       pos += QPointF(dw, dh);
 
 3333   m_animationScene->addItem(pi);
 
 3336   animation->setEasingCurve(QEasingCurve::Linear);
 
 3337   m_parallelAnimation->addAnimation(animation);
 
 3339   QStringList nameFilter;
 
 3340   nameFilter.append(
"*.bin");
 
 3342   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3343   size_t count = files.count();
 
 3349   tf = 
te::dt::TimeInstant(tf.getTimeInstant() + boost::posix_time::seconds(60*60*24*3 - 3600));
 
 3355   for(
size_t i = 0; i < count; ++i)
 
 3357     QString f = files[i];
 
 3358     QFileInfo fi(path + 
"/" + f);
 
 3359     QString baseName = fi.baseName();
 
 3363       tnext = getEtaTime(files[i+1]);
 
 3368     while((t < tnext || t == tnext) && n <= 72)
 
 3373       fname = path + 
"/" + baseName + 
"_" + sn + 
"." + fi.suffix();
 
 3378   size_t tsize = pi->
m_files.count();
 
 3387   for(
size_t i = 0; i < tsize; ++i)
 
 3390       pos -= QPointF(dw, dh);
 
 3392       pos += QPointF(dw, dh);
 
 3403   QString file(fileName);
 
 3404   int ind = file.indexOf(
"racc.") + strlen(
"racc.");
 
 3405   file.remove(0, ind);
 
 3406   QString ano = 
"20" + file.mid(0, 2);
 
 3407   QString mes = file.mid(2, 2);
 
 3408   QString dia = file.mid(4, 2);
 
 3409   QString hour = file.mid(7, 2);
 
 3410   QString min = file.mid(9, 2);
 
 3412   te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
 
 3419   QString file(fileName);
 
 3420   int ind = file.indexOf(
"Prec5km") + strlen(
"Prec5km");
 
 3421   file.remove(0, ind);
 
 3422   QString ano = file.mid(0, 4);
 
 3423   QString mes = file.mid(4, 2);
 
 3424   QString dia = file.mid(6, 2);
 
 3425   QString hour = file.mid(8, 2);
 
 3427   te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
 
 3434   PixmapItem* pi = getTemporalImageCtlParameters(path);
 
 3438   m_animationScene->addItem(pi);
 
 3441   animation->setEasingCurve(QEasingCurve::Linear);
 
 3442   m_parallelAnimation->addAnimation(animation);
 
 3444   QString suffix = 
"." + pi->
m_suffix;
 
 3445   QStringList nameFilter;
 
 3446   nameFilter.append(
"*" + suffix);
 
 3448   QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
 
 3449   size_t count = files.count();
 
 3458   for(
size_t i = 0; i < count; ++i)
 
 3460     QString f = files[i];
 
 3462     t = getTemporalImageTime(f);
 
 3472   for(
size_t i = 0; i < count; ++i)
 
 3475       pos -= QPointF(w, h);
 
 3477       pos += QPointF(w, h);
 
 3487   QString file(path + 
"/image.ctl");
 
 3488   FILE* fp = fopen(file.toStdString().c_str(), 
"r");
 
 3492   fread(buf, 2000, 
sizeof(
char), fp);
 
 3494   QString ss(QString(buf).simplified());
 
 3497   if(!(ss.contains(
"suffix ", Qt::CaseInsensitive) && ss.contains(
"undef", Qt::CaseInsensitive) && 
 
 3498     ss.contains(
"srid", Qt::CaseInsensitive) && ss.contains(
"llx", Qt::CaseInsensitive) && 
 
 3499     ss.contains(
"lly", Qt::CaseInsensitive) && ss.contains(
"urx", Qt::CaseInsensitive) && 
 
 3500     ss.contains(
"ury", Qt::CaseInsensitive)))
 
 3508   size_t pos = ss.indexOf(
"suffix ", Qt::CaseInsensitive) + strlen(
"suffix "); 
 
 3510   pos = ss.indexOf(
" undef", Qt::CaseInsensitive);
 
 3516   pos = ss.indexOf(
"undef ", Qt::CaseInsensitive) + strlen(
"undef ");
 
 3518   pos = ss.indexOf(
" srid", Qt::CaseInsensitive);
 
 3520   pi->
m_undef = atof(s.toStdString().c_str());
 
 3524   pos = ss.indexOf(
"srid ", Qt::CaseInsensitive) + strlen(
"srid ");
 
 3526   pos = ss.indexOf(
" llx", Qt::CaseInsensitive);
 
 3528   pi->
m_SRID = atoi(s.toStdString().c_str());
 
 3532   pos = ss.indexOf(
"llx ", Qt::CaseInsensitive) + strlen(
"llx ");
 
 3534   pos = ss.indexOf(
" lly", Qt::CaseInsensitive);
 
 3536   double llx = atof(s.toStdString().c_str());
 
 3540   pos = ss.indexOf(
"lly ", Qt::CaseInsensitive) + strlen(
"lly ");
 
 3542   pos = ss.indexOf(
" urx", Qt::CaseInsensitive);
 
 3544   double lly = atof(s.toStdString().c_str());
 
 3548   pos = ss.indexOf(
"urx ", Qt::CaseInsensitive) + strlen(
"urx ");
 
 3550   pos = ss.indexOf(
" ury", Qt::CaseInsensitive);
 
 3552   double urx = atof(s.toStdString().c_str());
 
 3556   pos = ss.indexOf(
"ury ", Qt::CaseInsensitive) + strlen(
"ury ");
 
 3558   double ury = atof(ss.toStdString().c_str());
 
 3560   double w = urx - llx;
 
 3561   double h = ury - lly;
 
 3569   QString file(fileName);
 
 3570   int ind = file.indexOf(
"_") + strlen(
"_");
 
 3571   file.remove(0, ind);
 
 3572   QString ano = file.mid(0, 4);
 
 3573   QString mes = file.mid(5, 2);
 
 3574   QString dia = file.mid(8, 2);
 
 3575   QString hour = file.mid(11, 2);
 
 3576   QString min = file.mid(14, 2);
 
 3577   QString sec = file.mid(17, 2);
 
 3579   te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
 
const te::dt::DateTimePeriod * getTemporalExtent() const 
It returns the temporal extent of the trajectory observations. 
 
virtual const std::string & getTitle() const 
It returns the layer title. 
 
std::complex< double > times(std::complex< double > lhs, std::complex< double > rhs)
 
long getSeconds() const 
It returns the seconds of a minute - from 0 to 59. 
 
boost::gregorian::greg_year getYear() const 
It returns the gregorian year. 
 
double getWidth() const 
It returns the envelope width. 
 
boost::gregorian::greg_day getDay() const 
It returns the gregorian day - from 1 to 31. 
 
std::auto_ptr< te::st::TrajectoryDataSet > getTrajectoryDataset(te::common::TraverseType travType=te::common::FORWARDONLY) const 
 
const boost::posix_time::ptime & getTimeInstant() const 
It returns the boost time instant type. 
 
A class to represent time instant. 
 
This file contains include headers for the TerraLib ST memory module. 
 
double m_llx
Lower left corner x-coordinate. 
 
This file defines a class for a Animation Scene. 
 
LineString is a curve with linear interpolation between points. 
 
Date getDate() const 
It returns the date associated to time instant. 
 
A point with x and y coordinate values. 
 
void setPoint(std::size_t i, const double &x, const double &y)
It sets the value of the specified point. 
 
An Envelope defines a 2D rectangular region. 
 
#define TE_UNKNOWN_SRS
A numeric value to represent a unknown SRS identification in TerraLib. 
 
A base class for date data types. 
 
std::auto_ptr< te::dt::DateTime > getTime() const 
It returns the time pointed by the internal cursor. 
 
TimeInstant getFinalTimeInstant() const 
It gets the final time instant. 
 
virtual int getSRID() const 
It return the Spatial Reference System used by the Map Display. 
 
TimeInstant getInitialTimeInstant() const 
It gets the initial time instant. 
 
An object that when created shows a cursor during its scope. 
 
virtual const te::gm::Envelope & getExtent() const 
It returns the world extent showned by the MapDisplay. 
 
std::auto_ptr< te::gm::Geometry > getGeometry() const 
It returns the geometry pointed by the internal cursor. 
 
double m_lly
Lower left corner y-coordinate. 
 
A class to represent a trajectory data set. 
 
A class to represent time period. 
 
This file defines a class for a Trajectory Animation. 
 
const boost::posix_time::time_period & getTimePeriod() const 
Assignment operator. 
 
A class to represent time duration with nano-second/micro-second resolution. 
 
This file defines a class for a Trajectory Item. 
 
TimeDuration getTime() const 
It returns the time duration associated to time instant. 
 
A layer with reference to a dataset that contains trajectories. 
 
This file defines a class for a Pixmap Item. 
 
virtual int getSRID() const 
It returns the Spatial Reference System ID associated to the Layer. 
 
This file contains include headers for the TerraLib ST module. 
 
void setPointN(std::size_t i, const Point &p)
It sets the value of the specified point to this new one. 
 
long getMinutes() const 
It returns the minutes of a hour - from 0 to 59. 
 
This file contains include headers for the Data Access module of TerraLib. 
 
virtual AbstractData * clone() const =0
It returns a clone of this object. 
 
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
 
void transform(int oldsrid, int newsrid)
It will transform the coordinates of the Envelope from the old SRS to the new one. 
 
std::size_t size() const 
It returns the size of the trajectory observation set. 
 
double getHeight() const 
It returns the envelope height. 
 
boost::gregorian::greg_month getMonth() const 
It returns the gregorian month - from 1 to 12. 
 
bool isValid() const 
It tells if the rectangle is valid or not. 
 
long getHours() const 
It returns the hours of a day - from 0 to 23. 
 
A layer with a reference to an TrajectoryDataSet.